selfprivacy-rest-api/selfprivacy_api/services/service.py

141 lines
2.5 KiB
Python
Raw Normal View History

2022-07-25 14:08:31 +00:00
"""Abstract class for a service running on a server"""
from abc import ABC, abstractmethod
from enum import Enum
import typing
2022-07-25 14:08:31 +00:00
2022-08-11 19:11:00 +00:00
from pydantic import BaseModel
2022-08-17 20:58:56 +00:00
from selfprivacy_api.jobs import Job
2022-08-11 19:11:00 +00:00
2022-08-02 19:50:16 +00:00
from selfprivacy_api.utils.block_devices import BlockDevice
2022-07-25 14:08:31 +00:00
class ServiceStatus(Enum):
"""Enum for service status"""
ACTIVE = "ACTIVE"
RELOADING = "RELOADING"
INACTIVE = "INACTIVE"
FAILED = "FAILED"
ACTIVATING = "ACTIVATING"
DEACTIVATING = "DEACTIVATING"
2022-07-25 14:08:31 +00:00
OFF = "OFF"
2022-08-11 19:11:00 +00:00
class ServiceDnsRecord(BaseModel):
type: str
name: str
content: str
ttl: int
2022-08-11 19:11:00 +00:00
priority: typing.Optional[int] = None
2022-07-25 14:08:31 +00:00
class Service(ABC):
"""
Service here is some software that is hosted on the server and
can be installed, configured and used by a user.
"""
2022-08-11 19:11:00 +00:00
@staticmethod
2022-07-25 14:08:31 +00:00
@abstractmethod
2022-08-11 19:11:00 +00:00
def get_id() -> str:
2022-07-25 14:08:31 +00:00
pass
2022-08-11 19:11:00 +00:00
@staticmethod
2022-07-25 14:08:31 +00:00
@abstractmethod
2022-08-11 19:11:00 +00:00
def get_display_name() -> str:
2022-07-25 14:08:31 +00:00
pass
2022-08-11 19:11:00 +00:00
@staticmethod
2022-07-25 14:08:31 +00:00
@abstractmethod
2022-08-11 19:11:00 +00:00
def get_description() -> str:
2022-07-25 14:08:31 +00:00
pass
2022-08-11 19:11:00 +00:00
@staticmethod
2022-07-25 14:08:31 +00:00
@abstractmethod
2022-08-11 19:11:00 +00:00
def get_svg_icon() -> str:
2022-07-25 14:08:31 +00:00
pass
2022-08-12 21:29:18 +00:00
@staticmethod
@abstractmethod
def get_url() -> typing.Optional[str]:
pass
2022-08-11 19:11:00 +00:00
@staticmethod
2022-08-10 23:36:36 +00:00
@abstractmethod
def is_movable() -> bool:
pass
2022-08-11 19:11:00 +00:00
@staticmethod
2022-08-10 23:36:36 +00:00
@abstractmethod
def is_required() -> bool:
pass
2022-08-11 19:11:00 +00:00
@staticmethod
2022-07-25 14:08:31 +00:00
@abstractmethod
2022-08-11 19:11:00 +00:00
def is_enabled() -> bool:
2022-07-25 14:08:31 +00:00
pass
2022-08-11 19:11:00 +00:00
@staticmethod
2022-07-25 14:08:31 +00:00
@abstractmethod
2022-08-11 19:11:00 +00:00
def get_status() -> ServiceStatus:
2022-07-25 14:08:31 +00:00
pass
2022-08-11 19:11:00 +00:00
@staticmethod
2022-07-25 14:08:31 +00:00
@abstractmethod
2022-08-11 19:11:00 +00:00
def enable():
2022-07-25 14:08:31 +00:00
pass
2022-08-11 19:11:00 +00:00
@staticmethod
2022-07-25 14:08:31 +00:00
@abstractmethod
2022-08-11 19:11:00 +00:00
def disable():
2022-07-25 14:08:31 +00:00
pass
2022-08-11 19:11:00 +00:00
@staticmethod
2022-07-25 14:08:31 +00:00
@abstractmethod
2022-08-11 19:11:00 +00:00
def stop():
2022-07-25 14:08:31 +00:00
pass
2022-08-11 19:11:00 +00:00
@staticmethod
2022-07-25 14:08:31 +00:00
@abstractmethod
2022-08-11 19:11:00 +00:00
def start():
2022-07-25 14:08:31 +00:00
pass
2022-08-11 19:11:00 +00:00
@staticmethod
2022-07-25 14:08:31 +00:00
@abstractmethod
2022-08-11 19:11:00 +00:00
def restart():
2022-07-25 14:08:31 +00:00
pass
2022-08-11 19:11:00 +00:00
@staticmethod
2022-07-25 14:08:31 +00:00
@abstractmethod
2022-08-11 19:11:00 +00:00
def get_configuration():
2022-07-25 14:08:31 +00:00
pass
2022-08-11 19:11:00 +00:00
@staticmethod
2022-07-25 14:08:31 +00:00
@abstractmethod
2022-08-11 19:11:00 +00:00
def set_configuration(config_items):
2022-07-25 14:08:31 +00:00
pass
2022-08-11 19:11:00 +00:00
@staticmethod
2022-07-25 14:08:31 +00:00
@abstractmethod
2022-08-11 19:11:00 +00:00
def get_logs():
2022-07-25 14:08:31 +00:00
pass
2022-08-11 19:11:00 +00:00
@staticmethod
2022-07-25 14:08:31 +00:00
@abstractmethod
2022-08-11 19:11:00 +00:00
def get_storage_usage() -> int:
2022-07-25 14:08:31 +00:00
pass
2022-08-11 19:11:00 +00:00
@staticmethod
@abstractmethod
2022-08-11 19:11:00 +00:00
def get_dns_records() -> typing.List[ServiceDnsRecord]:
pass
2022-08-02 19:50:16 +00:00
2022-08-11 19:11:00 +00:00
@staticmethod
2022-08-02 19:50:16 +00:00
@abstractmethod
2022-08-11 19:11:00 +00:00
def get_location() -> str:
2022-08-02 19:50:16 +00:00
pass
@abstractmethod
2022-08-17 20:58:56 +00:00
def move_to_volume(self, volume: BlockDevice) -> Job:
2022-08-02 19:50:16 +00:00
pass