v1_dashboards_CreateDashboard_1284514532/
v1_dashboards_CreateDashboard_1284514532.rs

1// Create a new dashboard with a timeseries widget using formulas and functions
2// cloud cost query
3use datadog_api_client::datadog;
4use datadog_api_client::datadogV1::api_dashboards::DashboardsAPI;
5use datadog_api_client::datadogV1::model::Dashboard;
6use datadog_api_client::datadogV1::model::DashboardLayoutType;
7use datadog_api_client::datadogV1::model::FormulaAndFunctionCloudCostDataSource;
8use datadog_api_client::datadogV1::model::FormulaAndFunctionCloudCostQueryDefinition;
9use datadog_api_client::datadogV1::model::FormulaAndFunctionQueryDefinition;
10use datadog_api_client::datadogV1::model::FormulaAndFunctionResponseFormat;
11use datadog_api_client::datadogV1::model::TimeseriesWidgetDefinition;
12use datadog_api_client::datadogV1::model::TimeseriesWidgetDefinitionType;
13use datadog_api_client::datadogV1::model::TimeseriesWidgetRequest;
14use datadog_api_client::datadogV1::model::Widget;
15use datadog_api_client::datadogV1::model::WidgetDefinition;
16use datadog_api_client::datadogV1::model::WidgetDisplayType;
17use datadog_api_client::datadogV1::model::WidgetFormula;
18use datadog_api_client::datadogV1::model::WidgetLegacyLiveSpan;
19use datadog_api_client::datadogV1::model::WidgetLineType;
20use datadog_api_client::datadogV1::model::WidgetLineWidth;
21use datadog_api_client::datadogV1::model::WidgetLiveSpan;
22use datadog_api_client::datadogV1::model::WidgetRequestStyle;
23use datadog_api_client::datadogV1::model::WidgetTextAlign;
24use datadog_api_client::datadogV1::model::WidgetTime;
25
26#[tokio::main]
27async fn main() {
28    let body =
29        Dashboard::new(
30            DashboardLayoutType::ORDERED,
31            "Example-Dashboard".to_string(),
32            vec![
33                Widget::new(
34                    WidgetDefinition::TimeseriesWidgetDefinition(
35                        Box::new(
36                            TimeseriesWidgetDefinition::new(
37                                vec![
38                                    TimeseriesWidgetRequest::new()
39                                        .display_type(WidgetDisplayType::BARS)
40                                        .formulas(vec![WidgetFormula::new("query1".to_string())])
41                                        .queries(
42                                            vec![
43                                                FormulaAndFunctionQueryDefinition
44                                                ::FormulaAndFunctionCloudCostQueryDefinition(
45                                                    Box::new(
46                                                        FormulaAndFunctionCloudCostQueryDefinition::new(
47                                                            FormulaAndFunctionCloudCostDataSource::CLOUD_COST,
48                                                            "query1".to_string(),
49                                                            "sum:aws.cost.amortized{*} by {aws_product}.rollup(sum, monthly)".to_string(),
50                                                        ),
51                                                    ),
52                                                )
53                                            ],
54                                        )
55                                        .response_format(FormulaAndFunctionResponseFormat::TIMESERIES)
56                                        .style(
57                                            WidgetRequestStyle::new()
58                                                .line_type(WidgetLineType::SOLID)
59                                                .line_width(WidgetLineWidth::NORMAL)
60                                                .palette("dog_classic".to_string()),
61                                        )
62                                ],
63                                TimeseriesWidgetDefinitionType::TIMESERIES,
64                            )
65                                .time(
66                                    WidgetTime::WidgetLegacyLiveSpan(
67                                        Box::new(WidgetLegacyLiveSpan::new().live_span(WidgetLiveSpan::WEEK_TO_DATE)),
68                                    ),
69                                )
70                                .title("Example Cloud Cost Query".to_string())
71                                .title_align(WidgetTextAlign::LEFT)
72                                .title_size("16".to_string()),
73                        ),
74                    ),
75                )
76            ],
77        );
78    let configuration = datadog::Configuration::new();
79    let api = DashboardsAPI::with_config(configuration);
80    let resp = api.create_dashboard(body).await;
81    if let Ok(value) = resp {
82        println!("{:#?}", value);
83    } else {
84        println!("{:#?}", resp.unwrap_err());
85    }
86}