Skip to content

Commit 2d1556b

Browse files
author
ci.datadog-api-spec
committed
Regenerate client from commit 56439c1 of spec repo
1 parent 35a2621 commit 2d1556b

8 files changed

+124
-15
lines changed

.generated-info

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
2-
"spec_repo_commit": "2ffdc3f",
3-
"generated": "2025-07-16 19:19:08.488"
2+
"spec_repo_commit": "56439c1",
3+
"generated": "2025-07-17 10:30:54.274"
44
}

.generator/schemas/v2/openapi.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33903,9 +33903,22 @@ components:
3390333903
format: int64
3390433904
minimum: 0
3390533905
type: integer
33906+
flaggedIPType:
33907+
$ref: '#/components/schemas/SecurityMonitoringRuleCaseActionOptionsFlaggedIPType'
3390633908
userBehaviorName:
3390733909
$ref: '#/components/schemas/SecurityMonitoringRuleCaseActionOptionsUserBehaviorName'
3390833910
type: object
33911+
SecurityMonitoringRuleCaseActionOptionsFlaggedIPType:
33912+
description: Used with the case action of type 'flag_ip'. The value specified
33913+
in this field is applied as a flag to the IPs addresses.
33914+
enum:
33915+
- SUSPICIOUS
33916+
- FLAGGED
33917+
example: FLAGGED
33918+
type: string
33919+
x-enum-varnames:
33920+
- SUSPICIOUS
33921+
- FLAGGED
3390933922
SecurityMonitoringRuleCaseActionOptionsUserBehaviorName:
3391033923
description: Used with the case action of type 'user_behavior'. The value specified
3391133924
in this field is applied as a risk tag to all users affected by the rule.
@@ -33916,11 +33929,13 @@ components:
3391633929
- block_ip
3391733930
- block_user
3391833931
- user_behavior
33932+
- flag_ip
3391933933
type: string
3392033934
x-enum-varnames:
3392133935
- BLOCK_IP
3392233936
- BLOCK_USER
3392333937
- USER_BEHAVIOR
33938+
- FLAG_IP
3392433939
SecurityMonitoringRuleCaseCreate:
3392533940
description: Case when signal is generated.
3392633941
properties:

examples/v2_security-monitoring_CreateSecurityMonitoringRule_1965169892.rs

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use datadog_api_client::datadog;
33
use datadog_api_client::datadogV2::api_security_monitoring::SecurityMonitoringAPI;
44
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleCaseAction;
55
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleCaseActionOptions;
6+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleCaseActionOptionsFlaggedIPType;
67
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleCaseActionType;
78
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleCaseCreate;
89
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleCreatePayload;
@@ -25,18 +26,23 @@ async fn main() {
2526
vec![
2627
SecurityMonitoringRuleCaseCreate::new(SecurityMonitoringRuleSeverity::INFO)
2728
.actions(vec![
28-
SecurityMonitoringRuleCaseAction::new()
29-
.options(
30-
SecurityMonitoringRuleCaseActionOptions::new().duration(900),
31-
)
32-
.type_(SecurityMonitoringRuleCaseActionType::BLOCK_IP),
33-
SecurityMonitoringRuleCaseAction::new()
34-
.options(
35-
SecurityMonitoringRuleCaseActionOptions::new()
36-
.user_behavior_name("behavior".to_string()),
37-
)
38-
.type_(SecurityMonitoringRuleCaseActionType::USER_BEHAVIOR),
39-
])
29+
SecurityMonitoringRuleCaseAction::new()
30+
.options(SecurityMonitoringRuleCaseActionOptions::new().duration(900))
31+
.type_(SecurityMonitoringRuleCaseActionType::BLOCK_IP),
32+
SecurityMonitoringRuleCaseAction::new()
33+
.options(
34+
SecurityMonitoringRuleCaseActionOptions::new()
35+
.user_behavior_name("behavior".to_string()),
36+
)
37+
.type_(SecurityMonitoringRuleCaseActionType::USER_BEHAVIOR),
38+
SecurityMonitoringRuleCaseAction::new()
39+
.options(
40+
SecurityMonitoringRuleCaseActionOptions::new().flagged_ip_type(
41+
SecurityMonitoringRuleCaseActionOptionsFlaggedIPType::FLAGGED,
42+
),
43+
)
44+
.type_(SecurityMonitoringRuleCaseActionType::FLAG_IP),
45+
])
4046
.condition("a > 100000".to_string())
4147
.name("".to_string())
4248
.notifications(vec![]),

src/datadogV2/model/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4228,6 +4228,8 @@ pub mod model_security_monitoring_rule_case_action;
42284228
pub use self::model_security_monitoring_rule_case_action::SecurityMonitoringRuleCaseAction;
42294229
pub mod model_security_monitoring_rule_case_action_options;
42304230
pub use self::model_security_monitoring_rule_case_action_options::SecurityMonitoringRuleCaseActionOptions;
4231+
pub mod model_security_monitoring_rule_case_action_options_flagged_ip_type;
4232+
pub use self::model_security_monitoring_rule_case_action_options_flagged_ip_type::SecurityMonitoringRuleCaseActionOptionsFlaggedIPType;
42314233
pub mod model_security_monitoring_rule_case_action_type;
42324234
pub use self::model_security_monitoring_rule_case_action_type::SecurityMonitoringRuleCaseActionType;
42334235
pub mod model_security_monitoring_rule_severity;

src/datadogV2/model/model_security_monitoring_rule_case_action_options.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ pub struct SecurityMonitoringRuleCaseActionOptions {
1414
/// Duration of the action in seconds. 0 indicates no expiration.
1515
#[serde(rename = "duration")]
1616
pub duration: Option<i64>,
17+
/// Used with the case action of type 'flag_ip'. The value specified in this field is applied as a flag to the IPs addresses.
18+
#[serde(rename = "flaggedIPType")]
19+
pub flagged_ip_type:
20+
Option<crate::datadogV2::model::SecurityMonitoringRuleCaseActionOptionsFlaggedIPType>,
1721
/// Used with the case action of type 'user_behavior'. The value specified in this field is applied as a risk tag to all users affected by the rule.
1822
#[serde(rename = "userBehaviorName")]
1923
pub user_behavior_name: Option<String>,
@@ -28,6 +32,7 @@ impl SecurityMonitoringRuleCaseActionOptions {
2832
pub fn new() -> SecurityMonitoringRuleCaseActionOptions {
2933
SecurityMonitoringRuleCaseActionOptions {
3034
duration: None,
35+
flagged_ip_type: None,
3136
user_behavior_name: None,
3237
additional_properties: std::collections::BTreeMap::new(),
3338
_unparsed: false,
@@ -39,6 +44,14 @@ impl SecurityMonitoringRuleCaseActionOptions {
3944
self
4045
}
4146

47+
pub fn flagged_ip_type(
48+
mut self,
49+
value: crate::datadogV2::model::SecurityMonitoringRuleCaseActionOptionsFlaggedIPType,
50+
) -> Self {
51+
self.flagged_ip_type = Some(value);
52+
self
53+
}
54+
4255
pub fn user_behavior_name(mut self, value: String) -> Self {
4356
self.user_behavior_name = Some(value);
4457
self
@@ -77,6 +90,9 @@ impl<'de> Deserialize<'de> for SecurityMonitoringRuleCaseActionOptions {
7790
M: MapAccess<'a>,
7891
{
7992
let mut duration: Option<i64> = None;
93+
let mut flagged_ip_type: Option<
94+
crate::datadogV2::model::SecurityMonitoringRuleCaseActionOptionsFlaggedIPType,
95+
> = None;
8096
let mut user_behavior_name: Option<String> = None;
8197
let mut additional_properties: std::collections::BTreeMap<
8298
String,
@@ -92,6 +108,21 @@ impl<'de> Deserialize<'de> for SecurityMonitoringRuleCaseActionOptions {
92108
}
93109
duration = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
94110
}
111+
"flaggedIPType" => {
112+
if v.is_null() {
113+
continue;
114+
}
115+
flagged_ip_type =
116+
Some(serde_json::from_value(v).map_err(M::Error::custom)?);
117+
if let Some(ref _flagged_ip_type) = flagged_ip_type {
118+
match _flagged_ip_type {
119+
crate::datadogV2::model::SecurityMonitoringRuleCaseActionOptionsFlaggedIPType::UnparsedObject(_flagged_ip_type) => {
120+
_unparsed = true;
121+
},
122+
_ => {}
123+
}
124+
}
125+
}
95126
"userBehaviorName" => {
96127
if v.is_null() {
97128
continue;
@@ -109,6 +140,7 @@ impl<'de> Deserialize<'de> for SecurityMonitoringRuleCaseActionOptions {
109140

110141
let content = SecurityMonitoringRuleCaseActionOptions {
111142
duration,
143+
flagged_ip_type,
112144
user_behavior_name,
113145
additional_properties,
114146
_unparsed,
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License.
2+
// This product includes software developed at Datadog (https://www.datadoghq.com/).
3+
// Copyright 2019-Present Datadog, Inc.
4+
5+
use serde::{Deserialize, Deserializer, Serialize, Serializer};
6+
7+
#[non_exhaustive]
8+
#[derive(Clone, Debug, Eq, PartialEq)]
9+
pub enum SecurityMonitoringRuleCaseActionOptionsFlaggedIPType {
10+
SUSPICIOUS,
11+
FLAGGED,
12+
UnparsedObject(crate::datadog::UnparsedObject),
13+
}
14+
15+
impl ToString for SecurityMonitoringRuleCaseActionOptionsFlaggedIPType {
16+
fn to_string(&self) -> String {
17+
match self {
18+
Self::SUSPICIOUS => String::from("SUSPICIOUS"),
19+
Self::FLAGGED => String::from("FLAGGED"),
20+
Self::UnparsedObject(v) => v.value.to_string(),
21+
}
22+
}
23+
}
24+
25+
impl Serialize for SecurityMonitoringRuleCaseActionOptionsFlaggedIPType {
26+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
27+
where
28+
S: Serializer,
29+
{
30+
match self {
31+
Self::UnparsedObject(v) => v.serialize(serializer),
32+
_ => serializer.serialize_str(self.to_string().as_str()),
33+
}
34+
}
35+
}
36+
37+
impl<'de> Deserialize<'de> for SecurityMonitoringRuleCaseActionOptionsFlaggedIPType {
38+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
39+
where
40+
D: Deserializer<'de>,
41+
{
42+
let s: String = String::deserialize(deserializer)?;
43+
Ok(match s.as_str() {
44+
"SUSPICIOUS" => Self::SUSPICIOUS,
45+
"FLAGGED" => Self::FLAGGED,
46+
_ => Self::UnparsedObject(crate::datadog::UnparsedObject {
47+
value: serde_json::Value::String(s.into()),
48+
}),
49+
})
50+
}
51+
}

src/datadogV2/model/model_security_monitoring_rule_case_action_type.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ pub enum SecurityMonitoringRuleCaseActionType {
1010
BLOCK_IP,
1111
BLOCK_USER,
1212
USER_BEHAVIOR,
13+
FLAG_IP,
1314
UnparsedObject(crate::datadog::UnparsedObject),
1415
}
1516

@@ -19,6 +20,7 @@ impl ToString for SecurityMonitoringRuleCaseActionType {
1920
Self::BLOCK_IP => String::from("block_ip"),
2021
Self::BLOCK_USER => String::from("block_user"),
2122
Self::USER_BEHAVIOR => String::from("user_behavior"),
23+
Self::FLAG_IP => String::from("flag_ip"),
2224
Self::UnparsedObject(v) => v.value.to_string(),
2325
}
2426
}
@@ -46,6 +48,7 @@ impl<'de> Deserialize<'de> for SecurityMonitoringRuleCaseActionType {
4648
"block_ip" => Self::BLOCK_IP,
4749
"block_user" => Self::BLOCK_USER,
4850
"user_behavior" => Self::USER_BEHAVIOR,
51+
"flag_ip" => Self::FLAG_IP,
4952
_ => Self::UnparsedObject(crate::datadog::UnparsedObject {
5053
value: serde_json::Value::String(s.into()),
5154
}),

tests/scenarios/features/v2/security_monitoring.feature

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ Feature: Security Monitoring
225225
@skip-validation @team:DataDog/k9-cloud-security-platform
226226
Scenario: Create a detection rule with type 'application_security 'returns "OK" response
227227
Given new "CreateSecurityMonitoringRule" request
228-
And body with value {"type":"application_security","name":"{{unique}}_appsec_rule","queries":[{"query":"@appsec.security_activity:business_logic.users.login.failure","aggregation":"count","groupByFields":["service","@http.client_ip"],"distinctFields":[]}],"filters":[],"cases":[{"name":"","status":"info","notifications":[],"condition":"a > 100000","actions":[{"type":"block_ip","options":{"duration":900}}, {"type":"user_behavior","options":{"userBehaviorName":"behavior"}}]}],"options":{"keepAlive":3600,"maxSignalDuration":86400,"evaluationWindow":900,"detectionMethod":"threshold"},"isEnabled":true,"message":"Test rule","tags":[],"groupSignalsBy":["service"]}
228+
And body with value {"type":"application_security","name":"{{unique}}_appsec_rule","queries":[{"query":"@appsec.security_activity:business_logic.users.login.failure","aggregation":"count","groupByFields":["service","@http.client_ip"],"distinctFields":[]}],"filters":[],"cases":[{"name":"","status":"info","notifications":[],"condition":"a > 100000","actions":[{"type":"block_ip","options":{"duration":900}}, {"type":"user_behavior","options":{"userBehaviorName":"behavior"}}, {"type":"flag_ip","options":{"flaggedIPType":"FLAGGED"}}]}],"options":{"keepAlive":3600,"maxSignalDuration":86400,"evaluationWindow":900,"detectionMethod":"threshold"},"isEnabled":true,"message":"Test rule","tags":[],"groupSignalsBy":["service"]}
229229
When the request is sent
230230
Then the response status is 200 OK
231231
And the response "name" is equal to "{{ unique }}_appsec_rule"

0 commit comments

Comments
 (0)