refactor: simplify mqtt pipeline state and remove event table
All checks were successful
Deploy to Production / deploy (push) Successful in 4m55s
All checks were successful
Deploy to Production / deploy (push) Successful in 4m55s
This commit is contained in:
@@ -9,7 +9,6 @@ from sqlmodel import Session, col, select
|
||||
from app.models import (
|
||||
TerminalDeviceState,
|
||||
TerminalMessageRaw,
|
||||
TerminalObservationEvent,
|
||||
get_datetime_utc,
|
||||
)
|
||||
|
||||
@@ -34,7 +33,6 @@ def insert_raw_message(
|
||||
payload_sha256=hashlib.sha256(payload).hexdigest(),
|
||||
qos=qos,
|
||||
retain=retain,
|
||||
parse_status="pending",
|
||||
created_at=ts,
|
||||
)
|
||||
session.add(row)
|
||||
@@ -48,7 +46,8 @@ def fetch_pending_rows_for_update(
|
||||
) -> list[TerminalMessageRaw]:
|
||||
statement = (
|
||||
select(TerminalMessageRaw)
|
||||
.where(TerminalMessageRaw.parse_status == "pending")
|
||||
.where(col(TerminalMessageRaw.parsed_at).is_(None))
|
||||
.where(col(TerminalMessageRaw.parse_error).is_(None))
|
||||
.order_by(col(TerminalMessageRaw.received_at))
|
||||
.limit(batch_size)
|
||||
)
|
||||
@@ -61,17 +60,9 @@ def fetch_pending_rows_for_update(
|
||||
return list(rows)
|
||||
|
||||
|
||||
def mark_processing(*, session: Session, row: TerminalMessageRaw) -> None:
|
||||
row.parse_status = "processing"
|
||||
row.parse_attempts += 1
|
||||
row.parse_error = None
|
||||
session.add(row)
|
||||
|
||||
|
||||
def mark_succeeded(*, session: Session, row: TerminalMessageRaw) -> None:
|
||||
row.parse_status = "succeeded"
|
||||
row.parsed_at = get_datetime_utc()
|
||||
row.parse_error = None
|
||||
row.next_retry_at = None
|
||||
session.add(row)
|
||||
|
||||
|
||||
@@ -80,15 +71,13 @@ def mark_failed(
|
||||
session: Session,
|
||||
row: TerminalMessageRaw,
|
||||
parse_error: str,
|
||||
next_retry_at: datetime | None,
|
||||
) -> None:
|
||||
row.parse_status = "failed"
|
||||
row.parsed_at = get_datetime_utc()
|
||||
row.parse_error = parse_error[:1024]
|
||||
row.next_retry_at = next_retry_at
|
||||
session.add(row)
|
||||
|
||||
|
||||
def write_events_and_update_state(
|
||||
def update_device_state_from_events(
|
||||
*,
|
||||
session: Session,
|
||||
row: TerminalMessageRaw,
|
||||
@@ -110,14 +99,6 @@ def write_events_and_update_state(
|
||||
for event in events:
|
||||
payload = event.get("payload", {})
|
||||
event_type = str(event.get("event_type", "unknown"))
|
||||
db_event = TerminalObservationEvent(
|
||||
raw_id=row.id,
|
||||
device_id=row.device_id,
|
||||
event_time=row.received_at,
|
||||
event_type=event_type,
|
||||
payload_json=payload if isinstance(payload, dict) else {"value": payload},
|
||||
)
|
||||
session.add(db_event)
|
||||
|
||||
if event_type == "nmea_gga":
|
||||
state.lat = payload.get("lat")
|
||||
|
||||
Reference in New Issue
Block a user