Skip to content

Commit

Permalink
chore: Update log level configuration in Config.py and Controller.py …
Browse files Browse the repository at this point in the history
…+ Fix shenanigans with autoconf and save_config function in Database
  • Loading branch information
TheophileDiot committed Jul 26, 2024
1 parent 3a6bc67 commit 3b8393c
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 18 deletions.
2 changes: 1 addition & 1 deletion src/autoconf/Config.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
class Config:
def __init__(self):
super().__init__()
self.__logger = setup_logger("Config", getenv("LOG_LEVEL", "INFO"))
self.__logger = setup_logger("Config", getenv("CUSTOM_LOG_LEVEL", getenv("LOG_LEVEL", "INFO")))
self.__instances = []
self.__services = []
self._supported_config_types = (
Expand Down
16 changes: 8 additions & 8 deletions src/autoconf/Controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def __init__(
self._instances = []
self._services = []
self._configs = {config_type: {} for config_type in self._supported_config_types}
self._logger = setup_logger(f"{self._type}-controller", getenv("LOG_LEVEL", "INFO"))
self._logger = setup_logger(f"{self._type}-controller", getenv("CUSTOM_LOG_LEVEL", getenv("LOG_LEVEL", "INFO")))

def wait(self, wait_time: int) -> list:
all_ready = False
Expand All @@ -46,11 +46,11 @@ def wait(self, wait_time: int) -> list:

@abstractmethod
def _get_controller_instances(self):
pass
raise NotImplementedError

@abstractmethod
def _to_instances(self, controller_instance):
pass
raise NotImplementedError

def get_instances(self):
instances = []
Expand All @@ -60,11 +60,11 @@ def get_instances(self):

@abstractmethod
def _get_controller_services(self):
pass
raise NotImplementedError

@abstractmethod
def _to_services(self, controller_service):
pass
raise NotImplementedError

def _set_autoconf_load_db(self):
if not self._loaded:
Expand All @@ -85,15 +85,15 @@ def get_services(self):

@abstractmethod
def get_configs(self):
pass
raise NotImplementedError

@abstractmethod
def apply_config(self):
pass
raise NotImplementedError

@abstractmethod
def process_events(self):
pass
raise NotImplementedError

def _is_service_present(self, server_name):
for service in self._services:
Expand Down
45 changes: 36 additions & 9 deletions src/common/db/Database.py
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ def __db_session(self) -> Any:
self.retry_connection(fallback=True, pool_timeout=1)
self.retry_connection(fallback=True, log=False)
self.readonly = True
raise
raise
finally:
if session:
session.remove()
Expand Down Expand Up @@ -1076,13 +1076,20 @@ def init_tables(self, default_plugins: List[dict], bunkerweb_version: str) -> Tu
def save_config(self, config: Dict[str, Any], method: str, changed: Optional[bool] = True) -> Union[str, Set[str]]:
"""Save the config in the database"""
to_put = []

db_config = {}
if method == "autoconf":
db_config = self.get_non_default_settings(with_drafts=True)

with self.__db_session() as session:
if self.readonly:
return "The database is read-only, the changes will not be saved"

self.logger.debug(f"Saving config for method {method}")
changed_plugins = set()
changed_services = False

self.logger.debug(f"Cleaning up {method} old global settings")
for db_global_config in session.query(Global_values).filter_by(method=method).all():
key = db_global_config.setting_id
if db_global_config.suffix:
Expand All @@ -1095,6 +1102,7 @@ def save_config(self, config: Dict[str, Any], method: str, changed: Optional[boo
if key == "SERVER_NAME":
changed_services = True

self.logger.debug(f"Cleaning up {method} old services settings")
for db_service_config in session.query(Services_settings).filter_by(method=method).all():
key = f"{db_service_config.service_id}_{db_service_config.setting_id}"
if db_service_config.suffix:
Expand All @@ -1105,11 +1113,9 @@ def save_config(self, config: Dict[str, Any], method: str, changed: Optional[boo
changed_plugins.add(session.query(Settings).with_entities(Settings.plugin_id).filter_by(id=db_service_config.setting_id).first().plugin_id)

if config:
db_global_config = {}
if method == "autoconf":
db_global_config = self.get_non_default_settings(global_only=True)

config.pop("DATABASE_URI", None)

self.logger.debug("Checking if the services have changed")
db_services = session.query(Services).with_entities(Services.id, Services.method, Services.is_draft).all()
db_ids: Dict[str, dict] = {service.id: {"method": service.method, "is_draft": service.is_draft} for service in db_services}
missing_ids = []
Expand All @@ -1126,6 +1132,7 @@ def save_config(self, config: Dict[str, Any], method: str, changed: Optional[boo
missing_ids = [service.id for service in db_services if service.method == method and service.id not in services]

if missing_ids:
self.logger.debug(f"Removing {len(missing_ids)} services that are no longer in the list")
# Remove services that are no longer in the list
session.query(Services).filter(Services.id.in_(missing_ids)).delete()
session.query(Services_settings).filter(Services_settings.service_id.in_(missing_ids)).delete()
Expand All @@ -1136,6 +1143,7 @@ def save_config(self, config: Dict[str, Any], method: str, changed: Optional[boo
)
changed_services = True

self.logger.debug("Checking if the drafts have changed")
drafts = {service for service in services if config.pop(f"{service}_IS_DRAFT", "no") == "yes"}
db_drafts = {service.id for service in db_services if service.is_draft}

Expand All @@ -1145,20 +1153,24 @@ def save_config(self, config: Dict[str, Any], method: str, changed: Optional[boo
]

if missing_drafts:
self.logger.debug(f"Removing {len(missing_drafts)} drafts that are no longer in the list")
# Remove drafts that are no longer in the list
session.query(Services).filter(Services.id.in_(missing_drafts)).update({Services.is_draft: False})
changed_services = True

for draft in drafts:
if draft not in db_drafts:
if draft not in db_ids:
self.logger.debug(f"Adding draft {draft}")
to_put.append(Services(id=draft, method=method, is_draft=True))
db_ids[draft] = {"method": method, "is_draft": True}
elif method == db_ids[draft]["method"]:
self.logger.debug(f"Updating draft {draft}")
session.query(Services).filter(Services.id == draft).update({Services.is_draft: True})
changed_services = True

if config.get("MULTISITE", "no") == "yes":
self.logger.debug("Checking if the multisite settings have changed")
global_values = []
for key, value in config.copy().items():
suffix = 0
Expand All @@ -1176,6 +1188,7 @@ def save_config(self, config: Dict[str, Any], method: str, changed: Optional[boo
continue

if server_name not in db_ids:
self.logger.debug(f"Adding service {server_name}")
to_put.append(Services(id=server_name, method=method, is_draft=server_name in drafts))
db_ids[server_name] = {"method": method, "is_draft": server_name in drafts}
if server_name not in drafts:
Expand All @@ -1186,6 +1199,7 @@ def save_config(self, config: Dict[str, Any], method: str, changed: Optional[boo
setting = session.query(Settings).with_entities(Settings.default, Settings.plugin_id).filter_by(id=key).first()

if not setting:
self.logger.debug(f"Setting {key} does not exist")
continue

service_setting = (
Expand All @@ -1197,12 +1211,13 @@ def save_config(self, config: Dict[str, Any], method: str, changed: Optional[boo

if not service_setting:
if key != "SERVER_NAME" and (
(original_key not in config and original_key not in db_global_config and value == setting.default)
(original_key not in config and original_key not in db_config and value == setting.default)
or (original_key in config and value == config[original_key])
or (original_key in db_global_config and value == db_global_config[original_key])
or (original_key in db_config and value == db_config[original_key])
):
continue

self.logger.debug(f"Adding setting {key} for service {server_name}")
changed_plugins.add(setting.plugin_id)
to_put.append(Services_settings(service_id=server_name, setting_id=key, value=value, suffix=suffix, method=method))
elif (
Expand All @@ -1216,13 +1231,15 @@ def save_config(self, config: Dict[str, Any], method: str, changed: Optional[boo
)

if key != "SERVER_NAME" and (
(original_key not in config and original_key not in db_global_config and value == setting.default)
(original_key not in config and original_key not in db_config and value == setting.default)
or (original_key in config and value == config[original_key])
or (original_key in db_global_config and value == db_global_config[original_key])
or (original_key in db_config and value == db_config[original_key])
):
self.logger.debug(f"Removing setting {key} for service {server_name}")
query.delete()
continue

self.logger.debug(f"Updating setting {key} for service {server_name}")
query.update({Services_settings.value: value, Services_settings.method: method})
elif setting and original_key not in global_values:
global_values.append(original_key)
Expand All @@ -1237,6 +1254,7 @@ def save_config(self, config: Dict[str, Any], method: str, changed: Optional[boo
if value == setting.default:
continue

self.logger.debug(f"Adding global setting {key}")
changed_plugins.add(setting.plugin_id)
to_put.append(Global_values(setting_id=key, value=value, suffix=suffix, method=method))
elif (
Expand All @@ -1246,17 +1264,22 @@ def save_config(self, config: Dict[str, Any], method: str, changed: Optional[boo
query = session.query(Global_values).filter(Global_values.setting_id == key, Global_values.suffix == suffix)

if value == setting.default:
self.logger.debug(f"Removing global setting {key}")
query.delete()
continue

self.logger.debug(f"Updating global setting {key}")
query.update({Global_values.value: value, Global_values.method: method})
elif method != "autoconf":
self.logger.debug("Checking if non multisite settings have changed")
if (
config.get("SERVER_NAME", "www.example.com")
and not session.query(Services)
.with_entities(Services.id)
.filter_by(id=config.get("SERVER_NAME", "www.example.com").split(" ")[0])
.first()
):
self.logger.debug("Adding service www.example.com")
to_put.append(Services(id=config.get("SERVER_NAME", "www.example.com").split(" ")[0], method=method))
changed_services = True

Expand All @@ -1282,6 +1305,7 @@ def save_config(self, config: Dict[str, Any], method: str, changed: Optional[boo
if value == setting.default:
continue

self.logger.debug(f"Adding global setting {key}")
changed_plugins.add(setting.plugin_id)
to_put.append(Global_values(setting_id=key, value=value, suffix=suffix, method=method))
elif (
Expand All @@ -1291,8 +1315,11 @@ def save_config(self, config: Dict[str, Any], method: str, changed: Optional[boo
query = session.query(Global_values).filter(Global_values.setting_id == key, Global_values.suffix == suffix)

if value == setting.default:
self.logger.debug(f"Removing global setting {key}")
query.delete()
continue

self.logger.debug(f"Updating global setting {key}")
query.update({Global_values.value: value, Global_values.method: method})

if changed_services:
Expand Down

0 comments on commit 3b8393c

Please sign in to comment.