Ana içeriğe geç

Sistem Konsolu — İşler · Celery

Sistem Konsolu (/console), platform yöneticileri (süper yönetici) için ayrılmış bir kontrol panelidir. İşler · Celery (/console/jobs) sayfası, sistemin arka planda otomatik çalıştırdığı zamanlanmış görevlerin (Celery beat) durumunu izlemenizi, bu görevleri elle (manuel) çalıştırmanızı ve geçmiş çalıştırmalarını görmenizi sağlar.

Bu sayfa kimin için?

İşler · Celery sayfası yalnızca süper yönetici yetkisine sahip platform operatörlerine açıktır. Firma (tenant) kullanıcıları bu ekranı görmez.

Sayfa dört bölümden oluşur:

  1. Worker & Kuyruk Durumu — arka plan işçisinin (Celery worker) canlı olup olmadığını (1/1 gibi) ve üç iş kuyruğunun (default / ota / cleanup) o anda kaç bekleyen iş tuttuğunu gösteren canlı göstergeler.
  2. Manuel Tetikleme — izin verilen bir işi seçip "Çalıştır" ile hemen tetiklemenizi sağlar (aşağıda ayrıntılı).
  3. Beat Zamanlaması — tüm zamanlanmış işlerin takvimi (hangi iş, hangi sıklıkta, hangi kuyrukta). Tetiklenebilir işlerin satırında ayrıca satır-içi "Çalıştır" düğmesi bulunur; satıra tıklamak ise Çalıştırma Geçmişi'ni o işe göre filtreler (aşağıda ayrıntılı).
  4. Çalıştırma Geçmişi — her işin gerçek çalıştırma kayıtları; satıra tıklayınca çalıştırma detayı (tam hata metni dahil) açılır (aşağıda ayrıntılı).

Manuel Tetikleme nedir?

Normalde her iş, Beat Zamanlaması'ndaki takvimine göre kendiliğinden çalışır (örneğin "5 dakikada bir" veya "her gün 04:00"). Manuel Tetikleme, bir sonraki zamanlı çalışmayı beklemeden bir işi "şimdi çalıştır" demenin kısayoludur. Tetiklemenin iki yolu vardır ve ikisi de aynı işi yapar:

  • Manuel Tetikleme bölümünden işi seçip Çalıştır.
  • Beat Zamanlaması tablosunda ilgili işin satırındaki satır-içi "Çalıştır" düğmesi (yalnızca tetiklenebilir işlerde görünür).

İşi seçtiğinizde sistem onu ilgili kuyruğa bırakır ve size bir iş kimliği (task ID) ile "İş kuyruğa alındı" bildirimi gösterir. İş asenkron çalışır; sonucunu birkaç saniye sonra aşağıdaki Çalıştırma Geçmişi bölümünde (Başarılı / Hata) görebilirsiniz. Manuel tetiklediğiniz çalıştırmalar geçmişte "Manuel" etiketiyle, otomatik (zamanlı) olanlar "Beat (otomatik)" etiketiyle görünür.

Manuel tetiklemek güvenli midir?

Manuel Tetikleme listesinde yalnızca tekrar çalıştırılması güvenli olan işler bulunur. Bunların hepsi idempotent'tir — yani aynı işi arka arkaya birkaç kez çalıştırmak veriyi bozmaz, çift kayıt veya çift alarm üretmez (çoğu iş "değişen bir şey varsa güncelle, yoksa hiçbir şey yapma" mantığıyla çalışır). Belirli bir tesisat/cihaz/gateway kimliği gerektiren, yanlış kapsamda çalışabilecek işler bilerek listeye alınmamıştır.

Bazı işler cihazlara/dış sistemlere komut gönderir

Listedeki işlerin çoğu yalnızca veritabanını okur/günceller. Ancak bazıları cihazlara MQTT komutu (OTA güncelleme, yapılandırma, batarya okuma) gönderir veya dağıtım şirketi (DSO) sistemine bağlanır. Bunlar aşağıdaki tabloda "Yan etki" sütununda açıkça belirtilmiştir; tetiklemeden önce bu sütunu okuyun.


Tetiklenebilir işler (özet tablo)

İş (Beat adı)Ne yapar (kısa)ZamanlamaTetiklenince yan etki
reconcile-device-statusCihaz online/offline durum etiketini son veri zamanına göre düzeltir (kendi kendini iyileştirme).5 dkSadece DB (cihaz durumu). Alarm/bildirim yok.
check-device-offlineVeri göndermeyen cihazlara "çevrimdışı" alarmı açar, geri dönen cihazların alarmını kapatır.5 dkDB + bildirim (e-posta/SMS/WhatsApp/push).
check-snoozed-alarmsErteleme (snooze) süresi dolan alarmları yeniden açar ve bildirir.5 dkDB + bildirim.
check-battery-soh-declineBatarya sağlık durumunda (SOH) hızlı düşüşü tespit edip alarm açar.Her gün 06:00DB + bildirim. Otomatik kapatmaz.
check-scheduled-otaZamanı gelmiş planlı firmware (OTA) güncellemelerini başlatır.5 dkDB + cihaza MQTT OTA komutu (firmware güncelleme).
check-ota-timeoutsTakılı kalmış (30 dk+) OTA işlerini "zaman aşımı" yapıp gateway kilidini temizler.10 dkDB + MQTT (kalıcı OTA komutunu temizler).
osos-sync-hourlyTüm OSOS bağlantılarının saatlik tüketim okumalarını DSO'dan çeker.Saat başıDış DSO API + DB (sayaç okuma UPSERT).
osos-drift-dailyDSO'daki tesisat listesi ile sistemdeki listeyi karşılaştırıp farkları kaydeder.Her gün 04:30Dış DSO API + DB (drift logu).
osos-energy-indices-dailyBir önceki günün kümülatif OBIS endekslerini DSO'dan çeker. (Şu an kapalı bayrak arkasında.)Her gün 05:30Bayrak kapalıyken yan etki yok. Açıkken: Dış DSO API + DB.
reactive-ratio-sliding-window-alarmsSon 24 saatlik tüketimden reaktif oranı hesaplayıp eşik aşımına alarm açar/kapatır.5 dkDB + bildirim.
check-bms-identitySofar HYD invertörlere "batarya kimliğini oku" komutu gönderir (tetikleyici).Her gün 04:00Cihaza MQTT okuma komutu. DB yazımı yok.
push-rawconfig-to-gatewaysTüm aktif gateway'lere güncel cihaz yapılandırmasını yeniden gönderir (güvenlik ağı).30 dkCihaza MQTT yapılandırma push. DB yazımı yok.
calculate-daily-energy-summariesBir önceki günün enerji özetini (üretim/tüketim/şarj vb.) hesaplar.Her gün 00:30Sadece DB (günlük özet UPSERT).
cleanup-old-measurements(Henüz devrede değil — taslak.)Her gün 03:00Yan etki yok (no-op).
purge-old-task-runsÇalıştırma Geçmişi tablosunu temizler: orphan "Sürüyor" satırlarını kapatır + 45 günden eskileri siler.Her gün 03:30Sadece DB (task_runs bakımı).

İşlerin ayrıntıları (gruplara göre)

Alarm işleri

  • reconcile-device-status — Cihazların online/offline durumunu son veri gönderme zamanına göre iki yönlü düzeltir: online görünüp belirlenen süre (varsayılan 5 dk) veri göndermeyeni offline'a, offline görünüp yeniden veri göndereni online'a çevirir. Yalnızca modbus kaynaklı cihazlara dokunur; operatörün elle kapattığı (devre dışı) cihazlara dokunmaz. Yalnızca durum etiketini düzeltir — alarm açmaz/kapatmaz, bildirim göndermez. Ne zaman elle çalıştırılır? Bir cihaz gerçekte çevrimdışı olduğu hâlde panelde hâlâ çevrimiçi (ya da tersi) görünüyorsa, modbus poller kesintisi sonrası takılı kalan durumları temizlemek için.

  • check-device-offline — "Cihaz çevrimdışı" alarm kuralı tanımlı cihazlardan son 5 dakikadır veri göndermeyenlere alarm açar; yeniden bağlanan cihazın alarmını otomatik kapatır. Aynı cihaz için açık alarm varsa yenisini açmaz, yalnızca sayacını artırır. Açık/kapanan alarmlar için ilgili kuralın kanallarına (e-posta/SMS/WhatsApp/push) bildirim gider.

  • check-snoozed-alarms — Kullanıcının geçici sustur(snooze)duğu alarmlardan süresi dolanları yeniden "açık" yapar ve yeniden bildirir. Süresi dolmamışlara dokunmaz.

  • check-battery-soh-decline — Batarya sağlık durumunda (SOH) hızlı düşüşü kontrol eder: kuralda belirtilen gün öncesine göre ortalama SOH düşüşü eşiği (ör. %5) aşıyorsa alarm açar. Tasarım gereği bu alarmı otomatik kapatmaz (Li-ion SOH kalıcı düşer). Açık alarm varsa yalnızca sayaç/ölçüm günceller.

OTA (firmware güncelleme) işleri

  • check-scheduled-ota — İleri bir tarihe planlanmış firmware güncellemelerinden zamanı gelenleri (en fazla 50 adet) başlatır: durumu "devam ediyor" yapar ve ilgili gateway'lere MQTT ile gerçek OTA güncelleme komutu gönderir. Yani bu işi tetiklediğinizde, zamanı gelmiş planlı güncellemeler cihazlara fiilen gönderilir.

  • check-ota-timeouts — "İndiriliyor/devam ediyor" durumunda 30 dakikadan uzun takılı kalan OTA işlerini "zaman aşımı" yapar, gateway'in OTA kilidini sıfırlar ve cihaza gönderilmiş kalıcı (retained) OTA komutunu temizler. Böylece tıkanmış bir güncelleme cihazı sonsuza kadar meşgul bırakmaz.

OSOS (sayaç senkronu) işleri

  • osos-sync-hourly — Tüm tenant'ların otomatik-senkronu açık OSOS bağlantılarını gezer ve her biri için DSO sayaç sistemine bağlanıp ilgili dönemin saatlik tüketim okumalarını çeker, idempotent şekilde kaydeder. Yeni hesaplama yapmaz; sadece veri çeker. Her bağlantıya "son senkron" özeti yazılır (arayüzdeki son senkron rozeti budur).

  • osos-drift-daily — DSO'daki güncel tesisat listesini sistemdeki kayıtlı liste ile karşılaştırır ve farkları (yeni/kaybolan/geri dönen tesisat) operasyonel kayıt olarak yazar. DSO'ya erişilemezse o bağlantı için işlem yapılmaz (erişilemeyen DSO, tesisat kaybı sayılmaz).

  • osos-energy-indices-daily — Bir önceki günün kümülatif OBIS endekslerini (aktif tüketim + reaktif endüktif/kapasitif) DSO'dan çeker. Aşağıdaki uyarıya bakın.

    osos-energy-indices-daily şu an "karanlık başlatma" (dark-launch) bayrağı arkasında

    Bu iş bir özellik bayrağıyla (OSOS_ENERGY_INDEX_ENABLED) korunur ve varsayılan olarak kapalıdır. Bayrak kapalıyken manuel tetiklerseniz iş hiçbir DSO çağrısı/yazma yapmadan boşa döner (no-op). Kod tamdır; yalnızca bayrakla etkinleştirilmeyi bekler.

Diğer işler

  • reactive-ratio-sliding-window-alarms — Her aktif reaktif oran politikası için ilgili cihazların son 24 saatlik ölçümlerinden (en yüksek−en düşük sayaç farkı + TEDAŞ formülü) reaktif oranı hesaplar; eşik aşılırsa alarm açar, normale dönerse kapatır. Cihazların oran kolonlarını boş (NULL) gönderdiği durumlarda anlık motorun kaçırdığı ihlalleri tüketim farkından yakalamak için vardır. Açma/kapatma kararlarında ilgili kanallara bildirim gider.

  • check-bms-identity — Sistemdeki aktif tüm Sofar HYD (hibrit batarya) invertörlere, gateway üzerinden "batarya kimlik bilgilerini oku" MQTT komutu gönderir. Yalnızca okuma sürecini başlatan tetikleyicidir; gelen veriyi kendisi işlemez (asıl yazım, yanıtı işleyen MQTT abonesinde olur). Veritabanına yazmaz.

  • push-rawconfig-to-gateways — Aktif tüm MQTT gateway'lere güncel cihaz yapılandırmasını (rawconfig) yeniden gönderir. Broker'ın saklı (retained) mesajı kaybetmesi durumunda gateway'lerin yapılandırmasız kalmamasını sağlayan bir güvenlik ağıdır. Veritabanına yalnızca okuma yapar.

  • calculate-daily-energy-summaries — Bir önceki günün enerji özetini hesaplar: her cihazın kümülatif sayaç değerlerinden (gün-sonu − gün-başı) PV üretimi, tüketim, şebeke çekiş/veriş, batarya şarj/deşarj ve aktif/reaktif enerji miktarlarını çıkarıp günlük özet tablosuna yazar (rapor ve dashboard'lar bunu kullanır). Aynı gün için tekrar çalıştırılırsa mevcut satırı günceller (çift kayıt olmaz). Not: 01:00'deki PV verim anomali kontrolü bu işin yazdığı taze günlük PV verisine bağımlıdır.

  • cleanup-old-measurements

    Bu iş henüz devrede değil

    Sahiplenilmemiş (unclaimed) cihazların eski ölçümlerini temizlemek için tasarlanan bu iş şu an gerçek bir iş yapmıyor — gereken veri modeli henüz oluşturulmadığından kodda taslak (stub) durumundadır. Tetiklendiğinde hiçbir veri silmeden "atlandı" (skipped) döner. Listede görünür ama manuel tetiklemenin pratik bir faydası yoktur.

  • purge-old-task-runsÇalıştırma Geçmişi'ni besleyen task_runs tablosunun bakımını yapar. İki iş yürütür: (1) Tamiratçı (reaper) — bir worker çökmesi/zaman aşımı nedeniyle yarıda kalıp kalıcı "Sürüyor" görünen eski kayıtları "Başarısız" olarak işaretler (böylece geçmişte asılı "Sürüyor" satırı kalmaz); (2) Temizlik (purge) — varsayılan 45 günden eski çalıştırma kayıtlarını siler (yüksek hacimli bu tablo sınırsız büyümesin).


Çalıştırma Geçmişi

Çalıştırma Geçmişi, işlerin gerçek çalıştırma kayıtlarını gösteren bir tablodur. Her satır beş bilgi taşır:

SütunAçıklama
GörevÇalışan işin adı (ve teknik çalıştırma kimliği).
Tetikİş nasıl başladı: Beat (otomatik) (zamanlı) veya Manuel (sizin elle tetiklediğiniz).
Süreİşin ne kadar sürdüğü (ör. "0.7 sn"). Hâlâ sürüyorsa boş (—).
SonuçBaşarılı / Hata / Sürüyor (henüz bitmemiş).
Başladıİşin başlama zamanı.

Liste en yeni çalıştırma en üstte olacak şekilde sıralanır ve yaklaşık 20 saniyede bir otomatik tazelenir. Zamanlanmış işler sürekli çalıştığı için tabloda birkaç dakika içinde gerçek kayıtlar belirir.

Filtreleme (Sonuç + tarih aralığı)

Tablonun üstündeki filtre çubuğu ile geçmişi daraltabilirsiniz (filtreler birleşir; filtre değişince liste ilk sayfaya döner):

  • Sonuç — Tümü / Başarılı / Hata / Sürüyor. "Bu iş son günlerde hiç hata verdi mi?" sorusu için Hata seçin.
  • Başlangıç / Bitiş — Tarih aralığı ile süz (başlama zamanına göre; gün bazında — başlangıç günün 00:00'ı, bitiş günün sonu dahil).

Satır detayı (hata inceleme + yeniden çalıştırma)

Geçmişteki herhangi bir satıra tıkladığınızda sağdan bir çalıştırma detayı paneli açılır:

  • Görev adı, tetik türü, sonuç, başlama zamanı ve süre bir arada.
  • Çalıştırma kimliği (task ID) — kopyalanabilir; destek/log incelemesinde bu kimlikle arama yapılır.
  • Hata satırlarında tam hata metni (traceback) kaydırılabilir bir kutuda gösterilir — tabloya sığmayan uzun hataların tamamını burada okursunuz.
  • Yeniden çalıştır — işin yeni bir çalıştırmasını hemen kuyruğa alır (Manuel Tetikleme ile birebir aynı işlem; yeni çalıştırma geçmişte "Manuel" etiketiyle görünür). Bu düğme yalnızca manuel tetiklenebilir (whitelist'te olan) işlerde görünür — bir hata satırını inceleyip düzeltme sonrası işi yeniden denemenin en kısa yoludur.

Tek işe göre filtreleme

Beat Zamanlaması tablosunda bir işin satırına tıkladığınızda, Çalıştırma Geçmişi yalnızca o işin kayıtlarına daralır ve üstte işin adını taşıyan bir filtre çipi belirir; ile temizlenir. "Bu iş en son ne zaman çalıştı, başarılı mıydı?" sorusunun en hızlı yanıtı budur. İş çipi, Sonuç ve tarih filtreleriyle birlikte kullanılabilir.

Saklama süresi

Çalıştırma Geçmişi 45 gün saklanır; daha eski kayıtlar her gece 03:30'da otomatik silinir (purge-old-task-runs). Bir worker çökmesi sonrası kalıcı "Sürüyor" görünen kayıtlar da aynı bakım işiyle "Başarısız"a çevrilir.