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