From 0f7df13df38f2f26f9e4ec0bd95a363fa2066fce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Diot?= Date: Thu, 28 Sep 2023 14:28:17 +0100 Subject: [PATCH] Optimize save_config script --- src/common/db/Database.py | 12 ++++++++- src/common/gen/save_config.py | 51 ++++++++++++++++++++++++++--------- 2 files changed, 49 insertions(+), 14 deletions(-) diff --git a/src/common/db/Database.py b/src/common/db/Database.py index 4c975da92..db6315c63 100644 --- a/src/common/db/Database.py +++ b/src/common/db/Database.py @@ -352,6 +352,8 @@ class Database: return "The metadata are not set yet, try again" if "config" in changes: + if not metadata.first_config_saved: + metadata.first_config_saved = True metadata.config_changed = value if "custom_configs" in changes: metadata.custom_configs_changed = value @@ -1733,7 +1735,9 @@ class Database: ) ] - def add_instance(self, hostname: str, port: int, server_name: str) -> str: + def add_instance( + self, hostname: str, port: int, server_name: str, changed: Optional[bool] = True + ) -> str: """Add instance.""" with self.__db_session() as session: db_instance = ( @@ -1750,6 +1754,12 @@ class Database: Instances(hostname=hostname, port=port, server_name=server_name) ) + if changed: + with suppress(ProgrammingError, OperationalError): + metadata = session.query(Metadata).get(1) + if metadata is not None: + metadata.instances_changed = True + try: session.commit() except BaseException: diff --git a/src/common/gen/save_config.py b/src/common/gen/save_config.py index e476aea2c..1fa98c000 100644 --- a/src/common/gen/save_config.py +++ b/src/common/gen/save_config.py @@ -340,43 +340,68 @@ if __name__ == "__main__": if args.init: sys_exit(0) - err = db.save_config(config_files, args.method) + changes = [] + err = db.save_config(config_files, args.method, changed=False) - if not err: - err1 = db.save_custom_configs(custom_confs, args.method) - else: - err = None - err1 = None - - if err or err1: - logger.error( - f"Can't save config to database : {err or err1}", + if err: + logger.warning( + f"Couldn't save config to database : {err}, config may not work as expected" ) - sys_exit(1) else: + changes.append("config") logger.info("Config successfully saved to database") if args.method != "ui": + err1 = db.save_custom_configs(custom_confs, args.method, changed=False) + + if err1: + logger.warning( + f"Couldn't save custom configs to database : {err1}, custom configs may not work as expected" + ) + else: + changes.append("custom_configs") + logger.info("Custom configs successfully saved to database") + if apis: for api in apis: endpoint_data = api.endpoint.replace("http://", "").split(":") err = db.add_instance( - endpoint_data[0], endpoint_data[1].replace("/", ""), api.host + endpoint_data[0], + endpoint_data[1].replace("/", ""), + api.host, + changed=False, ) if err: logger.warning(err) + else: + if "instances" not in changes: + changes.append("instances") + logger.info( + f"Instance {endpoint_data[0]} successfully saved to database" + ) else: err = db.add_instance( "127.0.0.1", config_files.get("API_HTTP_PORT", 5000), config_files.get("API_SERVER_NAME", "bwapi"), + changed=False, ) if err: logger.warning(err) + else: + changes.append("instances") + logger.info("Instance 127.0.0.1 successfully saved to database") + + # update changes in db + ret = db.checked_changes(changes, value=True) + if ret: + logger.error( + f"An error occurred when setting the changes to checked in the database : {ret}" + ) except SystemExit as e: - raise e + sys_exit(e.code) except: logger.error( f"Exception while executing config saver : {format_exc()}",