refactor: delete moonraker logs with their respective instances upon instance removal

Signed-off-by: Dominik Willner <th33xitus@gmail.com>
This commit is contained in:
dw-0
2024-06-30 18:27:00 +02:00
parent 9ec12ba0b8
commit 94e95671ca
3 changed files with 34 additions and 45 deletions

View File

@@ -25,7 +25,6 @@ class MoonrakerRemoveMenu(BaseMenu):
self.remove_moonraker_dir = False self.remove_moonraker_dir = False
self.remove_moonraker_env = False self.remove_moonraker_env = False
self.remove_moonraker_polkit = False self.remove_moonraker_polkit = False
self.remove_moonraker_logs = False
self.selection_state = False self.selection_state = False
def set_previous_menu(self, previous_menu: Optional[Type[BaseMenu]]) -> None: 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), "2": Option(method=self.toggle_remove_moonraker_dir, menu=False),
"3": Option(method=self.toggle_remove_moonraker_env, menu=False), "3": Option(method=self.toggle_remove_moonraker_env, menu=False),
"4": Option(method=self.toggle_remove_moonraker_polkit, 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), "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 o2 = checked if self.remove_moonraker_dir else unchecked
o3 = checked if self.remove_moonraker_env else unchecked o3 = checked if self.remove_moonraker_env else unchecked
o4 = checked if self.remove_moonraker_polkit else unchecked o4 = checked if self.remove_moonraker_polkit else unchecked
o5 = checked if self.remove_moonraker_logs else unchecked
menu = textwrap.dedent( menu = textwrap.dedent(
f""" f"""
╔═══════════════════════════════════════════════════════╗ ╔═══════════════════════════════════════════════════════╗
@@ -71,7 +68,6 @@ class MoonrakerRemoveMenu(BaseMenu):
║ 2) {o2} Remove Local Repository ║ ║ 2) {o2} Remove Local Repository ║
║ 3) {o3} Remove Python Environment ║ ║ 3) {o3} Remove Python Environment ║
║ 4) {o4} Remove Policy Kit Rules ║ ║ 4) {o4} Remove Policy Kit Rules ║
║ 5) {o5} Delete all Log-Files ║
╟───────────────────────────────────────────────────────╢ ╟───────────────────────────────────────────────────────╢
║ C) Continue ║ ║ C) Continue ║
╟───────────────────────────────────────────────────────╢ ╟───────────────────────────────────────────────────────╢
@@ -84,7 +80,6 @@ class MoonrakerRemoveMenu(BaseMenu):
self.remove_moonraker_dir = not self.remove_moonraker_dir self.remove_moonraker_dir = not self.remove_moonraker_dir
self.remove_moonraker_env = not self.remove_moonraker_env self.remove_moonraker_env = not self.remove_moonraker_env
self.remove_moonraker_polkit = not self.remove_moonraker_polkit 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 self.selection_state = not self.selection_state
def toggle_remove_moonraker_service(self, **kwargs) -> None: def toggle_remove_moonraker_service(self, **kwargs) -> None:
@@ -99,16 +94,12 @@ class MoonrakerRemoveMenu(BaseMenu):
def toggle_remove_moonraker_polkit(self, **kwargs) -> None: def toggle_remove_moonraker_polkit(self, **kwargs) -> None:
self.remove_moonraker_polkit = not self.remove_moonraker_polkit 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: def run_removal_process(self, **kwargs) -> None:
if ( if (
not self.remove_moonraker_service not self.remove_moonraker_service
and not self.remove_moonraker_dir and not self.remove_moonraker_dir
and not self.remove_moonraker_env and not self.remove_moonraker_env
and not self.remove_moonraker_polkit 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}" error = f"{COLOR_RED}Nothing selected! Select options to remove first.{RESET_FORMAT}"
print(error) print(error)
@@ -119,14 +110,12 @@ class MoonrakerRemoveMenu(BaseMenu):
self.remove_moonraker_dir, self.remove_moonraker_dir,
self.remove_moonraker_env, self.remove_moonraker_env,
self.remove_moonraker_polkit, self.remove_moonraker_polkit,
self.remove_moonraker_logs,
) )
self.remove_moonraker_service = False self.remove_moonraker_service = False
self.remove_moonraker_dir = False self.remove_moonraker_dir = False
self.remove_moonraker_env = False self.remove_moonraker_env = False
self.remove_moonraker_polkit = False self.remove_moonraker_polkit = False
self.remove_moonraker_logs = False
self._go_back() self._go_back()

View File

@@ -8,8 +8,8 @@
# ======================================================================= # # ======================================================================= #
from __future__ import annotations from __future__ import annotations
import subprocess
from pathlib import Path from pathlib import Path
from subprocess import DEVNULL, CalledProcessError, run
from typing import List from typing import List
from components.moonraker import MODULE_PATH, MOONRAKER_DIR, MOONRAKER_ENV_DIR 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: def create(self, create_example_cfg: bool = False) -> None:
Logger.print_status("Creating new Moonraker Instance ...") Logger.print_status("Creating new Moonraker Instance ...")
service_template_path = MODULE_PATH.joinpath("assets/moonraker.service") 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_name = self.get_service_file_name(extension=True)
service_file_target = SYSTEMD.joinpath(service_file_name) 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") env_file_target = self.sysd_dir.joinpath("moonraker.env")
try: try:
self.create_folders([self.backup_dir, self.certs_dir, self._db_dir]) self.create_folders([self.backup_dir, self.certs_dir, self._db_dir])
self.write_service_file( self._write_service_file(
service_template_path, service_file_target, env_file_target 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: except CalledProcessError as e:
Logger.print_error( Logger.print_error(f"Error creating instance: {e}")
f"Error creating service file {service_file_target}: {e}"
)
raise raise
except OSError as e: except OSError as e:
Logger.print_error(f"Error writing file: {e}") Logger.print_error(f"Error creating env file: {e}")
raise raise
def delete(self) -> None: def delete(self) -> None:
service_file = self.get_service_file_name(extension=True) service_file = self.get_service_file_name(extension=True)
service_file_path = self.get_service_file_path() 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: try:
command = ["sudo", "rm", "-f", service_file_path] command = ["sudo", "rm", "-f", service_file_path]
subprocess.run(command, check=True) run(command, check=True)
Logger.print_ok(f"Service file deleted: {service_file_path}") self._delete_logfiles()
except subprocess.CalledProcessError as e: Logger.print_ok("Instance successfully removed!")
Logger.print_error(f"Error deleting service file: {e}") except CalledProcessError as e:
Logger.print_error(f"Error removing instance: {e}")
raise raise
def write_service_file( def _write_service_file(
self, self,
service_template_path: Path, service_template_path: Path,
service_file_target: Path, service_file_target: Path,
@@ -95,15 +98,15 @@ class Moonraker(BaseInstance):
service_template_path, env_file_target service_template_path, env_file_target
) )
command = ["sudo", "tee", service_file_target] command = ["sudo", "tee", service_file_target]
subprocess.run( run(
command, command,
input=service_content.encode(), input=service_content.encode(),
stdout=subprocess.DEVNULL, stdout=DEVNULL,
check=True, check=True,
) )
Logger.print_ok(f"Service file created: {service_file_target}") 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 self, env_template_file_path: Path, env_file_target: Path
) -> None: ) -> None:
env_file_content = self._prep_env_file(env_template_file_path) 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) port = scp.getint("server", "port", fallback=None)
return port 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)

View File

@@ -25,7 +25,6 @@ def run_moonraker_removal(
remove_dir: bool, remove_dir: bool,
remove_env: bool, remove_env: bool,
remove_polkit: bool, remove_polkit: bool,
delete_logs: bool,
) -> None: ) -> None:
im = InstanceManager(Moonraker) im = InstanceManager(Moonraker)
@@ -38,16 +37,12 @@ def run_moonraker_removal(
Logger.print_info("No Moonraker Services installed! Skipped ...") Logger.print_info("No Moonraker Services installed! Skipped ...")
if (remove_polkit or remove_dir or remove_env) and im.instances: if (remove_polkit or remove_dir or remove_env) and im.instances:
Logger.print_warn("There are still other Moonraker services installed!") Logger.print_info("There are still other Moonraker services installed")
Logger.print_warn("Therefor the following parts cannot be removed:") Logger.print_info(
Logger.print_warn( "● Moonraker PolicyKit rules were not removed.", prefix=False
"""
● Moonraker PolicyKit rules
● Moonraker local repository
● Moonraker Python environment
""",
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: else:
if remove_polkit: if remove_polkit:
Logger.print_status("Removing all Moonraker policykit rules ...") Logger.print_status("Removing all Moonraker policykit rules ...")
@@ -59,11 +54,6 @@ def run_moonraker_removal(
Logger.print_status("Removing Moonraker Python environment ...") Logger.print_status("Removing Moonraker Python environment ...")
run_remove_routines(MOONRAKER_ENV_DIR) 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( def select_instances_to_remove(
instances: List[Moonraker], instances: List[Moonraker],