fix(ciromarket): sosyal kanit asamasinda queue progress guncelle

Ne yaptik:
- _enrich_report_task fonksiyonu progress_cb parametresi aldi
- social_proof calismasi sirasinda daemon monitor thread baslatiyor
- Her 30 saniyede enrichment_progress izleyip queue'yu 96-99% araliginda guncelliyor
- queue_worker.py: _progress_cb lambda ile self._update_progress bagladi

Neden yaptik:
- Sosyal kanit asamasi (5000+ urun, ~12 dk) boyunca progress
  yuzde 95'te donuyordu, kullanici rapor takildi saniyordu.
- Artik UI gercek ilerlemeyi 96-99% araliginda gosterecek.
This commit is contained in:
furkanyigit34
2026-07-16 13:47:55 +03:00
parent 4c6320f710
commit 0fa034c67d
2 changed files with 27 additions and 3 deletions

View File

@@ -3699,8 +3699,9 @@ def _enrich_build_product_info(all_products):
return info return info
def _enrich_report_task(report_id: int): def _enrich_report_task(report_id: int, progress_cb=None):
import time import time
import threading
db = SessionLocal() db = SessionLocal()
try: try:
enrichment_progress[report_id] = {"status": "running", "step": "init", "done": 0, "total": 2} enrichment_progress[report_id] = {"status": "running", "step": "init", "done": 0, "total": 2}
@@ -3718,9 +3719,28 @@ def _enrich_report_task(report_id: int):
# _save_json(f"{base_dir}/reviews.json", rev_payload) # _save_json(f"{base_dir}/reviews.json", rev_payload)
# time.sleep(0.1) # time.sleep(0.1)
# 2) Social Proof # 2) Social Proof — monitor internal batch progress and relay to queue
enrichment_progress[report_id] = {"status": "running", "step": "social", "done": 0, "total": 1} enrichment_progress[report_id] = {"status": "running", "step": "social", "done": 0, "total": 1}
stop_monitor = threading.Event()
if progress_cb:
def _monitor_social():
progress_key = f"social_{report_id}"
last_queue_pct = 95
while not stop_monitor.wait(30):
ep = enrichment_progress.get(progress_key) or {}
done = ep.get("processed", 0)
total = ep.get("total", 0) or 1
queue_pct = 96 + min(3, int((done / total) * 4))
if queue_pct > last_queue_pct:
last_queue_pct = queue_pct
try:
progress_cb(queue_pct, f"Sosyal kanit: {done}/{total} urun")
except Exception:
pass
threading.Thread(target=_monitor_social, daemon=True).start()
soc_payload = social_proof(report_id, refresh=True, db=db) or {} soc_payload = social_proof(report_id, refresh=True, db=db) or {}
stop_monitor.set()
# ürün isimlerini detaylara iliştir # ürün isimlerini detaylara iliştir
if soc_payload and soc_payload.get("details"): if soc_payload and soc_payload.get("details"):
details = soc_payload["details"] details = soc_payload["details"]

View File

@@ -308,7 +308,11 @@ class QueueWorker:
self._update_progress(db, queue_id, 95, "Sosyal kanit verileri toplanıyor...") self._update_progress(db, queue_id, 95, "Sosyal kanit verileri toplanıyor...")
try: try:
from main import _enrich_report_task from main import _enrich_report_task
_enrich_report_task(report_id)
def _progress_cb(p: int, m: str):
self._update_progress(db, queue_id, p, m)
_enrich_report_task(report_id, progress_cb=_progress_cb)
log.info(f"Enrichment completed for report {report_id}") log.info(f"Enrichment completed for report {report_id}")
except Exception as e: except Exception as e:
log.warning(f"Enrichment failed (non-critical): {e}") log.warning(f"Enrichment failed (non-critical): {e}")