System Status

Operational health signals for the production environment.
All systems operational. 2026-08-06 06:50:12 UTC
Database (Master) ● Operational
Disk Space (Uploads) 57.5% free ● Operational
Noteification Cron 5 min ago ● Operational
Backup 6.6 hrs ago · 7 tenant ● Operational
Backup Integrity 4.2 days ago · 9 files verified ● Operational
Off-site Backup 4.3 hrs ago · 16.4 GB · 7 snapshots ● Operational
PHP Version 8.3.6 ● Operational
OPcache 95.5% hit ● Operational

Recent Incidents (90 days)

Super admin paneli 502 Bad Gateway — PDOStatement cast warning loop Yüksek Çözüldü
2026-06-22 13:30 · Affected: Süper admin paneli (giriş sonrası dashboard)
  1. 2026-06-22 13:37 MigrationRunner DDL-unsafe çıktı: ilk migrate.php çağrısı "There is no active transaction" verdi. MySQL'de CREATE/ALTER TABLE implicit commit yapar. inTransaction() guard up() ve rollback() içine eklendi.
  2. 2026-06-22 13:35 Ikincil noise tespit edildi: td_master.audit_log tablosu yoktu, SA login event'i audit'e yazılamıyor SQLSTATE 42S02 üretiyordu. Master DB'de tablo oluşturuldu, init_master.php + versioned migration 20260622_000001 eklendi.
  3. 2026-06-22 13:31 Hotfix deploy: ölü kod kaldırıldı, hemen altındaki $cntSt = $tdb->prepare(...); $cntSt->execute(); $cnt = (int)$cntSt->fetchColumn(); doğru kullanımı kaldı.
  4. 2026-06-22 13:30 Root cause tespit edildi: super_admin/index.php:41-44'te ölü kod ($cnt = (int)$tdb->prepare(...)) PDOStatement'i int'e cast etmeye çalışıyordu. Bu yalnızca warning, ama 22 aktif tenant'a karşı for-loop'ta tetiklenince Logger her seferinde tek satır JSON'u FastCGI stderr'e basıyordu. nginx tarafında upstream sent too big header → 502.
  5. 2026-06-22 09:48 Ilk hata raporu: kullanıcı SA login sonrası /super_admin/index.php'te 502 Bad Gateway alıyor.
Postmortem
Tetikleyici: Geçen sprintlerde super_admin/index.php'e online users mantığı eklenirken eski 4 satırlık deneme blok silinmemiş, ölü kod kalmıştı. Tek başına PHP warning, ama Logger sayesinde her warning artık stderr'e structured log basıyor; aktif tenant sayısı arttıkça (22+) header buffer'a sığmaz oldu. Önlemler: (1) ölü kod kaldırıldı, (2) Logger'ın FastCGI stderr basma davranışı yeniden değerlendirilecek — same-message dedup (rate-limit per-request) bir sonraki sprintte eklenebilir, (3) MigrationRunner DDL-safe oldu — gelecekteki tüm CREATE/ALTER TABLE migration'ları "transaction yok" exception'ı yaşamayacak, (4) master DB'de artık audit_log tablosu var, SA işlemleri (login, tenant create/delete, ai_kb edit) cross-tenant audit_search'te görünecek.
Günlük backup script silent failure (geriye dönük tespit) Yüksek Çözüldü
2026-06-21 23:00 · Affected: Günlük yedek, DR güveni
  1. 2026-06-22 02:26 Haftalık integrity check cron kuruldu (Pazar 04:00). Ilk run: 8 dosya SHA256 OK, 7 sql.gz gunzip OK.
  2. 2026-06-22 00:04 Yeni multi-tenant aware backup script (v2) yazıldı, deploy edildi. Manuel run: master + 6 tenant + app files = 52MB başarılı.
  3. 2026-06-21 23:00 Logger pipeline kurulduktan sonra yapılan integrity audit'te tespit: 2 ay+ boyunca $DB_NAME env tanımsızlığı yüzünden 388 byte'lık boş dump üretiliyordu.
  4. 2026-04-28 Eski backup script son başarılı çalışmasını gerçekleştirdi (geriye dönük tespit edildi).
Postmortem
Tetikleyici: Yeni sistem secret'larından gelen $DB_NAME bağımlılığı; eski script config.php yerine bekliyordu. Tespit gecikmesinin sebebi: backup tar.gz boyutu kontrol edilmiyordu (bir dosya vardı, başarı sayıldı). Önlem: yeni script min 1KB sanity check + last_run.json meta + /health.php component + haftalık integrity check.
Auto refresh: 60 s · Version: V3.2.410.00 · JSON: /health.php