Browse Source

docs: tambah Activity Tracking ke backlog (super apps page tracking, NAS, Gitea login)

master
Budi Setiawan 3 weeks ago
parent
commit
710233d522
  1. 95
      backlog.md

95
backlog.md

@ -54,6 +54,19 @@
--- ---
## 🔴 Fase 1.5 — Activity Tracking *(Bisa mulai sekarang — tidak ada dependency)*
> Sebagian sudah dikerjakan: `last_login_at` di super apps sudah fix (Jun 2026).
| # | Tugas | Estimasi |
|---|---|---|
| **5a** | ✅ **Fix `last_login_at` super apps** — simpan ke DB saat login, tidak ambil dari AD | DONE |
| **5b** | **Activity log FE** — catat page visit, durasi per fitur, simpan ke `geonet-console` | 2-3 hari |
| **5c** | **NAS login tracking** — polling QNAP system log via SSH/API, simpan ke DB | 1-2 hari |
| **5d** | **Gitea activity tracking** — pull events via Gitea API (`/user/heatmap`, `/repos/events`) | 1 hari |
| **5e** | **Admin: Activity Dashboard** — tabel login history, fitur populer, durasi kunjungan | 2-3 hari |
---
## 🔴 Fase 2 — Mail Server *(Prerequisite Ticketing & Mail UI)* ## 🔴 Fase 2 — Mail Server *(Prerequisite Ticketing & Mail UI)*
| # | Tugas | Estimasi | | # | Tugas | Estimasi |
|---|---|---| |---|---|---|
@ -280,6 +293,88 @@ Push Service API (FastAPI, port 17000)
- 📢 **Broadcast IT**: pengumuman, maintenance, downtime - 📢 **Broadcast IT**: pengumuman, maintenance, downtime
- *(Future)* 📊 Monitoring: alert Zabbix - *(Future)* 📊 Monitoring: alert Zabbix
---
# Activity Tracking
## Status
- ✅ `last_login_at` super apps — **sudah fix** (Jun 2026): kolom ditambah ke `ldap_user_meta`, diset saat `AuthController::login()`, dikembalikan oleh `MeController` prioritas di atas `lastlogontimestamp` AD yang stale.
## Kenapa Tidak Pakai `lastlogontimestamp` dari AD?
Active Directory `lastlogontimestamp` hanya direplikasi antar Domain Controller setiap **9-14 hari** — by design Microsoft untuk mengurangi replikasi traffic. Jadi selalu stale. Solusi: simpan timestamp di DB sendiri saat login ke super apps.
## 1. Super Apps — Page Visit & Feature Usage
### Backend (`geonet-console`)
- [ ] Buat tabel `user_activity_logs` (username, feature, action, duration_seconds, metadata JSON, created_at)
- [ ] `POST /api/v1/activity` — endpoint internal FE kirim activity event
- [ ] `GET /api/v1/admin/activity` — admin query logs (filter: user, feature, date range)
- [ ] Aggregation query: fitur paling banyak dikunjungi, avg durasi per fitur, DAU/WAU/MAU
### Frontend (Next.js)
- [ ] `src/lib/activity-tracker.ts` — hook `usePageTracking()`: catat `page_enter` + `page_leave` dengan durasi
- [ ] Kirim event ke `/api/v1/activity` saat user leave page (via `beforeunload` + `visibilitychange`)
- [ ] Payload: `{ feature: 'asset-management', action: 'view', duration_seconds: 45 }`
### Fitur yang Dilacak
| Feature Key | Halaman |
|---|---|
| `dashboard` | `/dashboard` |
| `profile` | `/profile` |
| `asset_management` | `/asset-management` |
| `admin_users` | `/admin/permissions` |
| `ticketing` | `/ticketing` |
| `gitea_issues` | `/gitea/issues` |
| `gitea_repos` | `/gitea/repos` |
| `mail` | `/mail` |
| `monitoring` | `/monitoring` |
| `kpi` | `/kpi` |
### Admin Activity Dashboard (`/admin/activity`)
- [ ] Card: DAU (Daily Active Users), WAU, MAU
- [ ] Bar chart: page visits per fitur per hari/minggu
- [ ] Tabel: login history per user (username, last_login_at, IP, user agent)
- [ ] Tabel: fitur paling populer (rank by visit count + avg durasi)
- [ ] Filter: by user, date range, feature
## 2. NAS (QNAP) Login Tracking
### Pendekatan
QNAP tidak punya webhook login. Opsi terbaik: **polling system log via SSH** periodik.
- SSH ke NAS: `ssh -i ~/.ssh/id_ed25519 admin@10.100.1.10`
- Log path QNAP: `/var/log/connection.log` atau via API `GET /cgi-bin/authLogin.cgi`
- QNAP juga punya REST API: `GET /api/v2/system/log` (QTS 5.x)
### Implementasi
- [ ] Cek apakah QNAP QTS versi mendukung `/api/v2/system/log`
- [ ] Buat scheduler di `geonet-console` (atau `geonet-kpi`) — pull NAS log setiap 15 menit
- [ ] Parse log entry: timestamp, username, action (login/logout), IP
- [ ] Simpan ke tabel `external_login_logs` (source: 'nas'|'gitea', username, logged_at, ip, metadata)
- [ ] Tampilkan di Admin Activity Dashboard sebagai tab "NAS Login"
## 3. Gitea Login & Activity Tracking
### Pendekatan
Gitea punya **Events API** — tidak perlu parsing log.
```
GET /api/v1/users/{username}/heatmap — commit activity heatmap (per hari)
GET /api/v1/repos/{owner}/{repo}/statuses — repo activity
GET /api/v1/admin/users — list users + last_login (admin token)
```
- Gitea LDAP auth: login ke Gitea = login via AD — username sama dengan super apps
- Pull data setiap malam via scheduler, simpan ke `external_login_logs`
### Implementasi
- [ ] Generate Gitea admin token untuk pull user data
- [ ] Scheduler: `GET /api/v1/admin/users` tiap malam → update `external_login_logs` (source: 'gitea')
- [ ] Tampilkan di Admin Activity Dashboard sebagai tab "Gitea Activity"
- [ ] Di profile user: tampilkan "Last seen di Gitea: X hari lalu"
## Permission
| Permission | Fungsi |
|---|---|
| `activity.view_own` | User lihat activity diri sendiri di profile |
| `activity.view_all` | Admin lihat semua user activity |
--- ---
# Gitea Integration (`git.gisportal.id`) # Gitea Integration (`git.gisportal.id`)

Loading…
Cancel
Save