From 8367ba030a840296748c4e27162a0bbbe4dbdb9f Mon Sep 17 00:00:00 2001
From: Artur Borecki
Date: Thu, 5 Mar 2026 22:33:29 +0100
Subject: [PATCH] --wip-- [skip ci]
---
src/judas_server/backend/backend_server.py | 10 +++++++
src/judas_server/backend/client.py | 3 ++
.../handler/telemetry/initial_handler.py | 30 +++++++++++++++++++
.../web/templates/client_details.html | 4 +++
4 files changed, 47 insertions(+)
create mode 100644 src/judas_server/backend/handler/telemetry/initial_handler.py
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) }}
+