UPDATE
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Literal
|
||||
from uuid import UUID
|
||||
|
||||
from pydantic import Field
|
||||
|
||||
from .common import ApiEnvelope, JsonObject, JsonValue, RouteContract, SchemaModel
|
||||
|
||||
|
||||
class FarmAlertsRequest(SchemaModel):
|
||||
farm_uuid: UUID
|
||||
sensor_uuid: UUID | None = None
|
||||
query: str | None = None
|
||||
|
||||
|
||||
class FarmAlertNotificationSchema(SchemaModel):
|
||||
id: int | None = None
|
||||
farm_uuid: str | None = None
|
||||
endpoint: str | None = None
|
||||
level: Literal['danger', 'warning', 'info'] | str
|
||||
title: str
|
||||
message: str
|
||||
suggested_action: str | None = None
|
||||
source_alert_id: str | None = None
|
||||
source_metric_type: str | None = None
|
||||
payload: JsonObject = Field(default_factory=dict)
|
||||
created_at: str | None = None
|
||||
updated_at: str | None = None
|
||||
|
||||
|
||||
class FarmAlertsTimelineItem(SchemaModel):
|
||||
timestamp: str | None = None
|
||||
level: Literal['danger', 'warning', 'info'] | str
|
||||
title: str
|
||||
description: str | None = None
|
||||
source_alert_id: str | None = None
|
||||
source_metric_type: str | None = None
|
||||
|
||||
|
||||
class FarmAlertsTrackerResponseData(SchemaModel):
|
||||
farm_uuid: str
|
||||
service_id: str | None = None
|
||||
knowledge_base: str | None = None
|
||||
tone_file: str | None = None
|
||||
tracker: JsonObject = Field(default_factory=dict)
|
||||
headline: str
|
||||
overview: str | None = None
|
||||
status_level: Literal['danger', 'warning', 'info'] | str
|
||||
notifications: list[FarmAlertNotificationSchema] = Field(default_factory=list)
|
||||
raw_llm_response: str | None = None
|
||||
structured_context: JsonObject = Field(default_factory=dict)
|
||||
|
||||
|
||||
class FarmAlertsTimelineResponseData(SchemaModel):
|
||||
farm_uuid: str
|
||||
service_id: str | None = None
|
||||
knowledge_base: str | None = None
|
||||
tone_file: str | None = None
|
||||
tracker: JsonObject = Field(default_factory=dict)
|
||||
headline: str
|
||||
overview: str | None = None
|
||||
timeline: list[FarmAlertsTimelineItem] = Field(default_factory=list)
|
||||
notifications: list[FarmAlertNotificationSchema] = Field(default_factory=list)
|
||||
raw_llm_response: str | None = None
|
||||
structured_context: JsonObject = Field(default_factory=dict)
|
||||
|
||||
|
||||
class FarmAlertsTrackerResponse(ApiEnvelope[FarmAlertsTrackerResponseData]):
|
||||
pass
|
||||
|
||||
|
||||
class FarmAlertsTimelineResponse(ApiEnvelope[FarmAlertsTimelineResponseData]):
|
||||
pass
|
||||
|
||||
|
||||
CONTRACTS = [
|
||||
RouteContract(
|
||||
method='POST',
|
||||
path='/api/farm-alerts/tracker/',
|
||||
request_model=FarmAlertsRequest.__name__,
|
||||
response_model=FarmAlertsTrackerResponse.__name__,
|
||||
),
|
||||
RouteContract(
|
||||
method='POST',
|
||||
path='/api/farm-alerts/timeline/',
|
||||
request_model=FarmAlertsRequest.__name__,
|
||||
response_model=FarmAlertsTimelineResponse.__name__,
|
||||
),
|
||||
]
|
||||
Reference in New Issue
Block a user