rule_events
rule_events, alarm olaylarının tarihsel kaydını tutar. device_rule_state yalnız son durumu gösterir; ne zaman trigger oldu, ne zaman reset oldu, ne zaman bildirim üretildi gibi zaman çizgisi bu tabloda yaşar. Her olay bir rule_event.type ile sınıflandırılır ve tetikleyen stream ile üretilen mesaja referans verir.
Yapilacaklar (Append-Only Audit)
-
rule_eventstablosu icin UPDATE/DELETE yasagini DB trigger ile zorunlu hale getir. - Olay degisikligi yerine yalniz yeni event yazma (event-sourcing) modelini migration ile kilitle.
-
create_timeve actor baglami (device_id,rule_group_id) denetim raporunda zorunlu alan olsun. - Olay icerigi (
details) icin schema-version bilgisini zorunlu tut.
FK Davranis Notlari
| FK | ON DELETE | ON UPDATE | Not |
|---|---|---|---|
rule_events.measurement_stream_id -> streams.id | SET NULL | CASCADE | Olay kaydi korunur, tetikleyici stream referansi bosaltilir. |
rule_events.message_id -> inbox.id | SET NULL | CASCADE | Olay kaydi korunur, mesaj referansi opsiyonel kalir. |
Stream silme sonrasi ornek davranis:
measurement_stream_id = 901olan birrule_eventskaydi varkenstreams.id = 901kontrollu prosedurle silinirse, ilgili event satiri korunur vemeasurement_stream_idalaniNULLolur.- Bu davranis olay zaman cizgisini bozmadan stream baglantisini guvenli bicimde dusurur.
rule_event.type Enum Değerleri
| Değer | Anlamı |
|---|---|
triggered | Kural koşulları sağlandı, alarm tetiklendi |
reset | Alarm koşulları ortadan kalktı, reset edildi |
notified | Bildirim üretildi (push, inbox vb.) |
command_sent | Cihaza komut gönderildi |
Kolonlar
| Kolon | Tip | Null | Anlamı |
|---|---|---|---|
id | bigint | hayır | Event birincil anahtarı (auto increment) |
device_id | varchar(21) | hayır | İlgili cihaz; devices.id ile ilişkili |
rule_group_id | int | hayır | İlgili kural grubu; rule_groups.id ile ilişkili |
event_type | rule_event.type | hayır | Olay tipi |
measurement_stream_id | int | evet | Olayı tetikleyen accepted stream; streams.id ile ilişkili |
message_id | bigint | evet | Üretilen inbox mesajı varsa referans; inbox.id ile ilişkili |
details | json | evet | Olayla ilgili açıklayıcı payload |
create_time | timestamp | hayır | Olay zamanı |
Örnek Kayıtlar
- Tetikleme - Yüksek Akım
- Reset - Register Bit
- Tetikleme - Stream Gap
- Bildirim - Yüksek Akım
- Bildirim - Bağlantı Kaybı
- E2E-001 Trigger
{
"id": 1,
"device_id": "46000000C47CA670",
"rule_group_id": 1,
"event_type": "triggered",
"measurement_stream_id": 1,
"message_id": 2,
"details": {
"reason": "IFUND_R, IFUND_S, IFUND_T 45A üstünde 300 sn kaldı",
"max_current_a": 46.8
},
"create_time": "2026-04-03T10:30:00Z"
}
Özet: Grup 1 yüksek akım kuralı stream 1 tarafından tetiklenmiş. Üç faz akımı 45A üstünde 300 saniye kalmış, inbox mesajı 2 üretilmiş.
{
"id": 2,
"device_id": "46000000C47CA670",
"rule_group_id": 2,
"event_type": "reset",
"measurement_stream_id": 2,
"message_id": null,
"details": {
"reason": "Register bit temizlendi",
"register_bit": 3
},
"create_time": "2026-04-02T16:42:00Z"
}
Özet: Grup 2 register bit alarmı reset olmuş. Bit 3 devre dışı olmuş, ama reset için inbox mesajı üretilmemişlüğünü gösterir.
{
"id": 3,
"device_id": "46000000C47CA671",
"rule_group_id": 3,
"event_type": "triggered",
"measurement_stream_id": null,
"message_id": 4,
"details": {
"reason": "7200 saniyedir veri yok",
"last_seen": "2026-04-03T10:00:00Z"
},
"create_time": "2026-04-03T12:00:00Z"
}
Özet: Grup 3 bağlantı kaybı kuralı tetiklendi. 2 saattir stream gelmeyen cihaz tespit edilmiş, inbox mesajı 4 üretilmiş. Stream referans null, çünkü stream yok.
{
"id": 4,
"device_id": "46000000C47CA670",
"rule_group_id": 1,
"event_type": "notified",
"measurement_stream_id": 1,
"message_id": 2,
"details": {
"action_id": 1,
"channel": "inbox_push"
},
"create_time": "2026-04-03T10:30:05Z"
}
Özet: Tetikleme olayından 5 saniye sonra aksiyon 1 çalıştırılmış. Inbox + push kanalı üzerinden bildirim gönderilmiş.
{
"id": 5,
"device_id": "46000000C47CA671",
"rule_group_id": 3,
"event_type": "notified",
"measurement_stream_id": null,
"message_id": 4,
"details": {
"action_id": 3,
"channel": "inbox_push"
},
"create_time": "2026-04-03T12:00:05Z"
}
Özet: Bağlantı kaybı tetiklemesinden 5 saniye sonra aksiyon 3 çalıştırılmış. Bağlantı kaybı bildirimi inbox + push üzerinden gönderilmiş.
{
"id": 101,
"device_id": "46000000C47CA670",
"rule_group_id": 1,
"event_type": "triggered",
"measurement_stream_id": 101,
"message_id": 101,
"details": {
"scenario": "E2E-001",
"reason": "IFUND_R/S/T > 45A for 300s",
"action_id": 1
},
"create_time": "2026-04-09T10:30:05Z"
}
Özet: E2E-001 senaryosunun rule tetik kaydı. Stream, event ve inbox ayni ID zinciriyle takip edilir.