From 9047f3a02c1fe902c3a696a700537723739ac415 Mon Sep 17 00:00:00 2001 From: James Paul Turner Date: Thu, 17 Jul 2025 17:57:59 +0100 Subject: [PATCH 01/10] New describe driver method. --- src/drunc/session_manager/session_manager.py | 6 +++--- src/drunc/session_manager/session_manager_driver.py | 9 +++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/drunc/session_manager/session_manager.py b/src/drunc/session_manager/session_manager.py index f1c34a2e7..2348666b0 100644 --- a/src/drunc/session_manager/session_manager.py +++ b/src/drunc/session_manager/session_manager.py @@ -49,7 +49,7 @@ def __init__(self, name: str, configuration: SessionManagerConfHandler): self.name = name self.configuration = configuration - def describe(self, request:Request, context:ServicerContext) -> Response: + def describe(self, request: Request, context: ServicerContext) -> Response: """Respond with a description of this session manager service. Args: @@ -97,7 +97,7 @@ def describe(self, request:Request, context:ServicerContext) -> Response: children=[], ) - def list_all_sessions(self, request:Request, context:ServicerContext) -> Response: + def list_all_sessions(self, request: Request, context: ServicerContext) -> Response: """Respond with a list of all active sessions. Args: @@ -132,7 +132,7 @@ def list_all_sessions(self, request:Request, context:ServicerContext) -> Respons children=[], ) - def list_all_configs(self, request:Request, context:ServicerContext) -> Response: + def list_all_configs(self, request: Request, context: ServicerContext) -> Response: """Respond with a list of all available configurations. Args: diff --git a/src/drunc/session_manager/session_manager_driver.py b/src/drunc/session_manager/session_manager_driver.py index bccc196a7..86f99f260 100644 --- a/src/drunc/session_manager/session_manager_driver.py +++ b/src/drunc/session_manager/session_manager_driver.py @@ -1,5 +1,6 @@ """Driver for the session manager service.""" +from druncschema.description_pb2 import NewDescription from druncschema.request_response_pb2 import Description from druncschema.session_manager_pb2 import AllActiveSessions, AllConfigKeys from druncschema.session_manager_pb2_grpc import SessionManagerStub @@ -39,6 +40,14 @@ def create_stub(self, channel: Channel) -> SessionManagerStub: """ return SessionManagerStub(channel) + def new_describe(self) -> DecodedResponse | None: + """Describe the session manager service. + + Returns: + A decoded response object containing the description of the service. + """ + return self.send_command("new_describe", outformat=NewDescription) + def describe(self) -> DecodedResponse | None: """Describe the session manager service. From 2cc654b7b783346234a41661fa60f4440af5e7e2 Mon Sep 17 00:00:00 2001 From: James Paul Turner Date: Thu, 17 Jul 2025 18:13:42 +0100 Subject: [PATCH 02/10] Use new message type in describe backend. --- src/drunc/session_manager/session_manager.py | 46 ++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/src/drunc/session_manager/session_manager.py b/src/drunc/session_manager/session_manager.py index 2348666b0..9cc350fba 100644 --- a/src/drunc/session_manager/session_manager.py +++ b/src/drunc/session_manager/session_manager.py @@ -5,6 +5,7 @@ from pathlib import Path from conffwk import Configuration +from druncschema.description_pb2 import NewCommandDescription, NewDescription from druncschema.request_response_pb2 import ( CommandDescription, Description, @@ -49,6 +50,51 @@ def __init__(self, name: str, configuration: SessionManagerConfHandler): self.name = name self.configuration = configuration + def new_describe( + self, request: Request, context: ServicerContext + ) -> NewDescription: + """Respond with a description of this session manager service. + + Args: + request: The incoming request (not used). + context: The gRPC context (not used). + + Returns: + A response containing the service description. + """ + self.log.debug(f"{self.name} running describe") + + commands = [ + NewCommandDescription( + name="describe", + data_type=["None"], + help="List the methods exposed by this endpoint.", + return_type="request_response_pb2.Description", + ), + NewCommandDescription( + name="list_all_sessions", + data_type=["None"], + help="List all active sessions.", + return_type="session_manager_pb2.AllActiveSessions", + ), + NewCommandDescription( + name="list_all_configs", + data_type=["None"], + help="List all available configurations.", + return_type="session_manager_pb2.AllConfigKeys", + ), + ] + + return NewDescription( + type="session_manager", + name=self.name, + session=self.name, + commands=commands, + children=[], + flag=ResponseFlag.EXECUTED_SUCCESSFULLY, + token=None, + ) + def describe(self, request: Request, context: ServicerContext) -> Response: """Respond with a description of this session manager service. From 2427536ce085f9fd17b5b105a5a876fc74b59a14 Mon Sep 17 00:00:00 2001 From: James Paul Turner Date: Thu, 17 Jul 2025 19:24:00 +0100 Subject: [PATCH 03/10] Gross hack whilst things are changing. --- src/drunc/utils/shell_utils.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/drunc/utils/shell_utils.py b/src/drunc/utils/shell_utils.py index c9b317895..1c2018e64 100644 --- a/src/drunc/utils/shell_utils.py +++ b/src/drunc/utils/shell_utils.py @@ -127,6 +127,12 @@ def __handle_grpc_error(self, error, command): raise error def handle_response(self, response, command, outformat): + # TODO: TEMP HACK -- DON'T FORGET TO FIX THIS!!! + from druncschema.description_pb2 import NewDescription + + if isinstance(response, (NewDescription,)): + return response + dr = DecodedResponse( name=response.name, token=response.token, @@ -221,7 +227,6 @@ def send_command( return self.handle_response(response, command, outformat) - class ShellContext: def _reset(self, name: str, token_args: dict = {}, driver_args: dict = {}): self._console = Console() From 1d9a46178ce5ef0cf99f0abb700fe8f093ae563c Mon Sep 17 00:00:00 2001 From: James Paul Turner Date: Fri, 18 Jul 2025 13:27:18 +0100 Subject: [PATCH 04/10] Use sess man describe with new gRPC types. --- src/drunc/controller/controller.py | 5 +- src/drunc/controller/controller_driver.py | 7 ++- src/drunc/process_manager/process_manager.py | 9 ++- src/drunc/session_manager/session_manager.py | 62 ++----------------- .../session_manager/session_manager_driver.py | 11 +--- src/drunc/utils/shell_utils.py | 13 ++-- 6 files changed, 25 insertions(+), 82 deletions(-) diff --git a/src/drunc/controller/controller.py b/src/drunc/controller/controller.py index a917cf7cc..b1c27a854 100644 --- a/src/drunc/controller/controller.py +++ b/src/drunc/controller/controller.py @@ -14,9 +14,10 @@ Status, ) from druncschema.controller_pb2_grpc import ControllerServicer +from druncschema.description_pb2 import OldDescription from druncschema.generic_pb2 import PlainText, Stacktrace from druncschema.opmon.generic_pb2 import RunInfo -from druncschema.request_response_pb2 import Description, Response, ResponseFlag +from druncschema.request_response_pb2 import Response, ResponseFlag from druncschema.token_pb2 import Token from google.protobuf.any_pb2 import Any @@ -611,7 +612,7 @@ def describe( if execute_on_self: bd = self.describe_broadcast() - d = Description( + d = OldDescription( type="controller", name=self.name, endpoint=self.uri if self.uri is not None else "unknown", diff --git a/src/drunc/controller/controller_driver.py b/src/drunc/controller/controller_driver.py index ecfe2a8c2..dd88d419b 100644 --- a/src/drunc/controller/controller_driver.py +++ b/src/drunc/controller/controller_driver.py @@ -7,8 +7,8 @@ Status, ) from druncschema.controller_pb2_grpc import ControllerStub +from druncschema.description_pb2 import OldDescription from druncschema.generic_pb2 import PlainText -from druncschema.request_response_pb2 import Description from drunc.utils.shell_utils import DecodedResponse, GRPCDriver @@ -51,7 +51,10 @@ def describe( self, addressed_command: AddressedCommand, timeout: int | float = 60 ) -> DecodedResponse: return self.send_command( - "describe", data=addressed_command, outformat=Description, timeout=timeout + "describe", + data=addressed_command, + outformat=OldDescription, + timeout=timeout, ) @pack_empty_addressed_command diff --git a/src/drunc/process_manager/process_manager.py b/src/drunc/process_manager/process_manager.py index 52ce03601..a60a7fef2 100644 --- a/src/drunc/process_manager/process_manager.py +++ b/src/drunc/process_manager/process_manager.py @@ -5,6 +5,7 @@ from druncschema.authoriser_pb2 import ActionType, SystemType from druncschema.broadcast_pb2 import BroadcastType +from druncschema.description_pb2 import CommandDescription, OldDescription from druncschema.opmon.process_manager_pb2 import ProcessStatus from druncschema.process_manager_pb2 import ( BootRequest, @@ -19,8 +20,6 @@ ) from druncschema.process_manager_pb2_grpc import ProcessManagerServicer from druncschema.request_response_pb2 import ( - CommandDescription, - Description, Request, Response, ResponseFlag, @@ -106,7 +105,7 @@ def __init__( name="describe", data_type=["None"], help="Describe self (return a list of commands, the type of endpoint, the name and session).", - return_type="request_response_pb2.Description", + return_type="description_pb2.OldDescription", ), CommandDescription( name="kill", @@ -479,7 +478,7 @@ def flush(self, request: Request, context: ServicerContext) -> Response: def describe(self, request: Request, context: ServicerContext) -> Response: self.log.debug(f"{self.name} running describe") bd = self.describe_broadcast() - d = Description( + d = OldDescription( type="process_manager", name=self.name, info=self.configuration.log_path, @@ -506,7 +505,7 @@ def _logs_impl(self, request_data: LogRequest) -> LogLines: @authentified_and_authorised( action=ActionType.READ, system=SystemType.PROCESS_MANAGER ) # 2nd step - def logs(self, request:Request, context:ServicerContext) -> Response: + def logs(self, request: Request, context: ServicerContext) -> Response: """Fetch logs for a process. Args: diff --git a/src/drunc/session_manager/session_manager.py b/src/drunc/session_manager/session_manager.py index 9cc350fba..fd24f6b7f 100644 --- a/src/drunc/session_manager/session_manager.py +++ b/src/drunc/session_manager/session_manager.py @@ -5,10 +5,8 @@ from pathlib import Path from conffwk import Configuration -from druncschema.description_pb2 import NewCommandDescription, NewDescription +from druncschema.description_pb2 import CommandDescription, NewDescription from druncschema.request_response_pb2 import ( - CommandDescription, - Description, Request, Response, ResponseFlag, @@ -50,9 +48,7 @@ def __init__(self, name: str, configuration: SessionManagerConfHandler): self.name = name self.configuration = configuration - def new_describe( - self, request: Request, context: ServicerContext - ) -> NewDescription: + def describe(self, request: Request, context: ServicerContext) -> NewDescription: """Respond with a description of this session manager service. Args: @@ -65,19 +61,19 @@ def new_describe( self.log.debug(f"{self.name} running describe") commands = [ - NewCommandDescription( + CommandDescription( name="describe", data_type=["None"], help="List the methods exposed by this endpoint.", return_type="request_response_pb2.Description", ), - NewCommandDescription( + CommandDescription( name="list_all_sessions", data_type=["None"], help="List all active sessions.", return_type="session_manager_pb2.AllActiveSessions", ), - NewCommandDescription( + CommandDescription( name="list_all_configs", data_type=["None"], help="List all available configurations.", @@ -95,54 +91,6 @@ def new_describe( token=None, ) - def describe(self, request: Request, context: ServicerContext) -> Response: - """Respond with a description of this session manager service. - - Args: - request: The incoming request (not used). - context: The gRPC context (not used). - - Returns: - A response containing the service description. - """ - self.log.debug(f"{self.name} running describe") - - command_descriptions = [ - CommandDescription( - name="describe", - data_type=["None"], - help="List the methods exposed by this endpoint.", - return_type="request_response_pb2.Description", - ), - CommandDescription( - name="list_all_sessions", - data_type=["None"], - help="List all active sessions.", - return_type="session_manager_pb2.AllActiveSessions", - ), - CommandDescription( - name="list_all_configs", - data_type=["None"], - help="List all available configurations.", - return_type="session_manager_pb2.AllConfigKeys", - ), - ] - - description = Description( - type="session_manager", - name=self.name, - session=self.name, - commands=command_descriptions, - ) - - return Response( - name=self.name, - token=None, - data=pack_to_any(description), - flag=ResponseFlag.EXECUTED_SUCCESSFULLY, - children=[], - ) - def list_all_sessions(self, request: Request, context: ServicerContext) -> Response: """Respond with a list of all active sessions. diff --git a/src/drunc/session_manager/session_manager_driver.py b/src/drunc/session_manager/session_manager_driver.py index 86f99f260..be1afeac1 100644 --- a/src/drunc/session_manager/session_manager_driver.py +++ b/src/drunc/session_manager/session_manager_driver.py @@ -1,7 +1,6 @@ """Driver for the session manager service.""" from druncschema.description_pb2 import NewDescription -from druncschema.request_response_pb2 import Description from druncschema.session_manager_pb2 import AllActiveSessions, AllConfigKeys from druncschema.session_manager_pb2_grpc import SessionManagerStub from druncschema.token_pb2 import Token @@ -40,21 +39,13 @@ def create_stub(self, channel: Channel) -> SessionManagerStub: """ return SessionManagerStub(channel) - def new_describe(self) -> DecodedResponse | None: - """Describe the session manager service. - - Returns: - A decoded response object containing the description of the service. - """ - return self.send_command("new_describe", outformat=NewDescription) - def describe(self) -> DecodedResponse | None: """Describe the session manager service. Returns: A decoded response object containing the description of the service. """ - return self.send_command("describe", outformat=Description) + return self.send_command("describe", outformat=NewDescription) def list_all_sessions(self) -> DecodedResponse | None: """List all active sessions managed by the session manager. diff --git a/src/drunc/utils/shell_utils.py b/src/drunc/utils/shell_utils.py index 1c2018e64..b29002253 100644 --- a/src/drunc/utils/shell_utils.py +++ b/src/drunc/utils/shell_utils.py @@ -127,12 +127,6 @@ def __handle_grpc_error(self, error, command): raise error def handle_response(self, response, command, outformat): - # TODO: TEMP HACK -- DON'T FORGET TO FIX THIS!!! - from druncschema.description_pb2 import NewDescription - - if isinstance(response, (NewDescription,)): - return response - dr = DecodedResponse( name=response.name, token=response.token, @@ -224,6 +218,13 @@ def send_command( response = cmd(request, timeout=timeout) except grpc.RpcError as e: self.__handle_grpc_error(e, command) + + # TODO: TEMP HACK UNTIL UNPACKING IS REMOVED + from druncschema.description_pb2 import NewDescription + + if isinstance(response, (NewDescription,)): + return response + return self.handle_response(response, command, outformat) From c32bcc7fdf07c175045113316a9a5156dab4f190 Mon Sep 17 00:00:00 2001 From: James Paul Turner Date: Fri, 18 Jul 2025 13:31:45 +0100 Subject: [PATCH 05/10] Missed one. --- src/drunc/session_manager/session_manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drunc/session_manager/session_manager.py b/src/drunc/session_manager/session_manager.py index fd24f6b7f..f07bcda0b 100644 --- a/src/drunc/session_manager/session_manager.py +++ b/src/drunc/session_manager/session_manager.py @@ -65,7 +65,7 @@ def describe(self, request: Request, context: ServicerContext) -> NewDescription name="describe", data_type=["None"], help="List the methods exposed by this endpoint.", - return_type="request_response_pb2.Description", + return_type="description_pb2.NewDescription", ), CommandDescription( name="list_all_sessions", From 00c6715e10f45ddacdc5ebcd5cbb5a889a71f6fc Mon Sep 17 00:00:00 2001 From: James Paul Turner Date: Fri, 18 Jul 2025 13:53:26 +0100 Subject: [PATCH 06/10] More stragglers. --- .../controller/children_interface/child_node.py | 4 ++-- .../controller/children_interface/grpc_child.py | 5 +++-- src/drunc/controller/interface/shell_utils.py | 11 ++++++----- .../process_manager/process_manager_driver.py | 14 +++++--------- .../tests/controller/test_controller_driver.py | 4 ++-- 5 files changed, 18 insertions(+), 20 deletions(-) diff --git a/src/drunc/controller/children_interface/child_node.py b/src/drunc/controller/children_interface/child_node.py index 9fb4f0cce..1b9364a5d 100644 --- a/src/drunc/controller/children_interface/child_node.py +++ b/src/drunc/controller/children_interface/child_node.py @@ -1,6 +1,7 @@ import os from druncschema.controller_pb2 import Status +from druncschema.description_pb2 import OldDescription from druncschema.request_response_pb2 import Response from drunc.connectivity_service.exceptions import ApplicationLookupUnsuccessful @@ -16,7 +17,6 @@ ) from druncschema.request_response_pb2 import ( # isort: skip - Description, ResponseFlag, ) from druncschema.token_pb2 import Token # isort: skip @@ -98,7 +98,7 @@ def describe(self, token: Token) -> Response: descriptionType = self.configuration.data.controller.application_name descriptionName = self.configuration.data.controller.id - d = Description( + d = OldDescription( type=descriptionType, name=descriptionName, endpoint=self.get_endpoint(), diff --git a/src/drunc/controller/children_interface/grpc_child.py b/src/drunc/controller/children_interface/grpc_child.py index 103f89e83..41372efad 100644 --- a/src/drunc/controller/children_interface/grpc_child.py +++ b/src/drunc/controller/children_interface/grpc_child.py @@ -2,7 +2,8 @@ import grpc from druncschema.controller_pb2_grpc import ControllerStub -from druncschema.request_response_pb2 import Description, Response +from druncschema.description_pb2 import OldDescription +from druncschema.request_response_pb2 import Response from drunc.broadcast.client.broadcast_handler import BroadcastHandler from drunc.broadcast.client.configuration import BroadcastClientConfHandler @@ -45,7 +46,7 @@ def __init__(self, name, configuration: gRCPChildConfHandler, init_token, uri): self.channel = grpc.insecure_channel(self.uri) self.controller = ControllerStub(self.channel) - desc = Description() + desc = OldDescription() ntries = 20 for itry in range(ntries): diff --git a/src/drunc/controller/interface/shell_utils.py b/src/drunc/controller/interface/shell_utils.py index 4657fc8d1..d10a58658 100644 --- a/src/drunc/controller/interface/shell_utils.py +++ b/src/drunc/controller/interface/shell_utils.py @@ -15,8 +15,9 @@ FSMResponseFlag, Status, ) +from druncschema.description_pb2 import OldDescription from druncschema.generic_pb2 import bool_msg, float_msg, int_msg, string_msg -from druncschema.request_response_pb2 import Description, ResponseFlag +from druncschema.request_response_pb2 import ResponseFlag from rich.console import ConsoleRenderable, Group, RichCast from rich.progress import ( BarColumn, @@ -48,8 +49,8 @@ def generate_none_status() -> Status: ) -def generate_none_description() -> Description: - return Description( +def generate_none_description() -> OldDescription: + return OldDescription( type="none", name="none", endpoint="none", @@ -103,7 +104,7 @@ def get_status_table(status: DecodedResponse, description: DecodedResponse): t.add_column("Endpoint") def add_status_to_table(table, status, description, prefix): - valid_description = check_message_type(description, "Description") + valid_description = check_message_type(description, "OldDescription") valid_status = check_message_type(status, "Status") if not valid_description or not valid_status: @@ -228,7 +229,7 @@ def controller_setup(ctx, controller_address): "This context is not compatible with a controller, you need to add a 'took_control' bool member" ) - desc = Description() + desc = OldDescription() timeout = 60 diff --git a/src/drunc/process_manager/process_manager_driver.py b/src/drunc/process_manager/process_manager_driver.py index 86ad24b7b..89ca38d05 100644 --- a/src/drunc/process_manager/process_manager_driver.py +++ b/src/drunc/process_manager/process_manager_driver.py @@ -6,6 +6,7 @@ import time from time import sleep +from druncschema.description_pb2 import OldDescription from druncschema.process_manager_pb2 import ( BootRequest, LogLines, @@ -18,7 +19,6 @@ ProcessRestriction, ) from druncschema.process_manager_pb2_grpc import ProcessManagerStub -from druncschema.request_response_pb2 import Description from drunc.connectivity_service.client import ConnectivityServiceClient from drunc.connectivity_service.exceptions import ApplicationLookupUnsuccessful @@ -393,9 +393,7 @@ def terminate( "terminate", outformat=ProcessInstanceList, timeout=timeout ) - def kill( - self, query: ProcessQuery, timeout: int | float = 60 - ) -> ProcessInstance: + def kill(self, query: ProcessQuery, timeout: int | float = 60) -> ProcessInstance: return self.send_command( "kill", data=query, @@ -411,9 +409,7 @@ def logs(self, req: LogRequest, timeout: int | float = 60) -> LogLines: timeout=timeout, ) - def ps( - self, query: ProcessQuery, timeout: int | float = 60 - ) -> ProcessInstanceList: + def ps(self, query: ProcessQuery, timeout: int | float = 60) -> ProcessInstanceList: return self.send_command( "ps", data=query, @@ -441,9 +437,9 @@ def restart( timeout=timeout, ) - def describe(self, timeout: int | float = 60) -> Description: + def describe(self, timeout: int | float = 60) -> OldDescription: return self.send_command( "describe", - outformat=Description, + outformat=OldDescription, timeout=timeout, ) diff --git a/src/drunc/tests/controller/test_controller_driver.py b/src/drunc/tests/controller/test_controller_driver.py index 7424dcaeb..773513284 100644 --- a/src/drunc/tests/controller/test_controller_driver.py +++ b/src/drunc/tests/controller/test_controller_driver.py @@ -1,5 +1,5 @@ import pytest -from druncschema.request_response_pb2 import Description +from druncschema.description_pb2 import OldDescription from google.protobuf.json_format import MessageToDict from drunc.connectivity_service.client import ConnectivityServiceClient @@ -181,7 +181,7 @@ def test_controller_driver_describe(many_controllers_running): address_commmand_permutations_deep_segments_config( controller_driver=controller_driver, command="describe", - expected_response=Description( + expected_response=OldDescription( name="", type="controller", endpoint="", From 78c2e465387f4e82356d80d707064625876d24e2 Mon Sep 17 00:00:00 2001 From: James Paul Turner Date: Fri, 18 Jul 2025 15:17:26 +0100 Subject: [PATCH 07/10] Set new describe message type name. --- src/drunc/session_manager/session_manager.py | 8 ++++---- src/drunc/session_manager/session_manager_driver.py | 4 ++-- src/drunc/utils/shell_utils.py | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/drunc/session_manager/session_manager.py b/src/drunc/session_manager/session_manager.py index f07bcda0b..583ca6ca0 100644 --- a/src/drunc/session_manager/session_manager.py +++ b/src/drunc/session_manager/session_manager.py @@ -5,7 +5,7 @@ from pathlib import Path from conffwk import Configuration -from druncschema.description_pb2 import CommandDescription, NewDescription +from druncschema.description_pb2 import CommandDescription, Description from druncschema.request_response_pb2 import ( Request, Response, @@ -48,7 +48,7 @@ def __init__(self, name: str, configuration: SessionManagerConfHandler): self.name = name self.configuration = configuration - def describe(self, request: Request, context: ServicerContext) -> NewDescription: + def describe(self, request: Request, context: ServicerContext) -> Description: """Respond with a description of this session manager service. Args: @@ -65,7 +65,7 @@ def describe(self, request: Request, context: ServicerContext) -> NewDescription name="describe", data_type=["None"], help="List the methods exposed by this endpoint.", - return_type="description_pb2.NewDescription", + return_type="description_pb2.Description", ), CommandDescription( name="list_all_sessions", @@ -81,7 +81,7 @@ def describe(self, request: Request, context: ServicerContext) -> NewDescription ), ] - return NewDescription( + return Description( type="session_manager", name=self.name, session=self.name, diff --git a/src/drunc/session_manager/session_manager_driver.py b/src/drunc/session_manager/session_manager_driver.py index be1afeac1..7b8286e83 100644 --- a/src/drunc/session_manager/session_manager_driver.py +++ b/src/drunc/session_manager/session_manager_driver.py @@ -1,6 +1,6 @@ """Driver for the session manager service.""" -from druncschema.description_pb2 import NewDescription +from druncschema.description_pb2 import Description from druncschema.session_manager_pb2 import AllActiveSessions, AllConfigKeys from druncschema.session_manager_pb2_grpc import SessionManagerStub from druncschema.token_pb2 import Token @@ -45,7 +45,7 @@ def describe(self) -> DecodedResponse | None: Returns: A decoded response object containing the description of the service. """ - return self.send_command("describe", outformat=NewDescription) + return self.send_command("describe", outformat=Description) def list_all_sessions(self) -> DecodedResponse | None: """List all active sessions managed by the session manager. diff --git a/src/drunc/utils/shell_utils.py b/src/drunc/utils/shell_utils.py index b29002253..7762dc828 100644 --- a/src/drunc/utils/shell_utils.py +++ b/src/drunc/utils/shell_utils.py @@ -220,9 +220,9 @@ def send_command( self.__handle_grpc_error(e, command) # TODO: TEMP HACK UNTIL UNPACKING IS REMOVED - from druncschema.description_pb2 import NewDescription + from druncschema.description_pb2 import Description - if isinstance(response, (NewDescription,)): + if isinstance(response, (Description,)): return response return self.handle_response(response, command, outformat) From 3fd285720e7380b0dec087429f3105c5cb066ddb Mon Sep 17 00:00:00 2001 From: James Paul Turner Date: Fri, 18 Jul 2025 16:30:16 +0100 Subject: [PATCH 08/10] Use new AllActiveSessions message. --- src/drunc/session_manager/session_manager.py | 13 +++++-------- src/drunc/utils/shell_utils.py | 3 ++- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/drunc/session_manager/session_manager.py b/src/drunc/session_manager/session_manager.py index 583ca6ca0..ef93c55dc 100644 --- a/src/drunc/session_manager/session_manager.py +++ b/src/drunc/session_manager/session_manager.py @@ -91,7 +91,9 @@ def describe(self, request: Request, context: ServicerContext) -> Description: token=None, ) - def list_all_sessions(self, request: Request, context: ServicerContext) -> Response: + def list_all_sessions( + self, request: Request, context: ServicerContext + ) -> AllActiveSessions: """Respond with a list of all active sessions. Args: @@ -114,16 +116,11 @@ def list_all_sessions(self, request: Request, context: ServicerContext) -> Respo config_key=dummy_config, ) - all_sessions = AllActiveSessions( - active_sessions=[dummy_session], - ) - - return Response( + return AllActiveSessions( name=self.name, token=None, - data=pack_to_any(all_sessions), + active_sessions=[dummy_session], flag=ResponseFlag.EXECUTED_SUCCESSFULLY, - children=[], ) def list_all_configs(self, request: Request, context: ServicerContext) -> Response: diff --git a/src/drunc/utils/shell_utils.py b/src/drunc/utils/shell_utils.py index 7762dc828..6fa241376 100644 --- a/src/drunc/utils/shell_utils.py +++ b/src/drunc/utils/shell_utils.py @@ -221,8 +221,9 @@ def send_command( # TODO: TEMP HACK UNTIL UNPACKING IS REMOVED from druncschema.description_pb2 import Description + from druncschema.session_manager_pb2 import AllActiveSessions - if isinstance(response, (Description,)): + if isinstance(response, (Description, AllActiveSessions)): return response return self.handle_response(response, command, outformat) From fd5b46309f6dc965f78c498236336b0af26e38e2 Mon Sep 17 00:00:00 2001 From: James Paul Turner Date: Fri, 18 Jul 2025 16:32:15 +0100 Subject: [PATCH 09/10] Docstrings. --- src/drunc/session_manager/session_manager_driver.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/drunc/session_manager/session_manager_driver.py b/src/drunc/session_manager/session_manager_driver.py index 7b8286e83..c4c6b79d0 100644 --- a/src/drunc/session_manager/session_manager_driver.py +++ b/src/drunc/session_manager/session_manager_driver.py @@ -43,7 +43,7 @@ def describe(self) -> DecodedResponse | None: """Describe the session manager service. Returns: - A decoded response object containing the description of the service. + A response containing the description of the service. """ return self.send_command("describe", outformat=Description) @@ -51,7 +51,7 @@ def list_all_sessions(self) -> DecodedResponse | None: """List all active sessions managed by the session manager. Returns: - A decoded response object containing a list of all active sessions. + A response containing a list of all active sessions. """ return self.send_command("list_all_sessions", outformat=AllActiveSessions) @@ -59,6 +59,6 @@ def list_all_configs(self) -> DecodedResponse | None: """List all available configurations in the session manager. Returns: - A decoded response object containing all available configuration keys. + A response containing all available configuration keys. """ return self.send_command("list_all_configs", outformat=AllConfigKeys) From cd267065f656fde2da6bb02ab9d34fbcbc60447b Mon Sep 17 00:00:00 2001 From: James Paul Turner Date: Fri, 18 Jul 2025 16:48:21 +0100 Subject: [PATCH 10/10] Use new AllConfigKeys message. --- src/drunc/session_manager/session_manager.py | 20 +++++++------------- src/drunc/utils/shell_utils.py | 4 ++-- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/drunc/session_manager/session_manager.py b/src/drunc/session_manager/session_manager.py index ef93c55dc..a1ce5b59c 100644 --- a/src/drunc/session_manager/session_manager.py +++ b/src/drunc/session_manager/session_manager.py @@ -8,7 +8,6 @@ from druncschema.description_pb2 import CommandDescription, Description from druncschema.request_response_pb2 import ( Request, - Response, ResponseFlag, ) from druncschema.session_manager_pb2 import ( @@ -21,7 +20,6 @@ from grpc import ServicerContext from drunc.session_manager.configuration import SessionManagerConfHandler -from drunc.utils.grpc_utils import pack_to_any from drunc.utils.utils import get_logger, pid_info_str @@ -123,7 +121,9 @@ def list_all_sessions( flag=ResponseFlag.EXECUTED_SUCCESSFULLY, ) - def list_all_configs(self, request: Request, context: ServicerContext) -> Response: + def list_all_configs( + self, request: Request, context: ServicerContext + ) -> AllConfigKeys: """Respond with a list of all available configurations. Args: @@ -139,12 +139,11 @@ def list_all_configs(self, request: Request, context: ServicerContext) -> Respon search_paths = getenv("DUNEDAQ_DB_PATH") if search_paths is None: self.log.error("DUNEDAQ_DB_PATH not set") - return Response( + return AllConfigKeys( name=self.name, token=None, - data=pack_to_any(None), + config_keys=[], flag=ResponseFlag.FAILED, - children=[], ) # Find all configuration files. @@ -170,14 +169,9 @@ def list_all_configs(self, request: Request, context: ServicerContext) -> Respon ) configs.append(config_key) - all_configs = AllConfigKeys( - config_keys=configs, - ) - - return Response( + return AllConfigKeys( name=self.name, token=None, - data=pack_to_any(all_configs), + config_keys=configs, flag=ResponseFlag.EXECUTED_SUCCESSFULLY, - children=[], ) diff --git a/src/drunc/utils/shell_utils.py b/src/drunc/utils/shell_utils.py index 6fa241376..505f66d75 100644 --- a/src/drunc/utils/shell_utils.py +++ b/src/drunc/utils/shell_utils.py @@ -221,9 +221,9 @@ def send_command( # TODO: TEMP HACK UNTIL UNPACKING IS REMOVED from druncschema.description_pb2 import Description - from druncschema.session_manager_pb2 import AllActiveSessions + from druncschema.session_manager_pb2 import AllActiveSessions, AllConfigKeys - if isinstance(response, (Description, AllActiveSessions)): + if isinstance(response, (Description, AllActiveSessions, AllConfigKeys)): return response return self.handle_response(response, command, outformat)