DB Writer fixes and compose.yml update

This commit is contained in:
2025-11-03 15:57:23 +01:00
parent 212b8d39a9
commit d2b707ea5e
6 changed files with 46 additions and 31 deletions

View File

@@ -6,6 +6,7 @@ from sqlalchemy.pool import QueuePool
from src.config import config
from src.schema import TelemetryReading
from src.models import Telemetry
class DatabaseWriter:
@@ -37,9 +38,9 @@ class DatabaseWriter:
session = self.SessionLocal()
try:
# Convert to database objects using the correct field mapping
# Convert dataclass readings to SQLAlchemy Telemetry objects
db_objects = [
TelemetryReading(
Telemetry(
time=reading.time,
device_id=reading.device_id,
metric=reading.metric,
@@ -57,7 +58,7 @@ class DatabaseWriter:
return True
except Exception as e:
self.logger.error(f"Failed to write batch: {e}")
self.logger.error(f"Failed to write batch: {e}", exc_info=True)
session.rollback()
return False
finally:

View File

@@ -0,0 +1,30 @@
"""
SQLAlchemy models for db_write service.
These models mirror the schema in db_migrations/models.py.
Keep them in sync when schema changes occur.
"""
from sqlalchemy import Column, Float, Text, DateTime
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Telemetry(Base):
"""
Time-series telemetry data from devices.
This model is used by the db_write service to insert data.
"""
__tablename__ = "telemetry"
time = Column(DateTime(timezone=True), primary_key=True, nullable=False)
device_id = Column(Text, primary_key=True, nullable=False)
metric = Column(Text, primary_key=True, nullable=False)
value = Column(Float, nullable=False)
unit = Column(Text)
def __repr__(self):
return f"<Telemetry(device={self.device_id}, metric={self.metric}, value={self.value})>"