Browse Source

feat: implement sms status monitoring

clovis 2 months ago
parent
commit
8cca45ce6e

+ 36 - 0
alembic/versions/2025091833_add_in_server_probe_4e48e5c634f0.py

@@ -0,0 +1,36 @@
+"""edit_datetime_in_server_probe
+
+Revision ID: 4e48e5c634f0
+Revises: 466d86d3edac
+Create Date: 2025-09-18 19:33:58.248412
+
+"""
+from alembic import op
+import sqlalchemy as sa
+from sqlalchemy.dialects import postgresql
+
+# revision identifiers, used by Alembic.
+revision = '4e48e5c634f0'
+down_revision = '466d86d3edac'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+    # ### commands auto generated by Alembic - please adjust! ###
+    op.create_table(
+        "server_status",
+        sa.Column("id", sa.Integer(), nullable=False),
+        sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False),
+        sa.Column("host", sa.String(), nullable=False),
+        sa.Column("user_agent", sa.String(), nullable=True),
+        sa.PrimaryKeyConstraint("id"),
+    )
+    # ### end Alembic commands ###
+
+
+def downgrade():
+    # ### commands auto generated by Alembic - please adjust! ###
+    op.drop_table("server_status")
+    # ### end Alembic commands ###
+

+ 4 - 2
app/api/endpoints/sms_sender.py

@@ -89,6 +89,7 @@ async def update_status(
         status = ServerStatus(id=1)
 
     status.host = request.client.host
+    status.updated_at = datetime.datetime.now(datetime.timezone.utc)
     status.user_agent = request.headers.get("user-agent", "unknown")
     session.add(status)
     session.commit()
@@ -106,12 +107,13 @@ async def get_status(
 ):
     """Get the latest status of the SMS server"""
     status: ServerStatus | None = session.query(ServerStatus).filter_by(id=1).first()
-    now = datetime.datetime.now()
+    now = datetime.datetime.now(datetime.timezone.utc)
     if not status:
         return SMSServerStatus(
             updated_at=now, host="N/A", user_agent="N/A", message=EnumServerStatus.INVALID
         )
     else:
+
         msg = (
             EnumServerStatus.INACTIVE
             if (now - status.updated_at).total_seconds()
@@ -119,7 +121,7 @@ async def get_status(
             else EnumServerStatus.ACTIVE
         )
         return SMSServerStatus(
-            updated_at=status.updated_at,
+            updated_at=status.updated_at.isoformat(),
             host=status.host,
             user_agent=status.user_agent,
             message=msg,

+ 1 - 1
app/models.py

@@ -232,6 +232,6 @@ class ServerStatus(Base):
     __tablename__ = "server_status"
     # Use a fixed ID to ensure we only ever have one row
     id = Column(Integer, primary_key=True, default=1)
-    updated_at = Column(DateTime, nullable=False, default=datetime.now, onupdate=func.now())
+    updated_at = Column(DateTime(timezone=True), nullable=False, default=datetime.now, onupdate=func.now())
     host = Column(String, nullable=False)
     user_agent = Column(String)