Ana içeriğe geç

API Performans

Test: 1 Temmuz 2026 · tek kullanıcı · altı aylık veri (200 fabrika, 4.000 makine, 5.000 görev)

Sonuçlar

# Ekran Önce Sonra Durum
1 Görev listesi 437 ms 23 ms Düzeltildi
2 Kullanıcı kaydı (50 kişi aynı anda) — 1.25 sn Düzeltildi
3 Fabrika listesi 345 ms 24 ms Düzeltildi (hedef 30 ms)
4 Makine listesi 351 ms 320 ms Düzeltildi
5 Bildirimler (yoğun kullanım) 10 ms 4 ms Düzeltildi
6 Fabrika haritası event loop bloklanıyor 6 eşzamanlı render altında 0,79 sn max Düzeltildi

Görev listesi yük altında (1 kullanıcı, 1 dk test): 417 ms → 60 ms.

Sorun neydi

Ekran Sorun
Görev listesi Her satır için ayrı veritabanı sorgusu (not, fabrika, atananlar).
Kullanıcı kaydı Şifre + QR üretimi uygulamayı donduruyor.
Fabrika listesi Listede gösterilmeyen modül, alan, kategori verisi de gidiyor.
Makine listesi Her sayfa açılışında tüm makineler sayılıyor.
Bildirimler Liste ve okunmamış sayım sorgularında (user_id, timestamp) ve okunmamış satırlar için destekleyici indeks yoktu.
Harita Async endpoint senkron Graphviz render işlemini doğrudan event loop üzerinde çağırıyordu. Düzeltildi 2026-07-01: sınırlı async semaphore (MINDMAP_RENDER_CONCURRENCY, varsayılan 1) render slot'larını kontrol eder; token doğrulama, DB okumaları ve Graphviz PDF işi yalnızca slot alındıktan sonra Starlette threadpool'unda çalışır, bu yüzden kuyrukta bekleyen istekler artık veritabanı session'ı tutmaz. Çıktı her istek için ayrı geçici dizin kullanır.

Sırada ne var

Ekran Çözüm
Kullanıcı kaydı Düzeltildi — asenkron QR işçisi; kıyaslama: scripts/performance/run_signup_benchmark.py
Fabrika listesi Düzeltildi — hafif FactoryListItem şeması + selectinload detay sorgusu.
Makine listesi Düzeltildi — varsayılan COUNT(*) yok; tam toplamlar include_totals=true ile isteğe bağlı.
Bildirimler Düzeltildi
Harita Düzeltildi - sınırlı threadpool render + izole geçici render dizini

Fabrika listesi takip kontrolleri

Liste gecikme düzeltmesi 30 Haziran 2026'da yayınlandı. Bu maddeyi kapatmadan önce şu kontrolleri tamamlayın:

# Kontrol Sorumlu Durum
1 Mobil istemci ile doğrulayın: GET /api/factories listesi artık iç içe ilişki verisine (sectors, production_categories, production_areas, modules, sub_modules) ihtiyaç duymuyor. Detay GET /api/factories/{id} üzerinden gelmeye devam ediyor. Mobil + backend Açık
2 get_factory() fonksiyonunu ikiye ayırın: yazma/ doğrulama yolları için yalın lookup (varlık / ID kontrolü) ve beş M2M ilişki için selectinload kullanan detay loader. Teklif, görev ve takvim doğrulama çağrılarında ilişkileri yüklemeyin. Backend Açık
3 Sözleşme testleri ekleyin: liste yanıt şekli (FactoryListItem yalnızca skaler alanlar, ilişki anahtarı yok) ve sayfalama başlıkları (X-Total-Count, X-Total-Pages, X-Current-Page). Backend Açık
4 Detay sorgu verimliliği testini yalnızca sectors değil, beş M2M ilişkinin tamamını seed edecek şekilde genişletin; herhangi bir koleksiyonda selectinload gerilemesi yakalansın. Backend Açık
5 Danışmanların GET /api/factories/{id} üzerinde de liste davranışıyla (created_by == current_user) kısıtlanması gerekip gerekmediğine karar verin. Bugün liste danışmanları filtreler; detay filtrelemez. Ürün + backend Açık

Test: volume-testing.tr.md

Fabrika haritası render güvenliği (2026-07-01)

Graphviz kurulu yerel ortamda (dot 15.0.0, Python graphviz==0.20.3) port 8002 üzerinde çalışan uvicorn ile doğrulandı:

Probe Sonuç
Tek gerçek mindmap isteği HTTP 200, 165 ms, 146 KiB PDF
Altı eşzamanlı gerçek mindmap isteği tamamı HTTP 200, max 790 ms
Altı mindmap isteği sırasında /api/openapi.json HTTP 200, 4 ms
Altı mindmap isteği sırasında /api/factories?limit=1 HTTP 200, 17 ms

Endpoint artık event loop'u bloklamıyor ve kuyrukta bekleyen mindmap istekleri veritabanı session'ı tutmuyor. Yine de PDF üretimi CPU ve process işi yapar; kullanım artarsa sınır korunmalı veya job queue modeline taşınmalıdır.

Dağıtım bağımlılıkları

Gereksinim Kaynak Not
Python graphviz==0.20.3 requirements/runtime.txt Yalnızca wrapper; pip install -r requirements/runtime.txt ile kurulur
Graphviz dot binary'si İşletim sistemi paketi Çalışma zamanında zorunlu; örn. apt install graphviz veya brew install graphviz
MINDMAP_RENDER_CONCURRENCY Ortam değişkeni İsteğe bağlı; varsayılan 1; worker başına eşzamanlı mindmap render üst sınırı