Architektúra systému¶
Overené podľa implementácie dňa 2026-05-07.
Runtime architektúra¶
flowchart LR
subgraph Edge["Edge vrstva"]
Caddy["Caddy :80/:443"]
end
subgraph App["Aplikačná vrstva"]
API["FastAPI\n/api/v1 + /dashboard"]
W["RQ Worker\nhigh / default / low"]
SCH["rq-scheduler"]
end
subgraph Data["Dátová vrstva"]
PG[("PostgreSQL 16")]
RD[("Redis 7")]
end
subgraph Ext["Externé"]
GL["GitLab"]
end
subgraph Obs["Pozorovateľnosť"]
Prom["Prometheus"]
Graf["Grafana"]
J["Jaeger"]
end
GL -->|"Webhook + OAuth + API"| Caddy
Caddy --> API
API --> PG
API --> RD
RD --> W
SCH --> RD
W --> PG
W --> GL
API --> Prom
Prom --> Graf
API -. "OTLP" .-> J
W -. "OTLP" .-> J Komponenty a zodpovednosti¶
| Komponent | Zodpovednosť |
|---|---|
Caddy | TLS terminácia, reverse proxy na API |
FastAPI | REST API, dashboard routy, health/metrics endpointy |
PostgreSQL | perzistentné dáta (kurzy, tímy, eventy, metriky, reporty) |
Redis | queue backend, locky/idempotencia, krátkodobý cache |
RQ Worker | spracovanie webhookov, enrichment, výpočty metrík, reporty |
rq-scheduler | periodické joby (sweep, enrichment, recompute, cleanup) |
Asynchrónny pipeline (webhook -> metriky)¶
sequenceDiagram
participant GL as GitLab
participant API as FastAPI
participant DB as PostgreSQL
participant RQ as Redis/RQ
participant W as Worker
GL->>API: POST /api/v1/webhooks/gitlab
API->>API: verify X-Gitlab-Token
API->>DB: store raw event
API->>RQ: enqueue process_event (high)
API-->>GL: 202 accepted
RQ->>W: dequeue process_event
W->>DB: upsert entities
W->>RQ: enqueue enrichment/metrics (default)
RQ->>W: dequeue compute_metrics
W->>DB: save MetricSnapshot Architektúra autentifikácie¶
flowchart TB
U["Používateľ"] -->|"/dashboard/login"| OAuth["GitLab OAuth"]
OAuth -->|callback| Sess["gitpulse_session cookie"]
Sess --> Dash["/dashboard/..."]
APIClient["API klient"] -->|"Authorization Bearer"| ApiAuth["/api/v1/..."]
Sess -->|"alternatívne"| ApiAuth
GitLabWH["GitLab webhook"] -->|"X-Gitlab-Token"| WH["/api/v1/webhooks/gitlab"] Autentifikačné vrstvy:
- Dashboard: GitLab OAuth + podpísaná session cookie.
- API: Bearer token (
TEACHER_API_TOKEN) alebo dashboard session. - Webhook endpoint: per-project secret (
X-Gitlab-Token).
Queue a plánované úlohy¶
| Queue | Účel | Priorita |
|---|---|---|
high | webhook ingest processing | najvyššia |
default | enrichment, sync, metrics recompute | stredná |
low | reporty a cleanup | najnižšia |
Periodické joby (22 naplánovaných úloh, všetky gate-ované feature flagmi):
sweep_unprocessed_events(každých 15 min) - opakovanie nespracovaných webhookovsweep_expired_ci_scenarios(každých 15 min) - auto-rollback CI scenárovperiodic_enrich_all(každé 4 hodiny) - re-fetch issues a MR z GitLabuperiodic_metrics_all(každú 1 hodinu) - prepočet compliance metríkcleanup_old_reports(každých 24 hodín) - mazanie starých reportovperiodic_membership_sync(každé 2 hodiny) - sync členov tímov z GitLabusweep_expired_conflict_challenges(každú 1 hodinu) - expirácia konfliktovsweep_unverified_conflicts(každých 30 min) - overenie riešení konfliktovsweep_stale_projects(každú 1 hodinu) - re-fetch dát pre neaktívne projektyperiodic_llm_analysis(každých 6 hodín) - LLM analýza otvorených MRperiodic_telemetry_snapshot(každých 24 hodín) - týždenné compliance snapshotysweep_stale_background_jobs(každých 24 hodín) - cleanup zaseknutých jobovsweep_dlq_auto_resurrect- auto-retry dead-letter queue udalostíperiodic_docker_reverify(každých 24 hodín) - re-analýza Dockerfilovperiodic_enrich_users(každých 24 hodín) - refresh používateľských profilov z GitLabuperiodic_verify_webhooks- overenie registrácie webhookovsweep_dead_projects(každých 24 hodín) - detekcia nedostupných projektovcleanup_old_events(každých 24 hodín) - mazanie starých spracovaných webhookovcleanup_old_metric_snapshots(každých 24 hodín) - mazanie snapshotov starších ako 180 dnícleanup_old_audit_logs(každých 24 hodín) - mazanie audit logov starších ako 180 dnísweep_discover_new_projects- automatické objavenie nových projektov v GitLab grupáchsweep_email_queue(každé 2 min) - odosielanie čakajúcich emailov
Deployment model¶
Produkčný profil používa Docker Compose služby:
postgresredisapiworkerschedulercaddy
Voliteľný profil monitoring pridáva:
prometheusgrafanajaeger