From f333e791e1a75e259c7f03f02aeb73de33060ac2 Mon Sep 17 00:00:00 2001 From: Houkime <> Date: Fri, 8 Mar 2024 09:04:05 +0000 Subject: [PATCH] refactor(service): break out ServiceStatus and ServiceDNSRecord --- selfprivacy_api/models/services.py | 24 ++++++++++++++++++++ selfprivacy_api/services/service.py | 34 +++++------------------------ selfprivacy_api/utils/systemd.py | 6 ++--- 3 files changed, 33 insertions(+), 31 deletions(-) create mode 100644 selfprivacy_api/models/services.py diff --git a/selfprivacy_api/models/services.py b/selfprivacy_api/models/services.py new file mode 100644 index 0000000..638ecf8 --- /dev/null +++ b/selfprivacy_api/models/services.py @@ -0,0 +1,24 @@ +from enum import Enum +from typing import Optional +from pydantic import BaseModel + + +class ServiceStatus(Enum): + """Enum for service status""" + + ACTIVE = "ACTIVE" + RELOADING = "RELOADING" + INACTIVE = "INACTIVE" + FAILED = "FAILED" + ACTIVATING = "ACTIVATING" + DEACTIVATING = "DEACTIVATING" + OFF = "OFF" + + +class ServiceDnsRecord(BaseModel): + type: str + name: str + content: str + ttl: int + display_name: str + priority: Optional[int] = None diff --git a/selfprivacy_api/services/service.py b/selfprivacy_api/services/service.py index 9add2dc..c44f51e 100644 --- a/selfprivacy_api/services/service.py +++ b/selfprivacy_api/services/service.py @@ -1,13 +1,15 @@ """Abstract class for a service running on a server""" from abc import ABC, abstractmethod -from enum import Enum from typing import List, Optional -from pydantic import BaseModel -from selfprivacy_api.jobs import Job, Jobs, JobStatus, report_progress - +from selfprivacy_api import utils +from selfprivacy_api.utils import ReadUserData, WriteUserData +from selfprivacy_api.utils.waitloop import wait_until_true from selfprivacy_api.utils.block_devices import BlockDevice, BlockDevices +from selfprivacy_api.jobs import Job, Jobs, JobStatus, report_progress + +from selfprivacy_api.models.services import ServiceStatus, ServiceDnsRecord from selfprivacy_api.services.generic_size_counter import get_storage_usage from selfprivacy_api.services.owned_path import OwnedPath, Bind from selfprivacy_api.services.moving import ( @@ -20,34 +22,10 @@ from selfprivacy_api.services.moving import ( move_data_to_volume, ) -from selfprivacy_api import utils -from selfprivacy_api.utils.waitloop import wait_until_true -from selfprivacy_api.utils import ReadUserData, WriteUserData DEFAULT_START_STOP_TIMEOUT = 5 * 60 -class ServiceStatus(Enum): - """Enum for service status""" - - ACTIVE = "ACTIVE" - RELOADING = "RELOADING" - INACTIVE = "INACTIVE" - FAILED = "FAILED" - ACTIVATING = "ACTIVATING" - DEACTIVATING = "DEACTIVATING" - OFF = "OFF" - - -class ServiceDnsRecord(BaseModel): - type: str - name: str - content: str - ttl: int - display_name: str - priority: Optional[int] = None - - class Service(ABC): """ Service here is some software that is hosted on the server and diff --git a/selfprivacy_api/utils/systemd.py b/selfprivacy_api/utils/systemd.py index f8b6244..3b3ec6c 100644 --- a/selfprivacy_api/utils/systemd.py +++ b/selfprivacy_api/utils/systemd.py @@ -2,16 +2,16 @@ import subprocess from typing import List -from selfprivacy_api.services.service import ServiceStatus +from selfprivacy_api.models.services import ServiceStatus -def get_service_status(service: str) -> ServiceStatus: +def get_service_status(unit: str) -> ServiceStatus: """ Return service status from systemd. Use systemctl show to get the status of a service. Get ActiveState from the output. """ - service_status = subprocess.check_output(["systemctl", "show", service]) + service_status = subprocess.check_output(["systemctl", "show", unit]) if b"LoadState=not-found" in service_status: return ServiceStatus.OFF if b"ActiveState=active" in service_status: