# Runbook Performance (Template Isi Otomatis) - SAN Staging

Dokumen ini adalah template cepat untuk dipakai ulang lintas modul `san_staging`.

## 1) Metadata Eksekusi

- Tanggal:
- PIC:
- Environment: `san_staging`
- PHP: `5.6`
- Framework: `CodeIgniter 3`
- Modul:
- Endpoint utama:
- Endpoint pembanding (opsional):
- Metode HTTP: `GET` (jangan diubah ke POST)
- Baseline waktu awal (detik):
- Target waktu akhir (detik):

## 2) Guardrail Wajib

- [ ] Tidak mengubah model umum `MdlTransaksi`
- [ ] Tidak mengubah model umum `MdlMother`
- [ ] Tidak mengubah kontrak request/response endpoint
- [ ] Tidak mengubah `GET` menjadi `POST`
- [ ] Semua perubahan kompatibel `PHP 5.6` + `CI3`

## 3) Scope Investigasi

- Controller yang dievaluasi:
- Method yang dievaluasi:
- Query SQL yang diduga berat:
- Loop/transform data yang diduga berat:
- Render view/partial yang diduga berat:
- Call eksternal/API (jika ada):

## 4) Baseline Measurement

Isi minimal 5 kali run dengan sesi login valid.

| Run | Endpoint | HTTP Code | TTFB (ms) | Total (ms) | Catatan |
| --- | --- | --- | ---: | ---: | --- |
| 1 |  |  |  |  |  |
| 2 |  |  |  |  |  |
| 3 |  |  |  |  |  |
| 4 |  |  |  |  |  |
| 5 |  |  |  |  |  |

Ringkasan baseline:
- Rata-rata total (ms):
- P95 total (ms):
- Worst total (ms):

## 5) Checklist Akar Masalah (Root Cause)

- [ ] Profiling durasi per blok logic di controller
- [ ] Validasi jumlah query per request
- [ ] Identifikasi query N+1
- [ ] Cek query tanpa index yang relevan
- [ ] Cek proses data berulang yang bisa di-cache lokal request
- [ ] Cek render view yang memproses data besar berulang
- [ ] Cek dependency eksternal yang menambah latensi

Temuan utama:
1.
2.
3.

## 6) Rencana Revisi Koding (Checklist Eksekusi)

### A. Quick Wins (Low Risk)
- [ ] Kurangi query berulang pada request yang sama
- [ ] Gabungkan fetch data yang terpisah tapi sejenis
- [ ] Batasi field select hanya yang dipakai view
- [ ] Simpan hasil perhitungan berulang dalam variabel lokal

### B. Structural Fix (Medium Risk)
- [ ] Refactor method panjang menjadi blok yang terukur
- [ ] Optimalkan strategi join/filter query
- [ ] Perbaiki urutan proses data agar minim pass berulang

### C. Safety & Compatibility
- [ ] Pastikan perilaku bisnis tidak berubah
- [ ] Uji alur sukses + alur gagal
- [ ] Uji role/otorisasi terkait endpoint

## 7) Log Revisi

| No | File | Perubahan | Tujuan | Risiko |
| --- | --- | --- | --- | --- |
| 1 |  |  |  |  |
| 2 |  |  |  |  |
| 3 |  |  |  |  |

## 8) Verifikasi Teknis

- [ ] Lint file yang berubah (`php -l`)
- [ ] Tidak ada fatal error / warning baru
- [ ] Endpoint tetap return HTTP code sesuai ekspektasi
- [ ] Parameter URL lama tetap kompatibel

## 9) Verifikasi End-to-End

Gunakan script existing:
- `docs/verify_followup_authenticated.ps1`

Contoh eksekusi:

```powershell
powershell -ExecutionPolicy Bypass -File docs/verify_followup_authenticated.ps1 `
  -Url "<ISI_ENDPOINT>" `
  -Cookie "ci_session=<ISI_CI_SESSION>" `
  -Runs 5
```

Checklist:
- [ ] Script berjalan sukses
- [ ] Semua run HTTP 200 (atau status expected)
- [ ] Rata-rata latency turun dari baseline
- [ ] Target SLA tercapai

## 10) Hasil Akhir

- Baseline rata-rata (ms):
- Setelah revisi rata-rata (ms):
- Delta perbaikan (%):
- P95 sebelum (ms):
- P95 sesudah (ms):
- Status akhir: `SELESAI` / `PERLU ITERASI`

## 11) Approval

- Reviewer teknis:
- QA/UAT:
- Tanggal approval:
- Catatan release/cutover:

---

## Cara Pakai Cepat

1. Duplikasi file ini untuk modul target, contoh: `docs/runbook_perf_pembelian_followup_YYYYMMDD.md`.
2. Isi bagian Metadata + Baseline dulu.
3. Jalankan checklist root cause, baru eksekusi revisi bertahap.
4. Tutup dengan verifikasi E2E dan isi Hasil Akhir.
