Ana içeriğe geç

raw_data

raw_data, sisteme gelen paketin ilk ve en ham journal kaydıdır. Bu tablonun görevi accepted veri üretmek değil, giriş izini kaybetmemektir.

Bu tablo kabul zincirinin başlangıç noktasıdır. Ingest servisi paketi aldığı anda, doğrulama/parse/duplicate kontrolünden önce tüm paketleri bu tabloya yazar. Böylece parse başarısız veya duplicate olan paketler de kaybolmadan geriye dönük incelenebilir. Firmware ve operasyon ekipleri cihazın gerçekten ne gönderdiğini bu kayıt üzerinden görür.

streams yalnız accepted olayları taşırken raw_data acceptance öncesi journal görevini üstlenir. Bu nedenle accepted olmayan paketler de burada görünür olmalıdır. Kısaca: giriş izi, debug verisi ve kabul öncesi ham payload geçmişi bu tabloda tutulur.

Bu tablo canonical measurement kolonlarını, state özetini, ledger sonucunu veya rule engine state'ini tutmaz. Kısaca: accepted zincirin işlenmiş çıktıları burada değildir.

FK Davranis Notlari

Bu tabloyu referanslayan FKON DELETEON UPDATENot
streams.raw_id -> raw_data.idSET NULLCASCADERaw kaydi temizlense de accepted stream tarihcesi korunur.

Retention Uyumu

  • raw_data retention politikasi streams ile birlikte ele alinir.
  • Varsayilan operasyonel kural: raw verisi, accepted zincir dogrulama ve adli inceleme ihtiyacini karsilayacak sure boyunca saklanir; bu sure streams tablosundaki 24 aylik retention penceresiyle uyumlu planlanir.
  • Retention degisiklikleri tek tarafli yapilmaz; raw_data ve streams icin birlikte migration/operasyon notu acilir.

Kolonlar

KolonTipNullAnlamı
idinthayırRaw journal kaydının birincil anahtarı
stream_idintevetBu raw kayıttan accepted stream üretildiyse ilgili stream ilişkisi
device_timetimestampevetPayload içinden çözümlenebilen cihaz zamanı
device_idvarchar(21)evetPayload içinden çözümlenebilen cihaz kimliği
client_ipvarchar(45)evetPaketin geldiği IP bilgisi
raw_packtextevetCihazdan geldiği haliyle wire payload
canonical_payload_hashvarchar(64)evetCanonical payload hash'i; duplicate identity kararında kullanılır
pack_sizeintevetHTTP body boyutu
valid_packbooleanhayırParse + schema açısından accepted aday olup olmadığı (DEFAULT: false)
validation_coderaw_validation_codehayırPaket doğrulama sonucu için enum kodu
stream_timetimestamphayırSistemin paketi aldığı/işlediği zaman

validation_code Enum Sözleşmesi

validation_code, serbest metin yerine doğrudan enum değeri taşır. Bu yaklaşım dashboard filtrelerini, hata oranı ölçümlerini ve ingest davranışını tek sözleşmede toplar.

Önerilen kural:

  • valid_pack = true ise validation_code = 'ACCEPTED'
  • valid_pack = false ise validation_code hata enumlarından biri olur
  • validation_code her zaman doludur (NULL kullanılmaz)

Enum kümesi, raw_validation_code tipinde aşağıdaki sabit değerlerden oluşur.

Enum değerleri:

KodNe zaman yazılır?
ACCEPTEDPaket parse + schema + duplicate kontrollerini geçip accepted adayıysa
INVALID_JSONPayload JSON parse edilemediğinde
EMPTY_PAYLOADBody boş veya anlamlı içerik yoksa
PACK_SIZE_EXCEEDEDPaket boyutu kabul edilen sınırı aştığında
MISSING_REQUIRED_FIELDZorunlu alanlardan biri yoksa
INVALID_TIMESTAMPdevice_time parse edilemiyor veya format dışıysa
TIMESTAMP_OUT_OF_RANGEZaman çok geçmişte/gelecekte olup iş kuralını bozuyorsa
DEVICE_ID_MISSINGdevice_id çıkarılamadıysa
DEVICE_ID_FORMAT_INVALIDdevice_id formatı (uzunluk/charset) geçersizse
UNSUPPORTED_COMMANDcommand alanı tanınmayan bir değerse
SCHEMA_VALIDATION_FAILEDCPS schema doğrulaması genel olarak başarısızsa
DUPLICATE_PACKETPaket duplicate identity kontrolünde elenirse

Not: Üretim ortamında yeni hata durumu eklenecekse önce enum migrate edilmeli, sonra ingest kodu güncellenmelidir.

Örnek Kayıtlar

{
"id": 1,
"stream_id": 1,
"device_time": "2026-04-03T10:29:50Z",
"device_id": "46000000C47CA670",
"client_ip": "10.10.1.25",
"raw_pack": "{\"command\":\"timed\",\"device_id\":\"46000000C47CA670\",\"Payload\":{\"VRMS\":[229.4,228.9,230.1],\"IFUND\":[42.3,41.8,42.6]}}",
"canonical_payload_hash": "a1f4d497e3154d2a45c4e23d0bb7f7d798a6b9f4d915cb3dcb9a6ea16f1020ce",
"pack_size": 512,
"valid_pack": true,
"validation_code": "ACCEPTED",
"stream_time": "2026-04-03T10:30:00Z"
}

Özet: Timed telemetry paketi parse/validation sonrası accepted olmuş, stream_id ile accepted zincire bağlanmış.