1#[derive(serde::Serialize, serde::Deserialize)]
3#[serde(rename_all = "snake_case")]
4#[derive(Clone, PartialEq, ::prost::Message)]
5pub struct Metric {
6 #[prost(string, tag = "1")]
7 pub query: ::prost::alloc::string::String,
8}
9#[derive(serde::Serialize, serde::Deserialize)]
10#[serde(rename_all = "snake_case")]
11#[derive(Clone, PartialEq, ::prost::Message)]
12pub struct RequestBasedMetricSli {
13 #[prost(message, optional, tag = "1")]
14 pub good_events: ::core::option::Option<Metric>,
15 #[prost(message, optional, tag = "2")]
16 pub total_events: ::core::option::Option<Metric>,
17}
18#[derive(serde::Serialize, serde::Deserialize)]
19#[serde(rename_all = "snake_case")]
20#[derive(Clone, PartialEq, ::prost::Message)]
21pub struct WindowBasedMetricSli {
22 #[prost(message, optional, tag = "1")]
23 pub query: ::core::option::Option<Metric>,
24 #[prost(enumeration = "WindowSloWindow", tag = "2")]
25 pub window: i32,
26 #[prost(enumeration = "ComparisonOperator", tag = "3")]
27 pub comparison_operator: i32,
28 #[prost(float, tag = "4")]
29 pub threshold: f32,
30 #[prost(enumeration = "MissingDataStrategy", tag = "5")]
31 pub missing_data_strategy: i32,
32}
33#[derive(serde::Serialize, serde::Deserialize)]
34#[serde(rename_all = "snake_case")]
35#[derive(Clone, Copy, PartialEq, ::prost::Message)]
36pub struct Revision {
37 #[prost(int32, tag = "1")]
38 pub revision: i32,
39 #[prost(message, optional, tag = "2")]
40 pub update_time: ::core::option::Option<::prost_wkt_types::Timestamp>,
41}
42#[derive(serde::Serialize, serde::Deserialize)]
43#[serde(rename_all = "snake_case")]
44#[derive(Clone, PartialEq, ::prost::Message)]
45pub struct Grouping {
46 #[prost(string, repeated, tag = "1")]
47 pub labels: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
48}
49#[derive(serde::Serialize, serde::Deserialize)]
50#[serde(rename_all = "snake_case")]
51#[derive(Clone, PartialEq, ::prost::Message)]
52pub struct Slo {
53 #[prost(string, optional, tag = "1")]
54 pub id: ::core::option::Option<::prost::alloc::string::String>,
55 #[prost(string, tag = "2")]
56 pub name: ::prost::alloc::string::String,
57 #[prost(string, optional, tag = "3")]
58 pub description: ::core::option::Option<::prost::alloc::string::String>,
59 #[prost(string, optional, tag = "4")]
60 pub creator: ::core::option::Option<::prost::alloc::string::String>,
61 #[prost(map = "string, string", tag = "5")]
62 pub labels: ::std::collections::HashMap<
63 ::prost::alloc::string::String,
64 ::prost::alloc::string::String,
65 >,
66 #[prost(message, optional, tag = "6")]
67 pub revision: ::core::option::Option<Revision>,
68 #[prost(message, optional, tag = "7")]
69 pub grouping: ::core::option::Option<Grouping>,
70 #[prost(message, optional, tag = "8")]
71 pub create_time: ::core::option::Option<::prost_wkt_types::Timestamp>,
72 #[prost(message, optional, tag = "9")]
73 pub update_time: ::core::option::Option<::prost_wkt_types::Timestamp>,
74 #[prost(float, tag = "10")]
75 pub target_threshold_percentage: f32,
76 #[prost(string, optional, tag = "14")]
77 pub r#type: ::core::option::Option<::prost::alloc::string::String>,
78 #[prost(oneof = "slo::Window", tags = "11")]
79 pub window: ::core::option::Option<slo::Window>,
80 #[prost(oneof = "slo::Sli", tags = "12, 13")]
81 pub sli: ::core::option::Option<slo::Sli>,
82}
83pub mod slo {
85 #[derive(serde::Serialize, serde::Deserialize)]
86 #[serde(rename_all = "snake_case")]
87 #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
88 pub enum Window {
89 #[prost(enumeration = "super::SloTimeFrame", tag = "11")]
90 SloTimeFrame(i32),
91 }
92 #[derive(serde::Serialize, serde::Deserialize)]
93 #[serde(rename_all = "snake_case")]
94 #[derive(Clone, PartialEq, ::prost::Oneof)]
95 pub enum Sli {
96 #[prost(message, tag = "12")]
97 RequestBasedMetricSli(super::RequestBasedMetricSli),
98 #[prost(message, tag = "13")]
99 WindowBasedMetricSli(super::WindowBasedMetricSli),
100 }
101}
102#[derive(serde::Serialize, serde::Deserialize)]
103#[serde(rename_all = "snake_case")]
104#[derive(Clone, PartialEq, ::prost::Message)]
105pub struct SloFilterField {
106 #[prost(oneof = "slo_filter_field::Field", tags = "1, 2")]
107 pub field: ::core::option::Option<slo_filter_field::Field>,
108}
109pub mod slo_filter_field {
111 #[derive(serde::Serialize, serde::Deserialize)]
112 #[serde(rename_all = "snake_case")]
113 #[derive(Clone, PartialEq, ::prost::Oneof)]
114 pub enum Field {
115 #[prost(enumeration = "super::SloConstantFilterField", tag = "1")]
116 ConstFilter(i32),
117 #[prost(string, tag = "2")]
118 LabelName(::prost::alloc::string::String),
119 }
120}
121#[derive(serde::Serialize, serde::Deserialize)]
122#[serde(rename_all = "snake_case")]
123#[derive(Clone, PartialEq, ::prost::Message)]
124pub struct IsFilterPredicate {
125 #[prost(string, repeated, tag = "1")]
126 pub is: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
127}
128#[derive(serde::Serialize, serde::Deserialize)]
129#[serde(rename_all = "snake_case")]
130#[derive(Clone, PartialEq, ::prost::Message)]
131pub struct SloFilterPredicate {
132 #[prost(oneof = "slo_filter_predicate::Predicate", tags = "1")]
133 pub predicate: ::core::option::Option<slo_filter_predicate::Predicate>,
134}
135pub mod slo_filter_predicate {
137 #[derive(serde::Serialize, serde::Deserialize)]
138 #[serde(rename_all = "snake_case")]
139 #[derive(Clone, PartialEq, ::prost::Oneof)]
140 pub enum Predicate {
141 #[prost(message, tag = "1")]
142 Is(super::IsFilterPredicate),
143 }
144}
145#[derive(serde::Serialize, serde::Deserialize)]
146#[serde(rename_all = "snake_case")]
147#[derive(Clone, PartialEq, ::prost::Message)]
148pub struct SloFilter {
149 #[prost(message, optional, tag = "1")]
150 pub field: ::core::option::Option<SloFilterField>,
151 #[prost(message, optional, tag = "2")]
152 pub predicate: ::core::option::Option<SloFilterPredicate>,
153}
154#[derive(serde::Serialize, serde::Deserialize)]
155#[serde(rename_all = "snake_case")]
156#[derive(Clone, PartialEq, ::prost::Message)]
157pub struct SloFilters {
158 #[prost(message, repeated, tag = "1")]
159 pub filters: ::prost::alloc::vec::Vec<SloFilter>,
160}
161#[derive(serde::Serialize, serde::Deserialize)]
162#[serde(rename_all = "snake_case")]
163#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
164#[repr(i32)]
165pub enum ComparisonOperator {
166 Unspecified = 0,
167 GreaterThan = 1,
168 GreaterThanOrEquals = 2,
169 LessThan = 3,
170 LessThanOrEquals = 4,
171}
172impl ComparisonOperator {
173 pub fn as_str_name(&self) -> &'static str {
178 match self {
179 Self::Unspecified => "COMPARISON_OPERATOR_UNSPECIFIED",
180 Self::GreaterThan => "COMPARISON_OPERATOR_GREATER_THAN",
181 Self::GreaterThanOrEquals => "COMPARISON_OPERATOR_GREATER_THAN_OR_EQUALS",
182 Self::LessThan => "COMPARISON_OPERATOR_LESS_THAN",
183 Self::LessThanOrEquals => "COMPARISON_OPERATOR_LESS_THAN_OR_EQUALS",
184 }
185 }
186 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
188 match value {
189 "COMPARISON_OPERATOR_UNSPECIFIED" => Some(Self::Unspecified),
190 "COMPARISON_OPERATOR_GREATER_THAN" => Some(Self::GreaterThan),
191 "COMPARISON_OPERATOR_GREATER_THAN_OR_EQUALS" => {
192 Some(Self::GreaterThanOrEquals)
193 }
194 "COMPARISON_OPERATOR_LESS_THAN" => Some(Self::LessThan),
195 "COMPARISON_OPERATOR_LESS_THAN_OR_EQUALS" => Some(Self::LessThanOrEquals),
196 _ => None,
197 }
198 }
199}
200#[derive(serde::Serialize, serde::Deserialize)]
201#[serde(rename_all = "snake_case")]
202#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
203#[repr(i32)]
204pub enum WindowSloWindow {
205 Unspecified = 0,
206 WindowSloWindow1Minute = 1,
207 WindowSloWindow5Minutes = 2,
208}
209impl WindowSloWindow {
210 pub fn as_str_name(&self) -> &'static str {
215 match self {
216 Self::Unspecified => "WINDOW_SLO_WINDOW_UNSPECIFIED",
217 Self::WindowSloWindow1Minute => "WINDOW_SLO_WINDOW_1_MINUTE",
218 Self::WindowSloWindow5Minutes => "WINDOW_SLO_WINDOW_5_MINUTES",
219 }
220 }
221 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
223 match value {
224 "WINDOW_SLO_WINDOW_UNSPECIFIED" => Some(Self::Unspecified),
225 "WINDOW_SLO_WINDOW_1_MINUTE" => Some(Self::WindowSloWindow1Minute),
226 "WINDOW_SLO_WINDOW_5_MINUTES" => Some(Self::WindowSloWindow5Minutes),
227 _ => None,
228 }
229 }
230}
231#[derive(serde::Serialize, serde::Deserialize)]
232#[serde(rename_all = "snake_case")]
233#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
234#[repr(i32)]
235pub enum MissingDataStrategy {
236 Uncounted = 0,
237 Good = 1,
238 Bad = 2,
239}
240impl MissingDataStrategy {
241 pub fn as_str_name(&self) -> &'static str {
246 match self {
247 Self::Uncounted => "MISSING_DATA_STRATEGY_UNCOUNTED",
248 Self::Good => "MISSING_DATA_STRATEGY_GOOD",
249 Self::Bad => "MISSING_DATA_STRATEGY_BAD",
250 }
251 }
252 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
254 match value {
255 "MISSING_DATA_STRATEGY_UNCOUNTED" => Some(Self::Uncounted),
256 "MISSING_DATA_STRATEGY_GOOD" => Some(Self::Good),
257 "MISSING_DATA_STRATEGY_BAD" => Some(Self::Bad),
258 _ => None,
259 }
260 }
261}
262#[derive(serde::Serialize, serde::Deserialize)]
263#[serde(rename_all = "snake_case")]
264#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
265#[repr(i32)]
266pub enum SloTimeFrame {
267 Unspecified = 0,
268 SloTimeFrame7Days = 1,
269 SloTimeFrame14Days = 2,
270 SloTimeFrame21Days = 3,
271 SloTimeFrame28Days = 4,
272}
273impl SloTimeFrame {
274 pub fn as_str_name(&self) -> &'static str {
279 match self {
280 Self::Unspecified => "SLO_TIME_FRAME_UNSPECIFIED",
281 Self::SloTimeFrame7Days => "SLO_TIME_FRAME_7_DAYS",
282 Self::SloTimeFrame14Days => "SLO_TIME_FRAME_14_DAYS",
283 Self::SloTimeFrame21Days => "SLO_TIME_FRAME_21_DAYS",
284 Self::SloTimeFrame28Days => "SLO_TIME_FRAME_28_DAYS",
285 }
286 }
287 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
289 match value {
290 "SLO_TIME_FRAME_UNSPECIFIED" => Some(Self::Unspecified),
291 "SLO_TIME_FRAME_7_DAYS" => Some(Self::SloTimeFrame7Days),
292 "SLO_TIME_FRAME_14_DAYS" => Some(Self::SloTimeFrame14Days),
293 "SLO_TIME_FRAME_21_DAYS" => Some(Self::SloTimeFrame21Days),
294 "SLO_TIME_FRAME_28_DAYS" => Some(Self::SloTimeFrame28Days),
295 _ => None,
296 }
297 }
298}
299#[derive(serde::Serialize, serde::Deserialize)]
300#[serde(rename_all = "snake_case")]
301#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
302#[repr(i32)]
303pub enum SloConstantFilterField {
304 SloConstFilterFieldUnspecified = 0,
305 SloConstFilterFieldUserName = 1,
306 SloConstFilterFieldSloName = 2,
307}
308impl SloConstantFilterField {
309 pub fn as_str_name(&self) -> &'static str {
314 match self {
315 Self::SloConstFilterFieldUnspecified => "SLO_CONST_FILTER_FIELD_UNSPECIFIED",
316 Self::SloConstFilterFieldUserName => "SLO_CONST_FILTER_FIELD_USER_NAME",
317 Self::SloConstFilterFieldSloName => "SLO_CONST_FILTER_FIELD_SLO_NAME",
318 }
319 }
320 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
322 match value {
323 "SLO_CONST_FILTER_FIELD_UNSPECIFIED" => {
324 Some(Self::SloConstFilterFieldUnspecified)
325 }
326 "SLO_CONST_FILTER_FIELD_USER_NAME" => Some(Self::SloConstFilterFieldUserName),
327 "SLO_CONST_FILTER_FIELD_SLO_NAME" => Some(Self::SloConstFilterFieldSloName),
328 _ => None,
329 }
330 }
331}
332#[derive(serde::Serialize, serde::Deserialize)]
333#[serde(rename_all = "snake_case")]
334#[derive(Clone, Copy, PartialEq, ::prost::Message)]
335pub struct SloMetricTimeWindow {
336 #[prost(oneof = "slo_metric_time_window::Type", tags = "1")]
337 pub r#type: ::core::option::Option<slo_metric_time_window::Type>,
338}
339pub mod slo_metric_time_window {
341 #[derive(serde::Serialize, serde::Deserialize)]
342 #[serde(rename_all = "snake_case")]
343 #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
344 pub enum Type {
345 #[prost(enumeration = "super::SloMetricTimeWindowValue", tag = "1")]
346 SloMetricTimeWindowSpecificValue(i32),
347 }
348}
349#[derive(serde::Serialize, serde::Deserialize)]
350#[serde(rename_all = "snake_case")]
351#[derive(Clone, PartialEq, ::prost::Message)]
352pub struct SloMetricFilter {
353 #[prost(oneof = "slo_metric_filter::Type", tags = "1")]
354 pub r#type: ::core::option::Option<slo_metric_filter::Type>,
355}
356pub mod slo_metric_filter {
358 #[derive(serde::Serialize, serde::Deserialize)]
359 #[serde(rename_all = "snake_case")]
360 #[derive(Clone, PartialEq, ::prost::Oneof)]
361 pub enum Type {
362 #[prost(message, tag = "1")]
363 Promql(::prost::alloc::string::String),
364 }
365}
366#[derive(serde::Serialize, serde::Deserialize)]
367#[serde(rename_all = "snake_case")]
368#[derive(Clone, Copy, PartialEq, ::prost::Message)]
369pub struct SloMetricMissingValues {
370 #[prost(oneof = "slo_metric_missing_values::MissingValues", tags = "1, 2")]
371 pub missing_values: ::core::option::Option<slo_metric_missing_values::MissingValues>,
372}
373pub mod slo_metric_missing_values {
375 #[derive(serde::Serialize, serde::Deserialize)]
376 #[serde(rename_all = "snake_case")]
377 #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
378 pub enum MissingValues {
379 #[prost(message, tag = "1")]
380 ReplaceWithZero(bool),
381 #[prost(message, tag = "2")]
382 MinNonNullValuesPct(u32),
383 }
384}
385#[derive(serde::Serialize, serde::Deserialize)]
386#[serde(rename_all = "snake_case")]
387#[derive(Clone, PartialEq, ::prost::Message)]
388pub struct BurnRateMetricTypeDual {
389 #[prost(message, optional, tag = "1")]
390 pub long_metric_filter: ::core::option::Option<SloMetricFilter>,
391 #[prost(message, optional, tag = "2")]
392 pub short_metric_filter: ::core::option::Option<SloMetricFilter>,
393}
394#[derive(serde::Serialize, serde::Deserialize)]
395#[serde(rename_all = "snake_case")]
396#[derive(Clone, PartialEq, ::prost::Message)]
397pub struct BurnRateMetricTypeSingle {
398 #[prost(message, optional, tag = "1")]
399 pub metric_filter: ::core::option::Option<SloMetricFilter>,
400}
401#[derive(serde::Serialize, serde::Deserialize)]
402#[serde(rename_all = "snake_case")]
403#[derive(Clone, PartialEq, ::prost::Message)]
404pub struct ErrorBudgetMetricType {
405 #[prost(message, optional, tag = "1")]
406 pub metric_filter: ::core::option::Option<SloMetricFilter>,
407}
408#[derive(serde::Serialize, serde::Deserialize)]
409#[serde(rename_all = "snake_case")]
410#[derive(Clone, PartialEq, ::prost::Message)]
411pub struct BurnRateAlertTypeDual {
412 #[prost(message, optional, tag = "1")]
413 pub long_window: ::core::option::Option<::prost_wkt_types::Duration>,
414 #[prost(message, optional, tag = "2")]
415 pub short_window: ::core::option::Option<::prost_wkt_types::Duration>,
416 #[prost(message, repeated, tag = "3")]
417 pub thresholds: ::prost::alloc::vec::Vec<f64>,
418}
419#[derive(serde::Serialize, serde::Deserialize)]
420#[serde(rename_all = "snake_case")]
421#[derive(Clone, PartialEq, ::prost::Message)]
422pub struct BurnRateAlertTypeSingle {
423 #[prost(message, optional, tag = "1")]
424 pub window: ::core::option::Option<::prost_wkt_types::Duration>,
425 #[prost(message, repeated, tag = "2")]
426 pub thresholds: ::prost::alloc::vec::Vec<f64>,
427}
428#[derive(serde::Serialize, serde::Deserialize)]
429#[serde(rename_all = "snake_case")]
430#[derive(Clone, PartialEq, ::prost::Message)]
431pub struct BurnRateAlertDefinition {
432 #[prost(oneof = "burn_rate_alert_definition::BurnRate", tags = "2, 3")]
433 pub burn_rate: ::core::option::Option<burn_rate_alert_definition::BurnRate>,
434}
435pub mod burn_rate_alert_definition {
437 #[derive(serde::Serialize, serde::Deserialize)]
438 #[serde(rename_all = "snake_case")]
439 #[derive(Clone, PartialEq, ::prost::Oneof)]
440 pub enum BurnRate {
441 #[prost(message, tag = "2")]
442 Dual(super::BurnRateAlertTypeDual),
443 #[prost(message, tag = "3")]
444 Single(super::BurnRateAlertTypeSingle),
445 }
446}
447#[derive(serde::Serialize, serde::Deserialize)]
448#[serde(rename_all = "snake_case")]
449#[derive(Clone, PartialEq, ::prost::Message)]
450pub struct SloDefinition {
451 #[prost(string, tag = "1")]
452 pub slo_id: ::prost::alloc::string::String,
453}
454#[derive(serde::Serialize, serde::Deserialize)]
455#[serde(rename_all = "snake_case")]
456#[derive(Clone, Copy, PartialEq, ::prost::Message)]
457pub struct ErrorBudgetAlertDefinition {}
458#[derive(serde::Serialize, serde::Deserialize)]
459#[serde(rename_all = "snake_case")]
460#[derive(Clone, Copy, PartialEq, ::prost::Message)]
461pub struct MoreThanConditionOperator {}
462#[derive(serde::Serialize, serde::Deserialize)]
463#[serde(rename_all = "snake_case")]
464#[derive(Clone, Copy, PartialEq, ::prost::Message)]
465pub struct MoreThanOrEqualsConditionOperator {}
466#[derive(serde::Serialize, serde::Deserialize)]
467#[serde(rename_all = "snake_case")]
468#[derive(Clone, Copy, PartialEq, ::prost::Message)]
469pub struct LessThanConditionOperator {
470 #[prost(message, optional, tag = "1")]
471 pub undetected_values_management: ::core::option::Option<UndetectedValuesManagement>,
472}
473#[derive(serde::Serialize, serde::Deserialize)]
474#[serde(rename_all = "snake_case")]
475#[derive(Clone, Copy, PartialEq, ::prost::Message)]
476pub struct LessThanOrEqualsConditionOperator {
477 #[prost(message, optional, tag = "1")]
478 pub undetected_values_management: ::core::option::Option<UndetectedValuesManagement>,
479}
480#[derive(serde::Serialize, serde::Deserialize)]
481#[serde(rename_all = "snake_case")]
482#[derive(Clone, Copy, PartialEq, ::prost::Message)]
483pub struct UndetectedValuesManagement {
484 #[prost(message, optional, tag = "1")]
485 pub trigger_undetected_values: ::core::option::Option<bool>,
486 #[prost(enumeration = "AutoRetireTimeframe", optional, tag = "2")]
487 pub auto_retire_timeframe: ::core::option::Option<i32>,
488}
489#[derive(serde::Serialize, serde::Deserialize)]
490#[serde(rename_all = "snake_case")]
491#[derive(Clone, PartialEq, ::prost::Message)]
492pub struct SloAlertValidityResult {
493 #[prost(string, tag = "1")]
494 pub id: ::prost::alloc::string::String,
495 #[prost(string, tag = "2")]
496 pub name: ::prost::alloc::string::String,
497 #[prost(string, optional, tag = "3")]
498 pub error_message: ::core::option::Option<::prost::alloc::string::String>,
499 #[prost(string, tag = "4")]
500 pub alert_version_id: ::prost::alloc::string::String,
501}
502#[derive(serde::Serialize, serde::Deserialize)]
503#[serde(rename_all = "snake_case")]
504#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
505#[repr(i32)]
506pub enum SloMetricThresholdConditionType {
507 MetricThresholdConditionTypeMoreThanOrUnspecified = 0,
508 MetricThresholdConditionTypeMoreThanOrEquals = 1,
509}
510impl SloMetricThresholdConditionType {
511 pub fn as_str_name(&self) -> &'static str {
516 match self {
517 Self::MetricThresholdConditionTypeMoreThanOrUnspecified => {
518 "METRIC_THRESHOLD_CONDITION_TYPE_MORE_THAN_OR_UNSPECIFIED"
519 }
520 Self::MetricThresholdConditionTypeMoreThanOrEquals => {
521 "METRIC_THRESHOLD_CONDITION_TYPE_MORE_THAN_OR_EQUALS"
522 }
523 }
524 }
525 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
527 match value {
528 "METRIC_THRESHOLD_CONDITION_TYPE_MORE_THAN_OR_UNSPECIFIED" => {
529 Some(Self::MetricThresholdConditionTypeMoreThanOrUnspecified)
530 }
531 "METRIC_THRESHOLD_CONDITION_TYPE_MORE_THAN_OR_EQUALS" => {
532 Some(Self::MetricThresholdConditionTypeMoreThanOrEquals)
533 }
534 _ => None,
535 }
536 }
537}
538#[derive(serde::Serialize, serde::Deserialize)]
539#[serde(rename_all = "snake_case")]
540#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
541#[repr(i32)]
542pub enum SloMetricTimeWindowValue {
543 Unspecified = 0,
544 SloMetricTimeWindowValue1Minute = 1,
545}
546impl SloMetricTimeWindowValue {
547 pub fn as_str_name(&self) -> &'static str {
552 match self {
553 Self::Unspecified => "SLO_METRIC_TIME_WINDOW_VALUE_UNSPECIFIED",
554 Self::SloMetricTimeWindowValue1Minute => {
555 "SLO_METRIC_TIME_WINDOW_VALUE_1_MINUTE"
556 }
557 }
558 }
559 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
561 match value {
562 "SLO_METRIC_TIME_WINDOW_VALUE_UNSPECIFIED" => Some(Self::Unspecified),
563 "SLO_METRIC_TIME_WINDOW_VALUE_1_MINUTE" => {
564 Some(Self::SloMetricTimeWindowValue1Minute)
565 }
566 _ => None,
567 }
568 }
569}
570#[derive(serde::Serialize, serde::Deserialize)]
571#[serde(rename_all = "snake_case")]
572#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
573#[repr(i32)]
574pub enum AutoRetireTimeframe {
575 NeverOrUnspecified = 0,
576 Minutes5 = 1,
577 Minutes10 = 2,
578 Hour1 = 3,
579 Hours2 = 4,
580 Hours6 = 5,
581 Hours12 = 6,
582 Hours24 = 7,
583}
584impl AutoRetireTimeframe {
585 pub fn as_str_name(&self) -> &'static str {
590 match self {
591 Self::NeverOrUnspecified => "AUTO_RETIRE_TIMEFRAME_NEVER_OR_UNSPECIFIED",
592 Self::Minutes5 => "AUTO_RETIRE_TIMEFRAME_MINUTES_5",
593 Self::Minutes10 => "AUTO_RETIRE_TIMEFRAME_MINUTES_10",
594 Self::Hour1 => "AUTO_RETIRE_TIMEFRAME_HOUR_1",
595 Self::Hours2 => "AUTO_RETIRE_TIMEFRAME_HOURS_2",
596 Self::Hours6 => "AUTO_RETIRE_TIMEFRAME_HOURS_6",
597 Self::Hours12 => "AUTO_RETIRE_TIMEFRAME_HOURS_12",
598 Self::Hours24 => "AUTO_RETIRE_TIMEFRAME_HOURS_24",
599 }
600 }
601 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
603 match value {
604 "AUTO_RETIRE_TIMEFRAME_NEVER_OR_UNSPECIFIED" => {
605 Some(Self::NeverOrUnspecified)
606 }
607 "AUTO_RETIRE_TIMEFRAME_MINUTES_5" => Some(Self::Minutes5),
608 "AUTO_RETIRE_TIMEFRAME_MINUTES_10" => Some(Self::Minutes10),
609 "AUTO_RETIRE_TIMEFRAME_HOUR_1" => Some(Self::Hour1),
610 "AUTO_RETIRE_TIMEFRAME_HOURS_2" => Some(Self::Hours2),
611 "AUTO_RETIRE_TIMEFRAME_HOURS_6" => Some(Self::Hours6),
612 "AUTO_RETIRE_TIMEFRAME_HOURS_12" => Some(Self::Hours12),
613 "AUTO_RETIRE_TIMEFRAME_HOURS_24" => Some(Self::Hours24),
614 _ => None,
615 }
616 }
617}
618#[derive(serde::Serialize, serde::Deserialize)]
619#[serde(rename_all = "snake_case")]
620#[derive(Clone, PartialEq, ::prost::Message)]
621pub struct ResponseStatus {
622 #[prost(enumeration = "super::super::super::super::google::rpc::Code", tag = "1")]
623 pub status_code: i32,
624 #[prost(string, optional, tag = "2")]
625 pub message: ::core::option::Option<::prost::alloc::string::String>,
626 #[prost(map = "string, string", tag = "3")]
627 pub details: ::std::collections::HashMap<
628 ::prost::alloc::string::String,
629 ::prost::alloc::string::String,
630 >,
631}
632#[derive(serde::Serialize, serde::Deserialize)]
633#[serde(rename_all = "snake_case")]
634#[derive(Clone, PartialEq, ::prost::Message)]
635pub struct ReplaceSloAlertsValidationsRequest {
636 #[prost(message, optional, tag = "1")]
637 pub slo: ::core::option::Option<Slo>,
638}
639#[derive(serde::Serialize, serde::Deserialize)]
640#[serde(rename_all = "snake_case")]
641#[derive(Clone, PartialEq, ::prost::Message)]
642pub struct ReplaceSloAlertsValidationsResponse {
643 #[prost(message, repeated, tag = "1")]
644 pub alerts_validation_result: ::prost::alloc::vec::Vec<SloAlertValidityResult>,
645}
646#[derive(serde::Serialize, serde::Deserialize)]
647#[serde(rename_all = "snake_case")]
648#[derive(Clone, PartialEq, ::prost::Message)]
649pub struct CreateSloRequest {
650 #[prost(message, optional, tag = "1")]
651 pub slo: ::core::option::Option<Slo>,
652 #[deprecated]
653 #[prost(bool, optional, tag = "2")]
654 pub silence_data_validations: ::core::option::Option<bool>,
655}
656#[derive(serde::Serialize, serde::Deserialize)]
657#[serde(rename_all = "snake_case")]
658#[derive(Clone, PartialEq, ::prost::Message)]
659pub struct CreateSloResponse {
660 #[prost(message, optional, tag = "1")]
661 pub slo: ::core::option::Option<Slo>,
662}
663#[derive(serde::Serialize, serde::Deserialize)]
664#[serde(rename_all = "snake_case")]
665#[derive(Clone, PartialEq, ::prost::Message)]
666pub struct ReplaceSloRequest {
667 #[prost(message, optional, tag = "1")]
668 pub slo: ::core::option::Option<Slo>,
669 #[deprecated]
670 #[prost(bool, optional, tag = "2")]
671 pub silence_data_validations: ::core::option::Option<bool>,
672}
673#[derive(serde::Serialize, serde::Deserialize)]
674#[serde(rename_all = "snake_case")]
675#[derive(Clone, PartialEq, ::prost::Message)]
676pub struct ReplaceSloResponse {
677 #[prost(message, optional, tag = "1")]
678 pub slo: ::core::option::Option<Slo>,
679 #[prost(string, repeated, tag = "2")]
680 pub effected_slo_alert_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
681}
682#[derive(serde::Serialize, serde::Deserialize)]
683#[serde(rename_all = "snake_case")]
684#[derive(Clone, PartialEq, ::prost::Message)]
685pub struct DeleteSloRequest {
686 #[prost(string, tag = "1")]
687 pub id: ::prost::alloc::string::String,
688}
689#[derive(serde::Serialize, serde::Deserialize)]
690#[serde(rename_all = "snake_case")]
691#[derive(Clone, PartialEq, ::prost::Message)]
692pub struct DeleteSloResponse {
693 #[prost(string, repeated, tag = "1")]
694 pub effected_slo_alert_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
695}
696#[derive(serde::Serialize, serde::Deserialize)]
697#[serde(rename_all = "snake_case")]
698#[derive(Clone, PartialEq, ::prost::Message)]
699pub struct GetSloRequest {
700 #[prost(string, tag = "1")]
701 pub id: ::prost::alloc::string::String,
702}
703#[derive(serde::Serialize, serde::Deserialize)]
704#[serde(rename_all = "snake_case")]
705#[derive(Clone, PartialEq, ::prost::Message)]
706pub struct GetSloResponse {
707 #[prost(message, optional, tag = "1")]
708 pub slo: ::core::option::Option<Slo>,
709}
710#[derive(serde::Serialize, serde::Deserialize)]
711#[serde(rename_all = "snake_case")]
712#[derive(Clone, PartialEq, ::prost::Message)]
713pub struct ListSlosRequest {
714 #[prost(message, optional, tag = "1")]
715 pub filters: ::core::option::Option<SloFilters>,
716}
717#[derive(serde::Serialize, serde::Deserialize)]
718#[serde(rename_all = "snake_case")]
719#[derive(Clone, PartialEq, ::prost::Message)]
720pub struct ListSlosResponse {
721 #[prost(message, repeated, tag = "1")]
722 pub slos: ::prost::alloc::vec::Vec<Slo>,
723}
724#[derive(serde::Serialize, serde::Deserialize)]
725#[serde(rename_all = "snake_case")]
726#[derive(Clone, PartialEq, ::prost::Message)]
727pub struct BatchGetSlosRequest {
728 #[prost(string, repeated, tag = "1")]
729 pub ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
730}
731#[derive(serde::Serialize, serde::Deserialize)]
732#[serde(rename_all = "snake_case")]
733#[derive(Clone, PartialEq, ::prost::Message)]
734pub struct BatchGetSlosResponse {
735 #[prost(message, repeated, tag = "1")]
736 pub slos: ::prost::alloc::vec::Vec<Slo>,
737 #[prost(string, repeated, tag = "2")]
738 pub not_found_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
739}
740#[derive(serde::Serialize, serde::Deserialize)]
741#[serde(rename_all = "snake_case")]
742#[derive(Clone, PartialEq, ::prost::Message)]
743pub struct SloExecutionRequest {
744 #[prost(oneof = "slo_execution_request::Request", tags = "1, 2, 3")]
745 pub request: ::core::option::Option<slo_execution_request::Request>,
746}
747pub mod slo_execution_request {
749 #[derive(serde::Serialize, serde::Deserialize)]
750 #[serde(rename_all = "snake_case")]
751 #[derive(Clone, PartialEq, ::prost::Oneof)]
752 pub enum Request {
753 #[prost(message, tag = "1")]
754 CreateSloRequest(super::CreateSloRequest),
755 #[prost(message, tag = "2")]
756 ReplaceSloRequest(super::ReplaceSloRequest),
757 #[prost(message, tag = "3")]
758 DeleteSloRequest(super::DeleteSloRequest),
759 }
760}
761#[derive(serde::Serialize, serde::Deserialize)]
762#[serde(rename_all = "snake_case")]
763#[derive(Clone, PartialEq, ::prost::Message)]
764pub struct SloExecutionResponse {
765 #[prost(oneof = "slo_execution_response::Response", tags = "1, 2, 3")]
766 pub response: ::core::option::Option<slo_execution_response::Response>,
767}
768pub mod slo_execution_response {
770 #[derive(serde::Serialize, serde::Deserialize)]
771 #[serde(rename_all = "snake_case")]
772 #[derive(Clone, PartialEq, ::prost::Oneof)]
773 pub enum Response {
774 #[prost(message, tag = "1")]
775 CreateSloResponse(super::CreateSloResponse),
776 #[prost(message, tag = "2")]
777 ReplaceSloResponse(super::ReplaceSloResponse),
778 #[prost(message, tag = "3")]
779 DeleteSloResponse(super::DeleteSloResponse),
780 }
781}
782#[derive(serde::Serialize, serde::Deserialize)]
783#[serde(rename_all = "snake_case")]
784#[derive(Clone, PartialEq, ::prost::Message)]
785pub struct BatchExecuteSloRequest {
786 #[prost(message, repeated, tag = "1")]
787 pub requests: ::prost::alloc::vec::Vec<SloExecutionRequest>,
788}
789#[derive(serde::Serialize, serde::Deserialize)]
790#[serde(rename_all = "snake_case")]
791#[derive(Clone, PartialEq, ::prost::Message)]
792pub struct BatchExecuteSloResponse {
793 #[prost(message, repeated, tag = "1")]
794 pub matching_responses: ::prost::alloc::vec::Vec<SloExecutionResponse>,
795 #[prost(message, optional, tag = "2")]
796 pub status: ::core::option::Option<ResponseStatus>,
797}
798#[derive(serde::Serialize, serde::Deserialize)]
799#[serde(rename_all = "snake_case")]
800#[derive(Clone, Copy, PartialEq, ::prost::Message)]
801pub struct GetZeroStateRequest {}
802#[derive(serde::Serialize, serde::Deserialize)]
803#[serde(rename_all = "snake_case")]
804#[derive(Clone, Copy, PartialEq, ::prost::Message)]
805pub struct GetZeroStateResponse {
806 #[prost(bool, tag = "1")]
807 pub zero_state: bool,
808}
809pub mod slos_service_client {
811 #![allow(
812 unused_variables,
813 dead_code,
814 missing_docs,
815 clippy::wildcard_imports,
816 clippy::let_unit_value,
817 )]
818 use tonic::codegen::*;
819 use tonic::codegen::http::Uri;
820 #[derive(Debug, Clone)]
821 pub struct SlosServiceClient<T> {
822 inner: tonic::client::Grpc<T>,
823 }
824 impl SlosServiceClient<tonic::transport::Channel> {
825 pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
827 where
828 D: TryInto<tonic::transport::Endpoint>,
829 D::Error: Into<StdError>,
830 {
831 let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
832 Ok(Self::new(conn))
833 }
834 }
835 impl<T> SlosServiceClient<T>
836 where
837 T: tonic::client::GrpcService<tonic::body::BoxBody>,
838 T::Error: Into<StdError>,
839 T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
840 <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
841 {
842 pub fn new(inner: T) -> Self {
843 let inner = tonic::client::Grpc::new(inner);
844 Self { inner }
845 }
846 pub fn with_origin(inner: T, origin: Uri) -> Self {
847 let inner = tonic::client::Grpc::with_origin(inner, origin);
848 Self { inner }
849 }
850 pub fn with_interceptor<F>(
851 inner: T,
852 interceptor: F,
853 ) -> SlosServiceClient<InterceptedService<T, F>>
854 where
855 F: tonic::service::Interceptor,
856 T::ResponseBody: Default,
857 T: tonic::codegen::Service<
858 http::Request<tonic::body::BoxBody>,
859 Response = http::Response<
860 <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
861 >,
862 >,
863 <T as tonic::codegen::Service<
864 http::Request<tonic::body::BoxBody>,
865 >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
866 {
867 SlosServiceClient::new(InterceptedService::new(inner, interceptor))
868 }
869 #[must_use]
874 pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
875 self.inner = self.inner.send_compressed(encoding);
876 self
877 }
878 #[must_use]
880 pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
881 self.inner = self.inner.accept_compressed(encoding);
882 self
883 }
884 #[must_use]
888 pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
889 self.inner = self.inner.max_decoding_message_size(limit);
890 self
891 }
892 #[must_use]
896 pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
897 self.inner = self.inner.max_encoding_message_size(limit);
898 self
899 }
900 pub async fn create_slo(
901 &mut self,
902 request: impl tonic::IntoRequest<super::CreateSloRequest>,
903 ) -> std::result::Result<
904 tonic::Response<super::CreateSloResponse>,
905 tonic::Status,
906 > {
907 self.inner
908 .ready()
909 .await
910 .map_err(|e| {
911 tonic::Status::unknown(
912 format!("Service was not ready: {}", e.into()),
913 )
914 })?;
915 let codec = tonic::codec::ProstCodec::default();
916 let path = http::uri::PathAndQuery::from_static(
917 "/com.coralogixapis.slo.v1.SlosService/CreateSlo",
918 );
919 let mut req = request.into_request();
920 req.extensions_mut()
921 .insert(
922 GrpcMethod::new("com.coralogixapis.slo.v1.SlosService", "CreateSlo"),
923 );
924 self.inner.unary(req, path, codec).await
925 }
926 pub async fn replace_slo(
927 &mut self,
928 request: impl tonic::IntoRequest<super::ReplaceSloRequest>,
929 ) -> std::result::Result<
930 tonic::Response<super::ReplaceSloResponse>,
931 tonic::Status,
932 > {
933 self.inner
934 .ready()
935 .await
936 .map_err(|e| {
937 tonic::Status::unknown(
938 format!("Service was not ready: {}", e.into()),
939 )
940 })?;
941 let codec = tonic::codec::ProstCodec::default();
942 let path = http::uri::PathAndQuery::from_static(
943 "/com.coralogixapis.slo.v1.SlosService/ReplaceSlo",
944 );
945 let mut req = request.into_request();
946 req.extensions_mut()
947 .insert(
948 GrpcMethod::new("com.coralogixapis.slo.v1.SlosService", "ReplaceSlo"),
949 );
950 self.inner.unary(req, path, codec).await
951 }
952 pub async fn validate_replace_slo_alerts(
953 &mut self,
954 request: impl tonic::IntoRequest<super::ReplaceSloAlertsValidationsRequest>,
955 ) -> std::result::Result<
956 tonic::Response<super::ReplaceSloAlertsValidationsResponse>,
957 tonic::Status,
958 > {
959 self.inner
960 .ready()
961 .await
962 .map_err(|e| {
963 tonic::Status::unknown(
964 format!("Service was not ready: {}", e.into()),
965 )
966 })?;
967 let codec = tonic::codec::ProstCodec::default();
968 let path = http::uri::PathAndQuery::from_static(
969 "/com.coralogixapis.slo.v1.SlosService/ValidateReplaceSloAlerts",
970 );
971 let mut req = request.into_request();
972 req.extensions_mut()
973 .insert(
974 GrpcMethod::new(
975 "com.coralogixapis.slo.v1.SlosService",
976 "ValidateReplaceSloAlerts",
977 ),
978 );
979 self.inner.unary(req, path, codec).await
980 }
981 pub async fn delete_slo(
982 &mut self,
983 request: impl tonic::IntoRequest<super::DeleteSloRequest>,
984 ) -> std::result::Result<
985 tonic::Response<super::DeleteSloResponse>,
986 tonic::Status,
987 > {
988 self.inner
989 .ready()
990 .await
991 .map_err(|e| {
992 tonic::Status::unknown(
993 format!("Service was not ready: {}", e.into()),
994 )
995 })?;
996 let codec = tonic::codec::ProstCodec::default();
997 let path = http::uri::PathAndQuery::from_static(
998 "/com.coralogixapis.slo.v1.SlosService/DeleteSlo",
999 );
1000 let mut req = request.into_request();
1001 req.extensions_mut()
1002 .insert(
1003 GrpcMethod::new("com.coralogixapis.slo.v1.SlosService", "DeleteSlo"),
1004 );
1005 self.inner.unary(req, path, codec).await
1006 }
1007 pub async fn get_slo(
1008 &mut self,
1009 request: impl tonic::IntoRequest<super::GetSloRequest>,
1010 ) -> std::result::Result<tonic::Response<super::GetSloResponse>, tonic::Status> {
1011 self.inner
1012 .ready()
1013 .await
1014 .map_err(|e| {
1015 tonic::Status::unknown(
1016 format!("Service was not ready: {}", e.into()),
1017 )
1018 })?;
1019 let codec = tonic::codec::ProstCodec::default();
1020 let path = http::uri::PathAndQuery::from_static(
1021 "/com.coralogixapis.slo.v1.SlosService/GetSlo",
1022 );
1023 let mut req = request.into_request();
1024 req.extensions_mut()
1025 .insert(
1026 GrpcMethod::new("com.coralogixapis.slo.v1.SlosService", "GetSlo"),
1027 );
1028 self.inner.unary(req, path, codec).await
1029 }
1030 pub async fn list_slos(
1031 &mut self,
1032 request: impl tonic::IntoRequest<super::ListSlosRequest>,
1033 ) -> std::result::Result<
1034 tonic::Response<super::ListSlosResponse>,
1035 tonic::Status,
1036 > {
1037 self.inner
1038 .ready()
1039 .await
1040 .map_err(|e| {
1041 tonic::Status::unknown(
1042 format!("Service was not ready: {}", e.into()),
1043 )
1044 })?;
1045 let codec = tonic::codec::ProstCodec::default();
1046 let path = http::uri::PathAndQuery::from_static(
1047 "/com.coralogixapis.slo.v1.SlosService/ListSlos",
1048 );
1049 let mut req = request.into_request();
1050 req.extensions_mut()
1051 .insert(
1052 GrpcMethod::new("com.coralogixapis.slo.v1.SlosService", "ListSlos"),
1053 );
1054 self.inner.unary(req, path, codec).await
1055 }
1056 pub async fn get_zero_state(
1057 &mut self,
1058 request: impl tonic::IntoRequest<super::GetZeroStateRequest>,
1059 ) -> std::result::Result<
1060 tonic::Response<super::GetZeroStateResponse>,
1061 tonic::Status,
1062 > {
1063 self.inner
1064 .ready()
1065 .await
1066 .map_err(|e| {
1067 tonic::Status::unknown(
1068 format!("Service was not ready: {}", e.into()),
1069 )
1070 })?;
1071 let codec = tonic::codec::ProstCodec::default();
1072 let path = http::uri::PathAndQuery::from_static(
1073 "/com.coralogixapis.slo.v1.SlosService/GetZeroState",
1074 );
1075 let mut req = request.into_request();
1076 req.extensions_mut()
1077 .insert(
1078 GrpcMethod::new(
1079 "com.coralogixapis.slo.v1.SlosService",
1080 "GetZeroState",
1081 ),
1082 );
1083 self.inner.unary(req, path, codec).await
1084 }
1085 pub async fn batch_get_slos(
1086 &mut self,
1087 request: impl tonic::IntoRequest<super::BatchGetSlosRequest>,
1088 ) -> std::result::Result<
1089 tonic::Response<super::BatchGetSlosResponse>,
1090 tonic::Status,
1091 > {
1092 self.inner
1093 .ready()
1094 .await
1095 .map_err(|e| {
1096 tonic::Status::unknown(
1097 format!("Service was not ready: {}", e.into()),
1098 )
1099 })?;
1100 let codec = tonic::codec::ProstCodec::default();
1101 let path = http::uri::PathAndQuery::from_static(
1102 "/com.coralogixapis.slo.v1.SlosService/BatchGetSlos",
1103 );
1104 let mut req = request.into_request();
1105 req.extensions_mut()
1106 .insert(
1107 GrpcMethod::new(
1108 "com.coralogixapis.slo.v1.SlosService",
1109 "BatchGetSlos",
1110 ),
1111 );
1112 self.inner.unary(req, path, codec).await
1113 }
1114 pub async fn batch_execute_slo(
1115 &mut self,
1116 request: impl tonic::IntoRequest<super::BatchExecuteSloRequest>,
1117 ) -> std::result::Result<
1118 tonic::Response<super::BatchExecuteSloResponse>,
1119 tonic::Status,
1120 > {
1121 self.inner
1122 .ready()
1123 .await
1124 .map_err(|e| {
1125 tonic::Status::unknown(
1126 format!("Service was not ready: {}", e.into()),
1127 )
1128 })?;
1129 let codec = tonic::codec::ProstCodec::default();
1130 let path = http::uri::PathAndQuery::from_static(
1131 "/com.coralogixapis.slo.v1.SlosService/BatchExecuteSlo",
1132 );
1133 let mut req = request.into_request();
1134 req.extensions_mut()
1135 .insert(
1136 GrpcMethod::new(
1137 "com.coralogixapis.slo.v1.SlosService",
1138 "BatchExecuteSlo",
1139 ),
1140 );
1141 self.inner.unary(req, path, codec).await
1142 }
1143 }
1144}