Структура объекта

Принимаемый JSON-объект должен строго соответствовать нижеприведенной структуре.

Необходимый минимум структуры объектов представлен в виде структуры Python pydantic

1. Обязательная часть

class LogMessage(BaseModel):
    SERVER_KEY: str
    TYPE_ID: str
    HOOK_ID: str
    MESSAGE: Message
class Message(BaseModel):
    jobID: constr(strip_whitespace=True, min_length=32, max_length=32)
    contour: constr(strip_whitespace=True, min_length=3)
    application: constr(strip_whitespace=True, min_length=3)
    layer: constr(strip_whitespace=True, min_length=3)
    module: constr(strip_whitespace=True, min_length=3)
    function: constr(strip_whitespace=True, min_length=3)
    user: User ## деперсонифицируется!
    URL: Optional[str] = ""
    queryParams: Optional[str] = ""
    event: constr(strip_whitespace=True, min_length=50) ## деперсонифицируется!
    traceback: constr(strip_whitespace=True, min_length=120) ## деперсонифицируется!
class User(BaseModel):
    ip: constr(strip_whitespace=True, min_length=7)
    ID: int
    login: constr(strip_whitespace=True, min_length=5) ## деперсонифицируется как ИвановИИ!
    post: constr(strip_whitespace=True, min_length=5)
    role: constr(strip_whitespace=True, min_length=5)
    department: constr(strip_whitespace=True, min_length=5)

2. Опциональная часть

Агентские данные - информация о состоянии рабочего места в момент инцидента. Является частью проекта Инвентаризация. Эта часть кода реализована командой профессионалов "ВистаМед" и может быть предоставлена по запросу. Представляет собой кроссплатформенный исполняемый файл для установки на локальные ПК с целью передачи данных в Мониторинг о состоянии клиента

Базовый исходный код проекта Агент на Python

class LogMessage(BaseModel):
    SERVER_KEY: str
    TYPE_ID: str
    HOOK_ID: str
    MESSAGE: Message
    AGENT: Optional[Agent]

2.1 Полные агентские данные

class Agent_full(BaseModel):
    hostname: constr(strip_whitespace=True, min_length=5)
    ip: constr(strip_whitespace=True, min_length=7)
    os_version: constr(strip_whitespace=True, min_length=3)
    os_name: constr(strip_whitespace=True, min_length=5)
    os_release: constr(strip_whitespace=True, min_length=1)
    cpu: constr(strip_whitespace=True, min_length=3)
    cpu_usage: constr(strip_whitespace=True, min_length=2)
    memory: constr(strip_whitespace=True, min_length=3)
    memory_used: constr(strip_whitespace=True, min_length=3)
    memory_avail: constr(strip_whitespace=True, min_length=1)
    boot_time: constr(strip_whitespace=True, min_length=3)
    uptime: float
    username: constr(strip_whitespace=True, min_length=3)
    mac_address: constr(strip_whitespace=True, min_length=5)
    processes: Optional[Dict[str, int]]

2.2 Агентские данные при сетевых сбоях

class Agent_ping(BaseModel):
    avg: constr(strip_whitespace=True, min_length=5)
    ip: constr(strip_whitespace=True, min_length=7)
    hostname: constr(strip_whitespace=True, min_length=3)
    max: constr(strip_whitespace=True, min_length=1)
    min: constr(strip_whitespace=True, min_length=1)