Skip to content

Commit 89b7200

Browse files
api-clients-generation-pipeline[bot]ci.datadog-api-spec
andauthored
security_monitoring - Add indexes to deprecate index in ruleQuery (#963)
Co-authored-by: ci.datadog-api-spec <packages@datadoghq.com>
1 parent be44d1c commit 89b7200

9 files changed

+40
-14
lines changed

.generator/schemas/v2/openapi.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43891,6 +43891,14 @@ components:
4389143891
for scheduled rules - in other words, when the `schedulingOptions` field
4389243892
is present in the rule payload.'
4389343893
type: string
43894+
indexes:
43895+
description: List of indexes to query when the `dataSource` is `logs`. Only
43896+
used for scheduled rules, such as when the `schedulingOptions` field is
43897+
present in the rule payload.
43898+
items:
43899+
description: Index.
43900+
type: string
43901+
type: array
4389443902
metric:
4389543903
deprecated: true
4389643904
description: '(Deprecated) The target field to aggregate over when using

LICENSE-3rdparty.csv

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,10 @@ native-tls,https://github.com/sfackler/rust-native-tls,MIT OR Apache-2.0,Steven
8383
num-conv,https://github.com/jhpratt/num-conv,MIT OR Apache-2.0,Jacob Pratt <jacob@jhpratt.dev>
8484
num-traits,https://github.com/rust-num/num-traits,MIT OR Apache-2.0,The Rust Project Developers
8585
once_cell,https://github.com/matklad/once_cell,MIT OR Apache-2.0,Aleksey Kladov <aleksey.kladov@gmail.com>
86-
openssl,https://github.com/sfackler/rust-openssl,Apache-2.0,Steven Fackler <sfackler@gmail.com>
86+
openssl,https://github.com/rust-openssl/rust-openssl,Apache-2.0,Steven Fackler <sfackler@gmail.com>
8787
openssl-macros,https://github.com/sfackler/rust-openssl,MIT OR Apache-2.0,The openssl-macros Authors
8888
openssl-probe,https://github.com/alexcrichton/openssl-probe,MIT OR Apache-2.0,Alex Crichton <alex@alexcrichton.com>
89-
openssl-sys,https://github.com/sfackler/rust-openssl,MIT,"Alex Crichton <alex@alexcrichton.com>, Steven Fackler <sfackler@gmail.com>"
89+
openssl-sys,https://github.com/rust-openssl/rust-openssl,MIT,"Alex Crichton <alex@alexcrichton.com>, Steven Fackler <sfackler@gmail.com>"
9090
parking_lot,https://github.com/Amanieu/parking_lot,Apache-2.0 OR MIT,Amanieu d'Antras <amanieu@gmail.com>
9191
parking_lot_core,https://github.com/Amanieu/parking_lot,Apache-2.0 OR MIT,Amanieu d'Antras <amanieu@gmail.com>
9292
percent-encoding,https://github.com/servo/rust-url,MIT OR Apache-2.0,The rust-url developers

examples/v2_security-monitoring_CreateSecurityMonitoringRule_868881438.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ async fn main() {
3636
.aggregation(SecurityMonitoringRuleQueryAggregation::COUNT)
3737
.distinct_fields(vec![])
3838
.group_by_fields(vec![])
39-
.index("main".to_string())
39+
.indexes(vec!["main".to_string()])
4040
.query("@test:true".to_string())],
4141
)
4242
.filters(vec![])

src/datadogV2/model/model_security_monitoring_standard_rule_query.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ pub struct SecurityMonitoringStandardRuleQuery {
3333
/// The index to run the query on, if the `dataSource` is `logs`. Only used for scheduled rules - in other words, when the `schedulingOptions` field is present in the rule payload.
3434
#[serde(rename = "index")]
3535
pub index: Option<String>,
36+
/// List of indexes to query when the `dataSource` is `logs`. Only used for scheduled rules, such as when the `schedulingOptions` field is present in the rule payload.
37+
#[serde(rename = "indexes")]
38+
pub indexes: Option<Vec<String>>,
3639
/// (Deprecated) The target field to aggregate over when using the sum or max
3740
/// aggregations. `metrics` field should be used instead.
3841
#[deprecated]
@@ -65,6 +68,7 @@ impl SecurityMonitoringStandardRuleQuery {
6568
group_by_fields: None,
6669
has_optional_group_by_fields: None,
6770
index: None,
71+
indexes: None,
6872
metric: None,
6973
metrics: None,
7074
name: None,
@@ -122,6 +126,12 @@ impl SecurityMonitoringStandardRuleQuery {
122126
self
123127
}
124128

129+
#[allow(deprecated)]
130+
pub fn indexes(mut self, value: Vec<String>) -> Self {
131+
self.indexes = Some(value);
132+
self
133+
}
134+
125135
#[allow(deprecated)]
126136
pub fn metric(mut self, value: String) -> Self {
127137
self.metric = Some(value);
@@ -189,6 +199,7 @@ impl<'de> Deserialize<'de> for SecurityMonitoringStandardRuleQuery {
189199
let mut group_by_fields: Option<Vec<String>> = None;
190200
let mut has_optional_group_by_fields: Option<bool> = None;
191201
let mut index: Option<String> = None;
202+
let mut indexes: Option<Vec<String>> = None;
192203
let mut metric: Option<String> = None;
193204
let mut metrics: Option<Vec<String>> = None;
194205
let mut name: Option<String> = None;
@@ -265,6 +276,12 @@ impl<'de> Deserialize<'de> for SecurityMonitoringStandardRuleQuery {
265276
}
266277
index = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
267278
}
279+
"indexes" => {
280+
if v.is_null() {
281+
continue;
282+
}
283+
indexes = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
284+
}
268285
"metric" => {
269286
if v.is_null() {
270287
continue;
@@ -306,6 +323,7 @@ impl<'de> Deserialize<'de> for SecurityMonitoringStandardRuleQuery {
306323
group_by_fields,
307324
has_optional_group_by_fields,
308325
index,
326+
indexes,
309327
metric,
310328
metrics,
311329
name,
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2025-07-31T07:48:27.113Z
1+
2025-10-13T21:11:45.641Z

tests/scenarios/cassettes/v2/security_monitoring/Create-a-scheduled-detection-rule-returns-OK-response.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
{
44
"request": {
55
"body": {
6-
"string": "{\"cases\":[{\"condition\":\"a > 0\",\"name\":\"\",\"notifications\":[],\"status\":\"info\"}],\"filters\":[],\"isEnabled\":true,\"message\":\"Test rule\",\"name\":\"Test-Create_a_scheduled_detection_rule_returns_OK_response-1753948107\",\"options\":{\"evaluationWindow\":900,\"keepAlive\":3600,\"maxSignalDuration\":86400},\"queries\":[{\"aggregation\":\"count\",\"distinctFields\":[],\"groupByFields\":[],\"index\":\"main\",\"query\":\"@test:true\"}],\"schedulingOptions\":{\"rrule\":\"FREQ=HOURLY;INTERVAL=2;\",\"start\":\"2025-06-18T12:00:00\",\"timezone\":\"Europe/Paris\"},\"tags\":[],\"type\":\"log_detection\"}",
6+
"string": "{\"cases\":[{\"condition\":\"a > 0\",\"name\":\"\",\"notifications\":[],\"status\":\"info\"}],\"filters\":[],\"isEnabled\":true,\"message\":\"Test rule\",\"name\":\"Test-Create_a_scheduled_detection_rule_returns_OK_response-1760389905\",\"options\":{\"evaluationWindow\":900,\"keepAlive\":3600,\"maxSignalDuration\":86400},\"queries\":[{\"aggregation\":\"count\",\"distinctFields\":[],\"groupByFields\":[],\"indexes\":[\"main\"],\"query\":\"@test:true\"}],\"schedulingOptions\":{\"rrule\":\"FREQ=HOURLY;INTERVAL=2;\",\"start\":\"2025-06-18T12:00:00\",\"timezone\":\"Europe/Paris\"},\"tags\":[],\"type\":\"log_detection\"}",
77
"encoding": null
88
},
99
"headers": {
@@ -19,7 +19,7 @@
1919
},
2020
"response": {
2121
"body": {
22-
"string": "{\"name\":\"Test-Create_a_scheduled_detection_rule_returns_OK_response-1753948107\",\"createdAt\":1753948107557,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"logs\",\"index\":\"main\"}],\"options\":{\"evaluationWindow\":900,\"detectionMethod\":\"threshold\",\"maxSignalDuration\":86400,\"keepAlive\":3600},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[],\"version\":1,\"id\":\"8dd-els-oyn\",\"blocking\":false,\"metadata\":{\"entities\":null,\"sources\":null},\"creationAuthorId\":1445416,\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"},\"updater\":{\"handle\":\"\",\"name\":\"\"},\"schedulingOptions\":{\"rrule\":\"FREQ=HOURLY;INTERVAL=2;\",\"start\":\"2025-06-18T12:00:00\",\"timezone\":\"Europe/Paris\"}}",
22+
"string": "{\"name\":\"Test-Create_a_scheduled_detection_rule_returns_OK_response-1760389905\",\"createdAt\":1760389906051,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"logs\",\"index\":\"main\",\"indexes\":[\"main\"]}],\"options\":{\"evaluationWindow\":900,\"detectionMethod\":\"threshold\",\"maxSignalDuration\":86400,\"keepAlive\":3600},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[],\"version\":1,\"id\":\"vgs-rrg-orf\",\"blocking\":false,\"metadata\":{\"entities\":null,\"sources\":null},\"creationAuthorId\":1445416,\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"},\"updater\":{\"handle\":\"\",\"name\":\"\"},\"schedulingOptions\":{\"rrule\":\"FREQ=HOURLY;INTERVAL=2;\",\"start\":\"2025-06-18T12:00:00\",\"timezone\":\"Europe/Paris\"}}",
2323
"encoding": null
2424
},
2525
"headers": {
@@ -32,7 +32,7 @@
3232
"message": "OK"
3333
}
3434
},
35-
"recorded_at": "Thu, 31 Jul 2025 07:48:27 GMT"
35+
"recorded_at": "Mon, 13 Oct 2025 21:11:45 GMT"
3636
},
3737
{
3838
"request": {
@@ -43,7 +43,7 @@
4343
]
4444
},
4545
"method": "delete",
46-
"uri": "https://api.datadoghq.com/api/v2/security_monitoring/rules/8dd-els-oyn"
46+
"uri": "https://api.datadoghq.com/api/v2/security_monitoring/rules/vgs-rrg-orf"
4747
},
4848
"response": {
4949
"body": {
@@ -56,7 +56,7 @@
5656
"message": "No Content"
5757
}
5858
},
59-
"recorded_at": "Thu, 31 Jul 2025 07:48:27 GMT"
59+
"recorded_at": "Mon, 13 Oct 2025 21:11:45 GMT"
6060
}
6161
],
6262
"recorded_with": "VCR 6.0.0"
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2025-07-31T07:49:14.474Z
1+
2025-10-13T21:12:46.212Z

tests/scenarios/cassettes/v2/security_monitoring/Create-a-scheduled-rule-without-rrule-returns-Bad-Request-response.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
{
44
"request": {
55
"body": {
6-
"string": "{\"cases\":[{\"condition\":\"a > 0\",\"name\":\"\",\"notifications\":[],\"status\":\"info\"}],\"filters\":[],\"isEnabled\":true,\"message\":\"Test rule\",\"name\":\"Test-Create_a_scheduled_rule_without_rrule_returns_Bad_Request_response-1753948154\",\"options\":{\"evaluationWindow\":900,\"keepAlive\":3600,\"maxSignalDuration\":86400},\"queries\":[{\"aggregation\":\"count\",\"distinctFields\":[],\"groupByFields\":[],\"index\":\"main\",\"query\":\"@test:true\"}],\"schedulingOptions\":{\"start\":\"2025-06-18T12:00:00\",\"timezone\":\"Europe/Paris\"},\"tags\":[],\"type\":\"log_detection\"}",
6+
"string": "{\"cases\":[{\"condition\":\"a > 0\",\"name\":\"\",\"notifications\":[],\"status\":\"info\"}],\"filters\":[],\"isEnabled\":true,\"message\":\"Test rule\",\"name\":\"Test-Create_a_scheduled_rule_without_rrule_returns_Bad_Request_response-1760389966\",\"options\":{\"evaluationWindow\":900,\"keepAlive\":3600,\"maxSignalDuration\":86400},\"queries\":[{\"aggregation\":\"count\",\"distinctFields\":[],\"groupByFields\":[],\"indexes\":[\"main\"],\"query\":\"@test:true\"}],\"schedulingOptions\":{\"start\":\"2025-06-18T12:00:00\",\"timezone\":\"Europe/Paris\"},\"tags\":[],\"type\":\"log_detection\"}",
77
"encoding": null
88
},
99
"headers": {
@@ -32,7 +32,7 @@
3232
"message": "Bad Request"
3333
}
3434
},
35-
"recorded_at": "Thu, 31 Jul 2025 07:49:14 GMT"
35+
"recorded_at": "Mon, 13 Oct 2025 21:12:46 GMT"
3636
}
3737
],
3838
"recorded_with": "VCR 6.0.0"

tests/scenarios/features/v2/security_monitoring.feature

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ Feature: Security Monitoring
308308
@team:DataDog/k9-cloud-security-platform
309309
Scenario: Create a scheduled detection rule returns "OK" response
310310
Given new "CreateSecurityMonitoringRule" request
311-
And body with value {"name":"{{ unique }}", "queries":[{"query":"@test:true","aggregation":"count","groupByFields":[],"distinctFields":[],"index":"main"}],"filters":[],"cases":[{"name":"","status":"info","condition":"a > 0","notifications":[]}],"options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"message":"Test rule","tags":[],"isEnabled":true, "type":"log_detection", "schedulingOptions": {"rrule": "FREQ=HOURLY;INTERVAL=2;", "start": "2025-06-18T12:00:00", "timezone": "Europe/Paris"}}
311+
And body with value {"name":"{{ unique }}", "queries":[{"query":"@test:true","aggregation":"count","groupByFields":[],"distinctFields":[],"indexes":["main"]}],"filters":[],"cases":[{"name":"","status":"info","condition":"a > 0","notifications":[]}],"options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"message":"Test rule","tags":[],"isEnabled":true, "type":"log_detection", "schedulingOptions": {"rrule": "FREQ=HOURLY;INTERVAL=2;", "start": "2025-06-18T12:00:00", "timezone": "Europe/Paris"}}
312312
When the request is sent
313313
Then the response status is 200 OK
314314
And the response "name" is equal to "{{ unique }}"
@@ -319,7 +319,7 @@ Feature: Security Monitoring
319319
@team:DataDog/k9-cloud-security-platform
320320
Scenario: Create a scheduled rule without rrule returns "Bad Request" response
321321
Given new "CreateSecurityMonitoringRule" request
322-
And body with value {"name":"{{ unique }}", "queries":[{"query":"@test:true","aggregation":"count","groupByFields":[],"distinctFields":[],"index":"main"}],"filters":[],"cases":[{"name":"","status":"info","condition":"a > 0","notifications":[]}],"options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"message":"Test rule","tags":[],"isEnabled":true, "type":"log_detection", "schedulingOptions": {"start": "2025-06-18T12:00:00", "timezone": "Europe/Paris"}}
322+
And body with value {"name":"{{ unique }}", "queries":[{"query":"@test:true","aggregation":"count","groupByFields":[],"distinctFields":[],"indexes":["main"]}],"filters":[],"cases":[{"name":"","status":"info","condition":"a > 0","notifications":[]}],"options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"message":"Test rule","tags":[],"isEnabled":true, "type":"log_detection", "schedulingOptions": {"start": "2025-06-18T12:00:00", "timezone": "Europe/Paris"}}
323323
When the request is sent
324324
Then the response status is 400 Bad Request
325325

0 commit comments

Comments
 (0)