Skip to content

Commit f8de2cd

Browse files
author
ci.datadog-api-spec
committed
Regenerate client from commit c0579e7 of spec repo
1 parent 1ddef96 commit f8de2cd

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": "b75095c",
3-
"generated": "2025-07-31 10:50:58.895"
2+
"spec_repo_commit": "c0579e7",
3+
"generated": "2025-07-31 14:47:53.843"
44
}

.generator/schemas/v2/openapi.yaml

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34956,6 +34956,27 @@ components:
3495634956
- $ref: '#/components/schemas/SecurityMonitoringStandardRulePayload'
3495734957
- $ref: '#/components/schemas/SecurityMonitoringSignalRulePayload'
3495834958
- $ref: '#/components/schemas/CloudConfigurationRulePayload'
34959+
SecurityMonitoringSchedulingOptions:
34960+
description: Options for scheduled rules. When this field is present, the rule
34961+
runs based on the schedule. When absent, it runs real-time on ingested logs.
34962+
nullable: true
34963+
properties:
34964+
rrule:
34965+
description: Schedule for the rule queries, written in RRULE syntax. See
34966+
[RFC](https://icalendar.org/iCalendar-RFC-5545/3-8-5-3-recurrence-rule.html)
34967+
for syntax reference.
34968+
example: FREQ=HOURLY;INTERVAL=1;
34969+
type: string
34970+
start:
34971+
description: Start date for the schedule, in ISO 8601 format without timezone.
34972+
example: '2025-07-14T12:00:00'
34973+
type: string
34974+
timezone:
34975+
description: Time zone of the start date, in the [tz database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)
34976+
format.
34977+
example: America/New_York
34978+
type: string
34979+
type: object
3495934980
SecurityMonitoringSignal:
3496034981
description: Object description of a security signal.
3496134982
properties:
@@ -35634,6 +35655,12 @@ components:
3563435655
SecurityMonitoringStandardRuleCreatePayload:
3563535656
description: Create a new rule.
3563635657
properties:
35658+
calculatedFields:
35659+
description: Calculated fields. Only allowed for scheduled rules, i.e. when
35660+
schedulingOptions is also defined.
35661+
items:
35662+
$ref: '#/components/schemas/CalculatedField'
35663+
type: array
3563735664
cases:
3563835665
description: Cases for generating signals.
3563935666
example: []
@@ -35686,6 +35713,8 @@ components:
3568635713
items:
3568735714
$ref: '#/components/schemas/SecurityMonitoringReferenceTable'
3568835715
type: array
35716+
schedulingOptions:
35717+
$ref: '#/components/schemas/SecurityMonitoringSchedulingOptions'
3568935718
tags:
3569035719
description: Tags for generated signals.
3569135720
example:
@@ -35831,6 +35860,14 @@ components:
3583135860
example: false
3583235861
readOnly: true
3583335862
type: boolean
35863+
index:
35864+
description: '**This field is currently unstable and might be removed in
35865+
a minor version upgrade.**
35866+
35867+
The index to run the query on, if the `dataSource` is `logs`. Only used
35868+
for scheduled rules, i.e. when the `schedulingOptions` field is present
35869+
in the rule payload.'
35870+
type: string
3583435871
metric:
3583535872
deprecated: true
3583635873
description: '(Deprecated) The target field to aggregate over when using
@@ -35858,6 +35895,12 @@ components:
3585835895
SecurityMonitoringStandardRuleResponse:
3585935896
description: Rule.
3586035897
properties:
35898+
calculatedFields:
35899+
description: Calculated fields. Only allowed for scheduled rules, i.e. when
35900+
schedulingOptions is also defined.
35901+
items:
35902+
$ref: '#/components/schemas/CalculatedField'
35903+
type: array
3586135904
cases:
3586235905
description: Cases for generating signals.
3586335906
items:
@@ -35943,6 +35986,8 @@ components:
3594335986
items:
3594435987
$ref: '#/components/schemas/SecurityMonitoringReferenceTable'
3594535988
type: array
35989+
schedulingOptions:
35990+
$ref: '#/components/schemas/SecurityMonitoringSchedulingOptions'
3594635991
tags:
3594735992
description: Tags for generated signals.
3594835993
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
@@ -4292,6 +4292,8 @@ pub mod model_security_monitoring_list_rules_response;
42924292
pub use self::model_security_monitoring_list_rules_response::SecurityMonitoringListRulesResponse;
42934293
pub mod model_security_monitoring_standard_rule_response;
42944294
pub use self::model_security_monitoring_standard_rule_response::SecurityMonitoringStandardRuleResponse;
4295+
pub mod model_calculated_field;
4296+
pub use self::model_calculated_field::CalculatedField;
42954297
pub mod model_security_monitoring_rule_case;
42964298
pub use self::model_security_monitoring_rule_case::SecurityMonitoringRuleCase;
42974299
pub mod model_security_monitoring_rule_case_action;
@@ -4350,6 +4352,8 @@ pub mod model_security_monitoring_standard_data_source;
43504352
pub use self::model_security_monitoring_standard_data_source::SecurityMonitoringStandardDataSource;
43514353
pub mod model_security_monitoring_reference_table;
43524354
pub use self::model_security_monitoring_reference_table::SecurityMonitoringReferenceTable;
4355+
pub mod model_security_monitoring_scheduling_options;
4356+
pub use self::model_security_monitoring_scheduling_options::SecurityMonitoringSchedulingOptions;
43534357
pub mod model_security_monitoring_third_party_rule_case;
43544358
pub use self::model_security_monitoring_third_party_rule_case::SecurityMonitoringThirdPartyRuleCase;
43554359
pub mod model_security_monitoring_rule_type_read;
@@ -4774,8 +4778,6 @@ pub mod model_historical_job_response_attributes;
47744778
pub use self::model_historical_job_response_attributes::HistoricalJobResponseAttributes;
47754779
pub mod model_job_definition;
47764780
pub use self::model_job_definition::JobDefinition;
4777-
pub mod model_calculated_field;
4778-
pub use self::model_calculated_field::CalculatedField;
47794781
pub mod model_historical_job_options;
47804782
pub use self::model_historical_job_options::HistoricalJobOptions;
47814783
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)