mirror of
https://github.com/ferdzo/iotDashboard.git
synced 2026-04-05 17:16:26 +00:00
DB Writer fixes and compose.yml update
This commit is contained in:
@@ -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:
|
||||
|
||||
30
services/db_write/src/models.py
Normal file
30
services/db_write/src/models.py
Normal 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})>"
|
||||
Reference in New Issue
Block a user