main
py 175 lines 4.1 KB
Raw
1 from typing import Dict
2 from typing import List
3 from typing import Optional
4 from typing import Union
5
6 from pydantic import BaseModel
7 from pydantic import Field
8
9
10 class Provider(BaseModel):
11 require_values: Optional[bool] = None
12 template: Optional[str] = None
13 type: str
14
15
16 class FieldSpecItem(BaseModel):
17 data_type: str
18 providers: List[Provider]
19
20
21 class ExpressionItem(BaseModel):
22 expr: str
23 ref: Optional[str] = None
24 value: Optional[int] = None
25 left: Optional["ExpressionItem"] = None
26 right: Optional["ExpressionItem"] = None
27
28
29 ExpressionItem.model_rebuild()
30
31
32 class Conditions(BaseModel):
33 expression: Optional[Union[str, ExpressionItem]] = None
34
35
36 class SeriesItem(BaseModel):
37 type: Optional[str] = None
38 id: str
39 field: Optional[str] = None
40
41
42 class Config(BaseModel):
43 conditions: Optional[Conditions] = Field(None, description="The conditions to be met for the config")
44 execute_every_ms: Optional[int] = Field(None, description="The execution frequency in milliseconds")
45 group_by: Optional[List[str]] = Field(None, description="The fields to group by")
46 query: Optional[str] = Field(None, description="The query to be executed")
47 query_parameters: Optional[List[str]] = Field(None, description="The parameters for the query")
48 search_within_ms: Optional[int] = Field(None, description="The search window in milliseconds")
49 series: Optional[Union[str, List[SeriesItem]]] = Field(None, description="The series to be included in the config")
50 streams: Optional[List[str]] = Field(None, description="The streams to be included in the config")
51 type: Optional[str] = Field(None, description="The type of the config")
52
53
54 class NotificationSettings(BaseModel):
55 backlog_size: int
56 grace_period_ms: int
57
58
59 class Storage(BaseModel):
60 streams: List[str]
61 type: str
62
63
64 class EventDefinition(BaseModel):
65 _scope: str
66 alert: bool
67 config: Optional[Config] = Field(None, description="The configuration for the event definition")
68 description: str
69 field_spec: Dict[str, FieldSpecItem]
70 id: str
71 key_spec: List[str]
72 notification_settings: NotificationSettings
73 notifications: Optional[List[Dict[str, Union[str, None]]]] = None
74 priority: int
75 storage: List[Storage]
76 title: str
77
78
79 class GraylogEventDefinitionsResponse(BaseModel):
80 event_definitions: List[EventDefinition]
81 message: str
82 success: bool
83
84
85 class AlertQuery(BaseModel):
86 query: Optional[str] = ""
87 page: int = 1
88 per_page: int = 100
89 filter: Optional[Dict[str, Union[str, List[str]]]] = {
90 "alerts": "only",
91 "event_definitions": [],
92 }
93 timerange: Optional[Dict[str, Union[int, str]]] = {
94 "range": 86400,
95 "type": "relative",
96 }
97
98
99 class SimplifiedEventDefinition(BaseModel):
100 description: str
101 id: str
102 title: str
103
104
105 class Stream(BaseModel):
106 description: str
107 id: str
108 title: str
109
110
111 class Context(BaseModel):
112 event_definitions: Dict[str, SimplifiedEventDefinition]
113 streams: Dict[str, Stream]
114
115
116 class Event(BaseModel):
117 alert: bool
118 event_definition_id: str
119 event_definition_type: str
120 fields: Dict[str, str]
121 group_by_fields: Dict[str, str]
122 id: str
123 key: Optional[str] = None
124 key_tuple: List[str]
125 message: str
126 origin_context: str
127 priority: int
128 source: str
129 source_streams: List[str]
130 streams: List[str]
131 timerange_end: Optional[str] = None
132 timerange_start: Optional[str] = None
133 timestamp: str
134 timestamp_processing: str
135
136
137 class AlertEvent(BaseModel):
138 event: Event
139 index_name: str
140 index_type: str
141
142
143 class Filter(BaseModel):
144 alerts: str
145 event_definitions: List[str]
146
147
148 class Timerange(BaseModel):
149 range: int
150 type: str
151
152
153 class Parameters(BaseModel):
154 page: int
155 per_page: int
156 query: str
157 sort_by: str
158 sort_direction: str
159 timerange: Timerange
160 filter: Filter
161
162
163 class Alerts(BaseModel):
164 context: Context
165 duration: int
166 events: List[AlertEvent]
167 parameters: Parameters
168 total_events: int
169 used_indices: List[str]
170
171
172 class GraylogAlertsResponse(BaseModel):
173 alerts: Alerts
174 message: str
175 success: bool