Ana içeriğe geç

Automation Servisi

Automation Servisi, planlanan zamanlarda cihazlara komut gönderimi için scheduler/orchestrator katmanıdır.

Sorumluluk

  • Zamanlanmış görevleri (cron/interval) yönetmek
  • Görev tetik anında komut isteği üretmek
  • Çakışan komutları önlemek
  • Retry/backoff yönetmek
  • Görev yürütme geçmişi tutmak
  • Manual trigger ve scheduled trigger akışını birleştirmek

Görev Modeli

automation_jobs

KolonTipNot
idbigint PK
device_idvarchar(21)
namevarchar(100)
schedule_typevarchar(16)cron/interval/once
schedule_exprvarchar(64)cron veya interval tanımı
timezonevarchar(64)varsayılan UTC
command_typevarchar(32)
command_payloadjsonb
enabledboolean
priorityintegerçakışma çözümünde
valid_from, valid_totimestamptzaktiflik penceresi
last_run_attimestamptz
next_run_attimestamptz
created_at, updated_attimestamptz

automation_job_runs

KolonTipNot
idbigint PK
job_idbigint FKautomation_jobs.id
scheduled_attimestamptz
trigger_typevarchar(16)scheduled/manual/retry
statusvarchar(16)queued/sent/acked/failed
idempotency_keyvarchar(128)job_id + scheduled_at
error_codevarchar(64)
error_messagetext
created_at, updated_attimestamptz

Akış

Topic ve Event Standardı

  • Topic:
    • cinga.automation.command.requested
    • cinga.automation.job.completed
    • cinga.automation.job.failed
  • Event:
    • automation.command.requested.v1
    • automation.job.completed.v1
    • automation.job.failed.v1

Not: Event payload standardı arşiv referansı: /projects/cinga/backend/architecture/event-envelope.

Event Örneği

automation.command.requested.v1

{
"event": "automation.command.requested.v1",
"meta": {
"schema_version": 1,
"trace_id": "auto-9f3f...",
"producer_service": "automation-service",
"produced_at": "2026-03-12T21:15:02.020Z",
"process_ms": 8
},
"context": {
"device_id": "400000011D081B70"
},
"data": {
"job_id": 88,
"run_id": 9122,
"trigger_type": "scheduled",
"command_type": "PUMP_START",
"command_payload": {"duration_sec": 120},
"scheduled_at": "2026-03-12T21:15:00Z",
"idempotency_key": "88:2026-03-12T21:15:00Z"
},
"error": null
}

Çakışma ve Öncelik Kuralları

  • Aynı cihaza eşzamanlı komut yok (device command lock).
  • Manual trigger ile scheduled trigger çakışırsa manual öncelik.
  • Aynı anda birden çok schedule tetiklenirse küçük priority değeri önce çalışır.
  • Çalışamayan görev queued kalır, lock açılınca tekrar değerlendirilir.

Retry / Backoff Politikası

  • Retryable hata durumunda exponential backoff (1m, 5m, 15m).
  • Maksimum retry sayısı: 3 (öneri).
  • Limit aşımında automation.job.failed.v1 üretilir.
  • Aynı idempotency_key ile duplicate run açılmaz.

Güvenlik ve Operasyon

  • Job create/update işlemleri yalnız admin/operator rolleriyle yapılır.
  • Komut payload whitelist ile doğrulanır (command_type bazlı schema).
  • Tüm job değişiklikleri audit log’a yazılır.
  • Timezone karmaşasını önlemek için schedule hesapları UTC normalize edilir.

SLO (Öneri)

MetrikHedef
scheduler drift< 5s
job dispatch success> 99%
duplicate run rate< 0.1%
p95 dispatch latency< 200ms

Çıktı

  • Planlı komut üretim hattı
  • Çalışma geçmişi ve hata görünürlüğü