diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index a954de475f68..196165112daa 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -47320,6 +47320,86 @@ components: description: The name of the reference table. type: string type: object + SecurityMonitoringRuleAnomalyDetectionOptions: + additionalProperties: {} + description: Options on anomaly detection method. + properties: + bucketDuration: + $ref: '#/components/schemas/SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration' + detectionTolerance: + $ref: '#/components/schemas/SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance' + learningDuration: + $ref: '#/components/schemas/SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration' + learningPeriodBaseline: + description: An optional override baseline to apply while the rule is in + the learning period. Must be greater than or equal to 0. + format: int64 + minimum: 0 + type: integer + type: object + SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration: + description: 'Duration in seconds of the time buckets used to aggregate events + matched by the rule. + + Must be greater than or equal to 300.' + enum: + - 300 + - 600 + - 900 + - 1800 + - 3600 + - 10800 + example: 300 + format: int32 + type: integer + x-enum-varnames: + - FIVE_MINUTES + - TEN_MINUTES + - FIFTEEN_MINUTES + - THIRTY_MINUTES + - ONE_HOUR + - THREE_HOURS + SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance: + description: 'An optional parameter that sets how permissive anomaly detection + is. + + Higher values require higher deviations before triggering a signal.' + enum: + - 1 + - 2 + - 3 + - 4 + - 5 + example: 5 + format: int32 + type: integer + x-enum-varnames: + - ONE + - TWO + - THREE + - FOUR + - FIVE + SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration: + description: Learning duration in hours. Anomaly detection waits for at least + this amount of historical data before it starts evaluating. + enum: + - 1 + - 6 + - 12 + - 24 + - 48 + - 168 + - 336 + format: int32 + type: integer + x-enum-varnames: + - ONE_HOUR + - SIX_HOURS + - TWELVE_HOURS + - ONE_DAY + - TWO_DAYS + - ONE_WEEK + - TWO_WEEKS SecurityMonitoringRuleCase: description: Case when signal is generated. properties: @@ -47685,6 +47765,8 @@ components: SecurityMonitoringRuleOptions: description: Options. properties: + anomalyDetectionOptions: + $ref: '#/components/schemas/SecurityMonitoringRuleAnomalyDetectionOptions' complianceRuleOptions: $ref: '#/components/schemas/CloudConfigurationComplianceRuleOptions' decreaseCriticalityBasedOnEnv: @@ -55124,6 +55206,8 @@ components: ThreatHuntingJobOptions: description: Job options. properties: + anomalyDetectionOptions: + $ref: '#/components/schemas/SecurityMonitoringRuleAnomalyDetectionOptions' detectionMethod: $ref: '#/components/schemas/SecurityMonitoringRuleDetectionMethod' evaluationWindow: @@ -63547,6 +63631,14 @@ paths: - $ref: '#/components/parameters/FilterByRelationType' - $ref: '#/components/parameters/FilterByExcludeSnapshot' - $ref: '#/components/parameters/Include' + - description: If true, includes discovered services from APM and USM that do + not have entity definitions. + in: query + name: includeDiscovered + required: false + schema: + default: false + type: boolean responses: '200': content: @@ -63765,6 +63857,13 @@ paths: - $ref: '#/components/parameters/FilterRelationByFromRef' - $ref: '#/components/parameters/FilterRelationByToRef' - $ref: '#/components/parameters/RelationInclude' + - description: If true, includes relationships discovered by APM and USM. + in: query + name: includeDiscovered + required: false + schema: + default: false + type: boolean responses: '200': content: @@ -85761,10 +85860,6 @@ paths: operator: OR permissions: - teams_read - x-unstable: '**Note**: This endpoint is in Preview. To request access, fill - out this [form](https://www.datadoghq.com/product-preview/github-integration-for-teams/). - - If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).' get: description: Returns all team connections. operationId: ListTeamConnections @@ -85844,10 +85939,6 @@ paths: operator: OR permissions: - teams_read - x-unstable: '**Note**: This endpoint is in Preview. To request access, fill - out this [form](https://www.datadoghq.com/product-preview/github-integration-for-teams/). - - If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).' post: description: Create multiple team connections. operationId: CreateTeamConnections @@ -85884,10 +85975,6 @@ paths: operator: OR permissions: - teams_read - x-unstable: '**Note**: This endpoint is in Preview. To request access, fill - out this [form](https://www.datadoghq.com/product-preview/github-integration-for-teams/). - - If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).' /api/v2/team/sync: get: description: 'Get all team synchronization configurations. @@ -85931,10 +86018,6 @@ paths: operator: OR permissions: - teams_read - x-unstable: '**Note**: This endpoint is in Preview. To request access, fill - out this [form](https://www.datadoghq.com/product-preview/github-integration-for-teams/). - - If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).' post: description: 'This endpoint attempts to link your existing Datadog teams with GitHub teams by matching their names. @@ -85996,10 +86079,6 @@ paths: operator: AND permissions: - teams_manage - x-unstable: '**Note**: This endpoint is in Preview. To request access, fill - out this [form](https://www.datadoghq.com/product-preview/github-integration-for-teams/). - - If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).' /api/v2/team/{super_team_id}/member_teams: get: deprecated: true diff --git a/CHANGELOG.md b/CHANGELOG.md index baf5e12a7d69..99c6032e5d91 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,31 @@ # CHANGELOG +## 2.47.0/2025-12-17 + +### Changed +* Mark Incident Impact Endpoints stable [#2840](https://github.com/DataDog/datadog-api-client-ruby/pull/2840) +* Vulnerability Management - Update ListVulnerabilities endpoint query params and response schema [#2832](https://github.com/DataDog/datadog-api-client-ruby/pull/2832) +* Update specs for AWS account updates and creation for CCM configs [#2825](https://github.com/DataDog/datadog-api-client-ruby/pull/2825) +* add suppression version history [#2801](https://github.com/DataDog/datadog-api-client-ruby/pull/2801) +* Add processors groups to Observability Pipelines [#2760](https://github.com/DataDog/datadog-api-client-ruby/pull/2760) + +### Added +* Update security finding triage specs [#2833](https://github.com/DataDog/datadog-api-client-ruby/pull/2833) +* Add routes for managing On-Call user notification channels [#2828](https://github.com/DataDog/datadog-api-client-ruby/pull/2828) +* Add host field to Post an event V2 API [#2826](https://github.com/DataDog/datadog-api-client-ruby/pull/2826) +* Add `GET /api/v2/apm/services` endpoint to public documentation [#2823](https://github.com/DataDog/datadog-api-client-ruby/pull/2823) +* Dashboards - Add semantic_mode support to FormulaAndFunctionMetricQueryDefinition [#2817](https://github.com/DataDog/datadog-api-client-ruby/pull/2817) +* Cloud SIEM - Add instantaneousBaseline feature parameter. [#2814](https://github.com/DataDog/datadog-api-client-ruby/pull/2814) +* Add new fields to usage metering api spec [#2812](https://github.com/DataDog/datadog-api-client-ruby/pull/2812) +* update geomap widget definition about `conditional_format` and `text_formats` and view focus [#2806](https://github.com/DataDog/datadog-api-client-ruby/pull/2806) +* Add new endpoint for listing rules for a gate [#2792](https://github.com/DataDog/datadog-api-client-ruby/pull/2792) + +### Removed +* Tag security findings Jira endpoints as unstable [#2821](https://github.com/DataDog/datadog-api-client-ruby/pull/2821) + +### Fixed +* Add field attribute to the Workload Protection hash action [#2798](https://github.com/DataDog/datadog-api-client-ruby/pull/2798) + ## 2.46.0/2025-12-08 ### Added diff --git a/cassettes/features/v2/security_monitoring/Create-a-detection-rule-with-detection-method-anomaly-detection-returns-OK-response.frozen b/cassettes/features/v2/security_monitoring/Create-a-detection-rule-with-detection-method-anomaly-detection-returns-OK-response.frozen new file mode 100644 index 000000000000..d0c938a563a6 --- /dev/null +++ b/cassettes/features/v2/security_monitoring/Create-a-detection-rule-with-detection-method-anomaly-detection-returns-OK-response.frozen @@ -0,0 +1 @@ +2025-12-16T15:19:00.493Z \ No newline at end of file diff --git a/cassettes/features/v2/security_monitoring/Create-a-detection-rule-with-detection-method-anomaly-detection-returns-OK-response.yml b/cassettes/features/v2/security_monitoring/Create-a-detection-rule-with-detection-method-anomaly-detection-returns-OK-response.yml new file mode 100644 index 000000000000..a288de289763 --- /dev/null +++ b/cassettes/features/v2/security_monitoring/Create-a-detection-rule-with-detection-method-anomaly-detection-returns-OK-response.yml @@ -0,0 +1,44 @@ +http_interactions: +- recorded_at: Tue, 16 Dec 2025 15:19:00 GMT + request: + body: + encoding: UTF-8 + string: '{"cases":[{"condition":"a > 0.995","name":"","notifications":[],"status":"info"}],"filters":[],"isEnabled":true,"message":"An + anomaly detection rule","name":"Test-Create_a_detection_rule_with_detection_method_anomaly_detection_returns_OK_response-1765898340","options":{"anomalyDetectionOptions":{"bucketDuration":300,"detectionTolerance":3,"learningDuration":24,"learningPeriodBaseline":10},"detectionMethod":"anomaly_detection","evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"queries":[{"aggregation":"count","dataSource":"logs","distinctFields":[],"groupByFields":["@usr.email","@network.client.ip"],"hasOptionalGroupByFields":false,"name":"","query":"service:app + status:error"}],"tags":[],"type":"log_detection"}' + headers: + Accept: + - application/json + Content-Type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/security_monitoring/rules + response: + body: + encoding: UTF-8 + string: '{"name":"Test-Create_a_detection_rule_with_detection_method_anomaly_detection_returns_OK_response-1765898340","createdAt":1765898340611,"isDefault":false,"isPartner":false,"isEnabled":true,"isBeta":false,"isDeleted":false,"isDeprecated":false,"queries":[{"query":"service:app + status:error","groupByFields":["@usr.email","@network.client.ip"],"hasOptionalGroupByFields":false,"distinctFields":[],"aggregation":"count","name":"","dataSource":"logs"}],"options":{"evaluationWindow":1800,"detectionMethod":"anomaly_detection","maxSignalDuration":86400,"keepAlive":3600,"anomalyDetectionOptions":{"bucketDuration":300,"learningDuration":24,"detectionTolerance":3,"instantaneousBaseline":false,"instantaneousBaselineTimeoutMinutes":30,"learningPeriodBaseline":10}},"cases":[{"name":"","status":"info","notifications":[],"condition":"a + \u003e 0.995"}],"message":"An anomaly detection rule","tags":[],"hasExtendedTitle":false,"type":"log_detection","filters":[],"version":1,"id":"0vk-kph-3ri","blocking":false,"metadata":{"entities":null,"sources":null},"creationAuthorId":1445416,"creator":{"handle":"frog@datadoghq.com","name":"frog"},"updater":{"handle":"","name":""}}' + headers: + Content-Type: + - application/json + status: + code: 200 + message: OK +- recorded_at: Tue, 16 Dec 2025 15:19:00 GMT + request: + body: null + headers: + Accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/security_monitoring/rules/0vk-kph-3ri + response: + body: + encoding: UTF-8 + string: '' + headers: {} + status: + code: 204 + message: No Content +recorded_with: VCR 6.0.0 diff --git a/examples/v2/security-monitoring/CreateSecurityMonitoringRule_2323193894.rb b/examples/v2/security-monitoring/CreateSecurityMonitoringRule_2323193894.rb new file mode 100644 index 000000000000..999a42be4f36 --- /dev/null +++ b/examples/v2/security-monitoring/CreateSecurityMonitoringRule_2323193894.rb @@ -0,0 +1,48 @@ +# Create a detection rule with detection method 'anomaly_detection' returns "OK" response + +require "datadog_api_client" +api_instance = DatadogAPIClient::V2::SecurityMonitoringAPI.new + +body = DatadogAPIClient::V2::SecurityMonitoringStandardRuleCreatePayload.new({ + name: "Example-Security-Monitoring", + type: DatadogAPIClient::V2::SecurityMonitoringRuleTypeCreate::LOG_DETECTION, + is_enabled: true, + queries: [ + DatadogAPIClient::V2::SecurityMonitoringStandardRuleQuery.new({ + aggregation: DatadogAPIClient::V2::SecurityMonitoringRuleQueryAggregation::COUNT, + data_source: DatadogAPIClient::V2::SecurityMonitoringStandardDataSource::LOGS, + distinct_fields: [], + group_by_fields: [ + "@usr.email", + "@network.client.ip", + ], + has_optional_group_by_fields: false, + name: "", + query: "service:app status:error", + }), + ], + cases: [ + DatadogAPIClient::V2::SecurityMonitoringRuleCaseCreate.new({ + name: "", + status: DatadogAPIClient::V2::SecurityMonitoringRuleSeverity::INFO, + notifications: [], + condition: "a > 0.995", + }), + ], + message: "An anomaly detection rule", + options: DatadogAPIClient::V2::SecurityMonitoringRuleOptions.new({ + detection_method: DatadogAPIClient::V2::SecurityMonitoringRuleDetectionMethod::ANOMALY_DETECTION, + evaluation_window: DatadogAPIClient::V2::SecurityMonitoringRuleEvaluationWindow::FIFTEEN_MINUTES, + keep_alive: DatadogAPIClient::V2::SecurityMonitoringRuleKeepAlive::ONE_HOUR, + max_signal_duration: DatadogAPIClient::V2::SecurityMonitoringRuleMaxSignalDuration::ONE_DAY, + anomaly_detection_options: DatadogAPIClient::V2::SecurityMonitoringRuleAnomalyDetectionOptions.new({ + bucket_duration: DatadogAPIClient::V2::SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration::FIVE_MINUTES, + learning_duration: DatadogAPIClient::V2::SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration::ONE_DAY, + detection_tolerance: DatadogAPIClient::V2::SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance::THREE, + learning_period_baseline: 10, + }), + }), + tags: [], + filters: [], +}) +p api_instance.create_security_monitoring_rule(body) diff --git a/examples/v2/teams/DeleteTeamConnections.rb b/examples/v2/teams/DeleteTeamConnections.rb index 779bb69a3e63..ed3b589bd296 100644 --- a/examples/v2/teams/DeleteTeamConnections.rb +++ b/examples/v2/teams/DeleteTeamConnections.rb @@ -1,9 +1,6 @@ # Delete team connections returns "No Content" response require "datadog_api_client" -DatadogAPIClient.configure do |config| - config.unstable_operations["v2.delete_team_connections".to_sym] = true -end api_instance = DatadogAPIClient::V2::TeamsAPI.new body = DatadogAPIClient::V2::TeamConnectionDeleteRequest.new({ diff --git a/examples/v2/teams/GetTeamSync.rb b/examples/v2/teams/GetTeamSync.rb index 5bebde440321..f3a967d958fe 100644 --- a/examples/v2/teams/GetTeamSync.rb +++ b/examples/v2/teams/GetTeamSync.rb @@ -1,8 +1,5 @@ # Get team sync configurations returns "OK" response require "datadog_api_client" -DatadogAPIClient.configure do |config| - config.unstable_operations["v2.get_team_sync".to_sym] = true -end api_instance = DatadogAPIClient::V2::TeamsAPI.new p api_instance.get_team_sync(TeamSyncAttributesSource::GITHUB) diff --git a/examples/v2/teams/ListTeamConnections.rb b/examples/v2/teams/ListTeamConnections.rb index 811ff077fb68..d984ab32b850 100644 --- a/examples/v2/teams/ListTeamConnections.rb +++ b/examples/v2/teams/ListTeamConnections.rb @@ -1,8 +1,5 @@ # List team connections returns "OK" response require "datadog_api_client" -DatadogAPIClient.configure do |config| - config.unstable_operations["v2.list_team_connections".to_sym] = true -end api_instance = DatadogAPIClient::V2::TeamsAPI.new p api_instance.list_team_connections() diff --git a/examples/v2/teams/ListTeamConnections_2418873869.rb b/examples/v2/teams/ListTeamConnections_2418873869.rb index 9cc7601b19e3..b8cf57fee460 100644 --- a/examples/v2/teams/ListTeamConnections_2418873869.rb +++ b/examples/v2/teams/ListTeamConnections_2418873869.rb @@ -1,8 +1,5 @@ # List team connections returns "OK" response with pagination require "datadog_api_client" -DatadogAPIClient.configure do |config| - config.unstable_operations["v2.list_team_connections".to_sym] = true -end api_instance = DatadogAPIClient::V2::TeamsAPI.new api_instance.list_team_connections_with_pagination() { |item| puts item } diff --git a/examples/v2/teams/SyncTeams.rb b/examples/v2/teams/SyncTeams.rb index 37e298cb99e3..2675eff6ac68 100644 --- a/examples/v2/teams/SyncTeams.rb +++ b/examples/v2/teams/SyncTeams.rb @@ -1,9 +1,6 @@ # Link Teams with GitHub Teams returns "OK" response require "datadog_api_client" -DatadogAPIClient.configure do |config| - config.unstable_operations["v2.sync_teams".to_sym] = true -end api_instance = DatadogAPIClient::V2::TeamsAPI.new body = DatadogAPIClient::V2::TeamSyncRequest.new({ diff --git a/examples/v2/teams/SyncTeams_3215592344.rb b/examples/v2/teams/SyncTeams_3215592344.rb index 357b991a88e5..acb04129ae52 100644 --- a/examples/v2/teams/SyncTeams_3215592344.rb +++ b/examples/v2/teams/SyncTeams_3215592344.rb @@ -1,9 +1,6 @@ # Sync teams returns "OK" response require "datadog_api_client" -DatadogAPIClient.configure do |config| - config.unstable_operations["v2.sync_teams".to_sym] = true -end api_instance = DatadogAPIClient::V2::TeamsAPI.new body = DatadogAPIClient::V2::TeamSyncRequest.new({ diff --git a/features/scenarios_model_mapping.rb b/features/scenarios_model_mapping.rb index 52ba0405690e..3a27e10133ca 100644 --- a/features/scenarios_model_mapping.rb +++ b/features/scenarios_model_mapping.rb @@ -1278,6 +1278,7 @@ "filter_relation_type" => "RelationType", "filter_exclude_snapshot" => "String", "include" => "IncludeType", + "include_discovered" => "Boolean", }, "v2.UpsertCatalogEntity" => { "body" => "UpsertCatalogEntityRequest", @@ -1304,6 +1305,7 @@ "filter_from_ref" => "String", "filter_to_ref" => "String", "include" => "RelationIncludeType", + "include_discovered" => "Boolean", }, "v2.CreateCIAppPipelineEvent" => { "body" => "CIAppCreatePipelineEventRequest", diff --git a/features/v2/security_monitoring.feature b/features/v2/security_monitoring.feature index e86aed12b315..b3955e02b342 100644 --- a/features/v2/security_monitoring.feature +++ b/features/v2/security_monitoring.feature @@ -333,6 +333,20 @@ Feature: Security Monitoring And the response "message" is equal to "Test rule" And the response "referenceTables" is equal to [{"tableName": "synthetics_test_reference_table_dont_delete", "columnName": "value", "logFieldPath":"testtag", "checkPresence":true, "ruleQueryName":"a"}] + @team:DataDog/k9-cloud-security-platform + Scenario: Create a detection rule with detection method 'anomaly_detection' returns "OK" response + Given new "CreateSecurityMonitoringRule" request + And body with value {"name":"{{ unique }}","type":"log_detection","isEnabled":true,"queries":[{"aggregation":"count","dataSource":"logs","distinctFields":[],"groupByFields":["@usr.email","@network.client.ip"],"hasOptionalGroupByFields":false,"name":"","query":"service:app status:error"}],"cases":[{"name":"","status":"info","notifications":[],"condition":"a > 0.995"}],"message":"An anomaly detection rule","options":{"detectionMethod":"anomaly_detection","evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400,"anomalyDetectionOptions":{"bucketDuration":300,"learningDuration":24,"detectionTolerance":3,"learningPeriodBaseline":10}},"tags":[],"filters":[]} + When the request is sent + Then the response status is 200 OK + And the response "name" is equal to "{{ unique }}" + And the response "type" is equal to "log_detection" + And the response "options.detectionMethod" is equal to "anomaly_detection" + And the response "options.anomalyDetectionOptions.bucketDuration" is equal to 300 + And the response "options.anomalyDetectionOptions.learningDuration" is equal to 24 + And the response "options.anomalyDetectionOptions.learningPeriodBaseline" is equal to 10 + And the response "options.anomalyDetectionOptions.detectionTolerance" is equal to 3 + @team:DataDog/k9-cloud-security-platform Scenario: Create a detection rule with detection method 'sequence_detection' returns "OK" response Given new "CreateSecurityMonitoringRule" request diff --git a/features/v2/teams.feature b/features/v2/teams.feature index c2f52d0d96e8..9deac2e88afd 100644 --- a/features/v2/teams.feature +++ b/features/v2/teams.feature @@ -125,8 +125,7 @@ Feature: Teams @generated @skip @team:DataDog/aaa-omg Scenario: Create team connections returns "Conflict" response - Given operation "CreateTeamConnections" enabled - And new "CreateTeamConnections" request + Given new "CreateTeamConnections" request And body with value {"data": [{"attributes": {"managed_by": "github_sync", "source": "github"}, "relationships": {"connected_team": {"data": {"id": "@GitHubOrg/team-handle", "type": "github_team"}}, "team": {"data": {"id": "87654321-4321-8765-dcba-210987654321", "type": "team"}}}, "type": "team_connection"}]} When the request is sent Then the response status is 409 Conflict @@ -155,16 +154,14 @@ Feature: Teams @generated @skip @team:DataDog/aaa-omg Scenario: Delete team connections returns "No Content" response - Given operation "DeleteTeamConnections" enabled - And new "DeleteTeamConnections" request + Given new "DeleteTeamConnections" request And body with value {"data": [{"id": "12345678-1234-5678-9abc-123456789012", "type": "team_connection"}]} When the request is sent Then the response status is 204 No Content @generated @skip @team:DataDog/aaa-omg Scenario: Delete team connections returns "Not Found" response - Given operation "DeleteTeamConnections" enabled - And new "DeleteTeamConnections" request + Given new "DeleteTeamConnections" request And body with value {"data": [{"id": "12345678-1234-5678-9abc-123456789012", "type": "team_connection"}]} When the request is sent Then the response status is 404 Not Found @@ -357,16 +354,14 @@ Feature: Teams @generated @skip @team:DataDog/aaa-omg Scenario: Get team sync configurations returns "OK" response - Given operation "GetTeamSync" enabled - And new "GetTeamSync" request + Given new "GetTeamSync" request And request contains "filter[source]" parameter from "REPLACE.ME" When the request is sent Then the response status is 200 OK @generated @skip @team:DataDog/aaa-omg Scenario: Get team sync configurations returns "Team sync configurations not found" response - Given operation "GetTeamSync" enabled - And new "GetTeamSync" request + Given new "GetTeamSync" request And request contains "filter[source]" parameter from "REPLACE.ME" When the request is sent Then the response status is 404 Team sync configurations not found @@ -389,30 +384,26 @@ Feature: Teams @generated @skip @team:DataDog/aaa-omg Scenario: Link Teams with GitHub Teams returns "OK" response - Given operation "SyncTeams" enabled - And new "SyncTeams" request + Given new "SyncTeams" request And body with value {"data": {"attributes": {"source": "github", "type": "link"}, "type": "team_sync_bulk"}} When the request is sent Then the response status is 200 OK @generated @skip @team:DataDog/aaa-omg Scenario: List team connections returns "Bad Request" response - Given operation "ListTeamConnections" enabled - And new "ListTeamConnections" request + Given new "ListTeamConnections" request When the request is sent Then the response status is 400 Bad Request @generated @skip @team:DataDog/aaa-omg Scenario: List team connections returns "OK" response - Given operation "ListTeamConnections" enabled - And new "ListTeamConnections" request + Given new "ListTeamConnections" request When the request is sent Then the response status is 200 OK @generated @skip @team:DataDog/aaa-omg @with-pagination Scenario: List team connections returns "OK" response with pagination - Given operation "ListTeamConnections" enabled - And new "ListTeamConnections" request + Given new "ListTeamConnections" request When the request with pagination is sent Then the response status is 200 OK @@ -515,7 +506,6 @@ Feature: Teams @replay-only @team:DataDog/aaa-omg Scenario: Sync teams returns "OK" response Given new "SyncTeams" request - And operation "SyncTeams" enabled And body with value {"data": {"attributes": {"source": "github", "type": "link"}, "type": "team_sync_bulk"}} When the request is sent Then the response status is 200 OK diff --git a/lib/datadog_api_client/configuration.rb b/lib/datadog_api_client/configuration.rb index 707078fa9174..5afe995637c9 100644 --- a/lib/datadog_api_client/configuration.rb +++ b/lib/datadog_api_client/configuration.rb @@ -335,13 +335,8 @@ def initialize "v2.create_sca_resolve_vulnerable_symbols": false, "v2.create_sca_result": false, "v2.add_member_team": false, - "v2.create_team_connections": false, - "v2.delete_team_connections": false, - "v2.get_team_sync": false, "v2.list_member_teams": false, - "v2.list_team_connections": false, "v2.remove_member_team": false, - "v2.sync_teams": false, "v2.create_incident_team": false, "v2.delete_incident_team": false, "v2.get_incident_team": false, diff --git a/lib/datadog_api_client/inflector.rb b/lib/datadog_api_client/inflector.rb index 50449cdc25f7..3e6e421122a4 100644 --- a/lib/datadog_api_client/inflector.rb +++ b/lib/datadog_api_client/inflector.rb @@ -3946,6 +3946,10 @@ def overrides "v2.security_monitoring_filter_action" => "SecurityMonitoringFilterAction", "v2.security_monitoring_list_rules_response" => "SecurityMonitoringListRulesResponse", "v2.security_monitoring_reference_table" => "SecurityMonitoringReferenceTable", + "v2.security_monitoring_rule_anomaly_detection_options" => "SecurityMonitoringRuleAnomalyDetectionOptions", + "v2.security_monitoring_rule_anomaly_detection_options_bucket_duration" => "SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration", + "v2.security_monitoring_rule_anomaly_detection_options_detection_tolerance" => "SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance", + "v2.security_monitoring_rule_anomaly_detection_options_learning_duration" => "SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration", "v2.security_monitoring_rule_case" => "SecurityMonitoringRuleCase", "v2.security_monitoring_rule_case_action" => "SecurityMonitoringRuleCaseAction", "v2.security_monitoring_rule_case_action_options" => "SecurityMonitoringRuleCaseActionOptions", diff --git a/lib/datadog_api_client/v2/api/software_catalog_api.rb b/lib/datadog_api_client/v2/api/software_catalog_api.rb index 4aa853a69cbc..4bf7cd83eacc 100644 --- a/lib/datadog_api_client/v2/api/software_catalog_api.rb +++ b/lib/datadog_api_client/v2/api/software_catalog_api.rb @@ -176,6 +176,7 @@ def list_catalog_entity(opts = {}) # @option opts [RelationType] :filter_relation_type Filter entities by relation type. # @option opts [String] :filter_exclude_snapshot Filter entities by excluding snapshotted entities. # @option opts [IncludeType] :include Include relationship data. + # @option opts [Boolean] :include_discovered If true, includes discovered services from APM and USM that do not have entity definitions. # @return [Array<(ListEntityCatalogResponse, Integer, Hash)>] ListEntityCatalogResponse data, response status code and response headers def list_catalog_entity_with_http_info(opts = {}) @@ -205,6 +206,7 @@ def list_catalog_entity_with_http_info(opts = {}) query_params[:'filter[relation][type]'] = opts[:'filter_relation_type'] if !opts[:'filter_relation_type'].nil? query_params[:'filter[exclude_snapshot]'] = opts[:'filter_exclude_snapshot'] if !opts[:'filter_exclude_snapshot'].nil? query_params[:'include'] = opts[:'include'] if !opts[:'include'].nil? + query_params[:'includeDiscovered'] = opts[:'include_discovered'] if !opts[:'include_discovered'].nil? # header parameters header_params = opts[:header_params] || {} @@ -370,6 +372,7 @@ def list_catalog_relation(opts = {}) # @option opts [String] :filter_from_ref Filter relations by the reference of the first entity in the relation. # @option opts [String] :filter_to_ref Filter relations by the reference of the second entity in the relation. # @option opts [RelationIncludeType] :include Include relationship data. + # @option opts [Boolean] :include_discovered If true, includes relationships discovered by APM and USM. # @return [Array<(ListRelationCatalogResponse, Integer, Hash)>] ListRelationCatalogResponse data, response status code and response headers def list_catalog_relation_with_http_info(opts = {}) @@ -395,6 +398,7 @@ def list_catalog_relation_with_http_info(opts = {}) query_params[:'filter[from_ref]'] = opts[:'filter_from_ref'] if !opts[:'filter_from_ref'].nil? query_params[:'filter[to_ref]'] = opts[:'filter_to_ref'] if !opts[:'filter_to_ref'].nil? query_params[:'include'] = opts[:'include'] if !opts[:'include'].nil? + query_params[:'includeDiscovered'] = opts[:'include_discovered'] if !opts[:'include_discovered'].nil? # header parameters header_params = opts[:header_params] || {} diff --git a/lib/datadog_api_client/v2/api/teams_api.rb b/lib/datadog_api_client/v2/api/teams_api.rb index 95a0824385bf..4403821b3798 100644 --- a/lib/datadog_api_client/v2/api/teams_api.rb +++ b/lib/datadog_api_client/v2/api/teams_api.rb @@ -258,12 +258,6 @@ def create_team_connections(body, opts = {}) # @param opts [Hash] the optional parameters # @return [Array<(TeamConnectionsResponse, Integer, Hash)>] TeamConnectionsResponse data, response status code and response headers def create_team_connections_with_http_info(body, opts = {}) - unstable_enabled = @api_client.config.unstable_operations["v2.create_team_connections".to_sym] - if unstable_enabled - @api_client.config.logger.warn format("Using unstable operation '%s'", "v2.create_team_connections") - else - raise DatadogAPIClient::APIError.new(message: format("Unstable operation '%s' is disabled", "v2.create_team_connections")) - end if @api_client.config.debugging @api_client.config.logger.debug 'Calling API: TeamsAPI.create_team_connections ...' @@ -542,12 +536,6 @@ def delete_team_connections(body, opts = {}) # @param opts [Hash] the optional parameters # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers def delete_team_connections_with_http_info(body, opts = {}) - unstable_enabled = @api_client.config.unstable_operations["v2.delete_team_connections".to_sym] - if unstable_enabled - @api_client.config.logger.warn format("Using unstable operation '%s'", "v2.delete_team_connections") - else - raise DatadogAPIClient::APIError.new(message: format("Unstable operation '%s' is disabled", "v2.delete_team_connections")) - end if @api_client.config.debugging @api_client.config.logger.debug 'Calling API: TeamsAPI.delete_team_connections ...' @@ -1187,12 +1175,6 @@ def get_team_sync(filter_source, opts = {}) # @param opts [Hash] the optional parameters # @return [Array<(TeamSyncResponse, Integer, Hash)>] TeamSyncResponse data, response status code and response headers def get_team_sync_with_http_info(filter_source, opts = {}) - unstable_enabled = @api_client.config.unstable_operations["v2.get_team_sync".to_sym] - if unstable_enabled - @api_client.config.logger.warn format("Using unstable operation '%s'", "v2.get_team_sync") - else - raise DatadogAPIClient::APIError.new(message: format("Unstable operation '%s' is disabled", "v2.get_team_sync")) - end if @api_client.config.debugging @api_client.config.logger.debug 'Calling API: TeamsAPI.get_team_sync ...' @@ -1439,12 +1421,6 @@ def list_team_connections(opts = {}) # @option opts [Array] :filter_connection_ids Filter team connections by connection IDs. # @return [Array<(TeamConnectionsResponse, Integer, Hash)>] TeamConnectionsResponse data, response status code and response headers def list_team_connections_with_http_info(opts = {}) - unstable_enabled = @api_client.config.unstable_operations["v2.list_team_connections".to_sym] - if unstable_enabled - @api_client.config.logger.warn format("Using unstable operation '%s'", "v2.list_team_connections") - else - raise DatadogAPIClient::APIError.new(message: format("Unstable operation '%s' is disabled", "v2.list_team_connections")) - end if @api_client.config.debugging @api_client.config.logger.debug 'Calling API: TeamsAPI.list_team_connections ...' @@ -1882,12 +1858,6 @@ def sync_teams(body, opts = {}) # @param opts [Hash] the optional parameters # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers def sync_teams_with_http_info(body, opts = {}) - unstable_enabled = @api_client.config.unstable_operations["v2.sync_teams".to_sym] - if unstable_enabled - @api_client.config.logger.warn format("Using unstable operation '%s'", "v2.sync_teams") - else - raise DatadogAPIClient::APIError.new(message: format("Unstable operation '%s' is disabled", "v2.sync_teams")) - end if @api_client.config.debugging @api_client.config.logger.debug 'Calling API: TeamsAPI.sync_teams ...' diff --git a/lib/datadog_api_client/v2/models/security_monitoring_rule_anomaly_detection_options.rb b/lib/datadog_api_client/v2/models/security_monitoring_rule_anomaly_detection_options.rb new file mode 100644 index 000000000000..705b2be019f0 --- /dev/null +++ b/lib/datadog_api_client/v2/models/security_monitoring_rule_anomaly_detection_options.rb @@ -0,0 +1,155 @@ +=begin +#Datadog API V2 Collection + +#Collection of all Datadog Public endpoints. + +The version of the OpenAPI document: 1.0 +Contact: support@datadoghq.com +Generated by: https://github.com/DataDog/datadog-api-client-ruby/tree/master/.generator + + Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + This product includes software developed at Datadog (https://www.datadoghq.com/). + Copyright 2020-Present Datadog, Inc. + +=end + +require 'date' +require 'time' + +module DatadogAPIClient::V2 + # Options on anomaly detection method. + class SecurityMonitoringRuleAnomalyDetectionOptions + include BaseGenericModel + + # Duration in seconds of the time buckets used to aggregate events matched by the rule. + # Must be greater than or equal to 300. + attr_accessor :bucket_duration + + # An optional parameter that sets how permissive anomaly detection is. + # Higher values require higher deviations before triggering a signal. + attr_accessor :detection_tolerance + + # Learning duration in hours. Anomaly detection waits for at least this amount of historical data before it starts evaluating. + attr_accessor :learning_duration + + # An optional override baseline to apply while the rule is in the learning period. Must be greater than or equal to 0. + attr_reader :learning_period_baseline + + attr_accessor :additional_properties + + # Attribute mapping from ruby-style variable name to JSON key. + # @!visibility private + def self.attribute_map + { + :'bucket_duration' => :'bucketDuration', + :'detection_tolerance' => :'detectionTolerance', + :'learning_duration' => :'learningDuration', + :'learning_period_baseline' => :'learningPeriodBaseline' + } + end + + # Attribute type mapping. + # @!visibility private + def self.openapi_types + { + :'bucket_duration' => :'SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration', + :'detection_tolerance' => :'SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance', + :'learning_duration' => :'SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration', + :'learning_period_baseline' => :'Integer' + } + end + + # Initializes the object + # @param attributes [Hash] Model attributes in the form of hash + # @!visibility private + def initialize(attributes = {}) + if (!attributes.is_a?(Hash)) + fail ArgumentError, "The input argument (attributes) must be a hash in `DatadogAPIClient::V2::SecurityMonitoringRuleAnomalyDetectionOptions` initialize method" + end + + self.additional_properties = {} + # check to see if the attribute exists and convert string to symbol for hash key + attributes = attributes.each_with_object({}) { |(k, v), h| + if (!self.class.attribute_map.key?(k.to_sym)) + self.additional_properties[k.to_sym] = v + else + h[k.to_sym] = v + end + } + + if attributes.key?(:'bucket_duration') + self.bucket_duration = attributes[:'bucket_duration'] + end + + if attributes.key?(:'detection_tolerance') + self.detection_tolerance = attributes[:'detection_tolerance'] + end + + if attributes.key?(:'learning_duration') + self.learning_duration = attributes[:'learning_duration'] + end + + if attributes.key?(:'learning_period_baseline') + self.learning_period_baseline = attributes[:'learning_period_baseline'] + end + end + + # Check to see if the all the properties in the model are valid + # @return true if the model is valid + # @!visibility private + def valid? + return false if !@learning_period_baseline.nil? && @learning_period_baseline < 0 + true + end + + # Custom attribute writer method with validation + # @param learning_period_baseline [Object] Object to be assigned + # @!visibility private + def learning_period_baseline=(learning_period_baseline) + if !learning_period_baseline.nil? && learning_period_baseline < 0 + fail ArgumentError, 'invalid value for "learning_period_baseline", must be greater than or equal to 0.' + end + @learning_period_baseline = learning_period_baseline + end + + # Returns the object in the form of hash, with additionalProperties support. + # @return [Hash] Returns the object in the form of hash + # @!visibility private + def to_hash + hash = {} + self.class.attribute_map.each_pair do |attr, param| + value = self.send(attr) + if value.nil? + is_nullable = self.class.openapi_nullable.include?(attr) + next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}")) + end + + hash[param] = _to_hash(value) + end + self.additional_properties.each_pair do |attr, value| + hash[attr] = value + end + hash + end + + # Checks equality by comparing each attribute. + # @param o [Object] Object to be compared + # @!visibility private + def ==(o) + return true if self.equal?(o) + self.class == o.class && + bucket_duration == o.bucket_duration && + detection_tolerance == o.detection_tolerance && + learning_duration == o.learning_duration && + learning_period_baseline == o.learning_period_baseline && + additional_properties == o.additional_properties + end + + # Calculates hash code according to all attributes. + # @return [Integer] Hash code + # @!visibility private + def hash + [bucket_duration, detection_tolerance, learning_duration, learning_period_baseline, additional_properties].hash + end + end +end diff --git a/lib/datadog_api_client/v2/models/security_monitoring_rule_anomaly_detection_options_bucket_duration.rb b/lib/datadog_api_client/v2/models/security_monitoring_rule_anomaly_detection_options_bucket_duration.rb new file mode 100644 index 000000000000..a4a9f6e24698 --- /dev/null +++ b/lib/datadog_api_client/v2/models/security_monitoring_rule_anomaly_detection_options_bucket_duration.rb @@ -0,0 +1,32 @@ +=begin +#Datadog API V2 Collection + +#Collection of all Datadog Public endpoints. + +The version of the OpenAPI document: 1.0 +Contact: support@datadoghq.com +Generated by: https://github.com/DataDog/datadog-api-client-ruby/tree/master/.generator + + Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + This product includes software developed at Datadog (https://www.datadoghq.com/). + Copyright 2020-Present Datadog, Inc. + +=end + +require 'date' +require 'time' + +module DatadogAPIClient::V2 + # Duration in seconds of the time buckets used to aggregate events matched by the rule. + # Must be greater than or equal to 300. + class SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration + include BaseEnumModel + + FIVE_MINUTES = 300.freeze + TEN_MINUTES = 600.freeze + FIFTEEN_MINUTES = 900.freeze + THIRTY_MINUTES = 1800.freeze + ONE_HOUR = 3600.freeze + THREE_HOURS = 10800.freeze + end +end diff --git a/lib/datadog_api_client/v2/models/security_monitoring_rule_anomaly_detection_options_detection_tolerance.rb b/lib/datadog_api_client/v2/models/security_monitoring_rule_anomaly_detection_options_detection_tolerance.rb new file mode 100644 index 000000000000..27074d944f92 --- /dev/null +++ b/lib/datadog_api_client/v2/models/security_monitoring_rule_anomaly_detection_options_detection_tolerance.rb @@ -0,0 +1,31 @@ +=begin +#Datadog API V2 Collection + +#Collection of all Datadog Public endpoints. + +The version of the OpenAPI document: 1.0 +Contact: support@datadoghq.com +Generated by: https://github.com/DataDog/datadog-api-client-ruby/tree/master/.generator + + Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + This product includes software developed at Datadog (https://www.datadoghq.com/). + Copyright 2020-Present Datadog, Inc. + +=end + +require 'date' +require 'time' + +module DatadogAPIClient::V2 + # An optional parameter that sets how permissive anomaly detection is. + # Higher values require higher deviations before triggering a signal. + class SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance + include BaseEnumModel + + ONE = 1.freeze + TWO = 2.freeze + THREE = 3.freeze + FOUR = 4.freeze + FIVE = 5.freeze + end +end diff --git a/lib/datadog_api_client/v2/models/security_monitoring_rule_anomaly_detection_options_learning_duration.rb b/lib/datadog_api_client/v2/models/security_monitoring_rule_anomaly_detection_options_learning_duration.rb new file mode 100644 index 000000000000..9f749a001b41 --- /dev/null +++ b/lib/datadog_api_client/v2/models/security_monitoring_rule_anomaly_detection_options_learning_duration.rb @@ -0,0 +1,32 @@ +=begin +#Datadog API V2 Collection + +#Collection of all Datadog Public endpoints. + +The version of the OpenAPI document: 1.0 +Contact: support@datadoghq.com +Generated by: https://github.com/DataDog/datadog-api-client-ruby/tree/master/.generator + + Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + This product includes software developed at Datadog (https://www.datadoghq.com/). + Copyright 2020-Present Datadog, Inc. + +=end + +require 'date' +require 'time' + +module DatadogAPIClient::V2 + # Learning duration in hours. Anomaly detection waits for at least this amount of historical data before it starts evaluating. + class SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration + include BaseEnumModel + + ONE_HOUR = 1.freeze + SIX_HOURS = 6.freeze + TWELVE_HOURS = 12.freeze + ONE_DAY = 24.freeze + TWO_DAYS = 48.freeze + ONE_WEEK = 168.freeze + TWO_WEEKS = 336.freeze + end +end diff --git a/lib/datadog_api_client/v2/models/security_monitoring_rule_options.rb b/lib/datadog_api_client/v2/models/security_monitoring_rule_options.rb index 0cb31af92c88..402bb1f636da 100644 --- a/lib/datadog_api_client/v2/models/security_monitoring_rule_options.rb +++ b/lib/datadog_api_client/v2/models/security_monitoring_rule_options.rb @@ -21,6 +21,9 @@ module DatadogAPIClient::V2 class SecurityMonitoringRuleOptions include BaseGenericModel + # Options on anomaly detection method. + attr_accessor :anomaly_detection_options + # Options for cloud_configuration rules. # Fields `resourceType` and `regoRule` are mandatory when managing custom `cloud_configuration` rules. attr_accessor :compliance_rule_options @@ -66,6 +69,7 @@ class SecurityMonitoringRuleOptions # @!visibility private def self.attribute_map { + :'anomaly_detection_options' => :'anomalyDetectionOptions', :'compliance_rule_options' => :'complianceRuleOptions', :'decrease_criticality_based_on_env' => :'decreaseCriticalityBasedOnEnv', :'detection_method' => :'detectionMethod', @@ -84,6 +88,7 @@ def self.attribute_map # @!visibility private def self.openapi_types { + :'anomaly_detection_options' => :'SecurityMonitoringRuleAnomalyDetectionOptions', :'compliance_rule_options' => :'CloudConfigurationComplianceRuleOptions', :'decrease_criticality_based_on_env' => :'Boolean', :'detection_method' => :'SecurityMonitoringRuleDetectionMethod', @@ -116,6 +121,10 @@ def initialize(attributes = {}) end } + if attributes.key?(:'anomaly_detection_options') + self.anomaly_detection_options = attributes[:'anomaly_detection_options'] + end + if attributes.key?(:'compliance_rule_options') self.compliance_rule_options = attributes[:'compliance_rule_options'] end @@ -187,6 +196,7 @@ def to_hash def ==(o) return true if self.equal?(o) self.class == o.class && + anomaly_detection_options == o.anomaly_detection_options && compliance_rule_options == o.compliance_rule_options && decrease_criticality_based_on_env == o.decrease_criticality_based_on_env && detection_method == o.detection_method && @@ -205,7 +215,7 @@ def ==(o) # @return [Integer] Hash code # @!visibility private def hash - [compliance_rule_options, decrease_criticality_based_on_env, detection_method, evaluation_window, hardcoded_evaluator_type, impossible_travel_options, keep_alive, max_signal_duration, new_value_options, sequence_detection_options, third_party_rule_options, additional_properties].hash + [anomaly_detection_options, compliance_rule_options, decrease_criticality_based_on_env, detection_method, evaluation_window, hardcoded_evaluator_type, impossible_travel_options, keep_alive, max_signal_duration, new_value_options, sequence_detection_options, third_party_rule_options, additional_properties].hash end end end diff --git a/lib/datadog_api_client/v2/models/threat_hunting_job_options.rb b/lib/datadog_api_client/v2/models/threat_hunting_job_options.rb index f8798df09a18..a7f740e3b195 100644 --- a/lib/datadog_api_client/v2/models/threat_hunting_job_options.rb +++ b/lib/datadog_api_client/v2/models/threat_hunting_job_options.rb @@ -21,6 +21,9 @@ module DatadogAPIClient::V2 class ThreatHuntingJobOptions include BaseGenericModel + # Options on anomaly detection method. + attr_accessor :anomaly_detection_options + # The detection method. attr_accessor :detection_method @@ -54,6 +57,7 @@ class ThreatHuntingJobOptions # @!visibility private def self.attribute_map { + :'anomaly_detection_options' => :'anomalyDetectionOptions', :'detection_method' => :'detectionMethod', :'evaluation_window' => :'evaluationWindow', :'impossible_travel_options' => :'impossibleTravelOptions', @@ -69,6 +73,7 @@ def self.attribute_map # @!visibility private def self.openapi_types { + :'anomaly_detection_options' => :'SecurityMonitoringRuleAnomalyDetectionOptions', :'detection_method' => :'SecurityMonitoringRuleDetectionMethod', :'evaluation_window' => :'SecurityMonitoringRuleEvaluationWindow', :'impossible_travel_options' => :'SecurityMonitoringRuleImpossibleTravelOptions', @@ -98,6 +103,10 @@ def initialize(attributes = {}) end } + if attributes.key?(:'anomaly_detection_options') + self.anomaly_detection_options = attributes[:'anomaly_detection_options'] + end + if attributes.key?(:'detection_method') self.detection_method = attributes[:'detection_method'] end @@ -157,6 +166,7 @@ def to_hash def ==(o) return true if self.equal?(o) self.class == o.class && + anomaly_detection_options == o.anomaly_detection_options && detection_method == o.detection_method && evaluation_window == o.evaluation_window && impossible_travel_options == o.impossible_travel_options && @@ -172,7 +182,7 @@ def ==(o) # @return [Integer] Hash code # @!visibility private def hash - [detection_method, evaluation_window, impossible_travel_options, keep_alive, max_signal_duration, new_value_options, sequence_detection_options, third_party_rule_options, additional_properties].hash + [anomaly_detection_options, detection_method, evaluation_window, impossible_travel_options, keep_alive, max_signal_duration, new_value_options, sequence_detection_options, third_party_rule_options, additional_properties].hash end end end diff --git a/lib/datadog_api_client/version.rb b/lib/datadog_api_client/version.rb index ec9683753920..8a0b644ef9f0 100644 --- a/lib/datadog_api_client/version.rb +++ b/lib/datadog_api_client/version.rb @@ -1,5 +1,5 @@ # Define library version. module DatadogAPIClient - VERSION = '2.46.0' + VERSION = '2.47.0' end