diff --git a/src/judas_server/backend/backend_server.py b/src/judas_server/backend/backend_server.py index cce28a7..7d636bc 100644 --- a/src/judas_server/backend/backend_server.py +++ b/src/judas_server/backend/backend_server.py @@ -8,11 +8,15 @@ import threading import time from typing import TYPE_CHECKING, Any, Final +from judas_protocol.types import TelemetryAction import yaml from judas_protocol import Category, ControlAction, Message from judas_server.backend.client import Client, ClientStatus from judas_server.backend.handler.hello_handler import HelloHandler +from judas_server.backend.handler.telemetry.initial_handler import ( + InitialTelemetryHandler, +) if TYPE_CHECKING: from typing import Callable @@ -67,11 +71,16 @@ class BackendServer: """Initialize message handlers.""" hello_handler = HelloHandler(self) + initial_telemetry_handler = InitialTelemetryHandler(self) self.message_handlers[(Category.CONTROL, ControlAction.HELLO)] = ( hello_handler.handle ) + self.message_handlers[ + (Category.TELEMETRY, TelemetryAction.INITIAL) + ] = initial_telemetry_handler.handle + def _load_known_clients(self) -> dict[str, dict[str, str | float]]: """Load the list of known clients from a YAML file and validate.""" known_clients: dict[str, dict[str, str | float]] = {} @@ -399,4 +408,5 @@ class BackendServer: "addr": client.addr, "last_seen": client.last_seen, "status": client.status, + "initial_telemetry": client.initial_telemetry, } diff --git a/src/judas_server/backend/client.py b/src/judas_server/backend/client.py index 1c20fa2..14390fb 100644 --- a/src/judas_server/backend/client.py +++ b/src/judas_server/backend/client.py @@ -6,6 +6,7 @@ from __future__ import annotations import logging as lg import socket import time +from typing import Any from judas_server.backend.client_status import ClientStatus @@ -41,6 +42,8 @@ class Client: self.inbound: bytes = b"" self.outbound: bytes = b"" + self.initial_telemetry: dict[str, Any] | None = None + def __str__(self) -> str: if self.addr: return f"Client({self.id} ({self.addr[0]}:{self.addr[1]}))" diff --git a/src/judas_server/backend/handler/telemetry/initial_handler.py b/src/judas_server/backend/handler/telemetry/initial_handler.py new file mode 100644 index 0000000..34a21ff --- /dev/null +++ b/src/judas_server/backend/handler/telemetry/initial_handler.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +"""Initial telemetry handler.""" + +from __future__ import annotations + +from typing import TYPE_CHECKING + +from judas_protocol import Message + +from judas_server.backend.handler.base_handler import BaseHandler + +if TYPE_CHECKING: + from judas_server.backend import BackendServer + from judas_server.backend.client import Client + + +class InitialTelemetryHandler(BaseHandler): + """Handles the initial telemetry message from a client.""" + + def __init__(self, backend_server: BackendServer) -> None: + """Initialize the handler.""" + super().__init__(backend_server) + + def handle(self, client: Client, message: Message) -> None: + """Handle the initial telemetry message.""" + self.logger.debug( + f"Handling initial telemetry message from {client}..." + ) + + client.initial_telemetry = message.payload diff --git a/src/judas_server/web/templates/client_details.html b/src/judas_server/web/templates/client_details.html index db9e58d..2fec335 100644 --- a/src/judas_server/web/templates/client_details.html +++ b/src/judas_server/web/templates/client_details.html @@ -18,6 +18,10 @@ Last Seen: {{ client.last_seen }}

+

+ Initial: +

{{ client.initial_telemetry | tojson(indent=2) }}
+