selfprivacy-rest-api/selfprivacy_api/services/service.py
2022-08-13 01:29:18 +04:00

138 lines
2.4 KiB
Python

"""Abstract class for a service running on a server"""
from abc import ABC, abstractmethod
from enum import Enum
import typing
from pydantic import BaseModel
from selfprivacy_api.utils.block_devices import BlockDevice
class ServiceStatus(Enum):
"""Enum for service status"""
RUNNING = "RUNNING"
DEGRADED = "DEGRADED"
ERROR = "ERROR"
STOPPED = "STOPPED"
OFF = "OFF"
class ServiceDnsRecord(BaseModel):
type: str
name: str
content: str
ttl: int
priority: typing.Optional[int] = None
class Service(ABC):
"""
Service here is some software that is hosted on the server and
can be installed, configured and used by a user.
"""
@staticmethod
@abstractmethod
def get_id() -> str:
pass
@staticmethod
@abstractmethod
def get_display_name() -> str:
pass
@staticmethod
@abstractmethod
def get_description() -> str:
pass
@staticmethod
@abstractmethod
def get_svg_icon() -> str:
pass
@staticmethod
@abstractmethod
def get_url() -> typing.Optional[str]:
pass
@staticmethod
@abstractmethod
def is_movable() -> bool:
pass
@staticmethod
@abstractmethod
def is_required() -> bool:
pass
@staticmethod
@abstractmethod
def is_enabled() -> bool:
pass
@staticmethod
@abstractmethod
def get_status() -> ServiceStatus:
pass
@staticmethod
@abstractmethod
def enable():
pass
@staticmethod
@abstractmethod
def disable():
pass
@staticmethod
@abstractmethod
def stop():
pass
@staticmethod
@abstractmethod
def start():
pass
@staticmethod
@abstractmethod
def restart():
pass
@staticmethod
@abstractmethod
def get_configuration():
pass
@staticmethod
@abstractmethod
def set_configuration(config_items):
pass
@staticmethod
@abstractmethod
def get_logs():
pass
@staticmethod
@abstractmethod
def get_storage_usage() -> int:
pass
@staticmethod
@abstractmethod
def get_dns_records() -> typing.List[ServiceDnsRecord]:
pass
@staticmethod
@abstractmethod
def get_location() -> str:
pass
@abstractmethod
def move_to_volume(self, volume: BlockDevice):
pass