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.
İş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:
- Worker & Kuyruk Durumu — arka plan işçisinin (Celery worker) canlı olup
olmadığını (
1/1gibi) ve üç iş kuyruğunun (default/ota/cleanup) o anda kaç bekleyen iş tuttuğunu gösteren canlı göstergeler. - Manuel Tetikleme — izin verilen bir işi seçip "Çalıştır" ile hemen tetiklemenizi sağlar (aşağıda ayrıntılı).
- 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ı).
- Ç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 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.
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) | Zamanlama | Tetiklenince yan etki |
|---|---|---|---|
| reconcile-device-status | Cihaz online/offline durum etiketini son veri zamanına göre düzeltir (kendi kendini iyileştirme). | 5 dk | Sadece DB (cihaz durumu). Alarm/bildirim yok. |
| check-device-offline | Veri göndermeyen cihazlara "çevrimdışı" alarmı açar, geri dönen cihazların alarmını kapatır. | 5 dk | DB + bildirim (e-posta/SMS/WhatsApp/push). |
| check-snoozed-alarms | Erteleme (snooze) süresi dolan alarmları yeniden açar ve bildirir. | 5 dk | DB + bildirim. |
| check-battery-soh-decline | Batarya sağlık durumunda (SOH) hızlı düşüşü tespit edip alarm açar. | Her gün 06:00 | DB + bildirim. Otomatik kapatmaz. |
| check-scheduled-ota | Zamanı gelmiş planlı firmware (OTA) güncellemelerini başlatır. | 5 dk | DB + cihaza MQTT OTA komutu (firmware güncelleme). |
| check-ota-timeouts | Takılı kalmış (30 dk+) OTA işlerini "zaman aşımı" yapıp gateway kilidini temizler. | 10 dk | DB + MQTT (kalıcı OTA komutunu temizler). |
| osos-sync-hourly | Tü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-daily | DSO'daki tesisat listesi ile sistemdeki listeyi karşılaştırıp farkları kaydeder. | Her gün 04:30 | Dış DSO API + DB (drift logu). |
| osos-energy-indices-daily | Bir önceki günün kümülatif OBIS endekslerini DSO'dan çeker. (Şu an kapalı bayrak arkasında.) | Her gün 05:30 | Bayrak kapalıyken yan etki yok. Açıkken: Dış DSO API + DB. |
| reactive-ratio-sliding-window-alarms | Son 24 saatlik tüketimden reaktif oranı hesaplayıp eşik aşımına alarm açar/kapatır. | 5 dk | DB + bildirim. |
| check-bms-identity | Sofar HYD invertörlere "batarya kimliğini oku" komutu gönderir (tetikleyici). | Her gün 04:00 | Cihaza MQTT okuma komutu. DB yazımı yok. |
| push-rawconfig-to-gateways | Tüm aktif gateway'lere güncel cihaz yapılandırmasını yeniden gönderir (güvenlik ağı). | 30 dk | Cihaza MQTT yapılandırma push. DB yazımı yok. |
| calculate-daily-energy-summaries | Bir önceki günün enerji özetini (üretim/tüketim/şarj vb.) hesaplar. | Her gün 00:30 | Sadece DB (günlük özet UPSERT). |
| cleanup-old-measurements | (Henüz devrede değil — taslak.) | Her gün 03:00 | Yan 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:30 | Sadece 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ındaBu 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ğilSahiplenilmemiş (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_runstablosunun 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ütun | Açı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.
Ç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.