From 94e95671cae4c87773768d77774f99a21a4863fd Mon Sep 17 00:00:00 2001 From: dw-0 Date: Sun, 30 Jun 2024 18:27:00 +0200 Subject: [PATCH] refactor: delete moonraker logs with their respective instances upon instance removal Signed-off-by: Dominik Willner --- .../moonraker/menus/moonraker_remove_menu.py | 11 ----- kiauh/components/moonraker/moonraker.py | 48 +++++++++++-------- .../components/moonraker/moonraker_remove.py | 20 ++------ 3 files changed, 34 insertions(+), 45 deletions(-) diff --git a/kiauh/components/moonraker/menus/moonraker_remove_menu.py b/kiauh/components/moonraker/menus/moonraker_remove_menu.py index 03a458a..a30a599 100644 --- a/kiauh/components/moonraker/menus/moonraker_remove_menu.py +++ b/kiauh/components/moonraker/menus/moonraker_remove_menu.py @@ -25,7 +25,6 @@ class MoonrakerRemoveMenu(BaseMenu): self.remove_moonraker_dir = False self.remove_moonraker_env = False self.remove_moonraker_polkit = False - self.remove_moonraker_logs = False self.selection_state = False def set_previous_menu(self, previous_menu: Optional[Type[BaseMenu]]) -> None: @@ -42,7 +41,6 @@ class MoonrakerRemoveMenu(BaseMenu): "2": Option(method=self.toggle_remove_moonraker_dir, menu=False), "3": Option(method=self.toggle_remove_moonraker_env, menu=False), "4": Option(method=self.toggle_remove_moonraker_polkit, menu=False), - "5": Option(method=self.toggle_delete_moonraker_logs, menu=False), "c": Option(method=self.run_removal_process, menu=False), } @@ -56,7 +54,6 @@ class MoonrakerRemoveMenu(BaseMenu): o2 = checked if self.remove_moonraker_dir else unchecked o3 = checked if self.remove_moonraker_env else unchecked o4 = checked if self.remove_moonraker_polkit else unchecked - o5 = checked if self.remove_moonraker_logs else unchecked menu = textwrap.dedent( f""" ╔═══════════════════════════════════════════════════════╗ @@ -71,7 +68,6 @@ class MoonrakerRemoveMenu(BaseMenu): ║ 2) {o2} Remove Local Repository ║ ║ 3) {o3} Remove Python Environment ║ ║ 4) {o4} Remove Policy Kit Rules ║ - ║ 5) {o5} Delete all Log-Files ║ ╟───────────────────────────────────────────────────────╢ ║ C) Continue ║ ╟───────────────────────────────────────────────────────╢ @@ -84,7 +80,6 @@ class MoonrakerRemoveMenu(BaseMenu): self.remove_moonraker_dir = not self.remove_moonraker_dir self.remove_moonraker_env = not self.remove_moonraker_env self.remove_moonraker_polkit = not self.remove_moonraker_polkit - self.remove_moonraker_logs = not self.remove_moonraker_logs self.selection_state = not self.selection_state def toggle_remove_moonraker_service(self, **kwargs) -> None: @@ -99,16 +94,12 @@ class MoonrakerRemoveMenu(BaseMenu): def toggle_remove_moonraker_polkit(self, **kwargs) -> None: self.remove_moonraker_polkit = not self.remove_moonraker_polkit - def toggle_delete_moonraker_logs(self, **kwargs) -> None: - self.remove_moonraker_logs = not self.remove_moonraker_logs - def run_removal_process(self, **kwargs) -> None: if ( not self.remove_moonraker_service and not self.remove_moonraker_dir and not self.remove_moonraker_env and not self.remove_moonraker_polkit - and not self.remove_moonraker_logs ): error = f"{COLOR_RED}Nothing selected! Select options to remove first.{RESET_FORMAT}" print(error) @@ -119,14 +110,12 @@ class MoonrakerRemoveMenu(BaseMenu): self.remove_moonraker_dir, self.remove_moonraker_env, self.remove_moonraker_polkit, - self.remove_moonraker_logs, ) self.remove_moonraker_service = False self.remove_moonraker_dir = False self.remove_moonraker_env = False self.remove_moonraker_polkit = False - self.remove_moonraker_logs = False self._go_back() diff --git a/kiauh/components/moonraker/moonraker.py b/kiauh/components/moonraker/moonraker.py index e333e71..b02b828 100644 --- a/kiauh/components/moonraker/moonraker.py +++ b/kiauh/components/moonraker/moonraker.py @@ -8,8 +8,8 @@ # ======================================================================= # from __future__ import annotations -import subprocess from pathlib import Path +from subprocess import DEVNULL, CalledProcessError, run from typing import List from components.moonraker import MODULE_PATH, MOONRAKER_DIR, MOONRAKER_ENV_DIR @@ -49,43 +49,46 @@ class Moonraker(BaseInstance): def create(self, create_example_cfg: bool = False) -> None: Logger.print_status("Creating new Moonraker Instance ...") + service_template_path = MODULE_PATH.joinpath("assets/moonraker.service") - env_template_file_path = MODULE_PATH.joinpath("assets/moonraker.env") service_file_name = self.get_service_file_name(extension=True) service_file_target = SYSTEMD.joinpath(service_file_name) + + env_template_file_path = MODULE_PATH.joinpath("assets/moonraker.env") env_file_target = self.sysd_dir.joinpath("moonraker.env") try: self.create_folders([self.backup_dir, self.certs_dir, self._db_dir]) - self.write_service_file( - service_template_path, service_file_target, env_file_target + self._write_service_file( + service_template_path, + service_file_target, + env_file_target, ) - self.write_env_file(env_template_file_path, env_file_target) + self._write_env_file(env_template_file_path, env_file_target) - except subprocess.CalledProcessError as e: - Logger.print_error( - f"Error creating service file {service_file_target}: {e}" - ) + except CalledProcessError as e: + Logger.print_error(f"Error creating instance: {e}") raise except OSError as e: - Logger.print_error(f"Error writing file: {e}") + Logger.print_error(f"Error creating env file: {e}") raise def delete(self) -> None: service_file = self.get_service_file_name(extension=True) service_file_path = self.get_service_file_path() - Logger.print_status(f"Deleting Moonraker Instance: {service_file}") + Logger.print_status(f"Removing Moonraker Instance: {service_file}") try: command = ["sudo", "rm", "-f", service_file_path] - subprocess.run(command, check=True) - Logger.print_ok(f"Service file deleted: {service_file_path}") - except subprocess.CalledProcessError as e: - Logger.print_error(f"Error deleting service file: {e}") + run(command, check=True) + self._delete_logfiles() + Logger.print_ok("Instance successfully removed!") + except CalledProcessError as e: + Logger.print_error(f"Error removing instance: {e}") raise - def write_service_file( + def _write_service_file( self, service_template_path: Path, service_file_target: Path, @@ -95,15 +98,15 @@ class Moonraker(BaseInstance): service_template_path, env_file_target ) command = ["sudo", "tee", service_file_target] - subprocess.run( + run( command, input=service_content.encode(), - stdout=subprocess.DEVNULL, + stdout=DEVNULL, check=True, ) Logger.print_ok(f"Service file created: {service_file_target}") - def write_env_file( + def _write_env_file( self, env_template_file_path: Path, env_file_target: Path ) -> None: env_file_content = self._prep_env_file(env_template_file_path) @@ -156,3 +159,10 @@ class Moonraker(BaseInstance): port = scp.getint("server", "port", fallback=None) return port + + def _delete_logfiles(self) -> None: + from utils.fs_utils import run_remove_routines + + for log in list(self.log_dir.glob(f"{self.log}*")): + Logger.print_status(f"Remove '{log}'") + run_remove_routines(log) diff --git a/kiauh/components/moonraker/moonraker_remove.py b/kiauh/components/moonraker/moonraker_remove.py index 6c73834..c2b5a58 100644 --- a/kiauh/components/moonraker/moonraker_remove.py +++ b/kiauh/components/moonraker/moonraker_remove.py @@ -25,7 +25,6 @@ def run_moonraker_removal( remove_dir: bool, remove_env: bool, remove_polkit: bool, - delete_logs: bool, ) -> None: im = InstanceManager(Moonraker) @@ -38,16 +37,12 @@ def run_moonraker_removal( Logger.print_info("No Moonraker Services installed! Skipped ...") if (remove_polkit or remove_dir or remove_env) and im.instances: - Logger.print_warn("There are still other Moonraker services installed!") - Logger.print_warn("Therefor the following parts cannot be removed:") - Logger.print_warn( - """ - ● Moonraker PolicyKit rules - ● Moonraker local repository - ● Moonraker Python environment - """, - False, + Logger.print_info("There are still other Moonraker services installed") + Logger.print_info( + "● Moonraker PolicyKit rules were not removed.", prefix=False ) + Logger.print_info(f"● '{MOONRAKER_DIR}' was not removed.", prefix=False) + Logger.print_info(f"● '{MOONRAKER_ENV_DIR}' was not removed.", prefix=False) else: if remove_polkit: Logger.print_status("Removing all Moonraker policykit rules ...") @@ -59,11 +54,6 @@ def run_moonraker_removal( Logger.print_status("Removing Moonraker Python environment ...") run_remove_routines(MOONRAKER_ENV_DIR) - # delete moonraker logs of all instances - if delete_logs: - Logger.print_status("Removing all Moonraker logs ...") - delete_moonraker_logs(im.instances) - def select_instances_to_remove( instances: List[Moonraker],