Improve timestamp handling and event navigation

This commit is contained in:
Stanislav Rossovskii
2026-05-27 11:01:27 +04:00
parent edc51e9c59
commit 71f0035b0b
37 changed files with 485 additions and 109 deletions

View File

@@ -5,6 +5,8 @@ from uuid import UUID
from pydantic import BaseModel, ConfigDict, Field, field_validator
from .timeutil import require_utc_datetime
ID_PATTERN = r"^[A-Za-z0-9._:-]+$"
UUIDV7_PATTERN = r"^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
ID_RE = re.compile(ID_PATTERN)
@@ -80,6 +82,11 @@ class HeartbeatRequest(BaseModel):
features: AgentFeatures
labels: dict[str, str] = Field(default_factory=dict)
@field_validator("observed_at")
@classmethod
def _observed_at_must_be_utc(cls, v: datetime) -> datetime:
return require_utc_datetime(v)
@field_validator("labels")
@classmethod
def _check_labels(cls, v: dict[str, str]) -> dict[str, str]:
@@ -109,6 +116,11 @@ class CheckResultEvent(BaseModel):
notifications_enabled: bool = True
incident_key: str | None = Field(default=None, max_length=256)
@field_validator("observed_at")
@classmethod
def _observed_at_must_be_utc(cls, v: datetime) -> datetime:
return require_utc_datetime(v)
@field_validator("output")
@classmethod
def _check_output_bytes(cls, v: str | None) -> str | None: