= Use-case UC1 Prototype Implementation – Испраќање и обработка на податоци = '''Актер кој го иницира:''' * Клиентска апликација (Agent / Collector) '''Други актери:''' * Администратор '''Опис''' Клиентската апликација периодично собира системски информации од компјутерот и ги испраќа до серверот преку POST барање. Серверот го валидира X-Env-Token, го пронаоѓа или креира компјутерот и ги зачувува сите примени информации во базата. == Сценарио == === Чекор 1 === '''Корисник''' Клиентската апликација испраќа POST барање кон серверот со X-Env-Token и собраните податоци. [[Image(UC1_step1.png,700px)]] '''Систем''' Го проверува токенот и го пронаоѓа Environment-от. '''SQL''' {{{ SELECT env_name, tenant_id FROM env_tokens WHERE token = ? AND (expires_at IS NULL OR expires_at > datetime('now')) LIMIT 1; }}} === Чекор 2 === Системот проверува дали компјутерот веќе постои. '''SQL''' {{{ SELECT id FROM computers WHERE tenant_id = ? AND name = ? LIMIT 1; }}} === Чекор 3 === Доколку компјутерот веќе постои, се ажурираат неговите информации. '''SQL''' {{{ UPDATE computers SET user=?, ip=?, os=?, last_seen=?, sysmon_available=?, env_name=? WHERE id=? AND tenant_id=?; }}} Доколку компјутерот не постои, се додава нов запис. '''SQL''' {{{ INSERT INTO computers (tenant_id, env_name, name, user, ip, os, first_seen, last_seen, sysmon_available) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?); }}} === Чекор 4 === Системот ги зачувува перформансите. Најпрво ги освежува тековните метрики (snapshot што се препишува), а потоа додава запис во историјата. '''SQL''' {{{ DELETE FROM computer_history_current WHERE computer_id=?; INSERT INTO computer_history_current (computer_id, cpu_usage, ram_usage, disk_usage, network_sent_mb, network_recv_mb, timestamp) VALUES (?, ?, ?, ?, ?, ?, ?); INSERT INTO computer_history (computer_id, cpu_usage, ram_usage, disk_usage, network_sent_mb, network_recv_mb, timestamp) VALUES (?, ?, ?, ?, ?, ?, ?); }}} === Чекор 5 === Системот ги освежува тековните процеси. Најпрво ги брише старите, потоа ги внесува новите. '''SQL''' {{{ DELETE FROM computer_processes_current WHERE computer_id=?; INSERT INTO computer_processes_current (computer_id, pid, name, cpu_percent, memory_mb, username, cmdline, timestamp) VALUES (?, ?, ?, ?, ?, ?, ?, ?); }}} === Чекор 6 === Доколку е овозможено чување историја (env_settings.save_process_history), процесите се зачувуваат и во history. '''SQL''' {{{ INSERT INTO computer_processes_history (computer_id, pid, name, cpu_percent, memory_mb, username, cmdline, timestamp) VALUES (?, ?, ?, ?, ?, ?, ?, ?); }}} === Чекор 7 === Системот ги зачувува Sysmon настаните. '''SQL''' {{{ INSERT INTO sysmon_events (computer_id, event_id, event_type, message, timestamp, details) VALUES (?, ?, ?, ?, ?, ?); }}} === Чекор 8 === Системот ги зачувува мрежните конекции — тековен snapshot, и историја доколку е овозможено (env_settings.save_network_history). '''SQL''' {{{ DELETE FROM network_connections_current WHERE computer_id=?; INSERT INTO network_connections_current (computer_id, pid, local_address, remote_address, status, process_name, timestamp) VALUES (?, ?, ?, ?, ?, ?, ?); INSERT INTO network_connections (computer_id, pid, local_address, remote_address, status, process_name, timestamp) VALUES (?, ?, ?, ?, ?, ?, ?); }}} === Чекор 9 === Системот успешно ја обработува испратената информација и враќа успешен одговор. [[Image(UC1_step11.png,700px)]]