From ea6466d7c4159bcd88016fe973b053c007c506a4 Mon Sep 17 00:00:00 2001 From: "ci.datadog-api-spec" Date: Fri, 15 May 2026 11:54:21 +0000 Subject: [PATCH] Regenerate client from commit afa2152 of spec repo --- .generator/schemas/v1/openapi.yaml | 33 +++ .../v1/monitors/CreateMonitor_2589528326.java | 53 ++++ ...ulaAndFunctionDataJobsQueryDefinition.java | 239 ++++++++++++++++++ ...itorFormulaAndFunctionQueryDefinition.java | 88 +++++++ .../api/client/v1/model/MonitorType.java | 4 +- ...ta_Jobs_monitor_returns_OK_response.freeze | 1 + ...Data_Jobs_monitor_returns_OK_response.json | 58 +++++ .../api/client/v1/api/monitors.feature | 9 + 8 files changed, 484 insertions(+), 1 deletion(-) create mode 100644 examples/v1/monitors/CreateMonitor_2589528326.java create mode 100644 src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionDataJobsQueryDefinition.java create mode 100644 src/test/resources/cassettes/features/v1/Create_a_Data_Jobs_monitor_returns_OK_response.freeze create mode 100644 src/test/resources/cassettes/features/v1/Create_a_Data_Jobs_monitor_returns_OK_response.json diff --git a/.generator/schemas/v1/openapi.yaml b/.generator/schemas/v1/openapi.yaml index 9466f691bd4..aa4e625e596 100644 --- a/.generator/schemas/v1/openapi.yaml +++ b/.generator/schemas/v1/openapi.yaml @@ -8067,6 +8067,36 @@ components: - data_source - query type: object + MonitorFormulaAndFunctionDataJobsQueryDefinition: + description: A formula and functions data jobs query. + properties: + job_type: + description: |- + The type of job being monitored. Valid values include: + `databricks.job`, `spark.application`, `airflow.dag`, + `dbt.job`, `dbt.model`, `dbt.test`, `glue.job`. + Custom job types are supported with the `custom.ol.` prefix. + example: "databricks.job" + type: string + jobs_query: + description: Filter expression used to select the jobs to monitor. + example: "job_name:smoke*" + type: string + name: + description: Name of the query for use in formulas. Must be `run_query`. + example: "run_query" + type: string + query_dialect: + description: |- + Query dialect for data jobs queries. Currently only `metric` is supported. + example: "metric" + type: string + required: + - name + - jobs_query + - job_type + - query_dialect + type: object MonitorFormulaAndFunctionDataQualityDataSource: description: Data source for data quality queries. enum: @@ -8373,6 +8403,7 @@ components: - $ref: "#/components/schemas/MonitorFormulaAndFunctionEventQueryDefinition" - $ref: "#/components/schemas/MonitorFormulaAndFunctionCostQueryDefinition" - $ref: "#/components/schemas/MonitorFormulaAndFunctionDataQualityQueryDefinition" + - $ref: "#/components/schemas/MonitorFormulaAndFunctionDataJobsQueryDefinition" - $ref: "#/components/schemas/MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition" - $ref: "#/components/schemas/MonitorFormulaAndFunctionAggregateFilteredQueryDefinition" MonitorFormulaAndFunctionReferenceTableColumn: @@ -9205,6 +9236,7 @@ components: - "cost alert" - "data-quality alert" - "network-path alert" + - "data-jobs alert" example: "query alert" type: string x-enum-varnames: @@ -9229,6 +9261,7 @@ components: - COST_ALERT - DATA_QUALITY_ALERT - NETWORK_PATH_ALERT + - DATA_JOBS_ALERT MonitorUpdateRequest: description: Object describing a monitor update request. properties: diff --git a/examples/v1/monitors/CreateMonitor_2589528326.java b/examples/v1/monitors/CreateMonitor_2589528326.java new file mode 100644 index 00000000000..3756a73716a --- /dev/null +++ b/examples/v1/monitors/CreateMonitor_2589528326.java @@ -0,0 +1,53 @@ +// Create a Data Jobs monitor 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.MonitorFormulaAndFunctionDataJobsQueryDefinition; +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_JOBS_ALERT) + .query( + """ +formula("failed_runs(run_query)").by(job_name,workspace_name).last(10d) > 0 +""") + .message("Data jobs alert triggered") + .tags(Arrays.asList("test:examplemonitor", "env:ci")) + .options( + new MonitorOptions() + .thresholds(new MonitorThresholds()) + .variables( + Collections.singletonList( + new MonitorFormulaAndFunctionQueryDefinition( + new MonitorFormulaAndFunctionDataJobsQueryDefinition() + .name("run_query") + .jobsQuery("job_name:*") + .jobType("databricks.job") + .queryDialect("metric"))))); + + 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/MonitorFormulaAndFunctionDataJobsQueryDefinition.java b/src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionDataJobsQueryDefinition.java new file mode 100644 index 00000000000..4db89afd6fd --- /dev/null +++ b/src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionDataJobsQueryDefinition.java @@ -0,0 +1,239 @@ +/* + * 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 2019-Present Datadog, Inc. + */ + +package com.datadog.api.client.v1.model; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +/** A formula and functions data jobs query. */ +@JsonPropertyOrder({ + MonitorFormulaAndFunctionDataJobsQueryDefinition.JSON_PROPERTY_JOB_TYPE, + MonitorFormulaAndFunctionDataJobsQueryDefinition.JSON_PROPERTY_JOBS_QUERY, + MonitorFormulaAndFunctionDataJobsQueryDefinition.JSON_PROPERTY_NAME, + MonitorFormulaAndFunctionDataJobsQueryDefinition.JSON_PROPERTY_QUERY_DIALECT +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class MonitorFormulaAndFunctionDataJobsQueryDefinition { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_JOB_TYPE = "job_type"; + private String jobType; + + public static final String JSON_PROPERTY_JOBS_QUERY = "jobs_query"; + private String jobsQuery; + + public static final String JSON_PROPERTY_NAME = "name"; + private String name; + + public static final String JSON_PROPERTY_QUERY_DIALECT = "query_dialect"; + private String queryDialect; + + public MonitorFormulaAndFunctionDataJobsQueryDefinition() {} + + @JsonCreator + public MonitorFormulaAndFunctionDataJobsQueryDefinition( + @JsonProperty(required = true, value = JSON_PROPERTY_JOB_TYPE) String jobType, + @JsonProperty(required = true, value = JSON_PROPERTY_JOBS_QUERY) String jobsQuery, + @JsonProperty(required = true, value = JSON_PROPERTY_NAME) String name, + @JsonProperty(required = true, value = JSON_PROPERTY_QUERY_DIALECT) String queryDialect) { + this.jobType = jobType; + this.jobsQuery = jobsQuery; + this.name = name; + this.queryDialect = queryDialect; + } + + public MonitorFormulaAndFunctionDataJobsQueryDefinition jobType(String jobType) { + this.jobType = jobType; + return this; + } + + /** + * The type of job being monitored. Valid values include: databricks.job, + * spark.application, airflow.dag, dbt.job, dbt.model + * , dbt.test, glue.job. Custom job types are supported with the + * custom.ol. prefix. + * + * @return jobType + */ + @JsonProperty(JSON_PROPERTY_JOB_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getJobType() { + return jobType; + } + + public void setJobType(String jobType) { + this.jobType = jobType; + } + + public MonitorFormulaAndFunctionDataJobsQueryDefinition jobsQuery(String jobsQuery) { + this.jobsQuery = jobsQuery; + return this; + } + + /** + * Filter expression used to select the jobs to monitor. + * + * @return jobsQuery + */ + @JsonProperty(JSON_PROPERTY_JOBS_QUERY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getJobsQuery() { + return jobsQuery; + } + + public void setJobsQuery(String jobsQuery) { + this.jobsQuery = jobsQuery; + } + + public MonitorFormulaAndFunctionDataJobsQueryDefinition name(String name) { + this.name = name; + return this; + } + + /** + * Name of the query for use in formulas. Must be run_query. + * + * @return name + */ + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public MonitorFormulaAndFunctionDataJobsQueryDefinition queryDialect(String queryDialect) { + this.queryDialect = queryDialect; + return this; + } + + /** + * Query dialect for data jobs queries. Currently only metric is supported. + * + * @return queryDialect + */ + @JsonProperty(JSON_PROPERTY_QUERY_DIALECT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getQueryDialect() { + return queryDialect; + } + + public void setQueryDialect(String queryDialect) { + this.queryDialect = queryDialect; + } + + /** + * A container for additional, undeclared properties. This is a holder for any undeclared + * properties as specified with the 'additionalProperties' keyword in the OAS document. + */ + private Map additionalProperties; + + /** + * Set the additional (undeclared) property with the specified name and value. If the property + * does not already exist, create it otherwise replace it. + * + * @param key The arbitrary key to set + * @param value The associated value + * @return MonitorFormulaAndFunctionDataJobsQueryDefinition + */ + @JsonAnySetter + public MonitorFormulaAndFunctionDataJobsQueryDefinition putAdditionalProperty( + String key, Object value) { + if (this.additionalProperties == null) { + this.additionalProperties = new HashMap(); + } + this.additionalProperties.put(key, value); + return this; + } + + /** + * Return the additional (undeclared) property. + * + * @return The additional properties + */ + @JsonAnyGetter + public Map getAdditionalProperties() { + return additionalProperties; + } + + /** + * Return the additional (undeclared) property with the specified name. + * + * @param key The arbitrary key to get + * @return The specific additional property for the given key + */ + public Object getAdditionalProperty(String key) { + if (this.additionalProperties == null) { + return null; + } + return this.additionalProperties.get(key); + } + + /** Return true if this MonitorFormulaAndFunctionDataJobsQueryDefinition object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MonitorFormulaAndFunctionDataJobsQueryDefinition + monitorFormulaAndFunctionDataJobsQueryDefinition = + (MonitorFormulaAndFunctionDataJobsQueryDefinition) o; + return Objects.equals(this.jobType, monitorFormulaAndFunctionDataJobsQueryDefinition.jobType) + && Objects.equals( + this.jobsQuery, monitorFormulaAndFunctionDataJobsQueryDefinition.jobsQuery) + && Objects.equals(this.name, monitorFormulaAndFunctionDataJobsQueryDefinition.name) + && Objects.equals( + this.queryDialect, monitorFormulaAndFunctionDataJobsQueryDefinition.queryDialect) + && Objects.equals( + this.additionalProperties, + monitorFormulaAndFunctionDataJobsQueryDefinition.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(jobType, jobsQuery, name, queryDialect, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class MonitorFormulaAndFunctionDataJobsQueryDefinition {\n"); + sb.append(" jobType: ").append(toIndentedString(jobType)).append("\n"); + sb.append(" jobsQuery: ").append(toIndentedString(jobsQuery)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" queryDialect: ").append(toIndentedString(queryDialect)).append("\n"); + sb.append(" additionalProperties: ") + .append(toIndentedString(additionalProperties)) + .append("\n"); + sb.append('}'); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} diff --git a/src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionQueryDefinition.java b/src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionQueryDefinition.java index 140eb085019..5901d6beb40 100644 --- a/src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionQueryDefinition.java +++ b/src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionQueryDefinition.java @@ -249,6 +249,60 @@ public MonitorFormulaAndFunctionQueryDefinition deserialize( e); } + // deserialize MonitorFormulaAndFunctionDataJobsQueryDefinition + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (MonitorFormulaAndFunctionDataJobsQueryDefinition.class.equals(Integer.class) + || MonitorFormulaAndFunctionDataJobsQueryDefinition.class.equals(Long.class) + || MonitorFormulaAndFunctionDataJobsQueryDefinition.class.equals(Float.class) + || MonitorFormulaAndFunctionDataJobsQueryDefinition.class.equals(Double.class) + || MonitorFormulaAndFunctionDataJobsQueryDefinition.class.equals(Boolean.class) + || MonitorFormulaAndFunctionDataJobsQueryDefinition.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((MonitorFormulaAndFunctionDataJobsQueryDefinition.class.equals(Integer.class) + || MonitorFormulaAndFunctionDataJobsQueryDefinition.class.equals( + Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((MonitorFormulaAndFunctionDataJobsQueryDefinition.class.equals(Float.class) + || MonitorFormulaAndFunctionDataJobsQueryDefinition.class.equals( + Double.class)) + && (token == JsonToken.VALUE_NUMBER_FLOAT + || token == JsonToken.VALUE_NUMBER_INT)); + attemptParsing |= + (MonitorFormulaAndFunctionDataJobsQueryDefinition.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (MonitorFormulaAndFunctionDataJobsQueryDefinition.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + tmp = + tree.traverse(jp.getCodec()) + .readValueAs(MonitorFormulaAndFunctionDataJobsQueryDefinition.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + if (!((MonitorFormulaAndFunctionDataJobsQueryDefinition) tmp).unparsed) { + deserialized = tmp; + match++; + } + log.log( + Level.FINER, + "Input data matches schema 'MonitorFormulaAndFunctionDataJobsQueryDefinition'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log( + Level.FINER, + "Input data does not match schema 'MonitorFormulaAndFunctionDataJobsQueryDefinition'", + e); + } + // deserialize MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition try { boolean attemptParsing = true; @@ -418,6 +472,12 @@ public MonitorFormulaAndFunctionQueryDefinition( setActualInstance(o); } + public MonitorFormulaAndFunctionQueryDefinition( + MonitorFormulaAndFunctionDataJobsQueryDefinition o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + public MonitorFormulaAndFunctionQueryDefinition( MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition o) { super("oneOf", Boolean.FALSE); @@ -440,6 +500,9 @@ public MonitorFormulaAndFunctionQueryDefinition( schemas.put( "MonitorFormulaAndFunctionDataQualityQueryDefinition", new GenericType() {}); + schemas.put( + "MonitorFormulaAndFunctionDataJobsQueryDefinition", + new GenericType() {}); schemas.put( "MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition", new GenericType() {}); @@ -460,6 +523,7 @@ public Map getSchemas() { * against the oneOf child schemas: MonitorFormulaAndFunctionEventQueryDefinition, * MonitorFormulaAndFunctionCostQueryDefinition, * MonitorFormulaAndFunctionDataQualityQueryDefinition, + * MonitorFormulaAndFunctionDataJobsQueryDefinition, * MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition, * MonitorFormulaAndFunctionAggregateFilteredQueryDefinition * @@ -485,6 +549,13 @@ public void setActualInstance(Object instance) { super.setActualInstance(instance); return; } + if (JSON.isInstanceOf( + MonitorFormulaAndFunctionDataJobsQueryDefinition.class, + instance, + new HashSet>())) { + super.setActualInstance(instance); + return; + } if (JSON.isInstanceOf( MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition.class, instance, @@ -508,6 +579,7 @@ public void setActualInstance(Object instance) { "Invalid instance type. Must be MonitorFormulaAndFunctionEventQueryDefinition," + " MonitorFormulaAndFunctionCostQueryDefinition," + " MonitorFormulaAndFunctionDataQualityQueryDefinition," + + " MonitorFormulaAndFunctionDataJobsQueryDefinition," + " MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition," + " MonitorFormulaAndFunctionAggregateFilteredQueryDefinition"); } @@ -516,12 +588,14 @@ public void setActualInstance(Object instance) { * Get the actual instance, which can be the following: * MonitorFormulaAndFunctionEventQueryDefinition, MonitorFormulaAndFunctionCostQueryDefinition, * MonitorFormulaAndFunctionDataQualityQueryDefinition, + * MonitorFormulaAndFunctionDataJobsQueryDefinition, * MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition, * MonitorFormulaAndFunctionAggregateFilteredQueryDefinition * * @return The actual instance (MonitorFormulaAndFunctionEventQueryDefinition, * MonitorFormulaAndFunctionCostQueryDefinition, * MonitorFormulaAndFunctionDataQualityQueryDefinition, + * MonitorFormulaAndFunctionDataJobsQueryDefinition, * MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition, * MonitorFormulaAndFunctionAggregateFilteredQueryDefinition) */ @@ -572,6 +646,20 @@ public Object getActualInstance() { return (MonitorFormulaAndFunctionDataQualityQueryDefinition) super.getActualInstance(); } + /** + * Get the actual instance of `MonitorFormulaAndFunctionDataJobsQueryDefinition`. If the actual + * instance is not `MonitorFormulaAndFunctionDataJobsQueryDefinition`, the ClassCastException will + * be thrown. + * + * @return The actual instance of `MonitorFormulaAndFunctionDataJobsQueryDefinition` + * @throws ClassCastException if the instance is not + * `MonitorFormulaAndFunctionDataJobsQueryDefinition` + */ + public MonitorFormulaAndFunctionDataJobsQueryDefinition + getMonitorFormulaAndFunctionDataJobsQueryDefinition() throws ClassCastException { + return (MonitorFormulaAndFunctionDataJobsQueryDefinition) super.getActualInstance(); + } + /** * Get the actual instance of `MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition`. If the * actual instance is not `MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition`, the diff --git a/src/main/java/com/datadog/api/client/v1/model/MonitorType.java b/src/main/java/com/datadog/api/client/v1/model/MonitorType.java index 06b258100fb..5e9087b8f15 100644 --- a/src/main/java/com/datadog/api/client/v1/model/MonitorType.java +++ b/src/main/java/com/datadog/api/client/v1/model/MonitorType.java @@ -48,7 +48,8 @@ public class MonitorType extends ModelEnum { "network-performance alert", "cost alert", "data-quality alert", - "network-path alert")); + "network-path alert", + "data-jobs alert")); public static final MonitorType COMPOSITE = new MonitorType("composite"); public static final MonitorType EVENT_ALERT = new MonitorType("event alert"); @@ -73,6 +74,7 @@ public class MonitorType extends ModelEnum { public static final MonitorType COST_ALERT = new MonitorType("cost alert"); public static final MonitorType DATA_QUALITY_ALERT = new MonitorType("data-quality alert"); public static final MonitorType NETWORK_PATH_ALERT = new MonitorType("network-path alert"); + public static final MonitorType DATA_JOBS_ALERT = new MonitorType("data-jobs alert"); MonitorType(String value) { super(value, allowedValues); diff --git a/src/test/resources/cassettes/features/v1/Create_a_Data_Jobs_monitor_returns_OK_response.freeze b/src/test/resources/cassettes/features/v1/Create_a_Data_Jobs_monitor_returns_OK_response.freeze new file mode 100644 index 00000000000..1665e973daf --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_Data_Jobs_monitor_returns_OK_response.freeze @@ -0,0 +1 @@ +2026-05-14T10:58:54.153Z \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v1/Create_a_Data_Jobs_monitor_returns_OK_response.json b/src/test/resources/cassettes/features/v1/Create_a_Data_Jobs_monitor_returns_OK_response.json new file mode 100644 index 00000000000..88a825ad3b8 --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_Data_Jobs_monitor_returns_OK_response.json @@ -0,0 +1,58 @@ +[ + { + "httpRequest": { + "body": { + "type": "JSON", + "json": "{\"message\": \"Data jobs alert triggered\", \"name\": \"Test-Create_a_Data_Jobs_monitor_returns_OK_response-1778756334\", \"options\": {\"thresholds\": {\"critical\": 0}, \"variables\": [{\"job_type\": \"databricks.job\", \"jobs_query\": \"job_name:*\", \"name\": \"run_query\", \"query_dialect\": \"metric\"}]}, \"query\": \"formula(\\\"failed_runs(run_query)\\\").by(job_name,workspace_name).last(10d) > 0\", \"tags\": [\"test:testcreateadatajobsmonitorreturnsokresponse1778756334\", \"env:ci\"], \"type\": \"data-jobs alert\"}" + }, + "headers": {}, + "method": "POST", + "path": "/api/v1/monitor", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"id\":283063470,\"org_id\":321813,\"type\":\"data-jobs alert\",\"name\":\"Test-Create_a_Data_Jobs_monitor_returns_OK_response-1778756334\",\"message\":\"Data jobs alert triggered\",\"tags\":[\"test:testcreateadatajobsmonitorreturnsokresponse1778756334\",\"env:ci\"],\"query\":\"formula(\\\"failed_runs(run_query)\\\").by(job_name,workspace_name).last(10d) > 0\",\"options\":{\"thresholds\":{\"critical\":0.0},\"variables\":[{\"job_type\":\"databricks.job\",\"jobs_query\":\"job_name:*\",\"name\":\"run_query\",\"query_dialect\":\"metric\"}],\"notify_no_data\":false,\"notify_audit\":false,\"new_host_delay\":300,\"include_tags\":true,\"silenced\":{}},\"multi\":true,\"created_at\":1778756334000,\"created\":\"2026-05-14T10:58:54.236230+00:00\",\"modified\":\"2026-05-14T10:58:54.236230+00:00\",\"deleted\":null,\"priority\":null,\"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": "5857ee38-99e2-c44f-4e48-6dccc42f5278" + }, + { + "httpRequest": { + "headers": {}, + "method": "DELETE", + "path": "/api/v1/monitor/283063470", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"deleted_monitor_id\":283063470}\n", + "headers": { + "Content-Type": [ + "application/json" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "c4dd945f-ac34-db64-2058-629ead8011d3" + } +] \ 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 63bb9f16b9a..f7fd40f4ede 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 @@ -42,6 +42,15 @@ Feature: Monitors When the request is sent Then the response status is 200 OK + @team:DataDog/monitor-app + Scenario: Create a Data Jobs monitor returns "OK" response + Given new "CreateMonitor" request + And body with value {"name": "{{ unique }}", "type": "data-jobs alert", "query": "formula(\"failed_runs(run_query)\").by(job_name,workspace_name).last(10d) > 0", "message": "Data jobs alert triggered", "tags": ["test:{{ unique_lower_alnum }}", "env:ci"], "options": {"thresholds": {"critical": 0}, "variables": [{"name": "run_query", "jobs_query": "job_name:*", "job_type": "databricks.job", "query_dialect": "metric"}]}} + 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-jobs alert" + @team:DataDog/monitor-app Scenario: Create a Data Quality monitor returns "OK" response Given new "CreateMonitor" request