63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
from datetime import datetime
|
|
from typing import Literal
|
|
|
|
from pydantic import BaseModel, Field, field_validator
|
|
|
|
from app.schemas.validators import normalize_required_text, validate_log_source
|
|
|
|
|
|
ServiceType = Literal["systemd", "docker"]
|
|
ServiceActionName = Literal["start", "stop", "restart"]
|
|
ServiceStatusName = Literal["running", "stopped", "unknown"]
|
|
|
|
|
|
class ManagedServiceCreate(BaseModel):
|
|
name: str = Field(min_length=1, max_length=128)
|
|
service_type: ServiceType = "systemd"
|
|
control_enabled: bool = True
|
|
log_source: str | None = Field(default=None, max_length=512)
|
|
|
|
@field_validator("name")
|
|
@classmethod
|
|
def validate_name_value(cls, value: str) -> str:
|
|
return normalize_required_text(value, field_name="name")
|
|
|
|
@field_validator("log_source")
|
|
@classmethod
|
|
def validate_log_source_value(cls, value: str | None) -> str | None:
|
|
return validate_log_source(value)
|
|
|
|
|
|
class ManagedServiceUpdate(BaseModel):
|
|
name: str | None = Field(default=None, min_length=1, max_length=128)
|
|
service_type: ServiceType | None = None
|
|
control_enabled: bool | None = None
|
|
log_source: str | None = Field(default=None, max_length=512)
|
|
|
|
@field_validator("name")
|
|
@classmethod
|
|
def validate_name_value(cls, value: str | None) -> str | None:
|
|
if value is None:
|
|
return None
|
|
return normalize_required_text(value, field_name="name")
|
|
|
|
@field_validator("log_source")
|
|
@classmethod
|
|
def validate_log_source_value(cls, value: str | None) -> str | None:
|
|
return validate_log_source(value)
|
|
|
|
|
|
class ManagedServiceRead(BaseModel):
|
|
id: int
|
|
server_id: int
|
|
name: str
|
|
service_type: ServiceType
|
|
control_enabled: bool
|
|
log_source: str | None
|
|
created_at: datetime
|
|
status: ServiceStatusName
|
|
last_checked_at: datetime
|
|
detail: str | None = None
|
|
|
|
model_config = {"from_attributes": True}
|