v1_service_level_objectives_CreateSLO_3765703239/
v1_service-level-objectives_CreateSLO_3765703239.rs

1// Create a time-slice SLO object returns "OK" response
2use datadog_api_client::datadog;
3use datadog_api_client::datadogV1::api_service_level_objectives::ServiceLevelObjectivesAPI;
4use datadog_api_client::datadogV1::model::FormulaAndFunctionMetricDataSource;
5use datadog_api_client::datadogV1::model::FormulaAndFunctionMetricQueryDefinition;
6use datadog_api_client::datadogV1::model::SLODataSourceQueryDefinition;
7use datadog_api_client::datadogV1::model::SLOFormula;
8use datadog_api_client::datadogV1::model::SLOSliSpec;
9use datadog_api_client::datadogV1::model::SLOThreshold;
10use datadog_api_client::datadogV1::model::SLOTimeSliceComparator;
11use datadog_api_client::datadogV1::model::SLOTimeSliceCondition;
12use datadog_api_client::datadogV1::model::SLOTimeSliceQuery;
13use datadog_api_client::datadogV1::model::SLOTimeSliceSpec;
14use datadog_api_client::datadogV1::model::SLOTimeframe;
15use datadog_api_client::datadogV1::model::SLOType;
16use datadog_api_client::datadogV1::model::ServiceLevelObjectiveRequest;
17
18#[tokio::main]
19async fn main() {
20    let body = ServiceLevelObjectiveRequest::new(
21        "Example-Service-Level-Objective".to_string(),
22        vec![SLOThreshold::new(97.0, SLOTimeframe::SEVEN_DAYS)
23            .target_display("97.0".to_string())
24            .warning(98.0 as f64)
25            .warning_display("98.0".to_string())],
26        SLOType::TIME_SLICE,
27    )
28    .description(Some("string".to_string()))
29    .sli_specification(SLOSliSpec::SLOTimeSliceSpec(Box::new(
30        SLOTimeSliceSpec::new(SLOTimeSliceCondition::new(
31            SLOTimeSliceComparator::GREATER,
32            SLOTimeSliceQuery::new(
33                vec![SLOFormula::new("query1".to_string())],
34                vec![
35                    SLODataSourceQueryDefinition::FormulaAndFunctionMetricQueryDefinition(
36                        Box::new(FormulaAndFunctionMetricQueryDefinition::new(
37                            FormulaAndFunctionMetricDataSource::METRICS,
38                            "query1".to_string(),
39                            "trace.servlet.request{env:prod}".to_string(),
40                        )),
41                    ),
42                ],
43            ),
44            5.0,
45        )),
46    )))
47    .tags(vec!["env:prod".to_string()])
48    .target_threshold(97.0 as f64)
49    .timeframe(SLOTimeframe::SEVEN_DAYS)
50    .warning_threshold(98.0 as f64);
51    let configuration = datadog::Configuration::new();
52    let api = ServiceLevelObjectivesAPI::with_config(configuration);
53    let resp = api.create_slo(body).await;
54    if let Ok(value) = resp {
55        println!("{:#?}", value);
56    } else {
57        println!("{:#?}", resp.unwrap_err());
58    }
59}