Lanjut ke konten
Samkarsa Logbook

Jualan v1.5.0-079: Resolusi HTTP 503 Flapping Traefik & Optimasi Query Dashboard Agregat

Penyelesaian error 503 Service Unavailable dengan eliminasi agresif Traefik healthcheck, optimasi kueri SQL agregat 110x lebih cepat, dan endpoint ringan maintenance-stock.

1mnt baca

Pada saat pengguna memuat dashboard atau modul transaksi di aplikasi Blonjo, terjadi gelombang error HTTP 503 Service Unavailable pada beberapa endpoint:

  • GET /api/v1/finance/compass/summary
  • GET /api/v1/inventory/products
  • GET /api/v1/finance/accounts
  • GET /api/v1/settings/voice_rules

Penyelidikan log Traefik mengungkap bahwa Traefik mencabut upstream sajen-api ("-" 0ms) akibat timeout healthcheck 2 detik ketika backend sedang memproses beban kueri berat.

  1. Infrastruktur Traefik & Docker Healthcheck (docker-compose.prod.yml):

    • Menghapus label traefik.http.services.sajen-api.loadbalancer.healthcheck.* yang memicu flapping upstream pada layanan single container. Traefik kini mengandalkan discovery kontainer Docker secara native (selaras dengan mcp-backend dan blonjo-ui).
    • Merilekskan Docker internal healthcheck dari interval 3 detik menjadi 15 detik untuk memangkas konsumsi CPU akibat pemanggilan proses Python berulang kali di VPS 1-core.
  2. Optimasi Kueri Agregat Database (sajen/app/services/accounting.py):

    • Menggantikan loop 30 hari (60 kueri SQL individual) pada chart_data dengan 2 kueri SQL agregat GROUP BY Transaction.transaction_date.
    • Menggantikan loop N+1 produk pada kalkulasi low_stock_count dengan kueri agregat set-based langsung ke TenantInventory dan InventoryLog.
    • Waktu respons endpoint /finance/compass/summary terpangkas dari 7.458 ms menjadi 65 ms (lebih dari 110x lebih cepat).
  3. Dedicated Lightweight Endpoint (sajen/app/api/v1/settings.py & Frontend):

    • Menambahkan endpoint GET /api/v1/settings/maintenance-stock yang hanya membaca boolean status pelacakan stok tenant (< 2 ms).
    • Memposisikan routing sebelum parameter dinamis /{key} untuk mencegah path shadowing.
    • Memperbarui komponen frontend (Sidebar.tsx, SmartTextarea.tsx, dan MaterialControlHub.tsx) agar memanggil endpoint ringan ini tanpa membebani kalkulasi ringkasan keuangan.

  • Seluruh request API berjalan stabil dengan status HTTP 200 OK tanpa lagi memicu error 503.
  • Latensi per request berkurang drastis sehingga pengalaman pengguna menjadi jauh lebih responsif.