v2_security_monitoring_PatchSignalNotificationRule/
v2_security-monitoring_PatchSignalNotificationRule.rs

1// Patch a signal-based notification rule returns "Notification rule successfully
2// patched." response
3use datadog_api_client::datadog;
4use datadog_api_client::datadogV2::api_security_monitoring::SecurityMonitoringAPI;
5use datadog_api_client::datadogV2::model::NotificationRulesType;
6use datadog_api_client::datadogV2::model::PatchNotificationRuleParameters;
7use datadog_api_client::datadogV2::model::PatchNotificationRuleParametersData;
8use datadog_api_client::datadogV2::model::PatchNotificationRuleParametersDataAttributes;
9use datadog_api_client::datadogV2::model::RuleSeverity;
10use datadog_api_client::datadogV2::model::RuleTypesItems;
11use datadog_api_client::datadogV2::model::Selectors;
12use datadog_api_client::datadogV2::model::TriggerSource;
13
14#[tokio::main]
15async fn main() {
16    // there is a valid "valid_signal_notification_rule" in the system
17    let valid_signal_notification_rule_data_id =
18        std::env::var("VALID_SIGNAL_NOTIFICATION_RULE_DATA_ID").unwrap();
19    let body =
20        PatchNotificationRuleParameters::new().data(PatchNotificationRuleParametersData::new(
21            PatchNotificationRuleParametersDataAttributes::new()
22                .enabled(true)
23                .name("Rule 1".to_string())
24                .selectors(
25                    Selectors::new(TriggerSource::SECURITY_FINDINGS)
26                        .query("(source:production_service OR env:prod)".to_string())
27                        .rule_types(vec![
28                            RuleTypesItems::MISCONFIGURATION,
29                            RuleTypesItems::ATTACK_PATH,
30                        ])
31                        .severities(vec![RuleSeverity::CRITICAL]),
32                )
33                .targets(vec!["@john.doe@email.com".to_string()])
34                .time_aggregation(86400)
35                .version(1),
36            valid_signal_notification_rule_data_id.clone(),
37            NotificationRulesType::NOTIFICATION_RULES,
38        ));
39    let configuration = datadog::Configuration::new();
40    let api = SecurityMonitoringAPI::with_config(configuration);
41    let resp = api
42        .patch_signal_notification_rule(valid_signal_notification_rule_data_id.clone(), body)
43        .await;
44    if let Ok(value) = resp {
45        println!("{:#?}", value);
46    } else {
47        println!("{:#?}", resp.unwrap_err());
48    }
49}