== ER дијаграм == [[Image("ERModel_v02.png")]] == Податочни барања == === Ентитети === ==== 1. Tenants ==== Ентитет кој претставува логички изолирана организација (tenant) во системот. * ''id'' (integer, PK) * ''name'' (text, NOT NULL) * ''owner_email'' (text, NOT NULL) * ''created_at'' (datetime) ==== 2. Users ==== Ентитет кој чува информации за корисници автентицирани преку Google OAuth. * ''id'' (integer, PK) * ''email'' (text, NOT NULL, UNIQUE) * ''name'' (text) * ''picture'' (text) * ''created_at'' (datetime) ==== 3. Memberships ==== Асоцијативен ентитет кој поврзува корисници со tenants и ја дефинира нивната улога. * ''user_id''* (integer, PK, FK → Users.id) * ''tenant_id''* (integer, PK, FK → Tenants.id) * ''role'' (text, DEFAULT 'admin') * ''created_at'' (datetime) ==== 4. Environments ==== Ентитет кој дефинира логички околини во рамки на еден tenant (пример: default, staging, prod). * ''id'' (integer, PK) * ''tenant_id''* (integer, FK → Tenants.id, NOT NULL) * ''name'' (text, NOT NULL) * ''created_at'' (datetime) *Ограничување:* UNIQUE (tenant_id, name) ==== 5. ENV_Tokens ==== Ентитет кој чува токени за пристап на клиентските агенти во конкретно environment. * ''id'' (integer, PK) * ''tenant_id''* (integer, FK → Tenants.id, NOT NULL) * ''env_name'' (text, NOT NULL) * ''token'' (text, NOT NULL, UNIQUE) * ''created_at'' (datetime) * ''expires_at'' (datetime) ==== 6. Computers ==== Ентитет кој чува податоци за клиентските компјутери што испраќаат логови до серверот. * ''id'' (integer, PK) * ''tenant_id''* (integer, FK → Tenants.id, NOT NULL) * ''env_name'' (text, NOT NULL) * ''name'' (text, NOT NULL) * ''user'' (text) * ''ip'' (text) * ''os'' (text) * ''first_seen'' (datetime) * ''last_seen'' (datetime) * ''sysmon_available'' (boolean, DEFAULT 0) *Ограничување:* UNIQUE (tenant_id, name) ==== 7. Computer_history ==== Ентитет кој чува временски перформансни метрики за компјутерите. * ''id'' (integer, PK) * ''computer_id''* (integer, FK → Computers.id) * ''cpu_usage'' (real) * ''ram_usage'' (real) * ''disk_usage'' (real) * ''network_sent_mb'' (real) * ''network_recv_mb'' (real) * ''timestamp'' (datetime) ==== 8. Computer_processes_current ==== Ентитет кој чува тековна snapshot состојба на процеси за секој компјутер. * ''id'' (integer, PK) * ''computer_id''* (integer, FK → Computers.id) * ''pid'' (integer) * ''name'' (text) * ''cpu_percent'' (real) * ''memory_mb'' (real) * ''username'' (text) * ''cmdline'' (text) * ''timestamp'' (datetime) ==== 9. Computer_processes_history ==== Ентитет кој чува историски податоци за процеси (опционално, контролирано по environment). * ''id'' (integer, PK) * ''computer_id''* (integer, FK → Computers.id) * ''pid'' (integer) * ''name'' (text) * ''cpu_percent'' (real) * ''memory_mb'' (real) * ''username'' (text) * ''cmdline'' (text) * ''timestamp'' (datetime) ==== 10. Sysmon_events ==== Ентитет кој чува Sysmon и безбедносни настани испратени од клиентите. * ''id'' (integer, PK) * ''computer_id''* (integer, FK → Computers.id) * ''event_id'' (integer) * ''event_type'' (text) * ''message'' (text) * ''timestamp'' (datetime) * ''details'' (text – JSON како string) ==== 11. Network_connections ==== Ентитет кој чува информации за мрежни конекции на компјутерите. * ''id'' (integer, PK) * ''computer_id''* (integer, FK → Computers.id) * ''pid'' (integer) * ''local_address'' (text) * ''remote_address'' (text) * ''status'' (text) * ''process_name'' (text) * ''timestamp'' (datetime) ==== 12. Security_alerts ==== Ентитет кој чува аларми за потенцијални безбедносни инциденти. * ''id'' (integer, PK) * ''computer_id''* (integer, FK → Computers.id) * ''alert_type'' (text) * ''severity'' (text) * ''description'' (text) * ''timestamp'' (datetime) * ''resolved'' (boolean, DEFAULT 0) ==== 13. Env_settings ==== Ентитет кој чува конфигурации по environment. * ''tenant_id''* (integer, PK, FK → Tenants.id) * ''env_name''* (text, PK) * ''save_process_history'' (boolean, DEFAULT 0) * ''created_at'' (datetime) * ''updated_at'' (datetime) === Релации === * Tenants ⟶ Environments (1:N) Еден tenant може да има повеќе environments. * Tenants ⟷ Users (M:N преку Memberships) Корисник може да припаѓа на повеќе tenants со различни улоги. * Environments ⟶ ENV_Tokens (1:N) Едно environment може да има повеќе токени за клиентски агенти. * Environments ⟶ Computers (1:N) Едно environment содржи повеќе компјутери. * Computers ⟶ Computer_history (1:N) Еден компјутер има повеќе временски перформансни записи. * Computers ⟶ Computer_processes_current (1:N) Еден компјутер има повеќе тековни процеси. * Computers ⟶ Computer_processes_history (1:N) Еден компјутер може да има историски процеси (ако е овозможено). * Computers ⟶ Sysmon_events (1:N) Еден компјутер генерира повеќе Sysmon безбедносни настани. * Computers ⟶ Network_connections (1:N) Еден компјутер има повеќе активни мрежни конекции. * Computers ⟶ Security_alerts (1:N) Еден компјутер може да активира повеќе безбедносни аларми. ''Забелешка:'' Атрибутите означени со * се странски клучеви (Foreign Keys). == Entity-Relationship Model History == === Верзија 1 === Ова е иницијалната верзија на дијаграмот со соодветните табели. [[Image("ERModel_v01.png")]] === Верзија 2 === Ова е подобрената верија на дијаграмот. Додадени се табелите env_settings, computer_proccess_current и computer_proccess_history. Овие табели се додадени со цел имплементирање на функционалност каде корисникот би можел да одлучи дали сака да ги чува трајно податоците собрани од компјутерот (во тој случај би се зачувале во computer_proccess_history) или пак да се зачуваат привремено и по некое време би се избришале (во тој случај би се зачувале во computer_proccess_current). [[Image("ERModel_v02.png")]]