diff --git a/backlog.md b/backlog.md index 2427a8e..4ba2eb4 100644 --- a/backlog.md +++ b/backlog.md @@ -111,10 +111,26 @@ --- +## 🔴 Fase 8 — KPI Dashboard *(Setelah semua service siap: Zammad, Gitea, Collector, Uptime Kuma)* +> Butuh semua sumber data aktif agar metrik KPI akurat dan bermakna. + +| # | Tugas | Estimasi | +|---|---|---| +| **25** | **Backend `geonet-kpi`** — FastAPI aggregator, pull dari semua API, cache Redis/SQLite | 3-4 hari | +| **26** | **Scheduler** — hitung KPI harian/mingguan/bulanan otomatis | 1 hari | +| **27** | **FE: Dashboard KPI IT/Ops** — uptime, tiket, asset health, alert count (Recharts) | 2-3 hari | +| **28** | **FE: Dashboard KPI Karyawan** — performa individu, tiket selesai, SLA, commit | 2-3 hari | +| **29** | **Admin: KPI Config** — set target, bobot metrik, periode laporan | 1-2 hari | +| **30** | **Export PDF/Excel** — laporan KPI per periode untuk manajemen | 1-2 hari | +| **31** | **Push Notif KPI Alert** — notif jika KPI di bawah target ke Manager/IT Admin | 1 hari | + +--- + > **Urutan pengerjaan**: -> **① Content/Home Feed** → **② Mailcow** → **③ Zammad+Ticketing** → **④ Push Notif** → **⑤ Gitea** → **⑥ Mail UI** → **⑦ Infra** +> **① Content/Home Feed** → **② Mailcow** → **③ Zammad+Ticketing** → **④ Push Notif** → **⑤ Gitea** → **⑥ Mail UI** → **⑦ Infra** → **⑧ KPI Dashboard** > > *(Gitea Fase 5 bisa dikerjakan paralel dengan Fase 2-4 karena tidak ada dependency)* +> *(KPI Fase 8 dikerjakan terakhir — butuh Zammad + Gitea + Collector + Uptime Kuma semua sudah running)* --- # ADR — Standar Dialog Preview / Edit (UI Pattern) @@ -488,6 +504,86 @@ my.gisportal.id - [ ] Move Inbox from main geonet.co.id to geonet for mail server - [ ] save imap and pop3 file Thunderbird di NAS : untuk meringankan vm dan memastikan file tidak hilang +# KPI Dashboard (`geonet-kpi`) + +## Dependency (semua harus sudah running) +- ✅ geonet-collector (asset & device data) +- 🔴 Zammad (tiket metrics) +- 🔴 Gitea (issue & commit metrics) +- 🔶 Uptime Kuma API (service uptime) +- 🔶 Zabbix API (network alert) + +## Arsitektur +- **Backend**: `geonet-kpi` — FastAPI aggregator, bukan BI tool besar +- **Cache**: Redis atau SQLite — hasil agregasi disimpan agar FE tidak hit semua API setiap request +- **Scheduler**: APScheduler (built-in FastAPI) — hitung KPI otomatis tiap malam / per jam +- **Domain**: `kpi.gisportal.id` (internal) atau lewat `console.gisportal.id/api/kpi` + +## Metrik KPI Karyawan +| Metrik | Sumber | Cara Hitung | +|---|---|---| +| Tiket IT diselesaikan | Zammad | Count closed by assignee per periode | +| Rata-rata waktu resolve | Zammad | Avg(closed_at − created_at) per assignee | +| SLA compliance (%) | Zammad | % tiket selesai sebelum SLA deadline | +| Issue dev diselesaikan | Gitea | Count closed issues by assignee | +| Jumlah commit | Gitea | Count commits by author | +| Asset yang dikelola | geonet-collector | Count asset by owner | +| Login activity | geonet-console | Count login per bulan | + +## Metrik KPI IT/Operasional +| Metrik | Sumber | Cara Hitung | +|---|---|---| +| Uptime layanan (%) | Uptime Kuma | monitors → uptime ratio per service | +| Asset online vs offline | geonet-collector | online_count / total_count | +| Asset disk > 90% | geonet-collector | Count disk pct_used > 90 | +| Tiket masuk vs selesai | Zammad | Open/Close ratio per periode | +| Avg first response time | Zammad | Time to first agent reply | +| Network alert count | Zabbix | Problem count by severity | +| Repo aktif | Gitea | Repo dengan commit dalam 30 hari terakhir | + +## API Endpoints (`geonet-kpi`) +``` +GET /kpi/summary — ringkasan KPI semua kategori (untuk dashboard) +GET /kpi/employee/{username} — KPI individu karyawan +GET /kpi/it-ops — KPI operasional IT +GET /kpi/history?period=monthly&months=6 — trend historis +GET /kpi/export?format=pdf|excel&period= — export laporan +POST /admin/kpi/config — set target & bobot per metrik +POST /admin/kpi/refresh — trigger recalculate manual +``` + +## Permission (tambah ke group_permissions) +| Permission | Fungsi | +|---|---| +| `kpi.view_own` | Lihat KPI diri sendiri | +| `kpi.view_team` | Lihat KPI semua karyawan (Manager/HR) | +| `kpi.manage` | Konfigurasi target, bobot, export (IT-Admin, Management) | + +## FE Tasks + +### Dashboard KPI IT/Ops (`/kpi/ops`) +- [ ] Card ringkasan: uptime %, tiket open, asset offline, alert aktif +- [ ] Chart trend tiket (bar chart bulanan) +- [ ] Chart uptime per service (line chart) +- [ ] Tabel asset dengan status disk warning + +### Dashboard KPI Karyawan (`/kpi/employee`) +- [ ] Tabel performa per karyawan (filter: periode, divisi/group LDAP) +- [ ] Detail individu: chart radar (tiket, SLA, commit, response time) +- [ ] Perbandingan vs target (progress bar per metrik) +- [ ] Trend bulan ke bulan (sparkline) + +### Admin: KPI Config (`/admin/kpi`) +- [ ] Form set target per metrik (misal: SLA target 95%, uptime target 99.5%) +- [ ] Pilih periode laporan (mingguan / bulanan / kuartalan) +- [ ] Trigger recalculate manual +- [ ] Export laporan PDF/Excel + +### Notifikasi KPI +- [ ] Push notif ke Manager/IT-Admin jika KPI < target threshold +- [ ] Weekly summary digest via email (Mailcow) ke stakeholder + +--- # Mikrotik - [ ] Setup PPP login via LDAP