# Performance Analysis: Laravel Sıcak Path Taraması
Generated: 2026-06-14 04:21:49

## Executive Summary
- Bottleneck Type: CPU + IO + DB + External API
- Current Performance:
  - OpenAI rapor çağrıları (log): p50=136075 ms, p95=229863 ms, max=229863 ms, ort=118383 ms (n=19)
  - Uzun rapor endpointlerinde uygulama süresi tipik olarak 2-4 dakika bandında.
- Expected Improvement:
  - Hızlı kazanımlar ile web geçişlerinde %15-30 iyileşme
  - Orta riskli mimari iyileştirmelerle ağır endpointlerde %40-70 iyileşme

## Profiling Results

### CPU Hotspots (Kod Taraması + Akış Analizi)
| Function/Path | Tahmini Etki | Tür | Konum |
|---|---:|---|---|
| Swetest hesaplama + yıldız komut zinciri | Çok yüksek | CPU/Process spawn | app/Services/SwetestService.php:28,48,70 |
| Çoklu görsel üretim (prepareVisualData) | Çok yüksek | CPU | app/Services/ChartVisualizerService.php:45 |
| İlişki tri-wheel + transit görselleri | Çok yüksek | CPU | app/Services/RelationshipChartService.php:255-300 |
| Panel builder çoklu chart hazırlığı | Yüksek | CPU/Memory | app/Services/Chart/ChartPageBuilderService.php:779-993 |
| OpenAI uzun rapor payload + continuation | Çok yüksek | External IO | app/Services/OpenAI/OpenAIServiceRefactored.php:288,336 |

### Memory / Payload
- OpenAI request payload boyutu loglarda ~129KB-194KB.
- Büyük chart veri yapıları ve çoklu visual üretim aynı request içinde tutuluyor.

## Findings

### 1) Swetest komut çalıştırma çarpanı
Location: app/Services/SwetestService.php:28,48,70
Type: CPU/IO
Impact: Her chart hesaplaması external process çalıştırıyor; fixed star loop ile komut genişliyor.
Evidence:
```php
foreach ($starList as $star) { ... }
exec($command, $output, $returnVar);
```
Expected Improvement: Hesaplanan astro verileri request-scope ve kısa TTL cache'e alındığında aynı parametreli çağrılarda 3x-10x kazanım.

### 2) ChartVisualizer içinde yoğun döngü kümeleri
Location: app/Services/ChartVisualizerService.php:45,1592-1593,1665,2010-2011,2490+
Type: CPU
Impact: O(n^2) planet karşılaştırmaları + 360 derecelik iterasyonlar + cluster çözümü.
Evidence:
```php
for ($i = 0; $i < 360; $i++) { ... }
for ($i = 0; $i < $n; $i++) { for ($j = 0; $j < $i; $j++) { ... } }
```
Expected Improvement: Ön-hesap/caching ve branch azaltımıyla %20-45.

### 3) Panel build içinde çoklu visual üretim
Location: app/Services/Chart/ChartPageBuilderService.php:779-993
Type: CPU/Memory
Impact: Tek requestte çok sayıda chart varyantı için ardışık prepareVisualData çağrısı.
Evidence:
```php
'visual' => $this->visualizer->prepareVisualData(...)
```
Expected Improvement: Lazy include (sadece istenen chart) ile %30-60.

### 4) Relationship chart üretiminde kombine patlama
Location: app/Services/RelationshipChartService.php:179-188,255-263,285,300
Type: CPU
Impact: A/B/composite/davison + transit + synastry + synastry_transit aynı akışta hazırlanıyor.
Expected Improvement: Endpoint bazlı parçalama ile %35-65.

### 5) IndexController içinde tekrar eden ağır build çağrıları
Location: app/Http/Controllers/Frontend/IndexController.php:533,758,912,1071,1234
Type: CPU
Impact: Ana index'te cache var, ama bazı aksiyonlarda pageBuilder yeniden çalışıyor.
Expected Improvement: Ortak cache anahtarı/partial cache ile %15-35.

### 6) OpenAI uzun rapor çağrıları uçtan uca çok yüksek latency
Location: app/Services/OpenAI/OpenAIServiceRefactored.php:288,336
Type: External IO
Impact: Ölçülen p95 ~230 sn; kullanıcıda "sayfa geçişi yavaş" algısını doğrudan artırır.
Evidence (log): request_duration_ms ve openai_duration_ms alanları.
Expected Improvement: Async kuyruk + polling ile kullanıcı bekleme süresinde dramatik iyileşme (TTFB saniyeler seviyesine iner).

### 7) TrackVisit middleware her web isteğinde yazma yapıyor
Location: app/Http/Middleware/TrackVisit.php:79,168,180
Type: DB write
Impact: Ziyaretçi + page_view insert, ayrıca increment; yüksek trafikte write amplification.
Expected Improvement: Asenkron event queue ile web response süresinde %10-25.

### 8) Middleware içinde Schema::hasTable kontrolü request başına
Location: app/Http/Middleware/TrackVisit.php:51,147
Type: DB/Metadata IO
Impact: Her istekte şema kontrol maliyeti.
Expected Improvement: Boot-time feature flag/cache ile küçük ama sürekli kazanım (%3-8).

### 9) Cache ve Session varsayılanlarının database olması
Location: config/cache.php:18, config/session.php:21
Type: DB read/write
Impact: Session + cache hit/miss yükü DB üzerinde birikiyor.
Expected Improvement: Redis'e geçişle p95 DB beklemesinde anlamlı düşüş (%15-40 trafik profiline bağlı).

### 10) Mobil checkout akışında yoğun yazım döngüleri
Location: app/Http/Controllers/Api/ApiCartController.php:181,261,318
Type: DB write
Impact: Checkout sırasında çoklu create/increment, satır bazlı hak tanımları.
Expected Improvement: Toplu insert/tek transaction sadeleştirmesi ile %20-50.

## Recommendations

### Quick Wins (Düşük risk, yüksek etki)
1. Sadece istenen chartları üret: API ve panelde include/default stratejisini daralt.
2. TrackVisit için Schema::hasTable sonucunu process-cache ile sabitle.
3. TrackVisit yazımlarını kuyruğa taşı (en azından PageView::create).
4. OpenAI rapor endpointlerinde kullanıcıya hemen job-id dön, sonucu sonradan çek.
5. Swetest sonuçlarını kısa TTL (örn. 2-10 dk) ile cache'le (input hash bazlı).
6. Same-request içinde tekrarlanan pageBuilder çağrılarını merkezi memoization ile engelle.

### Medium-term (Orta risk, yüksek getiri)
1. Cache/session store'u Redis'e taşı; DB üzerindeki operasyonel cache yükünü azalt.
2. ChartVisualizer için algoritmik sadeleştirme: transit/relationship modlarına göre gereksiz hesap bloklarını bypass et.
3. Relationship akışını endpoint bazında böl: synastry, composite, davison ayrı üretim.
4. Checkout akışında UserPackagePurchase yazımlarını toplu/batch modeline çek.
5. OpenAI prompt payload küçültme: sistem promptunu segmentleyip chart type'a göre minimum içerik gönder.

### Architecture Changes
1. "Rapor üretimi" tamamen async pipeline olmalı: enqueue -> worker -> progress -> result cache.
2. "Chart compute" için compute-service katmanı + sıcak cache (Redis) + invalidation politikası.
3. Analitik (visitor/pageview) yazılarını OLTP DB'den ayrıştır (queue + ayrı store/warehouse).

## Ölçüm Planı

### Hangi metrikler
1. HTTP: p50/p95/p99 latency, TTFB, throughput, 5xx oranı.
2. Endpoint bazlı: /panel, /api/chart/full, /api/chart/relationship-full, /api/generate-natal-report, /api/cart/checkout.
3. DB: query count/request, toplam query süresi, slow query >200ms, write TPS.
4. Uygulama: Swetest çağrı sayısı/request, prepareVisualData çağrı sayısı/request, OpenAI çağrı süresi.
5. Queue (geçiş sonrası): job bekleme süresi, işlenme süresi, hata oranı.

### Nasıl alalım
1. Laravel DB::listen ile query sürelerini endpoint etiketiyle logla.
2. Middleware timing ile route_name + duration_ms metriklerini merkezi loga yaz.
3. OpenAI ve Swetest için structured log alanları standardize et: duration_ms, payload_size, retry_count.
4. Nginx access log + upstream_response_time alanlarını topla.
5. Kısa vadede: log tabanlı p95 raporu (günlük). Orta vadede: Prometheus/Grafana paneli.

### Benchmark matrisi
| Senaryo | Önce | Hedef | Not |
|---|---:|---:|---|
| /panel ilk yükleme | Ölçülmeli | p95 < 1.5s (OpenAI hariç) | cache hit oranı kritik |
| /api/chart/full (varsayılan) | Ölçülmeli | p95 < 1.2s | include daraltma sonrası |
| /api/chart/relationship-full | Ölçülmeli | p95 < 1.8s | tri-wheel maliyeti |
| /api/generate-natal-report | p95 ~230s | kullanıcı bekleme < 2s | async iş modeli |
| /api/cart/checkout | Ölçülmeli | p95 < 900ms (ödeme başlatma hariç) | write optimizasyonu |
