v2_security_monitoring_CreateSecurityMonitoringRule/
v2_security-monitoring_CreateSecurityMonitoringRule.rs

1// Create a detection rule returns "OK" response
2use datadog_api_client::datadog;
3use datadog_api_client::datadogV2::api_security_monitoring::SecurityMonitoringAPI;
4use datadog_api_client::datadogV2::model::SecurityMonitoringReferenceTable;
5use datadog_api_client::datadogV2::model::SecurityMonitoringRuleCaseCreate;
6use datadog_api_client::datadogV2::model::SecurityMonitoringRuleCreatePayload;
7use datadog_api_client::datadogV2::model::SecurityMonitoringRuleEvaluationWindow;
8use datadog_api_client::datadogV2::model::SecurityMonitoringRuleKeepAlive;
9use datadog_api_client::datadogV2::model::SecurityMonitoringRuleMaxSignalDuration;
10use datadog_api_client::datadogV2::model::SecurityMonitoringRuleOptions;
11use datadog_api_client::datadogV2::model::SecurityMonitoringRuleQueryAggregation;
12use datadog_api_client::datadogV2::model::SecurityMonitoringRuleSeverity;
13use datadog_api_client::datadogV2::model::SecurityMonitoringRuleTypeCreate;
14use datadog_api_client::datadogV2::model::SecurityMonitoringStandardRuleCreatePayload;
15use datadog_api_client::datadogV2::model::SecurityMonitoringStandardRuleQuery;
16
17#[tokio::main]
18async fn main() {
19    let body =
20        SecurityMonitoringRuleCreatePayload::SecurityMonitoringStandardRuleCreatePayload(Box::new(
21            SecurityMonitoringStandardRuleCreatePayload::new(
22                vec![
23                    SecurityMonitoringRuleCaseCreate::new(SecurityMonitoringRuleSeverity::INFO)
24                        .condition("a > 0".to_string())
25                        .name("".to_string())
26                        .notifications(vec![]),
27                ],
28                true,
29                "Test rule".to_string(),
30                "Example-Security-Monitoring".to_string(),
31                SecurityMonitoringRuleOptions::new()
32                    .evaluation_window(SecurityMonitoringRuleEvaluationWindow::FIFTEEN_MINUTES)
33                    .keep_alive(SecurityMonitoringRuleKeepAlive::ONE_HOUR)
34                    .max_signal_duration(SecurityMonitoringRuleMaxSignalDuration::ONE_DAY),
35                vec![SecurityMonitoringStandardRuleQuery::new()
36                    .aggregation(SecurityMonitoringRuleQueryAggregation::COUNT)
37                    .distinct_fields(vec![])
38                    .group_by_fields(vec![])
39                    .metric("".to_string())
40                    .query("@test:true".to_string())],
41            )
42            .filters(vec![])
43            .reference_tables(vec![SecurityMonitoringReferenceTable::new()
44                .check_presence(true)
45                .column_name("value".to_string())
46                .log_field_path("testtag".to_string())
47                .rule_query_name("a".to_string())
48                .table_name("synthetics_test_reference_table_dont_delete".to_string())])
49            .tags(vec![])
50            .type_(SecurityMonitoringRuleTypeCreate::LOG_DETECTION),
51        ));
52    let configuration = datadog::Configuration::new();
53    let api = SecurityMonitoringAPI::with_config(configuration);
54    let resp = api.create_security_monitoring_rule(body).await;
55    if let Ok(value) = resp {
56        println!("{:#?}", value);
57    } else {
58        println!("{:#?}", resp.unwrap_err());
59    }
60}