1#[derive(serde::Serialize, serde::Deserialize)]
3#[serde(rename_all = "snake_case")]
4#[derive(Clone, PartialEq, ::prost::Message)]
5pub struct SliFilter {
6 #[prost(message, optional, tag = "1")]
7 pub field: ::core::option::Option<::prost::alloc::string::String>,
8 #[prost(enumeration = "CompareType", tag = "2")]
9 pub compare_type: i32,
10 #[prost(message, repeated, tag = "3")]
11 pub field_values: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
12}
13#[derive(serde::Serialize, serde::Deserialize)]
14#[serde(rename_all = "snake_case")]
15#[derive(Clone, PartialEq, ::prost::Message)]
16pub struct LatencySli {
17 #[prost(message, optional, tag = "1")]
18 pub threshold_microseconds: ::core::option::Option<::prost::alloc::string::String>,
19 #[prost(enumeration = "ThresholdSymbol", tag = "2")]
20 pub threshold_symbol: i32,
21}
22#[derive(serde::Serialize, serde::Deserialize)]
23#[serde(rename_all = "snake_case")]
24#[derive(Clone, Copy, PartialEq, ::prost::Message)]
25pub struct ErrorSli {}
26#[derive(serde::Serialize, serde::Deserialize)]
27#[serde(rename_all = "snake_case")]
28#[derive(Clone, PartialEq, ::prost::Message)]
29pub struct ServiceSlo {
30 #[prost(message, optional, tag = "1")]
31 pub id: ::core::option::Option<::prost::alloc::string::String>,
32 #[prost(message, optional, tag = "2")]
33 pub name: ::core::option::Option<::prost::alloc::string::String>,
34 #[prost(message, optional, tag = "3")]
35 pub service_name: ::core::option::Option<::prost::alloc::string::String>,
36 #[prost(enumeration = "SloStatus", tag = "4")]
37 pub status: i32,
38 #[prost(message, optional, tag = "5")]
39 pub description: ::core::option::Option<::prost::alloc::string::String>,
40 #[prost(message, optional, tag = "6")]
41 pub target_percentage: ::core::option::Option<u32>,
42 #[prost(message, optional, tag = "7")]
43 pub created_at: ::core::option::Option<::prost_wkt_types::Timestamp>,
44 #[prost(message, optional, tag = "8")]
45 pub remaining_error_budget_percentage: ::core::option::Option<u32>,
46 #[prost(message, repeated, tag = "11")]
47 pub filters: ::prost::alloc::vec::Vec<SliFilter>,
48 #[prost(enumeration = "SloPeriod", tag = "12")]
49 pub period: i32,
50 #[prost(oneof = "service_slo::SliType", tags = "9, 10")]
51 pub sli_type: ::core::option::Option<service_slo::SliType>,
52}
53pub mod service_slo {
55 #[derive(serde::Serialize, serde::Deserialize)]
56 #[serde(rename_all = "snake_case")]
57 #[derive(Clone, PartialEq, ::prost::Oneof)]
58 pub enum SliType {
59 #[prost(message, tag = "9")]
60 LatencySli(super::LatencySli),
61 #[prost(message, tag = "10")]
62 ErrorSli(super::ErrorSli),
63 }
64}
65#[derive(serde::Serialize, serde::Deserialize)]
66#[serde(rename_all = "snake_case")]
67#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
68#[repr(i32)]
69pub enum CompareType {
70 Unspecified = 0,
71 Is = 1,
72 StartWith = 2,
73 EndsWith = 3,
74 Includes = 4,
75}
76impl CompareType {
77 pub fn as_str_name(&self) -> &'static str {
82 match self {
83 Self::Unspecified => "COMPARE_TYPE_UNSPECIFIED",
84 Self::Is => "COMPARE_TYPE_IS",
85 Self::StartWith => "COMPARE_TYPE_START_WITH",
86 Self::EndsWith => "COMPARE_TYPE_ENDS_WITH",
87 Self::Includes => "COMPARE_TYPE_INCLUDES",
88 }
89 }
90 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
92 match value {
93 "COMPARE_TYPE_UNSPECIFIED" => Some(Self::Unspecified),
94 "COMPARE_TYPE_IS" => Some(Self::Is),
95 "COMPARE_TYPE_START_WITH" => Some(Self::StartWith),
96 "COMPARE_TYPE_ENDS_WITH" => Some(Self::EndsWith),
97 "COMPARE_TYPE_INCLUDES" => Some(Self::Includes),
98 _ => None,
99 }
100 }
101}
102#[derive(serde::Serialize, serde::Deserialize)]
103#[serde(rename_all = "snake_case")]
104#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
105#[repr(i32)]
106pub enum SloStatus {
107 Unspecified = 0,
108 Ok = 1,
109 Breached = 2,
110}
111impl SloStatus {
112 pub fn as_str_name(&self) -> &'static str {
117 match self {
118 Self::Unspecified => "SLO_STATUS_UNSPECIFIED",
119 Self::Ok => "SLO_STATUS_OK",
120 Self::Breached => "SLO_STATUS_BREACHED",
121 }
122 }
123 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
125 match value {
126 "SLO_STATUS_UNSPECIFIED" => Some(Self::Unspecified),
127 "SLO_STATUS_OK" => Some(Self::Ok),
128 "SLO_STATUS_BREACHED" => Some(Self::Breached),
129 _ => None,
130 }
131 }
132}
133#[derive(serde::Serialize, serde::Deserialize)]
134#[serde(rename_all = "snake_case")]
135#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
136#[repr(i32)]
137pub enum SliMetricType {
138 Unspecified = 0,
139 Error = 1,
140 Latency = 2,
141 Custom = 3,
142}
143impl SliMetricType {
144 pub fn as_str_name(&self) -> &'static str {
149 match self {
150 Self::Unspecified => "SLI_METRIC_TYPE_UNSPECIFIED",
151 Self::Error => "SLI_METRIC_TYPE_ERROR",
152 Self::Latency => "SLI_METRIC_TYPE_LATENCY",
153 Self::Custom => "SLI_METRIC_TYPE_CUSTOM",
154 }
155 }
156 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
158 match value {
159 "SLI_METRIC_TYPE_UNSPECIFIED" => Some(Self::Unspecified),
160 "SLI_METRIC_TYPE_ERROR" => Some(Self::Error),
161 "SLI_METRIC_TYPE_LATENCY" => Some(Self::Latency),
162 "SLI_METRIC_TYPE_CUSTOM" => Some(Self::Custom),
163 _ => None,
164 }
165 }
166}
167#[derive(serde::Serialize, serde::Deserialize)]
168#[serde(rename_all = "snake_case")]
169#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
170#[repr(i32)]
171pub enum ThresholdSymbol {
172 Unspecified = 0,
173 Greater = 1,
174 GreaterOrEqual = 2,
175 Less = 3,
176 LessOrEqual = 4,
177 Equal = 5,
178 NotEqual = 6,
179}
180impl ThresholdSymbol {
181 pub fn as_str_name(&self) -> &'static str {
186 match self {
187 Self::Unspecified => "THRESHOLD_SYMBOL_UNSPECIFIED",
188 Self::Greater => "THRESHOLD_SYMBOL_GREATER",
189 Self::GreaterOrEqual => "THRESHOLD_SYMBOL_GREATER_OR_EQUAL",
190 Self::Less => "THRESHOLD_SYMBOL_LESS",
191 Self::LessOrEqual => "THRESHOLD_SYMBOL_LESS_OR_EQUAL",
192 Self::Equal => "THRESHOLD_SYMBOL_EQUAL",
193 Self::NotEqual => "THRESHOLD_SYMBOL_NOT_EQUAL",
194 }
195 }
196 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
198 match value {
199 "THRESHOLD_SYMBOL_UNSPECIFIED" => Some(Self::Unspecified),
200 "THRESHOLD_SYMBOL_GREATER" => Some(Self::Greater),
201 "THRESHOLD_SYMBOL_GREATER_OR_EQUAL" => Some(Self::GreaterOrEqual),
202 "THRESHOLD_SYMBOL_LESS" => Some(Self::Less),
203 "THRESHOLD_SYMBOL_LESS_OR_EQUAL" => Some(Self::LessOrEqual),
204 "THRESHOLD_SYMBOL_EQUAL" => Some(Self::Equal),
205 "THRESHOLD_SYMBOL_NOT_EQUAL" => Some(Self::NotEqual),
206 _ => None,
207 }
208 }
209}
210#[derive(serde::Serialize, serde::Deserialize)]
211#[serde(rename_all = "snake_case")]
212#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
213#[repr(i32)]
214pub enum SloPeriod {
215 Unspecified = 0,
216 SloPeriod7Days = 1,
217 SloPeriod14Days = 2,
218 SloPeriod30Days = 3,
219}
220impl SloPeriod {
221 pub fn as_str_name(&self) -> &'static str {
226 match self {
227 Self::Unspecified => "SLO_PERIOD_UNSPECIFIED",
228 Self::SloPeriod7Days => "SLO_PERIOD_7_DAYS",
229 Self::SloPeriod14Days => "SLO_PERIOD_14_DAYS",
230 Self::SloPeriod30Days => "SLO_PERIOD_30_DAYS",
231 }
232 }
233 pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
235 match value {
236 "SLO_PERIOD_UNSPECIFIED" => Some(Self::Unspecified),
237 "SLO_PERIOD_7_DAYS" => Some(Self::SloPeriod7Days),
238 "SLO_PERIOD_14_DAYS" => Some(Self::SloPeriod14Days),
239 "SLO_PERIOD_30_DAYS" => Some(Self::SloPeriod30Days),
240 _ => None,
241 }
242 }
243}
244#[derive(serde::Serialize, serde::Deserialize)]
245#[serde(rename_all = "snake_case")]
246#[derive(Clone, PartialEq, ::prost::Message)]
247pub struct GetServiceSloRequest {
248 #[prost(message, optional, tag = "1")]
249 pub id: ::core::option::Option<::prost::alloc::string::String>,
250}
251#[derive(serde::Serialize, serde::Deserialize)]
252#[serde(rename_all = "snake_case")]
253#[derive(Clone, PartialEq, ::prost::Message)]
254pub struct GetServiceSloResponse {
255 #[prost(message, optional, tag = "1")]
256 pub slo: ::core::option::Option<ServiceSlo>,
257}
258#[derive(serde::Serialize, serde::Deserialize)]
259#[serde(rename_all = "snake_case")]
260#[derive(Clone, PartialEq, ::prost::Message)]
261pub struct CreateServiceSloRequest {
262 #[prost(message, optional, tag = "1")]
263 pub slo: ::core::option::Option<ServiceSlo>,
264}
265#[derive(serde::Serialize, serde::Deserialize)]
266#[serde(rename_all = "snake_case")]
267#[derive(Clone, PartialEq, ::prost::Message)]
268pub struct CreateServiceSloResponse {
269 #[prost(message, optional, tag = "1")]
270 pub slo: ::core::option::Option<ServiceSlo>,
271}
272#[derive(serde::Serialize, serde::Deserialize)]
273#[serde(rename_all = "snake_case")]
274#[derive(Clone, PartialEq, ::prost::Message)]
275pub struct ReplaceServiceSloRequest {
276 #[prost(message, optional, tag = "1")]
277 pub slo: ::core::option::Option<ServiceSlo>,
278}
279#[derive(serde::Serialize, serde::Deserialize)]
280#[serde(rename_all = "snake_case")]
281#[derive(Clone, PartialEq, ::prost::Message)]
282pub struct ReplaceServiceSloResponse {
283 #[prost(message, optional, tag = "1")]
284 pub slo: ::core::option::Option<ServiceSlo>,
285}
286#[derive(serde::Serialize, serde::Deserialize)]
287#[serde(rename_all = "snake_case")]
288#[derive(Clone, PartialEq, ::prost::Message)]
289pub struct DeleteServiceSloRequest {
290 #[prost(message, optional, tag = "1")]
291 pub id: ::core::option::Option<::prost::alloc::string::String>,
292}
293#[derive(serde::Serialize, serde::Deserialize)]
294#[serde(rename_all = "snake_case")]
295#[derive(Clone, Copy, PartialEq, ::prost::Message)]
296pub struct DeleteServiceSloResponse {}
297#[derive(serde::Serialize, serde::Deserialize)]
298#[serde(rename_all = "snake_case")]
299#[derive(Clone, PartialEq, ::prost::Message)]
300pub struct ListServiceSlosRequest {
301 #[prost(message, optional, tag = "1")]
302 pub order_by: ::core::option::Option<super::super::common::v2::OrderBy>,
303 #[prost(message, repeated, tag = "2")]
304 pub service_names: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
305}
306#[derive(serde::Serialize, serde::Deserialize)]
307#[serde(rename_all = "snake_case")]
308#[derive(Clone, PartialEq, ::prost::Message)]
309pub struct ListServiceSlosResponse {
310 #[prost(message, repeated, tag = "1")]
311 pub slos: ::prost::alloc::vec::Vec<ServiceSlo>,
312}
313#[derive(serde::Serialize, serde::Deserialize)]
314#[serde(rename_all = "snake_case")]
315#[derive(Clone, PartialEq, ::prost::Message)]
316pub struct BatchGetServiceSlosRequest {
317 #[prost(message, repeated, tag = "1")]
318 pub ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
319}
320#[derive(serde::Serialize, serde::Deserialize)]
321#[serde(rename_all = "snake_case")]
322#[derive(Clone, PartialEq, ::prost::Message)]
323pub struct BatchGetServiceSlosResponse {
324 #[prost(map = "string, message", tag = "1")]
325 pub slos: ::std::collections::HashMap<::prost::alloc::string::String, ServiceSlo>,
326 #[prost(message, repeated, tag = "2")]
327 pub not_found_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
328}
329pub mod service_slo_service_client {
331 #![allow(
332 unused_variables,
333 dead_code,
334 missing_docs,
335 clippy::wildcard_imports,
336 clippy::let_unit_value,
337 )]
338 use tonic::codegen::*;
339 use tonic::codegen::http::Uri;
340 #[derive(Debug, Clone)]
341 pub struct ServiceSloServiceClient<T> {
342 inner: tonic::client::Grpc<T>,
343 }
344 impl ServiceSloServiceClient<tonic::transport::Channel> {
345 pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
347 where
348 D: TryInto<tonic::transport::Endpoint>,
349 D::Error: Into<StdError>,
350 {
351 let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
352 Ok(Self::new(conn))
353 }
354 }
355 impl<T> ServiceSloServiceClient<T>
356 where
357 T: tonic::client::GrpcService<tonic::body::BoxBody>,
358 T::Error: Into<StdError>,
359 T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
360 <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
361 {
362 pub fn new(inner: T) -> Self {
363 let inner = tonic::client::Grpc::new(inner);
364 Self { inner }
365 }
366 pub fn with_origin(inner: T, origin: Uri) -> Self {
367 let inner = tonic::client::Grpc::with_origin(inner, origin);
368 Self { inner }
369 }
370 pub fn with_interceptor<F>(
371 inner: T,
372 interceptor: F,
373 ) -> ServiceSloServiceClient<InterceptedService<T, F>>
374 where
375 F: tonic::service::Interceptor,
376 T::ResponseBody: Default,
377 T: tonic::codegen::Service<
378 http::Request<tonic::body::BoxBody>,
379 Response = http::Response<
380 <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
381 >,
382 >,
383 <T as tonic::codegen::Service<
384 http::Request<tonic::body::BoxBody>,
385 >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
386 {
387 ServiceSloServiceClient::new(InterceptedService::new(inner, interceptor))
388 }
389 #[must_use]
394 pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
395 self.inner = self.inner.send_compressed(encoding);
396 self
397 }
398 #[must_use]
400 pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
401 self.inner = self.inner.accept_compressed(encoding);
402 self
403 }
404 #[must_use]
408 pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
409 self.inner = self.inner.max_decoding_message_size(limit);
410 self
411 }
412 #[must_use]
416 pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
417 self.inner = self.inner.max_encoding_message_size(limit);
418 self
419 }
420 pub async fn get_service_slo(
421 &mut self,
422 request: impl tonic::IntoRequest<super::GetServiceSloRequest>,
423 ) -> std::result::Result<
424 tonic::Response<super::GetServiceSloResponse>,
425 tonic::Status,
426 > {
427 self.inner
428 .ready()
429 .await
430 .map_err(|e| {
431 tonic::Status::unknown(
432 format!("Service was not ready: {}", e.into()),
433 )
434 })?;
435 let codec = tonic::codec::ProstCodec::default();
436 let path = http::uri::PathAndQuery::from_static(
437 "/com.coralogixapis.apm.services.v1.ServiceSloService/GetServiceSlo",
438 );
439 let mut req = request.into_request();
440 req.extensions_mut()
441 .insert(
442 GrpcMethod::new(
443 "com.coralogixapis.apm.services.v1.ServiceSloService",
444 "GetServiceSlo",
445 ),
446 );
447 self.inner.unary(req, path, codec).await
448 }
449 pub async fn create_service_slo(
450 &mut self,
451 request: impl tonic::IntoRequest<super::CreateServiceSloRequest>,
452 ) -> std::result::Result<
453 tonic::Response<super::CreateServiceSloResponse>,
454 tonic::Status,
455 > {
456 self.inner
457 .ready()
458 .await
459 .map_err(|e| {
460 tonic::Status::unknown(
461 format!("Service was not ready: {}", e.into()),
462 )
463 })?;
464 let codec = tonic::codec::ProstCodec::default();
465 let path = http::uri::PathAndQuery::from_static(
466 "/com.coralogixapis.apm.services.v1.ServiceSloService/CreateServiceSlo",
467 );
468 let mut req = request.into_request();
469 req.extensions_mut()
470 .insert(
471 GrpcMethod::new(
472 "com.coralogixapis.apm.services.v1.ServiceSloService",
473 "CreateServiceSlo",
474 ),
475 );
476 self.inner.unary(req, path, codec).await
477 }
478 pub async fn replace_service_slo(
479 &mut self,
480 request: impl tonic::IntoRequest<super::ReplaceServiceSloRequest>,
481 ) -> std::result::Result<
482 tonic::Response<super::ReplaceServiceSloResponse>,
483 tonic::Status,
484 > {
485 self.inner
486 .ready()
487 .await
488 .map_err(|e| {
489 tonic::Status::unknown(
490 format!("Service was not ready: {}", e.into()),
491 )
492 })?;
493 let codec = tonic::codec::ProstCodec::default();
494 let path = http::uri::PathAndQuery::from_static(
495 "/com.coralogixapis.apm.services.v1.ServiceSloService/ReplaceServiceSlo",
496 );
497 let mut req = request.into_request();
498 req.extensions_mut()
499 .insert(
500 GrpcMethod::new(
501 "com.coralogixapis.apm.services.v1.ServiceSloService",
502 "ReplaceServiceSlo",
503 ),
504 );
505 self.inner.unary(req, path, codec).await
506 }
507 pub async fn delete_service_slo(
508 &mut self,
509 request: impl tonic::IntoRequest<super::DeleteServiceSloRequest>,
510 ) -> std::result::Result<
511 tonic::Response<super::DeleteServiceSloResponse>,
512 tonic::Status,
513 > {
514 self.inner
515 .ready()
516 .await
517 .map_err(|e| {
518 tonic::Status::unknown(
519 format!("Service was not ready: {}", e.into()),
520 )
521 })?;
522 let codec = tonic::codec::ProstCodec::default();
523 let path = http::uri::PathAndQuery::from_static(
524 "/com.coralogixapis.apm.services.v1.ServiceSloService/DeleteServiceSlo",
525 );
526 let mut req = request.into_request();
527 req.extensions_mut()
528 .insert(
529 GrpcMethod::new(
530 "com.coralogixapis.apm.services.v1.ServiceSloService",
531 "DeleteServiceSlo",
532 ),
533 );
534 self.inner.unary(req, path, codec).await
535 }
536 pub async fn list_service_slos(
537 &mut self,
538 request: impl tonic::IntoRequest<super::ListServiceSlosRequest>,
539 ) -> std::result::Result<
540 tonic::Response<super::ListServiceSlosResponse>,
541 tonic::Status,
542 > {
543 self.inner
544 .ready()
545 .await
546 .map_err(|e| {
547 tonic::Status::unknown(
548 format!("Service was not ready: {}", e.into()),
549 )
550 })?;
551 let codec = tonic::codec::ProstCodec::default();
552 let path = http::uri::PathAndQuery::from_static(
553 "/com.coralogixapis.apm.services.v1.ServiceSloService/ListServiceSlos",
554 );
555 let mut req = request.into_request();
556 req.extensions_mut()
557 .insert(
558 GrpcMethod::new(
559 "com.coralogixapis.apm.services.v1.ServiceSloService",
560 "ListServiceSlos",
561 ),
562 );
563 self.inner.unary(req, path, codec).await
564 }
565 pub async fn batch_get_service_slos(
566 &mut self,
567 request: impl tonic::IntoRequest<super::BatchGetServiceSlosRequest>,
568 ) -> std::result::Result<
569 tonic::Response<super::BatchGetServiceSlosResponse>,
570 tonic::Status,
571 > {
572 self.inner
573 .ready()
574 .await
575 .map_err(|e| {
576 tonic::Status::unknown(
577 format!("Service was not ready: {}", e.into()),
578 )
579 })?;
580 let codec = tonic::codec::ProstCodec::default();
581 let path = http::uri::PathAndQuery::from_static(
582 "/com.coralogixapis.apm.services.v1.ServiceSloService/BatchGetServiceSlos",
583 );
584 let mut req = request.into_request();
585 req.extensions_mut()
586 .insert(
587 GrpcMethod::new(
588 "com.coralogixapis.apm.services.v1.ServiceSloService",
589 "BatchGetServiceSlos",
590 ),
591 );
592 self.inner.unary(req, path, codec).await
593 }
594 }
595}