v2_security_monitoring_PatchVulnerabilityNotificationRule/
v2_security-monitoring_PatchVulnerabilityNotificationRule.rs

1// Patch a vulnerability-based notification rule returns "Notification rule
2// successfully 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_vulnerability_notification_rule" in the system
17    let valid_vulnerability_notification_rule_data_id =
18        std::env::var("VALID_VULNERABILITY_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_vulnerability_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_vulnerability_notification_rule(
43            valid_vulnerability_notification_rule_data_id.clone(),
44            body,
45        )
46        .await;
47    if let Ok(value) = resp {
48        println!("{:#?}", value);
49    } else {
50        println!("{:#?}", resp.unwrap_err());
51    }
52}