Skip to content

Commit 893ed16

Browse files
author
ci.datadog-api-spec
committed
Regenerate client from commit 92edb47 of spec repo
1 parent 286ba55 commit 893ed16

6 files changed

Lines changed: 156 additions & 1 deletion

.generator/schemas/v2/openapi.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70116,11 +70116,20 @@ components:
7011670116
properties:
7011770117
baselineUserLocations:
7011870118
$ref: "#/components/schemas/SecurityMonitoringRuleImpossibleTravelOptionsBaselineUserLocations"
70119+
baselineUserLocationsDuration:
70120+
$ref: "#/components/schemas/SecurityMonitoringRuleImpossibleTravelOptionsBaselineUserLocationsDuration"
7011970121
type: object
7012070122
SecurityMonitoringRuleImpossibleTravelOptionsBaselineUserLocations:
7012170123
description: "If true, signals are suppressed for the first 24 hours. In that time, Datadog learns the user's regular\naccess locations. This can be helpful to reduce noise and infer VPN usage or credentialed API access."
7012270124
example: true
7012370125
type: boolean
70126+
SecurityMonitoringRuleImpossibleTravelOptionsBaselineUserLocationsDuration:
70127+
description: The duration in days during which Datadog learns the user's regular access locations. After this period, signals are generated for accesses from unknown locations.
70128+
format: int32
70129+
maximum: 30
70130+
minimum: 1
70131+
nullable: true
70132+
type: integer
7012470133
SecurityMonitoringRuleInstantaneousBaseline:
7012570134
description: When set to true, Datadog uses previous values that fall within the defined learning window to construct the baseline, enabling the system to establish an accurate baseline more rapidly rather than relying solely on gradual learning over time.
7012670135
example: false
@@ -142415,6 +142424,7 @@ paths:
142415142424
hardcodedEvaluatorType: log4shell
142416142425
impossibleTravelOptions:
142417142426
baselineUserLocations: true
142427+
baselineUserLocationsDuration: 7
142418142428
newValueOptions:
142419142429
instantaneousBaseline: false
142420142430
learningMethod: duration
@@ -143171,6 +143181,7 @@ paths:
143171143181
hardcodedEvaluatorType: log4shell
143172143182
impossibleTravelOptions:
143173143183
baselineUserLocations: true
143184+
baselineUserLocationsDuration: 7
143174143185
keepAlive: 3600
143175143186
maxSignalDuration: 86400
143176143187
newValueOptions:
@@ -143272,6 +143283,7 @@ paths:
143272143283
hardcodedEvaluatorType: log4shell
143273143284
impossibleTravelOptions:
143274143285
baselineUserLocations: true
143286+
baselineUserLocationsDuration: 7
143275143287
keepAlive: 0
143276143288
maxSignalDuration: 0
143277143289
newValueOptions:
@@ -143385,6 +143397,7 @@ paths:
143385143397
hardcodedEvaluatorType: log4shell
143386143398
impossibleTravelOptions:
143387143399
baselineUserLocations: true
143400+
baselineUserLocationsDuration: 7
143388143401
keepAlive: 1800
143389143402
maxSignalDuration: 1800
143390143403
newValueOptions:
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
"""
2+
Create a detection rule with type 'impossible_travel' and baselineUserLocationsDuration returns "OK" response
3+
"""
4+
5+
from datadog_api_client import ApiClient, Configuration
6+
from datadog_api_client.v2.api.security_monitoring_api import SecurityMonitoringApi
7+
from datadog_api_client.v2.model.security_monitoring_rule_case_create import SecurityMonitoringRuleCaseCreate
8+
from datadog_api_client.v2.model.security_monitoring_rule_detection_method import SecurityMonitoringRuleDetectionMethod
9+
from datadog_api_client.v2.model.security_monitoring_rule_evaluation_window import (
10+
SecurityMonitoringRuleEvaluationWindow,
11+
)
12+
from datadog_api_client.v2.model.security_monitoring_rule_impossible_travel_options import (
13+
SecurityMonitoringRuleImpossibleTravelOptions,
14+
)
15+
from datadog_api_client.v2.model.security_monitoring_rule_keep_alive import SecurityMonitoringRuleKeepAlive
16+
from datadog_api_client.v2.model.security_monitoring_rule_max_signal_duration import (
17+
SecurityMonitoringRuleMaxSignalDuration,
18+
)
19+
from datadog_api_client.v2.model.security_monitoring_rule_options import SecurityMonitoringRuleOptions
20+
from datadog_api_client.v2.model.security_monitoring_rule_query_aggregation import (
21+
SecurityMonitoringRuleQueryAggregation,
22+
)
23+
from datadog_api_client.v2.model.security_monitoring_rule_severity import SecurityMonitoringRuleSeverity
24+
from datadog_api_client.v2.model.security_monitoring_rule_type_create import SecurityMonitoringRuleTypeCreate
25+
from datadog_api_client.v2.model.security_monitoring_standard_rule_create_payload import (
26+
SecurityMonitoringStandardRuleCreatePayload,
27+
)
28+
from datadog_api_client.v2.model.security_monitoring_standard_rule_query import SecurityMonitoringStandardRuleQuery
29+
30+
body = SecurityMonitoringStandardRuleCreatePayload(
31+
queries=[
32+
SecurityMonitoringStandardRuleQuery(
33+
aggregation=SecurityMonitoringRuleQueryAggregation.GEO_DATA,
34+
group_by_fields=[
35+
"@usr.id",
36+
],
37+
distinct_fields=[],
38+
metric="@network.client.geoip",
39+
query="*",
40+
),
41+
],
42+
cases=[
43+
SecurityMonitoringRuleCaseCreate(
44+
name="",
45+
status=SecurityMonitoringRuleSeverity.INFO,
46+
notifications=[],
47+
),
48+
],
49+
has_extended_title=True,
50+
message="test",
51+
is_enabled=True,
52+
options=SecurityMonitoringRuleOptions(
53+
max_signal_duration=SecurityMonitoringRuleMaxSignalDuration.ONE_DAY,
54+
evaluation_window=SecurityMonitoringRuleEvaluationWindow.FIFTEEN_MINUTES,
55+
keep_alive=SecurityMonitoringRuleKeepAlive.ONE_HOUR,
56+
detection_method=SecurityMonitoringRuleDetectionMethod.IMPOSSIBLE_TRAVEL,
57+
impossible_travel_options=SecurityMonitoringRuleImpossibleTravelOptions(
58+
baseline_user_locations=True,
59+
baseline_user_locations_duration=7,
60+
),
61+
),
62+
name="Example-Security-Monitoring",
63+
type=SecurityMonitoringRuleTypeCreate.LOG_DETECTION,
64+
tags=[],
65+
filters=[],
66+
)
67+
68+
configuration = Configuration()
69+
with ApiClient(configuration) as api_client:
70+
api_instance = SecurityMonitoringApi(api_client)
71+
response = api_instance.create_security_monitoring_rule(body=body)
72+
73+
print(response)

src/datadog_api_client/v2/model/security_monitoring_rule_impossible_travel_options.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,30 +8,50 @@
88
from datadog_api_client.model_utils import (
99
ModelNormal,
1010
cached_property,
11+
none_type,
1112
unset,
1213
UnsetType,
1314
)
1415

1516

1617
class SecurityMonitoringRuleImpossibleTravelOptions(ModelNormal):
18+
validations = {
19+
"baseline_user_locations_duration": {
20+
"inclusive_maximum": 30,
21+
"inclusive_minimum": 1,
22+
},
23+
}
24+
1725
@cached_property
1826
def openapi_types(_):
1927
return {
2028
"baseline_user_locations": (bool,),
29+
"baseline_user_locations_duration": (int,),
2130
}
2231

2332
attribute_map = {
2433
"baseline_user_locations": "baselineUserLocations",
34+
"baseline_user_locations_duration": "baselineUserLocationsDuration",
2535
}
2636

27-
def __init__(self_, baseline_user_locations: Union[bool, UnsetType] = unset, **kwargs):
37+
def __init__(
38+
self_,
39+
baseline_user_locations: Union[bool, UnsetType] = unset,
40+
baseline_user_locations_duration: Union[int, none_type, UnsetType] = unset,
41+
**kwargs,
42+
):
2843
"""
2944
Options on impossible travel detection method.
3045
3146
:param baseline_user_locations: If true, signals are suppressed for the first 24 hours. In that time, Datadog learns the user's regular
3247
access locations. This can be helpful to reduce noise and infer VPN usage or credentialed API access.
3348
:type baseline_user_locations: bool, optional
49+
50+
:param baseline_user_locations_duration: The duration in days during which Datadog learns the user's regular access locations. After this period, signals are generated for accesses from unknown locations.
51+
:type baseline_user_locations_duration: int, none_type, optional
3452
"""
3553
if baseline_user_locations is not unset:
3654
kwargs["baseline_user_locations"] = baseline_user_locations
55+
if baseline_user_locations_duration is not unset:
56+
kwargs["baseline_user_locations_duration"] = baseline_user_locations_duration
3757
super().__init__(kwargs)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2026-05-20T15:12:27.397Z
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
interactions:
2+
- request:
3+
body: '{"cases":[{"name":"","notifications":[],"status":"info"}],"filters":[],"hasExtendedTitle":true,"isEnabled":true,"message":"test","name":"Test-Create_a_detection_rule_with_type_impossible_travel_and_baselineUserLocationsDuration_returns_OK_res-1779289947","options":{"detectionMethod":"impossible_travel","evaluationWindow":900,"impossibleTravelOptions":{"baselineUserLocations":true,"baselineUserLocationsDuration":7},"keepAlive":3600,"maxSignalDuration":86400},"queries":[{"aggregation":"geo_data","distinctFields":[],"groupByFields":["@usr.id"],"metric":"@network.client.geoip","query":"*"}],"tags":[],"type":"log_detection"}'
4+
headers:
5+
accept:
6+
- application/json
7+
content-type:
8+
- application/json
9+
method: POST
10+
uri: https://api.datadoghq.com/api/v2/security_monitoring/rules
11+
response:
12+
body:
13+
string: '{"name":"Test-Create_a_detection_rule_with_type_impossible_travel_and_baselineUserLocationsDuration_returns_OK_res-1779289947","createdAt":1779289949181,"isDefault":false,"isPartner":false,"isEnabled":true,"isBeta":false,"isDeleted":false,"isDeprecated":false,"queries":[{"query":"*","groupByFields":["@usr.id"],"hasOptionalGroupByFields":false,"distinctFields":[],"metric":"@network.client.geoip","metrics":["@network.client.geoip"],"aggregation":"geo_data","name":"","dataSource":"logs"}],"options":{"evaluationWindow":900,"detectionMethod":"impossible_travel","maxSignalDuration":86400,"keepAlive":3600,"impossibleTravelOptions":{"baselineUserLocations":true,"baselineUserLocationsDuration":7,"detectIpTransition":false}},"cases":[{"name":"","status":"info","notifications":[]}],"message":"test","tags":[],"hasExtendedTitle":true,"type":"log_detection","filters":[],"version":1,"id":"v2k-viu-svz","blocking":false,"metadata":{"entities":null,"sources":null},"creationAuthorId":2320499,"creator":{"handle":"9919ec9b-ebc7-49ee-8dc8-03626e717cca","name":"CI
14+
Account"},"updater":{"handle":"","name":""}}'
15+
headers:
16+
content-type:
17+
- application/json
18+
status:
19+
code: 200
20+
message: OK
21+
- request:
22+
body: null
23+
headers:
24+
accept:
25+
- '*/*'
26+
method: DELETE
27+
uri: https://api.datadoghq.com/api/v2/security_monitoring/rules/v2k-viu-svz
28+
response:
29+
body:
30+
string: ''
31+
headers: {}
32+
status:
33+
code: 204
34+
message: No Content
35+
version: 1

tests/v2/features/security_monitoring.feature

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,19 @@ Feature: Security Monitoring
559559
And the response "type" is equal to "application_security"
560560
And the response "message" is equal to "Test rule"
561561

562+
@skip-validation @team:DataDog/k9-cloud-siem
563+
Scenario: Create a detection rule with type 'impossible_travel' and baselineUserLocationsDuration returns "OK" response
564+
Given new "CreateSecurityMonitoringRule" request
565+
And body with value {"queries":[{"aggregation":"geo_data","groupByFields":["@usr.id"],"distinctFields":[],"metric":"@network.client.geoip","query":"*"}],"cases":[{"name":"","status":"info","notifications":[]}],"hasExtendedTitle":true,"message":"test","isEnabled":true,"options":{"maxSignalDuration":86400,"evaluationWindow":900,"keepAlive":3600,"detectionMethod":"impossible_travel","impossibleTravelOptions":{"baselineUserLocations":true,"baselineUserLocationsDuration":7}},"name":"{{ unique }}","type":"log_detection","tags":[],"filters":[]}
566+
When the request is sent
567+
Then the response status is 200 OK
568+
And the response "name" is equal to "{{ unique }}"
569+
And the response "type" is equal to "log_detection"
570+
And the response "message" is equal to "test"
571+
And the response "options.detectionMethod" is equal to "impossible_travel"
572+
And the response "options.impossibleTravelOptions.baselineUserLocations" is equal to true
573+
And the response "options.impossibleTravelOptions.baselineUserLocationsDuration" is equal to 7
574+
562575
@skip-validation @team:DataDog/k9-cloud-siem
563576
Scenario: Create a detection rule with type 'impossible_travel' returns "OK" response
564577
Given new "CreateSecurityMonitoringRule" request

0 commit comments

Comments
 (0)