Skip to main content

E2E Test Datasi (Ingest -> Rule -> Aksiyon)

Bu sayfa, tek bir senaryoda ingestten baslayip rule tetikleme ve aksiyon uretimine kadar veri akisinin dogrulanmasi icin referans test data setini verir.

Senaryo Kodu: E2E-001-HIGH-CURRENT

Hedef akis:

  1. Raw paket journal'a yazilir.
  2. Paket accepted olur ve streams kaydi olusur.
  3. measurements_current IFUND degerleri esigi asar.
  4. Rule Engine, rule_group_id=1 icin trigger uretir.
  5. rule_events kaydi olusur.
  6. rule_actions baglantisina gore inbox bildirimi yazilir.
  7. device_rule_state active duruma gecer.
  8. logs tablosunda ingest + rule + push olaylari gorulur.

On Kosullar

Bu veri seti asagidaki mevcut sozluk/konfig kayitlarinin oldugunu varsayar:

  • services.id = 2 (ingest), 4 (rule_engine), 5 (push_worker)
  • rule_groups.id = 1 (Yuksek Akim Alarmi)
  • rules.id IN (1,2,3) (IFUND_R/S/T duration)
  • rule_group_actions.rule_group_id = 1
  • rule_group_actions.trigger_action_id = 1
  • rule_actions.id = 1 (send_inbox_message = true)
  • devices.id = '46000000C47CA670'

Seed Veri Seti (SQL)

-- E2E-001: raw packet (accepted)
INSERT INTO raw_data (
id,
stream_id,
device_time,
device_id,
client_ip,
raw_pack,
canonical_payload_hash,
pack_size,
valid_pack,
validation_code,
stream_time
) VALUES (
101,
101,
'2026-04-09T10:29:50Z',
'46000000C47CA670',
'10.10.1.25',
'{"command":"timed","device_id":"46000000C47CA670","Payload":{"IFUND":[46.4,46.1,46.6]}}',
'e2e001c7f6a18d91a1d0d09c5dbf5f81235df04fd7f20d522f4a2f6e4c1c101',
534,
true,
'ACCEPTED',
'2026-04-09T10:30:00Z'
);

-- E2E-001: accepted stream
INSERT INTO streams (
id,
device_id,
message_type_id,
sim_id,
ip_address,
payload_size,
process_time_ms,
device_time,
stream_time,
raw_id,
ledger_status
) VALUES (
101,
'46000000C47CA670',
1,
1,
'10.10.1.25',
534,
17.3,
'2026-04-09T10:29:50Z',
'2026-04-09T10:30:00Z',
101,
'written'
);

-- E2E-001: current measurement segment
INSERT INTO measurements_current (
stream_id,
device_id,
sequence_no,
device_time,
sample_period_sec,
is_valid,
ifund_r,
ifund_s,
ifund_t,
create_time,
update_time
) VALUES (
101,
'46000000C47CA670',
9001,
'2026-04-09T10:29:50Z',
900,
true,
46.4,
46.1,
46.6,
'2026-04-09T10:30:00Z',
'2026-04-09T10:30:00Z'
);

-- E2E-001: action output message
INSERT INTO inbox (
id,
type,
sender_id,
receiver_id,
device_id,
title,
message,
tags,
payload,
push_state,
push_sent_at,
create_time,
update_time
) VALUES (
101,
'alert',
NULL,
NULL,
'46000000C47CA670',
'E2E-001 Yuksek Akim Alarmi',
'IFUND_R/S/T degerleri 45A esigini asti.',
'{"scenario":"E2E-001","severity":"high"}',
'{"push_template":{"code":"DEVICE_ALARM","version":1,"locale":"tr"}}',
true,
'2026-04-09T10:30:05Z',
'2026-04-09T10:30:05Z',
'2026-04-09T10:30:05Z'
);

-- E2E-001: trigger event
INSERT INTO rule_events (
id,
device_id,
rule_group_id,
event_type,
measurement_stream_id,
message_id,
details,
create_time
) VALUES (
101,
'46000000C47CA670',
1,
'triggered',
101,
101,
'{"scenario":"E2E-001","reason":"IFUND_R/S/T > 45A for 300s","action_id":1}',
'2026-04-09T10:30:05Z'
);

-- E2E-001: state projection
INSERT INTO device_rule_state (
id,
device_id,
rule_group_id,
is_triggered,
trigger_count,
last_trigger_time,
last_reset_time,
last_event_id,
update_time
) VALUES (
101,
'46000000C47CA670',
1,
true,
1,
'2026-04-09T10:30:05Z',
NULL,
101,
'2026-04-09T10:30:05Z'
);

-- E2E-001: ops logs
INSERT INTO logs (
id,
level_id,
service_id,
event_code,
device_id,
user_id,
stream_id,
message,
details,
create_time
) VALUES
(
101,
2,
2,
'STREAM_ACCEPTED',
'46000000C47CA670',
NULL,
101,
'E2E-001 packet accepted',
'{"scenario":"E2E-001","raw_id":101}',
'2026-04-09T10:30:00Z'
),
(
102,
2,
4,
'RULE_TRIGGERED',
'46000000C47CA670',
NULL,
101,
'E2E-001 high current rule triggered',
'{"scenario":"E2E-001","rule_group_id":1,"event_id":101}',
'2026-04-09T10:30:05Z'
),
(
103,
2,
5,
'PUSH_SENT',
NULL,
1,
NULL,
'E2E-001 push sent',
'{"scenario":"E2E-001","message_id":101}',
'2026-04-09T10:30:06Z'
);

Dogrulama Sorgulari

-- V1: ingest -> stream bagi
SELECT r.id AS raw_id, r.stream_id, s.id AS stream_id, s.device_id, s.ledger_status
FROM raw_data r
JOIN streams s ON s.id = r.stream_id
WHERE r.id = 101;

Beklenen: raw_id=101, stream_id=101, ledger_status='written'.

-- V2: stream -> kural tetik
SELECT s.id AS stream_id, mc.ifund_r, mc.ifund_s, mc.ifund_t, re.id AS event_id, re.event_type
FROM streams s
JOIN measurements_current mc ON mc.stream_id = s.id
JOIN rule_events re ON re.measurement_stream_id = s.id
WHERE s.id = 101;

Beklenen: ifund_* > 45, event_type='triggered'.

-- V3: event -> aksiyon (inbox)
SELECT re.id AS event_id, re.rule_group_id, i.id AS inbox_id, i.title, i.push_state
FROM rule_events re
JOIN inbox i ON i.id = re.message_id
WHERE re.id = 101;

Beklenen: inbox_id=101, push_state=true.

-- V4: state projection dogrulama
SELECT drs.device_id, drs.rule_group_id, drs.is_triggered, drs.trigger_count, drs.last_event_id
FROM device_rule_state drs
WHERE drs.id = 101;

Beklenen: is_triggered=true, trigger_count=1, last_event_id=101.

-- V5: servis log zinciri
SELECT l.id, l.service_id, l.event_code, l.stream_id, l.create_time
FROM logs l
WHERE l.id IN (101,102,103)
ORDER BY l.id;

Beklenen: STREAM_ACCEPTED -> RULE_TRIGGERED -> PUSH_SENT sirasiyla 3 kayit.

Basarisizlik Simulasyonu (Opsiyonel)

Ayni payload bir daha gelirse duplicate davranisi icin su beklenir:

  • raw_data yeni satir alir (validation_code='DUPLICATE_PACKET').
  • streams yeni kayit almaz.
  • rule_events yeni trigger uretmez.
  • inbox yeni alarm mesaji uretmez.

Bu kontrol, idempotency ve duplicate onleme kurallarinin birlikte calistigini dogrular.