|
|
import requests |
|
|
import time |
|
|
from app.log import logger |
|
|
|
|
|
from app.config import MODEL_NAME, ORCHESTRATOR_URL, OWN_URL |
|
|
|
|
|
def heartbeat(): |
|
|
while True: |
|
|
try: |
|
|
response = requests.post( |
|
|
f"{ORCHESTRATOR_URL}/heartbeat", |
|
|
json={"model_name": MODEL_NAME}, |
|
|
timeout=5 |
|
|
) |
|
|
if response.status_code == 200: |
|
|
logger.info(f"💓 Heartbeat envoyé pour {MODEL_NAME}") |
|
|
|
|
|
elif response.status_code == 404: |
|
|
logger.warning(f"⚠️ Modèle inconnu dans orchestrateur (404) → tentative de réenregistrement") |
|
|
|
|
|
register_with_orchestrator() |
|
|
else: |
|
|
logger.warning(f"⚠️ Heartbeat refusé ({response.status_code}) : {response.text}") |
|
|
except Exception as e: |
|
|
logger.error(f"❌ Erreur lors du heartbeat : {e}") |
|
|
time.sleep(60) |
|
|
|
|
|
def register_with_orchestrator(): |
|
|
try: |
|
|
logger.info(f"📡 Tentative d'enregistrement de {MODEL_NAME} à l'orchestrateur...") |
|
|
response = requests.post( |
|
|
f"{ORCHESTRATOR_URL}/register_model", |
|
|
json={"model_name": MODEL_NAME, "url": f"{OWN_URL}/predict"} |
|
|
) |
|
|
if response.status_code == 200: |
|
|
logger.info("✅ Modèle enregistré avec succès") |
|
|
return True |
|
|
else: |
|
|
logger.info(f"⚠️ Échec enregistrement : {response.text}") |
|
|
return False |
|
|
except Exception as e: |
|
|
logger.info(f"❌ Erreur d'enregistrement : {e}") |
|
|
|
|
|
def register_forever(interval=30): |
|
|
while True: |
|
|
success = register_with_orchestrator() |
|
|
if success: |
|
|
break |
|
|
logger.info(f"⏳ Nouvel essai dans {interval} secondes...") |
|
|
time.sleep(interval) |