Lewati ke isi

Buku Panduan 05: Operator Sistem & Command Center (Platform Ops Manual)

Panduan operasional resmi bagi Operator Platform (Platform Operator), Administrator Sistem (Sysadmin), dan Tim Keandalan Situs (Site Reliability Engineer) dalam mengoperasikan, memantau, dan memelihara infrastruktur sistem Scola Assessment Standalone CBT (Baseline OS-v1.0).

Dokumen ini memandu seluruh prosedur operasional tingkat server (backend & platform ops): mulai dari daftar periksa pra-ujian T-60 menit, pemantauan telemetri real-time Command Center, tata kelola gangguan teknis dan aturan mutlak force-majeure, eksekusi penyapuan batas waktu otomatis, audit rekonsiliasi penutupan resmi, hingga siklus pembersihan retensi data kamera.


1. Lingkup & Batasan Operasional Platform

Sesuai matriks otorisasi OS-v1.0: - Tanggung Jawab Operator: Menjamin keandalan infrastruktur, ketersediaan layanan (uptime), integritas rilis yang tidak dapat diubah (immutable release), dan observabilitas metrik. - Pemisahan dari Data Ujian: Operator sistem TIDAK berwenang mengerjakan soal ujian, melihat teks jawaban siswa, membaca naskah soal private yang sedang berlangsung, atau mempublikasikan hasil tanpa persetujuan ketua dewan juri. - Prinsip Break-Glass Terbatas: Akses administratif langsung ke database hanya dilakukan dalam kondisi darurat pemulihan (disaster recovery) dengan pencatatan audit log tertulis.


2. Langkah 1: Prosedur Pra-Ujian (Pre-Flight Verification) — T-60 Menit

Tepat 60 menit sebelum admisi peserta dimulai, operator wajib mengeksekusi 5 langkah verifikasi integritas berikut di terminal server:

1. Verifikasi Artefak Rilis Immutable:

Pastikan artefak backend, migrasi database, dan kompilasi frontend identik secara kriptografis dengan kandidat rilis resmi:

cd /home/scola/odoo/scola-assessment
bash scripts/ops/release_immutable_guards.sh --verify

ATURAN STOP-ON-FAILURE:
Jika perintah ini mengembalikan kode keluar non-zero (FAILED), proses admisi DILARANG DIBUKA. Selidiki ketidakcocokan hash SHA-256 dan pulihkan lingkungan ke kandidat resmi.

2. Pemeriksaan Probe Liveness & Kemandirian Layanan:

Pastikan backend Uvicorn berjalan normal dan terisolasi dari Odoo:

curl -s http://127.0.0.1:8000/health | jq .
Respon yang diharapkan:
{
  "status": "ok",
  "service": "scola-cbt-standalone",
  "version": "1.0.0"
}

3. Eksekusi Live Domain Smoke Test:

Jalankan pengujian end-to-end otomatis terhadap domain publik resmi:

python3 /home/scola/odoo/scola-assessment/scripts/ops/smoke_test_cbt_domain.py
Kriteria Lulus: Seluruh 14/14 checks wajib PASS (100%), termasuk sertifikat SSL Let's Encrypt, HTTP redirect 301, root SPA, manifest launcher, dan unduhan installer SEB 3.7.0.

4. Pemeriksaan Proteksi Containment R0:

Pastikan dokumentasi API internal tidak terpapar ke internet publik:

curl -s -o /dev/null -w "%{http_code}\n" https://cbt.gcgscola.id/docs
curl -s -o /dev/null -w "%{http_code}\n" https://cbt.gcgscola.id/openapi.json
Respon yang diharapkan: Kedua perintah wajib menghasilkan kode status 404 (Not Found).

5. Pemberlakuan Strict Change Freeze:

Mulai T-60 hingga penutupan resmi event pilot selesai, terbitkan maklumat Strict Change Freeze: - Dilarang menjalankan migrasi database baru (alembic upgrade). - Dilarang memperbarui pustaka Python atau Node.js. - Dilarang mengubah konfigurasi reverse proxy Nginx. - Dilarang melakukan deployment frontend baru.


3. Langkah 2: Pemantauan Telemetri Real-Time Command Center

Selama pengerjaan ujian berlangsung, operator sistem memantau kondisi server melalui perkakas telemetri khusus:
scripts/ops/pilot_telemetry_monitor.py.

A. Membaca Snapshot Telemetri Seketika:

Jalankan perintah berikut untuk melihat potret kondisi sistem dalam format teks terstruktur:

cd /home/scola/odoo/scola-assessment
python3 scripts/ops/pilot_telemetry_monitor.py --snapshot

Contoh Output Telemetri Real-Time:

======================================================================
🚀 SCOLA CBT: PILOT TELEMETRY MONITOR — SNAPSHOT
Timestamp: 2026-09-16T14:30:00Z | SLO Target: Concurrent 500
======================================================================

[1] PostgreSQL Connection Health:
  - Active Connections: 14 / 100 (14.0% pool utilization)
  - Idle in Transaction: 0 connections
  - Status: HEALTHY

[2] Query Contention & Lock Diagnostics:
  - Long Running Queries (> 5s): 0 queries
  - Active Table Locks: 0 transaction locks
  - Status: NO CONTENTION DETECTED

[3] Event Session & Concurrency:
  - Active Attempts: 48 attempts
  - Autosaves in Last 60s: 46 (95.8% active rate)
  - Submissions in Last 60s: 0 submissions/min

[4] Outbox & Storage Bulkhead:
  - Outbox Pending Queue: 0 messages
  - Outbox Oldest Pending: 0 seconds
  - Storage Upload Failures: 0 errors
  - Dead-Letter Alerts: NONE

[5] Automated SLO Evaluation:
  ✅ PASS: Connection Pool (< 80%)
  ✅ PASS: Query Contention (< 3 long queries)
  ✅ PASS: Outbox Queue (< 500 messages)
  ✅ PASS: Storage Errors (< 10 failures)

======================================================================
STATUS KESELURUHAN: GREEN (OPERASI NORMAL TANPA ANOMALI)
======================================================================

B. Mengaktifkan Mode Pemantauan Berkelanjutan (Live Polling):

Untuk memantau kondisi server di layar monitor Command Center secara berulang setiap 10 detik:

python3 scripts/ops/pilot_telemetry_monitor.py --interval 10
Tekan Ctrl + C untuk menghentikan pemantauan.


4. Langkah 3: Tata Kelola Force-Majeure & Gangguan Server (AC-27)

[!CAUTION] ATURAN MUTLAK TATA KELOLA FORCE-MAJEURE:
Jika terjadi server restart, crash proses Uvicorn, jaringan terputus sementara, atau pemulihan database PITR:
SISTEM DILARANG KERAS MEMPERPANJANG DEADLINE PESERTA SECARA OTOMATIS.
Waktu akhir pengerjaan (server_deadline) bersifat absolut di database. Perpanjangan waktu atau pemberian sesi susulan (retest) HANYA DAPAT DISETUJUI SECARA MANUAL oleh Ketua Dewan Juri (Incident Authority) dengan berita acara formal.

Perintah Pengelolaan Layanan Server (Systemd & Nginx):

  1. Memeriksa Status Backend Service:
    sudo systemctl status scola-cbt.service
    
  2. Me-restart Backend Service (Jika Pekerja Uvicorn Mengalami Kebuntuan):
    sudo systemctl restart scola-cbt.service
    
  3. Memantau Log Aplikasi Secara Live:
    sudo journalctl -u scola-cbt.service -f -n 100
    
  4. Memeriksa & Me-reload Nginx Reverse Proxy:
    sudo nginx -t && sudo systemctl reload nginx
    

5. Langkah 4: Prosedur Pasca-Ujian & Penutupan Event (Closeout - OS-080)

Begitu jendela waktu ujian berakhir, operator sistem menjalankan dua prosedur penutupan:

A. Menjalankan Penyapuan Batas Waktu Otomatis (Deadline Sweeper):

Perintah ini memastikan seluruh attempt yang waktunya telah habis namun belum menekan tombol submit resmi diubah statusnya menjadi terminal (closed_by_deadline):

cd /home/scola/odoo/scola-assessment
PYTHONPATH=.:backend .venv/bin/python3 -c "from app.workers.sweeper import sweep_expired_attempts; sweep_expired_attempts()"

B. Menjalankan Pipa Validasi Penutupan Terotomasi (pilot_event_closeout.py):

Jalankan audit rekonsiliasi resmi untuk sesi yang telah selesai:

python3 scripts/ops/pilot_event_closeout.py --session-id <SESSION_UUID>

Sistem akan memverifikasi 4 gerbang rekonsiliasi: 1. Verifikasi Attempt Terminal: Memastikan tidak ada lagi attempt yang berstatus in_progress (100% sudah submitted atau closed_by_deadline). 2. Verifikasi Penilaian Esai Buta: Memastikan 100% jawaban esai telah dinilai dan dimoderasi (is_moderated=True). 3. Verifikasi Publikasi Hasil: Memastikan telah ada snapshot publikasi aktif dengan aturan perangkingan standar. 4. Verifikasi Outbox: Memastikan tidak ada antrean pesan yang tertinggal atau berstatus dead-letter.

Jika seluruh gerbang lulus, skrip akan menerbitkan berkas sertifikat penutupan resmi:
docs/evidence/pilot_closeout_summary.json lengkap dengan tanda tangan hash SHA-256.


6. Langkah 5: Siklus Retensi Data Kamera & Preservasi Sengketa (OS-090 & CAM-09)

Sesuai regulasi privasi dan keamanan citra kamera (CAM-09): - Dispute Window: Berlangsung selama 7 hari kerja sejak pengumuman hasil resmi. - Masa Retensi Standar: Bukti citra kamera disimpan selama maksimum 90 hari, setelah itu wajib dibersihkan (tombstoning). - Proteksi Penahanan Hukum (Legal Hold Preservation): Seluruh bukti kamera pada attempt yang ditandai memiliki sengketa aktif (is_held=True) DILINDUNGI SECARA MUTLAK DAN TIDAK BOLEH DIHAPUS.

A. Menjalankan Simulasi Pembersihan Retensi (Dry-Run):

cd /home/scola/odoo/scola-assessment
python3 scripts/ops/retention_lifecycle_sweep.py --retention-days 90 --dry-run
Perintah ini akan mencatat berapa banyak citra kamera yang memenuhi syarat pembersihan tanpa menghapus data sebenarnya.

B. Menerapkan Pembersihan Permanen (Apply):

Setelah diverifikasi oleh penanggung jawab privasi (privacy owner):

python3 scripts/ops/retention_lifecycle_sweep.py --retention-days 90 --apply
Tindakan yang terjadi: - Citra kamera yang berusia $> 90$ hari dan berstatus is_held=False akan dikosongkan dari storage privat (tombstone_at = NOW()). - Data bukti dengan is_held=True tetap terlindungi 100%. - Berita acara eksekusi retensi dicatat pada log sistem.