From 4cd42c2a20eb5a66c61c3ad080eb9a14f1870861 Mon Sep 17 00:00:00 2001 From: Huy Pham <42948410+hpham@users.noreply.github.com> Date: Thu, 21 Nov 2019 15:00:17 -0800 Subject: [PATCH] work on service config --- coretk/coretk/coreclient.py | 20 ++++++++- coretk/coretk/dialogs/nodeservice.py | 12 ++++- coretk/coretk/dialogs/serviceconfiguration.py | 45 +++++++++++++++---- 3 files changed, 65 insertions(+), 12 deletions(-) diff --git a/coretk/coretk/coreclient.py b/coretk/coretk/coreclient.py index beeb1c0a..e3232ef8 100644 --- a/coretk/coretk/coreclient.py +++ b/coretk/coretk/coreclient.py @@ -50,6 +50,7 @@ class CoreClient: self.master = app.master self.interface_helper = None self.services = {} + self.default_services = {} self.observer = None # loaded configuration data @@ -77,6 +78,9 @@ class CoreClient: self.created_nodes = set() self.created_links = set() + self.service_configs = {} + self.file_configs = {} + def set_observer(self, value): self.observer = value @@ -253,9 +257,15 @@ class CoreClient: dialog = SessionsDialog(self.app, self.app) dialog.show() + response = self.client.get_service_defaults(self.session_id) + logging.debug("get service defaults: %s", response) + self.default_services = { + x.node_type: set(x.services) for x in response.defaults + } + def get_session_state(self): response = self.client.get_session(self.session_id) - # logging.info("get session: %s", response) + logging.info("get session: %s", response) return response.session.state def edit_node(self, node_id, x, y): @@ -358,6 +368,9 @@ class CoreClient: self.session_id, node_id, service_name, startups, validations, shutdowns ) logging.debug("set node service %s", response) + response = self.client.get_node_service(self.session_id, node_id, service_name) + logging.debug("get node service : %s", response) + return response.service def get_node_service_file(self, node_id, service_name, file_name): response = self.client.get_node_service_file( @@ -381,7 +394,10 @@ class CoreClient: node_protos = [x.core_node for x in self.canvas_nodes.values()] link_protos = list(self.links.values()) - self.client.set_session_state(self.session_id, core_pb2.SessionState.DEFINITION) + if self.get_session_state() != core_pb2.SessionState.DEFINITION: + self.client.set_session_state( + self.session_id, core_pb2.SessionState.DEFINITION + ) for node_proto in node_protos: if node_proto.id not in self.created_nodes: response = self.client.add_node(self.session_id, node_proto) diff --git a/coretk/coretk/dialogs/nodeservice.py b/coretk/coretk/dialogs/nodeservice.py index 35c55b75..8a30e051 100644 --- a/coretk/coretk/dialogs/nodeservice.py +++ b/coretk/coretk/dialogs/nodeservice.py @@ -12,6 +12,7 @@ from coretk.widgets import CheckboxList, ListboxScroll class NodeService(Dialog): def __init__(self, master, app, canvas_node, services=None): super().__init__(master, app, "Node Services", modal=True) + self.app = app self.canvas_node = canvas_node self.node_id = canvas_node.core_node.id self.groups = None @@ -108,8 +109,15 @@ class NodeService(Dialog): ) def click_save(self): - print("not implemented") - print(self.current_services) + if ( + self.current_services + != self.app.core.default_services[self.canvas_node.core_node.model] + ): + self.canvas_node.core_node.services[:] = self.current_services + else: + if len(self.canvas_node.core_node.services) > 0: + self.canvas_node.core_node.services[:] = [] + self.destroy() def click_cancel(self): self.current_services = None diff --git a/coretk/coretk/dialogs/serviceconfiguration.py b/coretk/coretk/dialogs/serviceconfiguration.py index bb1fd858..20684311 100644 --- a/coretk/coretk/dialogs/serviceconfiguration.py +++ b/coretk/coretk/dialogs/serviceconfiguration.py @@ -14,6 +14,7 @@ class ServiceConfiguration(Dialog): def __init__(self, master, app, service_name, node_id): super().__init__(master, app, f"{service_name} service", modal=True) self.app = app + self.core = app.core self.service_manager = app.core.serviceconfig_manager self.node_id = node_id self.service_name = service_name @@ -50,18 +51,32 @@ class ServiceConfiguration(Dialog): def load(self): # create nodes and links in definition state for getting and setting service file self.app.core.create_nodes_and_links() - # load data from local memory - if self.service_name in self.service_manager.configurations[self.node_id]: - service_config = self.service_manager.configurations[self.node_id][ + + service_configs = self.app.core.service_configs + if ( + self.node_id in service_configs + and self.service_name in service_configs[self.node_id] + ): + service_config = self.app.core.service_configs[self.node_id][ self.service_name ] else: - self.service_manager.node_custom_service_configuration( + service_config = self.app.core.get_node_service( self.node_id, self.service_name ) - service_config = self.service_manager.configurations[self.node_id][ - self.service_name - ] + + # # load data from local memory + # if self.service_name in self.service_manager.configurations[self.node_id]: + # service_config = self.service_manager.configurations[self.node_id][ + # self.service_name + # ] + # else: + # self.service_manager.node_custom_service_configuration( + # self.node_id, self.service_name + # ) + # service_config = self.service_manager.configurations[self.node_id][ + # self.service_name + # ] self.dependencies = [x for x in service_config.dependencies] self.executables = [x for x in service_config.executables] self.metadata = service_config.meta @@ -359,16 +374,30 @@ class ServiceConfiguration(Dialog): entry.delete(0, tk.END) def click_apply(self): + service_configs = self.app.core.service_configs startup_commands = self.startup_commands_listbox.get(0, "end") shutdown_commands = self.shutdown_commands_listbox.get(0, "end") validate_commands = self.validate_commands_listbox.get(0, "end") - self.service_manager.node_service_custom_configuration( + config = self.core.set_node_service( self.node_id, self.service_name, startup_commands, validate_commands, shutdown_commands, ) + if self.node_id not in service_configs: + service_configs[self.node_id] = {} + if self.service_name not in service_configs[self.node_id]: + self.app.core.service_configs[self.node_id][self.service_name] = config + print(self.app.core.client.get_session(self.app.core.session_id)) + + # self.service_manager.node_service_custom_configuration( + # self.node_id, + # self.service_name, + # startup_commands, + # validate_commands, + # shutdown_commands, + # ) for file in self.modified_files: self.app.core.servicefileconfig_manager.set_custom_service_file_config( self.node_id, self.service_name, file, self.temp_service_files[file]