Skip to main content

Automation Servisi SSS

Otomasyon hangi kaynaktan tetiklenebilir?

Birincil kaynak API'dir: kullanıcı UI üzerinden otomasyon oluşturduğunda kayıt doğrudan automations tablosuna yazılır. Sistem dahili işlemler user_id=0 (rezerv sistem kullanıcısı) ile otomasyon kaydı açar. FOTA (yazılım güncelleme) servisi ilerleyen sürümlerde güncelleme komutunu otomasyon üzerinden planlayabilir.

date ve interval tetik tipleri arasındaki fark nedir?

  • date: Belirli bir tarih ve saatte yalnızca bir kez çalışır. Yürütme tamamlandığında automations.status = completed olur.
  • interval: interval_seconds aralıkla tekrar eder. repeat_count değeri dolduğunda veya is_active=false yapıldığında durur. repeat_count=null ise açık uçlu çalışır.

repeat_count=null olan interval otomasyonu ne zaman durur?

Manuel müdahale gerekir: is_active=false yapılması veya otomasyonun cancelled olarak güncellenmesi gerekir. Sistem otomatik olarak durdurmaz.

Aynı cihaza aynı anda birden fazla otomasyon tetiklenirse ne olur?

automations.status = running olarak işaretlenen otomasyon çalışmaya devam eder. Scheduler, status=running durumundaki kayıtları tekrar kuyruğa almaz. Farklı otomasyonlar farklı id'ye sahip olduğundan birbirini engellemez; aynı cihaza eşzamanlı birden fazla komut gönderilebilir. Bunu önlemek gerekiyorsa priority değeri ile sıra belirlenebilir.

device_command_id neden doğrudan komut tipi değil de FK olarak tasarlanmış?

device_commands tablosu komutları standardize eden sözlüktür. Automation kaydı komutun kendisini taşımaz; yalnızca hangi standart komutun çağrılacağını device_command_id ile referans eder. Komutun teknik çözümlemesi ve cihazla konuşma Communication Servisi tarafından yapılır.

Komut payload'ı nasıl oluşturulur?

Automation Servisi payload oluşturmaz. Otomasyon event'i içinde device_command_id ve yürütme bağlamı taşınır. Event'i consume eden Communication Servisi ilgili device_commands kaydını çözer, gerekiyorsa şablonu doldurur ve cihaza gerçek downlink'i gönderir.

is_active=false yapılan otomasyon çalışmaya devam eder mi?

Hayır. Scheduler her tick'te is_active=true filtresi uygular. is_active=false yapılan otomasyon bir sonraki tick'ten itibaren kuyruğa alınmaz. Halihazırda running durumunda olan bir yürütme tamamlanır; yeni yürütme başlatılmaz.

Komut başarısız olursa retry yapılır mı?

Mevcut tasarımda tek bir yürütme kaydı (automation_runs) açılır ve sonucu yazılır. Otomatik retry mekanizması Automation Servisi katmanında yoktur. Başarısız bir otomasyon last_result_code bilgisiyle işaretlenir; interval tipi otomasyonlar bir sonraki tetikleme zamanında yeniden dener. Retry orchestration ihtiyacı Observer servisi üzerinden ele alınabilir.

automation_runs büyümesini nasıl yönetilebilir?

automation_runs tarihsel kayıt tablosudur ve zamanla büyür. Operasyon bakışını optimize etmek için belirli bir yaşı geçen kayıtların arşivlenmesi veya silinmesi (retention policy) önerilir. Mevcut mimari bu politikayı uygulamamaktadır; bir DB job ile dışarıdan yönetilmesi gerekir.

Redis cache ne kadar süre geçerlidir?

Cache TTL uygulama konfigürasyonuna bağlıdır. Yazma işlemi her gerçekleştiğinde (status güncellemesi, yeni run) ilgili cache girdisi invalidate edilir. Cache-aside pattern kullanıldığından DB'deki kayıt her zaman kaynak doğrudur.

Event sözleşmeleri nerede?

Tüm payload detayları için: /projects/qapu/services/automation/event-contracts