""" Flare – Spark startup notifier ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ App lifecyle içinde Spark servisine /startup çağrısı yapar. """ import threading import time from typing import Dict, Any import requests from utils import log from config_provider import ConfigProvider, VersionConfig, ProjectConfig cfg = ConfigProvider.get() def _select_live_version(p: ProjectConfig) -> VersionConfig | None: published = [v for v in p.versions if v.published] if not published: return None return max(published, key=lambda v: v.id) def notify_startup(): spark_url = cfg.global_config.spark_endpoint for p in cfg.projects: if not p.enabled: continue v = _select_live_version(p) if not v: continue body: Dict[str, Any] = { "project_name": p.name, "version_id": v.id, "general_prompt": v.general_prompt, "llm": v.llm.model_dump(), } try: log(f"🚀 Notifying Spark /startup for project '{p.name}' …") r = requests.post(f"{spark_url}/startup", json=body, timeout=10) r.raise_for_status() log(f"✅ Spark acknowledged startup ({r.status_code})") except Exception as e: log(f"⚠️ Spark startup failed: {e}") def run_in_thread(): t = threading.Thread(target=notify_startup, daemon=True) t.start()