diff --git a/.generator/schemas/v1/openapi.yaml b/.generator/schemas/v1/openapi.yaml index e1069e549e0..a33eb804312 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/examples/v1/monitors/CreateMonitor_1532893480.java b/examples/v1/monitors/CreateMonitor_1532893480.java new file mode 100644 index 00000000000..059b41e5ea3 --- /dev/null +++ b/examples/v1/monitors/CreateMonitor_1532893480.java @@ -0,0 +1,63 @@ +// Create a Data Quality monitor with sensitivity returns "OK" response + +import com.datadog.api.client.ApiClient; +import com.datadog.api.client.ApiException; +import com.datadog.api.client.v1.api.MonitorsApi; +import com.datadog.api.client.v1.model.Monitor; +import com.datadog.api.client.v1.model.MonitorFormulaAndFunctionDataQualityDataSource; +import com.datadog.api.client.v1.model.MonitorFormulaAndFunctionDataQualityMonitorOptions; +import com.datadog.api.client.v1.model.MonitorFormulaAndFunctionDataQualityQueryDefinition; +import com.datadog.api.client.v1.model.MonitorFormulaAndFunctionQueryDefinition; +import com.datadog.api.client.v1.model.MonitorOptions; +import com.datadog.api.client.v1.model.MonitorThresholds; +import com.datadog.api.client.v1.model.MonitorType; +import java.util.Arrays; +import java.util.Collections; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = ApiClient.getDefaultApiClient(); + MonitorsApi apiInstance = new MonitorsApi(defaultClient); + + Monitor body = + new Monitor() + .name("Example-Monitor") + .type(MonitorType.DATA_QUALITY_ALERT) + .query(""" +formula("query1").last("5m") > 100 +""") + .message("Data quality alert triggered") + .tags(Arrays.asList("test:examplemonitor", "env:ci")) + .priority(3L) + .options( + new MonitorOptions() + .thresholds(new MonitorThresholds().critical(100.0)) + .variables( + Collections.singletonList( + new MonitorFormulaAndFunctionQueryDefinition( + new MonitorFormulaAndFunctionDataQualityQueryDefinition() + .name("query1") + .dataSource( + MonitorFormulaAndFunctionDataQualityDataSource + .DATA_QUALITY_METRICS) + .measure("row_count") + .filter( + "search for column where `database:production AND" + + " table:users`") + .groupBy(Collections.singletonList("entity_id")) + .monitorOptions( + new MonitorFormulaAndFunctionDataQualityMonitorOptions() + .sensitivity(2.5)))))); + + try { + Monitor result = apiInstance.createMonitor(body); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling MonitorsApi#createMonitor"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionDataQualityMonitorOptions.java b/src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionDataQualityMonitorOptions.java index b025eb72f83..a6df9208c32 100644 --- a/src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionDataQualityMonitorOptions.java +++ b/src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionDataQualityMonitorOptions.java @@ -24,7 +24,8 @@ MonitorFormulaAndFunctionDataQualityMonitorOptions.JSON_PROPERTY_CUSTOM_SQL, MonitorFormulaAndFunctionDataQualityMonitorOptions.JSON_PROPERTY_CUSTOM_WHERE, MonitorFormulaAndFunctionDataQualityMonitorOptions.JSON_PROPERTY_GROUP_BY_COLUMNS, - MonitorFormulaAndFunctionDataQualityMonitorOptions.JSON_PROPERTY_MODEL_TYPE_OVERRIDE + MonitorFormulaAndFunctionDataQualityMonitorOptions.JSON_PROPERTY_MODEL_TYPE_OVERRIDE, + MonitorFormulaAndFunctionDataQualityMonitorOptions.JSON_PROPERTY_SENSITIVITY }) @jakarta.annotation.Generated( value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") @@ -45,6 +46,9 @@ public class MonitorFormulaAndFunctionDataQualityMonitorOptions { public static final String JSON_PROPERTY_MODEL_TYPE_OVERRIDE = "model_type_override"; private MonitorFormulaAndFunctionDataQualityModelTypeOverride modelTypeOverride; + public static final String JSON_PROPERTY_SENSITIVITY = "sensitivity"; + private Double sensitivity; + public MonitorFormulaAndFunctionDataQualityMonitorOptions crontabOverride( String crontabOverride) { this.crontabOverride = crontabOverride; @@ -167,6 +171,29 @@ public void setModelTypeOverride( this.modelTypeOverride = modelTypeOverride; } + public MonitorFormulaAndFunctionDataQualityMonitorOptions sensitivity(Double sensitivity) { + this.sensitivity = sensitivity; + return this; + } + + /** + * 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. + * + * @return sensitivity + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_SENSITIVITY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Double getSensitivity() { + return sensitivity; + } + + public void setSensitivity(Double sensitivity) { + this.sensitivity = sensitivity; + } + /** * A container for additional, undeclared properties. This is a holder for any undeclared * properties as specified with the 'additionalProperties' keyword in the OAS document. @@ -240,6 +267,8 @@ public boolean equals(Object o) { && Objects.equals( this.modelTypeOverride, monitorFormulaAndFunctionDataQualityMonitorOptions.modelTypeOverride) + && Objects.equals( + this.sensitivity, monitorFormulaAndFunctionDataQualityMonitorOptions.sensitivity) && Objects.equals( this.additionalProperties, monitorFormulaAndFunctionDataQualityMonitorOptions.additionalProperties); @@ -253,6 +282,7 @@ public int hashCode() { customWhere, groupByColumns, modelTypeOverride, + sensitivity, additionalProperties); } @@ -265,6 +295,7 @@ public String toString() { sb.append(" customWhere: ").append(toIndentedString(customWhere)).append("\n"); sb.append(" groupByColumns: ").append(toIndentedString(groupByColumns)).append("\n"); sb.append(" modelTypeOverride: ").append(toIndentedString(modelTypeOverride)).append("\n"); + sb.append(" sensitivity: ").append(toIndentedString(sensitivity)).append("\n"); sb.append(" additionalProperties: ") .append(toIndentedString(additionalProperties)) .append("\n"); diff --git a/src/test/resources/cassettes/features/v1/Create_a_Data_Quality_monitor_with_sensitivity_returns_OK_response.freeze b/src/test/resources/cassettes/features/v1/Create_a_Data_Quality_monitor_with_sensitivity_returns_OK_response.freeze new file mode 100644 index 00000000000..49c672f4569 --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_Data_Quality_monitor_with_sensitivity_returns_OK_response.freeze @@ -0,0 +1 @@ +2026-07-31T16:36:50.561Z \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v1/Create_a_Data_Quality_monitor_with_sensitivity_returns_OK_response.json b/src/test/resources/cassettes/features/v1/Create_a_Data_Quality_monitor_with_sensitivity_returns_OK_response.json new file mode 100644 index 00000000000..32be45b9435 --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_Data_Quality_monitor_with_sensitivity_returns_OK_response.json @@ -0,0 +1,58 @@ +[ + { + "httpRequest": { + "body": { + "type": "JSON", + "json": "{\"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": {}, + "method": "POST", + "path": "/api/v1/monitor", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"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}}\n", + "headers": { + "Content-Type": [ + "application/json" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "3d2e27a9-1030-8598-573d-b8f518190d17" + }, + { + "httpRequest": { + "headers": {}, + "method": "DELETE", + "path": "/api/v1/monitor/310055951", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"deleted_monitor_id\":310055951}\n", + "headers": { + "Content-Type": [ + "application/json" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "71318a7d-99ec-2d28-4417-daae837b42a7" + } +] \ No newline at end of file diff --git a/src/test/resources/com/datadog/api/client/v1/api/monitors.feature b/src/test/resources/com/datadog/api/client/v1/api/monitors.feature index 2a34a879f75..49f446a95a4 100644 --- a/src/test/resources/com/datadog/api/client/v1/api/monitors.feature +++ b/src/test/resources/com/datadog/api/client/v1/api/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