# Sistem Durumu (Status Page) — Admin Kurulum Kılavuzu

## Genel Bakış

Onoxsoft Panel, `status.example.com` tarzı bir herkese açık durum sayfası sunmaktadır. Uptime Kuma muadili, panele entegre dahili sürüm. Üç ana bölümden oluşur:

- **Herkese Açık Sayfa** (`/status`) — kimlik doğrulama gerektirmez
- **Admin Paneli** (`/admin/status`) — bileşen, olay ve bakım yönetimi
- **Otomatik Kontrol Cron'u** — her dakika çalışır, sonuçları kaydeder

---

## Kurulum

### 1. Migration

```bash
php artisan migrate
```

`status_components`, `status_checks`, `status_incidents`, `status_incident_updates`, `status_scheduled_maintenance` tablolarını oluşturur.

### 2. Varsayılan Bileşenleri Yükle

```bash
php artisan db:seed --class=StatusComponentsSeeder
```

Varsayılan bileşenler:

| Bileşen | Tip | Endpoint |
|---------|-----|----------|
| Web Server (Apache) | HTTP | `http://localhost/up` |
| Veritabanı (MariaDB) | TCP | `localhost:3306` |
| Mail Sunucusu (Postfix) | TCP | `localhost:25` |
| DNS (PowerDNS) | DNS | `ns1.onox.com.tr` |
| Redis | TCP | `localhost:6379` |
| API | HTTP | `{APP_URL}/api/v1/public/health` |
| Panel Arayüzü | HTTP | `{APP_URL}` |
| FTP (ProFTPD) | TCP | `localhost:21` |

### 3. Cron'u Aktifleştir

`routes/console.php` dosyasında aşağıdaki satır zaten mevcuttur:

```php
Schedule::command('onox:status-check')->everyMinute()->withoutOverlapping();
```

Sunucuda Laravel Scheduler'ın çalıştığından emin olun:

```bash
# crontab -e
* * * * * cd /var/www/onox && php artisan schedule:run >> /dev/null 2>&1
```

---

## Kontrol Tipleri

| Tip | Açıklama | Endpoint Formatı |
|-----|----------|-----------------|
| `http` | HTTP GET isteği, durum kodu ve opsiyonel metin kontrolü | `https://example.com/health` |
| `tcp` | TCP bağlantı testi | `host:port` |
| `ping` | ICMP ping (sadece Linux) | `hostname` veya `IP` |
| `dns` | A kaydı çözümleme | `domain.com` |
| `cmd` | Komut çalıştırma (Phase 5.5, sysapi ile) | — |
| `manual` | Otomatik kontrol edilmez | — |

---

## Durum Seviyeleri

| Durum | Açıklama |
|-------|----------|
| `operational` | Servis normal çalışıyor |
| `degraded` | Yavaşlama / performans sorunu var |
| `partial_outage` | Kısmi kesinti (bazı istekler başarısız) |
| `major_outage` | Büyük kesinti (servis ulaşılamaz) |
| `maintenance` | Planlı bakım devam ediyor |

**Otomatik durum geçişi:** Son 5 dakikada 3+ başarısız kontrol → `major_outage`. 1-2 başarısız → `partial_outage`. İlk başarısızlık → `degraded`. Başarılı kontrol → `operational`.

---

## Admin Paneli

### `/admin/status` — Bileşen Yönetimi

- Yeni bileşen ekle, düzenle, sil
- Manuel "Şimdi Kontrol Et" butonu
- 24 saatlik uptime ve ortalama yanıt süresi

### `/admin/status/incidents` — Olay Yönetimi

Olay oluşturma akışı:
1. **Olay Oluştur** → `investigating` durumuyla başlar, otomatik ilk güncelleme eklenir
2. **Güncelleme Ekle** → `identified` / `monitoring` / `resolved`
3. **Çöz** → `resolved_at` kaydedilir, herkese açık sayfada "Çözüldü" gösterilir

### `/admin/status/maintenance` — Bakım Planlama

- Başlangıç/bitiş zamanı zorunlu
- `scheduled` → `in_progress` → `completed` akışı
- Herkese açık sayfada mavi banner olarak gösterilir

---

## Herkese Açık Sayfalar

| URL | İçerik |
|-----|--------|
| `/status` | Ana durum sayfası (Inertia/Vue) |
| `/status.json` | Kompakt JSON API (harici monitor entegrasyonu) |
| `/status.rss` | RSS feed (olay bildirimleri) |

### JSON API Örneği

```json
{
  "overall": "operational",
  "components": [
    { "name": "Web Server", "slug": "web-server", "status": "operational", "uptime_24h": 99.93 }
  ],
  "active_incidents": 0,
  "last_updated": "2026-05-13T10:00:00+03:00"
}
```

---

## Veri Temizleme

`status_checks` tablosu hızla büyür. `PruneOldDataCommand` ile veya manuel:

```bash
# 90 günden eski kontrol kayıtlarını temizle
DELETE FROM status_checks WHERE checked_at < NOW() - INTERVAL 90 DAY;
```

`PruneOldDataCommand.php` dosyasına entegre etmeniz önerilir.

---

## Güvenlik Notu

- Herkese açık `/status` sayfası kimlik doğrulama gerektirmez — hassas endpoint bilgileri gösterilmez (sadece ad, durum, uptime)
- Admin CRUD rotaları `auth + admin` middleware koruması altındadır
- `public = false` olarak işaretlenen bileşenler herkese açık sayfada görünmez (örn. Redis dahili)
