diff --git a/.generator/schemas/v1/openapi.yaml b/.generator/schemas/v1/openapi.yaml index e1069e549e00..a33eb8043123 100644 --- a/.generator/schemas/v1/openapi.yaml +++ b/.generator/schemas/v1/openapi.yaml @@ -9034,6 +9034,14 @@ components: type: array model_type_override: $ref: "#/components/schemas/MonitorFormulaAndFunctionDataQualityModelTypeOverride" + sensitivity: + description: |- + Sensitivity of the anomaly detection model, expressed as a multiplier on the width + of the predicted bounds. Higher values widen the bounds and produce fewer alerts; + lower values tighten them and produce more alerts. Defaults to `3.0`. + example: 3.0 + format: double + type: number type: object MonitorFormulaAndFunctionDataQualityQueryDefinition: description: A formula and functions data quality query. diff --git a/cassettes/features/v1/monitors/Create-a-Data-Quality-monitor-with-sensitivity-returns-OK-response.frozen b/cassettes/features/v1/monitors/Create-a-Data-Quality-monitor-with-sensitivity-returns-OK-response.frozen new file mode 100644 index 000000000000..49c672f45691 --- /dev/null +++ b/cassettes/features/v1/monitors/Create-a-Data-Quality-monitor-with-sensitivity-returns-OK-response.frozen @@ -0,0 +1 @@ +2026-07-31T16:36:50.561Z \ No newline at end of file diff --git a/cassettes/features/v1/monitors/Create-a-Data-Quality-monitor-with-sensitivity-returns-OK-response.yml b/cassettes/features/v1/monitors/Create-a-Data-Quality-monitor-with-sensitivity-returns-OK-response.yml new file mode 100644 index 000000000000..49185514d9c1 --- /dev/null +++ b/cassettes/features/v1/monitors/Create-a-Data-Quality-monitor-with-sensitivity-returns-OK-response.yml @@ -0,0 +1,53 @@ +http_interactions: +- recorded_at: Fri, 31 Jul 2026 16:36:50 GMT + request: + body: + encoding: UTF-8 + string: '{"message":"Data quality alert triggered","name":"Test-Create_a_Data_Quality_monitor_with_sensitivity_returns_OK_response-1785515810","options":{"thresholds":{"critical":100},"variables":[{"data_source":"data_quality_metrics","filter":"search + for column where `database:production AND table:users`","group_by":["entity_id"],"measure":"row_count","monitor_options":{"sensitivity":2.5},"name":"query1"}]},"priority":3,"query":"formula(\"query1\").last(\"5m\") + > 100","tags":["test:testcreateadataqualitymonitorwithsensitivityreturnsokresponse1785515810","env:ci"],"type":"data-quality + alert"}' + headers: + Accept: + - application/json + Content-Type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v1/monitor + response: + body: + encoding: UTF-8 + string: '{"id":310055951,"org_id":321813,"type":"data-quality alert","name":"Test-Create_a_Data_Quality_monitor_with_sensitivity_returns_OK_response-1785515810","message":"Data + quality alert triggered","tags":["test:testcreateadataqualitymonitorwithsensitivityreturnsokresponse1785515810","env:ci"],"query":"formula(\"query1\").last(\"5m\") + > 100","options":{"thresholds":{"critical":100.0},"variables":[{"data_source":"data_quality_metrics","filter":"search + for column where `database:production AND table:users`","group_by":["entity_id"],"measure":"row_count","monitor_options":{"sensitivity":2.5},"name":"query1"}],"notify_no_data":false,"notify_audit":false,"new_host_delay":300,"include_tags":true,"silenced":{}},"multi":false,"created_at":1785515810000,"created":"2026-07-31T16:36:50.914551+00:00","modified":"2026-07-31T16:36:50.914551+00:00","deleted":null,"priority":3,"restricted_roles":null,"restriction_policy":null,"draft_status":"published","assets":[],"overall_state_modified":null,"overall_state":"No + Data","creator":{"name":"CI Account","handle":"9919ec9b-ebc7-49ee-8dc8-03626e717cca","email":"team-intg-tools-libs-spam@datadoghq.com","id":2320499}} + + ' + headers: + Content-Type: + - application/json + status: + code: 200 + message: OK +- recorded_at: Fri, 31 Jul 2026 16:36:50 GMT + request: + body: null + headers: + Accept: + - application/json + method: DELETE + uri: https://api.datadoghq.com/api/v1/monitor/310055951 + response: + body: + encoding: UTF-8 + string: '{"deleted_monitor_id":310055951} + + ' + headers: + Content-Type: + - application/json + status: + code: 200 + message: OK +recorded_with: VCR 6.0.0 diff --git a/examples/v1/monitors/CreateMonitor_1532893480.rb b/examples/v1/monitors/CreateMonitor_1532893480.rb new file mode 100644 index 000000000000..71b1fc5383fc --- /dev/null +++ b/examples/v1/monitors/CreateMonitor_1532893480.rb @@ -0,0 +1,36 @@ +# Create a Data Quality monitor with sensitivity returns "OK" response + +require "datadog_api_client" +api_instance = DatadogAPIClient::V1::MonitorsAPI.new + +body = DatadogAPIClient::V1::Monitor.new({ + name: "Example-Monitor", + type: DatadogAPIClient::V1::MonitorType::DATA_QUALITY_ALERT, + query: 'formula("query1").last("5m") > 100', + message: "Data quality alert triggered", + tags: [ + "test:examplemonitor", + "env:ci", + ], + priority: 3, + options: DatadogAPIClient::V1::MonitorOptions.new({ + thresholds: DatadogAPIClient::V1::MonitorThresholds.new({ + critical: 100, + }), + variables: [ + DatadogAPIClient::V1::MonitorFormulaAndFunctionDataQualityQueryDefinition.new({ + name: "query1", + data_source: DatadogAPIClient::V1::MonitorFormulaAndFunctionDataQualityDataSource::DATA_QUALITY_METRICS, + measure: "row_count", + filter: "search for column where `database:production AND table:users`", + group_by: [ + "entity_id", + ], + monitor_options: DatadogAPIClient::V1::MonitorFormulaAndFunctionDataQualityMonitorOptions.new({ + sensitivity: 2.5, + }), + }), + ], + }), +}) +p api_instance.create_monitor(body) diff --git a/features/v1/monitors.feature b/features/v1/monitors.feature index 2a34a879f759..49f446a95a4f 100644 --- a/features/v1/monitors.feature +++ b/features/v1/monitors.feature @@ -60,6 +60,16 @@ Feature: Monitors And the response "name" is equal to "{{ unique }}" And the response "type" is equal to "data-quality alert" + @team:DataDog/monitor-app + Scenario: Create a Data Quality monitor with sensitivity returns "OK" response + Given new "CreateMonitor" request + And body with value {"name": "{{ unique }}", "type": "data-quality alert", "query": "formula(\"query1\").last(\"5m\") > 100", "message": "Data quality alert triggered", "tags": ["test:{{ unique_lower_alnum }}", "env:ci"], "priority": 3, "options": {"thresholds": {"critical": 100}, "variables": [{"name": "query1", "data_source": "data_quality_metrics", "measure": "row_count", "filter": "search for column where `database:production AND table:users`", "group_by": ["entity_id"], "monitor_options": {"sensitivity": 2.5}}]}} + 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 "data-quality alert" + And the response "options.variables[0].monitor_options.sensitivity" is equal to 2.5 + @team:DataDog/monitor-app Scenario: Create a RUM formula and functions monitor returns "OK" response Given new "CreateMonitor" request diff --git a/lib/datadog_api_client/v1/models/monitor_formula_and_function_data_quality_monitor_options.rb b/lib/datadog_api_client/v1/models/monitor_formula_and_function_data_quality_monitor_options.rb index 59ebfe3935fe..b5772b38b3d9 100644 --- a/lib/datadog_api_client/v1/models/monitor_formula_and_function_data_quality_monitor_options.rb +++ b/lib/datadog_api_client/v1/models/monitor_formula_and_function_data_quality_monitor_options.rb @@ -36,6 +36,11 @@ class MonitorFormulaAndFunctionDataQualityMonitorOptions # Override for the model type used in anomaly detection. attr_accessor :model_type_override + # Sensitivity of the anomaly detection model, expressed as a multiplier on the width + # of the predicted bounds. Higher values widen the bounds and produce fewer alerts; + # lower values tighten them and produce more alerts. Defaults to `3.0`. + attr_accessor :sensitivity + attr_accessor :additional_properties # Attribute mapping from ruby-style variable name to JSON key. @@ -46,7 +51,8 @@ def self.attribute_map :'custom_sql' => :'custom_sql', :'custom_where' => :'custom_where', :'group_by_columns' => :'group_by_columns', - :'model_type_override' => :'model_type_override' + :'model_type_override' => :'model_type_override', + :'sensitivity' => :'sensitivity' } end @@ -58,7 +64,8 @@ def self.openapi_types :'custom_sql' => :'String', :'custom_where' => :'String', :'group_by_columns' => :'Array', - :'model_type_override' => :'MonitorFormulaAndFunctionDataQualityModelTypeOverride' + :'model_type_override' => :'MonitorFormulaAndFunctionDataQualityModelTypeOverride', + :'sensitivity' => :'Float' } end @@ -101,6 +108,10 @@ def initialize(attributes = {}) if attributes.key?(:'model_type_override') self.model_type_override = attributes[:'model_type_override'] end + + if attributes.key?(:'sensitivity') + self.sensitivity = attributes[:'sensitivity'] + end end # Returns the object in the form of hash, with additionalProperties support. @@ -134,6 +145,7 @@ def ==(o) custom_where == o.custom_where && group_by_columns == o.group_by_columns && model_type_override == o.model_type_override && + sensitivity == o.sensitivity && additional_properties == o.additional_properties end @@ -141,7 +153,7 @@ def ==(o) # @return [Integer] Hash code # @!visibility private def hash - [crontab_override, custom_sql, custom_where, group_by_columns, model_type_override, additional_properties].hash + [crontab_override, custom_sql, custom_where, group_by_columns, model_type_override, sensitivity, additional_properties].hash end end end