== ER дијаграм == [[Image("ERDiagram_NetIntel.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).