# Onoxsoft Panel — Performans Kılavuzu (Phase 4)

## Hedef Lighthouse Skorları

| Kategori    | Phase 4 Hedef | Araç               |
|-------------|---------------|--------------------|
| Mobile Perf | ≥ 90          | Lighthouse CI      |
| Desktop Perf| ≥ 95          | Lighthouse CI      |
| Accessibility| ≥ 90         | axe-core           |
| Best Practices | ≥ 90      | Lighthouse CI      |
| SEO         | ≥ 85          | Lighthouse CI      |

---

## 1. Önerilen Sunucu Gereksinimleri

### Master (Panel + API)

| Kaynak    | Minimum | Önerilen   |
|-----------|---------|------------|
| CPU       | 4 vCPU  | 8 vCPU     |
| RAM       | 8 GB    | 16 GB      |
| Disk      | 80 GB   | 200 GB NVMe|
| OS        | AlmaLinux 9 | AlmaLinux 9 |
| PHP       | 8.3     | 8.3        |
| Redis     | 7.x     | 7.x (sentine l veya cluster) |

### Slave (DB read-replica + Redis)

| Kaynak | Minimum | Önerilen |
|--------|---------|----------|
| CPU    | 2 vCPU  | 4 vCPU   |
| RAM    | 4 GB    | 8 GB     |
| Disk   | 100 GB  | 200 GB NVMe |

---

## 2. Cache Stratejisi

`App\Domain\Cache\Services\CacheStrategy` üzerinden merkezi yönetim.

### TTL Rehberi

| Sabit            | Süre    | Kullanım                        |
|------------------|---------|---------------------------------|
| `TTL_VERY_SHORT` | 1 dk    | Anlık stats, aktif session sayısı |
| `TTL_SHORT`      | 5 dk    | Dashboard özetleri               |
| `TTL_MEDIUM`     | 30 dk   | Paket listeleri, limitler        |
| `TTL_LONG`       | 1 gün   | Panel ayarları, branding         |
| `TTL_VERY_LONG`  | 1 hafta | Sistem sabitleri                 |

### Cache Driver Seçimi

```ini
# .env (üretim — Redis)
CACHE_DRIVER=redis
REDIS_HOST=127.0.0.1
REDIS_PORT=6379

# .env (dev — dosya, tag desteği yok)
CACHE_DRIVER=file
```

> Tag-tabanlı invalidation (`flushTag`) yalnızca Redis driver'ında çalışır.
> Dosya driver'ında `CacheStrategy::flushTag()` sessizce atlanır — uygulama hataya düşmez.

### Tag Invalidation

Hesap oluşturma/askıya alma/iptal event'leri tetiklendiğinde
`InvalidateOnAccountChange` listener otomatik olarak
`accounts`, `dashboard` ve `resellers` etiketlerini temizler.

---

## 3. N+1 Sorgu Tespiti

### Geliştirme Ortamında

```bash
# STRICT_DB=true ile N+1'i hata olarak fırlat
STRICT_DB=true php artisan serve
```

`AppServiceProvider` içinde `Model::preventLazyLoading()` devreye girer;
lazy-loaded ilişki çağrısında `LazyLoadingViolationException` fırlatılır.

### Query Audit Komutu

```bash
php artisan onox:query-audit --url=/admin/dashboard
```

- 5'ten fazla tekrar eden SQL → N+1 uyarısı
- 100 ms üzeri sorgu → yavaş sorgu uyarısı

### Performans Benchmark

```bash
php artisan onox:benchmark --rounds=200
```

Çıktı: `avg`, `p50`, `p95`, `p99` (ms cinsinden, tablo formatında).

---

## 4. Vite / Frontend Optimizasyonu

### Manuel Chunk Splitting

`vite.config.js` içinde `manualChunks` ile büyük bağımlılıklar ayrılır:

| Chunk       | İçerik                              | Yaklaşık Boyut |
|-------------|-------------------------------------|----------------|
| `vue-core`  | vue                                 | ~50 kB         |
| `inertia`   | @inertiajs/vue3                     | ~30 kB         |
| `heroicons` | @heroicons/vue/24/outline           | ~20 kB         |
| `lodash`    | lodash                              | ~70 kB         |
| `monaco`    | monaco-editor + @guolao/vue-monaco-editor | ~3 MB    |

> `monaco` chunk büyük ancak yalnızca kod editörü sayfalarında yüklenir.
> Vue router ile lazy import edilmesi önerilir:
> ```js
> const CodeEditor = () => import('@/Pages/Admin/CodeEditor.vue')
> ```

### Resim Optimizasyonu

- Fold-altı tüm `<img>` tag'larına `loading="lazy"` ekle.
- `useResponsiveImage` composable — Phase 5'te imgproxy/ImageKit bağlantısı eklenecek.

---

## 5. Veritabanı Tuning

`2026_05_13_094610_add_performance_indexes` migration'ı şu tablolara index ekler:

- `audit_log` → `user_id`, `created_at`
- `accounts` → `(status, created_at)`, `reseller_user_id`
- `domains` → `(account_id, type)`, `php_version`
- `email_accounts` → `(account_id, domain)`
- `ssl_certificates` → `(renewal_status, expires_at)`

MySQL/MariaDB ek tuning için `docs/tr/admin/mysql-konfigurasyon.md` bakınız.

---

## 6. PHP-FPM Tuning (Apache mod_fcgid / PHP-FPM)

```ini
; /etc/php/8.3/fpm/pool.d/www.conf
pm = dynamic
pm.max_children      = 50
pm.start_servers     = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests      = 500     ; bellek sızıntısına karşı
request_slowlog_timeout = 5s   ; 5sn üzeri isteği logla
```

---

## 7. Laravel Octane (Phase 5)

Octane kurulumu ve yapılandırma detayları: [`docs/performance/octane.md`](./octane.md)

**Kısa özet:** Octane 2–10x throughput artışı sağlar ancak global state
sorunları çözülmeden etkinleştirilmemelidir. Phase 5 scope'undadır.

---

## 8. İzleme & Alerting

- **Prometheus + Grafana** — `docs/monitoring/` altında dashboard JSON'ları mevcut.
- **Slow query log** — `AppServiceProvider` içinde >250 ms sorgular `laravel.log`'a yazılır.
- **Health endpoint** — `GET /health` → tüm servislerin durum özeti.
