File size: 1,902 Bytes
f725085
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9b3e2a4
f725085
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import requests
import time
from app.log import logger

from app.config import MODEL_NAME, ORCHESTRATOR_URL, OWN_URL,MODEL_TYPE

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")
                # Tentative de réenregistrement à chaud
                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, "model_type": MODEL_TYPE,"url": f"{OWN_URL}"}
        )
        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  # On arrête de réessayer
        logger.info(f"⏳ Nouvel essai dans {interval} secondes...")
        time.sleep(interval)