Skip to content

Commit 697a3a5

Browse files
author
ci.datadog-api-spec
committed
Regenerate client from commit ccc8320 of spec repo
1 parent 8f84d47 commit 697a3a5

13 files changed

+485
-4
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": "35630f3",
3-
"generated": "2025-08-01 18:22:37.503"
2+
"spec_repo_commit": "ccc8320",
3+
"generated": "2025-08-04 12:22:49.162"
44
}

.generator/schemas/v2/openapi.yaml

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36339,6 +36339,27 @@ components:
3633936339
- $ref: '#/components/schemas/SecurityMonitoringStandardRulePayload'
3634036340
- $ref: '#/components/schemas/SecurityMonitoringSignalRulePayload'
3634136341
- $ref: '#/components/schemas/CloudConfigurationRulePayload'
36342+
SecurityMonitoringSchedulingOptions:
36343+
description: Options for scheduled rules. When this field is present, the rule
36344+
runs based on the schedule. When absent, it runs real-time on ingested logs.
36345+
nullable: true
36346+
properties:
36347+
rrule:
36348+
description: Schedule for the rule queries, written in RRULE syntax. See
36349+
[RFC](https://icalendar.org/iCalendar-RFC-5545/3-8-5-3-recurrence-rule.html)
36350+
for syntax reference.
36351+
example: FREQ=HOURLY;INTERVAL=1;
36352+
type: string
36353+
start:
36354+
description: Start date for the schedule, in ISO 8601 format without timezone.
36355+
example: '2025-07-14T12:00:00'
36356+
type: string
36357+
timezone:
36358+
description: Time zone of the start date, in the [tz database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)
36359+
format.
36360+
example: America/New_York
36361+
type: string
36362+
type: object
3634236363
SecurityMonitoringSignal:
3634336364
description: Object description of a security signal.
3634436365
properties:
@@ -37017,6 +37038,12 @@ components:
3701737038
SecurityMonitoringStandardRuleCreatePayload:
3701837039
description: Create a new rule.
3701937040
properties:
37041+
calculatedFields:
37042+
description: Calculated fields. Only allowed for scheduled rules - in other
37043+
words, when schedulingOptions is also defined.
37044+
items:
37045+
$ref: '#/components/schemas/CalculatedField'
37046+
type: array
3702037047
cases:
3702137048
description: Cases for generating signals.
3702237049
example: []
@@ -37069,6 +37096,8 @@ components:
3706937096
items:
3707037097
$ref: '#/components/schemas/SecurityMonitoringReferenceTable'
3707137098
type: array
37099+
schedulingOptions:
37100+
$ref: '#/components/schemas/SecurityMonitoringSchedulingOptions'
3707237101
tags:
3707337102
description: Tags for generated signals.
3707437103
example:
@@ -37214,6 +37243,14 @@ components:
3721437243
example: false
3721537244
readOnly: true
3721637245
type: boolean
37246+
index:
37247+
description: '**This field is currently unstable and might be removed in
37248+
a minor version upgrade.**
37249+
37250+
The index to run the query on, if the `dataSource` is `logs`. Only used
37251+
for scheduled rules - in other words, when the `schedulingOptions` field
37252+
is present in the rule payload.'
37253+
type: string
3721737254
metric:
3721837255
deprecated: true
3721937256
description: '(Deprecated) The target field to aggregate over when using
@@ -37241,6 +37278,12 @@ components:
3724137278
SecurityMonitoringStandardRuleResponse:
3724237279
description: Rule.
3724337280
properties:
37281+
calculatedFields:
37282+
description: Calculated fields. Only allowed for scheduled rules - in other
37283+
words, when schedulingOptions is also defined.
37284+
items:
37285+
$ref: '#/components/schemas/CalculatedField'
37286+
type: array
3724437287
cases:
3724537288
description: Cases for generating signals.
3724637289
items:
@@ -37326,6 +37369,8 @@ components:
3732637369
items:
3732737370
$ref: '#/components/schemas/SecurityMonitoringReferenceTable'
3732837371
type: array
37372+
schedulingOptions:
37373+
$ref: '#/components/schemas/SecurityMonitoringSchedulingOptions'
3732937374
tags:
3733037375
description: Tags for generated signals.
3733137376
items:
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// Create a scheduled detection rule returns "OK" response
2+
use datadog_api_client::datadog;
3+
use datadog_api_client::datadogV2::api_security_monitoring::SecurityMonitoringAPI;
4+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleCaseCreate;
5+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleCreatePayload;
6+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleEvaluationWindow;
7+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleKeepAlive;
8+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleMaxSignalDuration;
9+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleOptions;
10+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleQueryAggregation;
11+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleSeverity;
12+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleTypeCreate;
13+
use datadog_api_client::datadogV2::model::SecurityMonitoringSchedulingOptions;
14+
use datadog_api_client::datadogV2::model::SecurityMonitoringStandardRuleCreatePayload;
15+
use datadog_api_client::datadogV2::model::SecurityMonitoringStandardRuleQuery;
16+
17+
#[tokio::main]
18+
async 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+
.index("main".to_string())
40+
.query("@test:true".to_string())],
41+
)
42+
.filters(vec![])
43+
.scheduling_options(Some(
44+
SecurityMonitoringSchedulingOptions::new()
45+
.rrule("FREQ=HOURLY;INTERVAL=2;".to_string())
46+
.start("2025-06-18T12:00:00".to_string())
47+
.timezone("Europe/Paris".to_string()),
48+
))
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+
}

src/datadogV2/model/mod.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4638,6 +4638,8 @@ pub mod model_security_monitoring_list_rules_response;
46384638
pub use self::model_security_monitoring_list_rules_response::SecurityMonitoringListRulesResponse;
46394639
pub mod model_security_monitoring_standard_rule_response;
46404640
pub use self::model_security_monitoring_standard_rule_response::SecurityMonitoringStandardRuleResponse;
4641+
pub mod model_calculated_field;
4642+
pub use self::model_calculated_field::CalculatedField;
46414643
pub mod model_security_monitoring_rule_case;
46424644
pub use self::model_security_monitoring_rule_case::SecurityMonitoringRuleCase;
46434645
pub mod model_security_monitoring_rule_case_action;
@@ -4696,6 +4698,8 @@ pub mod model_security_monitoring_standard_data_source;
46964698
pub use self::model_security_monitoring_standard_data_source::SecurityMonitoringStandardDataSource;
46974699
pub mod model_security_monitoring_reference_table;
46984700
pub use self::model_security_monitoring_reference_table::SecurityMonitoringReferenceTable;
4701+
pub mod model_security_monitoring_scheduling_options;
4702+
pub use self::model_security_monitoring_scheduling_options::SecurityMonitoringSchedulingOptions;
46994703
pub mod model_security_monitoring_third_party_rule_case;
47004704
pub use self::model_security_monitoring_third_party_rule_case::SecurityMonitoringThirdPartyRuleCase;
47014705
pub mod model_security_monitoring_rule_type_read;
@@ -5120,8 +5124,6 @@ pub mod model_historical_job_response_attributes;
51205124
pub use self::model_historical_job_response_attributes::HistoricalJobResponseAttributes;
51215125
pub mod model_job_definition;
51225126
pub use self::model_job_definition::JobDefinition;
5123-
pub mod model_calculated_field;
5124-
pub use self::model_calculated_field::CalculatedField;
51255127
pub mod model_historical_job_options;
51265128
pub use self::model_historical_job_options::HistoricalJobOptions;
51275129
pub mod model_historical_job_query;
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
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+
use serde::de::{Error, MapAccess, Visitor};
5+
use serde::{Deserialize, Deserializer, Serialize};
6+
use serde_with::skip_serializing_none;
7+
use std::fmt::{self, Formatter};
8+
9+
/// Options for scheduled rules. When this field is present, the rule runs based on the schedule. When absent, it runs real-time on ingested logs.
10+
#[non_exhaustive]
11+
#[skip_serializing_none]
12+
#[derive(Clone, Debug, PartialEq, Serialize)]
13+
pub struct SecurityMonitoringSchedulingOptions {
14+
/// Schedule for the rule queries, written in RRULE syntax. See [RFC](<https://icalendar.org/iCalendar-RFC-5545/3-8-5-3-recurrence-rule.html>) for syntax reference.
15+
#[serde(rename = "rrule")]
16+
pub rrule: Option<String>,
17+
/// Start date for the schedule, in ISO 8601 format without timezone.
18+
#[serde(rename = "start")]
19+
pub start: Option<String>,
20+
/// Time zone of the start date, in the [tz database](<https://en.wikipedia.org/wiki/List_of_tz_database_time_zones>) format.
21+
#[serde(rename = "timezone")]
22+
pub timezone: Option<String>,
23+
#[serde(flatten)]
24+
pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
25+
#[serde(skip)]
26+
#[serde(default)]
27+
pub(crate) _unparsed: bool,
28+
}
29+
30+
impl SecurityMonitoringSchedulingOptions {
31+
pub fn new() -> SecurityMonitoringSchedulingOptions {
32+
SecurityMonitoringSchedulingOptions {
33+
rrule: None,
34+
start: None,
35+
timezone: None,
36+
additional_properties: std::collections::BTreeMap::new(),
37+
_unparsed: false,
38+
}
39+
}
40+
41+
pub fn rrule(mut self, value: String) -> Self {
42+
self.rrule = Some(value);
43+
self
44+
}
45+
46+
pub fn start(mut self, value: String) -> Self {
47+
self.start = Some(value);
48+
self
49+
}
50+
51+
pub fn timezone(mut self, value: String) -> Self {
52+
self.timezone = Some(value);
53+
self
54+
}
55+
56+
pub fn additional_properties(
57+
mut self,
58+
value: std::collections::BTreeMap<String, serde_json::Value>,
59+
) -> Self {
60+
self.additional_properties = value;
61+
self
62+
}
63+
}
64+
65+
impl Default for SecurityMonitoringSchedulingOptions {
66+
fn default() -> Self {
67+
Self::new()
68+
}
69+
}
70+
71+
impl<'de> Deserialize<'de> for SecurityMonitoringSchedulingOptions {
72+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
73+
where
74+
D: Deserializer<'de>,
75+
{
76+
struct SecurityMonitoringSchedulingOptionsVisitor;
77+
impl<'a> Visitor<'a> for SecurityMonitoringSchedulingOptionsVisitor {
78+
type Value = SecurityMonitoringSchedulingOptions;
79+
80+
fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result {
81+
f.write_str("a mapping")
82+
}
83+
84+
fn visit_map<M>(self, mut map: M) -> Result<Self::Value, M::Error>
85+
where
86+
M: MapAccess<'a>,
87+
{
88+
let mut rrule: Option<String> = None;
89+
let mut start: Option<String> = None;
90+
let mut timezone: Option<String> = None;
91+
let mut additional_properties: std::collections::BTreeMap<
92+
String,
93+
serde_json::Value,
94+
> = std::collections::BTreeMap::new();
95+
let mut _unparsed = false;
96+
97+
while let Some((k, v)) = map.next_entry::<String, serde_json::Value>()? {
98+
match k.as_str() {
99+
"rrule" => {
100+
if v.is_null() {
101+
continue;
102+
}
103+
rrule = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
104+
}
105+
"start" => {
106+
if v.is_null() {
107+
continue;
108+
}
109+
start = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
110+
}
111+
"timezone" => {
112+
if v.is_null() {
113+
continue;
114+
}
115+
timezone = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
116+
}
117+
&_ => {
118+
if let Ok(value) = serde_json::from_value(v.clone()) {
119+
additional_properties.insert(k, value);
120+
}
121+
}
122+
}
123+
}
124+
125+
let content = SecurityMonitoringSchedulingOptions {
126+
rrule,
127+
start,
128+
timezone,
129+
additional_properties,
130+
_unparsed,
131+
};
132+
133+
Ok(content)
134+
}
135+
}
136+
137+
deserializer.deserialize_any(SecurityMonitoringSchedulingOptionsVisitor)
138+
}
139+
}

0 commit comments

Comments
 (0)