İçeriğe geç

Nabız (heartbeat)#

Onaylı bir koordinatör, çalıştığını portala nabız göndererek bildirir. Herkese açık koordinatör sayfasında ve dizinde "çevrimiçi / gecikmeli" rozetini bu belirler. Nabız göndermek zorunlu değildir, ama gönüllüler canlı bir koordinatörü seçmek ister.

curl -s -X POST https://modelen.tr/api/v1/koordinator/nabiz \
  -H "Authorization: Bearer $MODELEN_API_ANAHTARI" -H "Content-Type: application/json" \
  -d '{"durum":"calisiyor","tur":3,"toplam_tur":20,"aktif_isci":7,"protokol":"1","surum":"0.4.0"}'

Alanlar#

AlanTürZorunluAnlamı
durummetinevetcalisiyor, bekliyor, bakimda ya da durdu
turtamsayı ≥ 0hayırŞu anki tur
toplam_turtamsayı ≥ 0hayırPlanlanan tur sayısı
aktif_iscitamsayı ≥ 0hayırSon zamanlarda görülen işçi sayısı
protokolmetin ≤ 10hayırÖrn. "1"
surummetin ≤ 30hayırKoordinatör yazılımınızın sürümü
mesajmetin ≤ 120hayırKısa not (ör. bakım zamanı)

Başka alan göndermek 400 bilinmeyen_alan, hatalı değer 400 gecersiz_* döner. Yalnızca onaylı koordinatör nabız gönderebilir (403 onayli_degil). Sınır: dakikada 6.

Herkese açık durum nasıl hesaplanır?#

Gönderdiğiniz durum ve son nabızdan geçen süre birleşerek şu değeri verir:

Görünen durumKoşul
cevrimicicalisiyor/bekliyor ve son nabız ≤ 15 dakika önce
gecikmelicalisiyor/bekliyor ve son nabız ≤ 24 saat önce
bakimdaSon nabızda bakimda bildirildi (24 saat içinde)
durduSon nabızda durdu bildirildi (24 saat içinde)
bilinmiyorHiç nabız yok ya da 24 saatten eski

Bu yüzden en geç 15 dakikada bir göndermelisiniz; 5 dakika iyi bir aralıktır.

Döngü örneği#

Hazır istemciyle:

export MODELEN_API_ANAHTARI=mdl_...
python istemci/ornekler/modelen_api.py nabiz-dongusu --koordinator http://127.0.0.1:8750 --aralik 300

Bu komut koordinatörünüzün /durum ve /bilgi uç noktalarından tur ve işçi sayısını okuyup portala iletir. Kendi kodunuzda:

import json, time, urllib.request

def nabiz(anahtar, durum="calisiyor", **alanlar):
    govde = json.dumps({"durum": durum, **alanlar}).encode()
    istek = urllib.request.Request("https://modelen.tr/api/v1/koordinator/nabiz", govde, method="POST",
        headers={"Authorization": f"Bearer {anahtar}", "Content-Type": "application/json"})
    return json.load(urllib.request.urlopen(istek, timeout=15))

while True:
    d = json.load(urllib.request.urlopen("http://127.0.0.1:8750/durum"))
    nabiz(ANAHTAR, tur=d["tur"], toplam_tur=d["toplam_tur"], aktif_isci=len(d["isciler"]), protokol="1")
    time.sleep(300)
İpucu

Planlı bakımda durum: "bakimda" ve mesaj gönderin; sayfanız "bilinmiyor" yerine "bakımda" görünür.