Files
RelayOps/backend/app/schemas/managed_service.py
2026-06-07 02:32:28 +03:00

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}