From 34d411ebb250790451e6d3dfbdd2efcdb4625239 Mon Sep 17 00:00:00 2001 From: "ci.datadog-api-spec" Date: Mon, 2 Nov 2026 20:56:59 +0000 Subject: [PATCH] Regenerate client from commit 70b2e6a of spec repo --- .generator/schemas/v1/openapi.yaml | 31 ++- .../v1/monitors/CreateMonitor_2419923374.java | 59 +++++ ...nitorFormulaAndFunctionCostDataSource.java | 4 +- ...rmulaAndFunctionMetricQueryDataSource.java | 62 +++++ ...rmulaAndFunctionMetricQueryDefinition.java | 249 ++++++++++++++++++ ...itorFormulaAndFunctionQueryDefinition.java | 93 ++++++- .../api/client/v1/api/monitors.feature | 9 + .../test-runner-data/manifest.json | 7 + ...-formula-variable-returns-ok-response.json | 47 ++++ .../test-server-data/v1/monitors.json | 75 ++++++ 10 files changed, 627 insertions(+), 9 deletions(-) create mode 100644 examples/v1/monitors/CreateMonitor_2419923374.java create mode 100644 src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionMetricQueryDataSource.java create mode 100644 src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionMetricQueryDefinition.java create mode 100644 src/test/resources/generated-test/test-runner-data/v1/monitors/create-a-monitor-with-a-metrics-formula-variable-returns-ok-response.json diff --git a/.generator/schemas/v1/openapi.yaml b/.generator/schemas/v1/openapi.yaml index f61f0719ac5..a40d500d9ef 100644 --- a/.generator/schemas/v1/openapi.yaml +++ b/.generator/schemas/v1/openapi.yaml @@ -9658,13 +9658,11 @@ components: MonitorFormulaAndFunctionCostDataSource: description: Data source for cost queries. enum: - - metrics - cloud_cost - datadog_usage example: "cloud_cost" type: string x-enum-varnames: - - METRICS - CLOUD_COST - DATADOG_USAGE MonitorFormulaAndFunctionCostQueryDefinition: @@ -10106,6 +10104,34 @@ components: - DATABASE_QUERIES - NETWORK - NETWORK_PATH + MonitorFormulaAndFunctionMetricQueryDataSource: + description: Data source for metrics queries. + enum: + - metrics + example: "metrics" + type: string + x-enum-varnames: + - METRICS + MonitorFormulaAndFunctionMetricQueryDefinition: + description: A formula and functions metrics query. The `aggregator` field is required for `cost alert` monitors and not allowed for metric or query alert monitors. + properties: + aggregator: + $ref: "#/components/schemas/MonitorFormulaAndFunctionCostAggregator" + data_source: + $ref: "#/components/schemas/MonitorFormulaAndFunctionMetricQueryDataSource" + name: + description: Name of the query for use in formulas. + example: "query1" + type: string + query: + description: The metrics query definition. + example: "avg:system.cpu.user{*}" + type: string + required: + - name + - data_source + - query + type: object MonitorFormulaAndFunctionMetricsAggregator: description: Aggregator for metrics queries. enum: @@ -10175,6 +10201,7 @@ components: - $ref: "#/components/schemas/MonitorFormulaAndFunctionDataJobsQueryDefinition" - $ref: "#/components/schemas/MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition" - $ref: "#/components/schemas/MonitorFormulaAndFunctionAggregateFilteredQueryDefinition" + - $ref: "#/components/schemas/MonitorFormulaAndFunctionMetricQueryDefinition" MonitorFormulaAndFunctionReferenceTableColumn: additionalProperties: false description: A column definition for reference table queries. diff --git a/examples/v1/monitors/CreateMonitor_2419923374.java b/examples/v1/monitors/CreateMonitor_2419923374.java new file mode 100644 index 00000000000..7ca67a7891a --- /dev/null +++ b/examples/v1/monitors/CreateMonitor_2419923374.java @@ -0,0 +1,59 @@ +// Create a monitor with a metrics formula variable 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.MonitorFormulaAndFunctionMetricQueryDataSource; +import com.datadog.api.client.v1.model.MonitorFormulaAndFunctionMetricQueryDefinition; +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(); + defaultClient.setAccessToken(System.getenv("DD_BEARER_TOKEN")); + MonitorsApi apiInstance = new MonitorsApi(defaultClient); + + Monitor body = + new Monitor() + .name("Example-Monitor") + .type(MonitorType.QUERY_ALERT) + .query(""" +formula("query1").rollup("avg").last("5m") > threshold +""") + .message("some message Notify: @hipchat-channel") + .tags(Arrays.asList("test:examplemonitor", "env:ci")) + .options( + new MonitorOptions() + .thresholds( + new MonitorThresholds() + .criticalQuery( + """ +formula("query1").rollup("p99").last("1w").multiplier(1.5) +""")) + .variables( + Collections.singletonList( + new MonitorFormulaAndFunctionQueryDefinition( + new MonitorFormulaAndFunctionMetricQueryDefinition() + .name("query1") + .dataSource( + MonitorFormulaAndFunctionMetricQueryDataSource.METRICS) + .query("avg:system.cpu.user{*}"))))); + + 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/MonitorFormulaAndFunctionCostDataSource.java b/src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionCostDataSource.java index 8831a794964..b3f03bffa90 100644 --- a/src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionCostDataSource.java +++ b/src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionCostDataSource.java @@ -26,10 +26,8 @@ public class MonitorFormulaAndFunctionCostDataSource extends ModelEnum { private static final Set allowedValues = - new HashSet(Arrays.asList("metrics", "cloud_cost", "datadog_usage")); + new HashSet(Arrays.asList("cloud_cost", "datadog_usage")); - public static final MonitorFormulaAndFunctionCostDataSource METRICS = - new MonitorFormulaAndFunctionCostDataSource("metrics"); public static final MonitorFormulaAndFunctionCostDataSource CLOUD_COST = new MonitorFormulaAndFunctionCostDataSource("cloud_cost"); public static final MonitorFormulaAndFunctionCostDataSource DATADOG_USAGE = diff --git a/src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionMetricQueryDataSource.java b/src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionMetricQueryDataSource.java new file mode 100644 index 00000000000..de37cc0a6ce --- /dev/null +++ b/src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionMetricQueryDataSource.java @@ -0,0 +1,62 @@ +/* + * 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.datadog.api.client.ModelEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** Data source for metrics queries. */ +@JsonSerialize( + using = + MonitorFormulaAndFunctionMetricQueryDataSource + .MonitorFormulaAndFunctionMetricQueryDataSourceSerializer.class) +public class MonitorFormulaAndFunctionMetricQueryDataSource extends ModelEnum { + + private static final Set allowedValues = new HashSet(Arrays.asList("metrics")); + + public static final MonitorFormulaAndFunctionMetricQueryDataSource METRICS = + new MonitorFormulaAndFunctionMetricQueryDataSource("metrics"); + + MonitorFormulaAndFunctionMetricQueryDataSource(String value) { + super(value, allowedValues); + } + + public static class MonitorFormulaAndFunctionMetricQueryDataSourceSerializer + extends StdSerializer { + public MonitorFormulaAndFunctionMetricQueryDataSourceSerializer( + Class t) { + super(t); + } + + public MonitorFormulaAndFunctionMetricQueryDataSourceSerializer() { + this(null); + } + + @Override + public void serialize( + MonitorFormulaAndFunctionMetricQueryDataSource value, + JsonGenerator jgen, + SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static MonitorFormulaAndFunctionMetricQueryDataSource fromValue(String value) { + return new MonitorFormulaAndFunctionMetricQueryDataSource(value); + } +} diff --git a/src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionMetricQueryDefinition.java b/src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionMetricQueryDefinition.java new file mode 100644 index 00000000000..fcab9f83274 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v1/model/MonitorFormulaAndFunctionMetricQueryDefinition.java @@ -0,0 +1,249 @@ +/* + * 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 metrics query. The aggregator field is required for + * cost alert monitors and not allowed for metric or query alert monitors. + */ +@JsonPropertyOrder({ + MonitorFormulaAndFunctionMetricQueryDefinition.JSON_PROPERTY_AGGREGATOR, + MonitorFormulaAndFunctionMetricQueryDefinition.JSON_PROPERTY_DATA_SOURCE, + MonitorFormulaAndFunctionMetricQueryDefinition.JSON_PROPERTY_NAME, + MonitorFormulaAndFunctionMetricQueryDefinition.JSON_PROPERTY_QUERY +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class MonitorFormulaAndFunctionMetricQueryDefinition { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_AGGREGATOR = "aggregator"; + private MonitorFormulaAndFunctionCostAggregator aggregator; + + public static final String JSON_PROPERTY_DATA_SOURCE = "data_source"; + private MonitorFormulaAndFunctionMetricQueryDataSource dataSource; + + public static final String JSON_PROPERTY_NAME = "name"; + private String name; + + public static final String JSON_PROPERTY_QUERY = "query"; + private String query; + + public MonitorFormulaAndFunctionMetricQueryDefinition() {} + + @JsonCreator + public MonitorFormulaAndFunctionMetricQueryDefinition( + @JsonProperty(required = true, value = JSON_PROPERTY_DATA_SOURCE) + MonitorFormulaAndFunctionMetricQueryDataSource dataSource, + @JsonProperty(required = true, value = JSON_PROPERTY_NAME) String name, + @JsonProperty(required = true, value = JSON_PROPERTY_QUERY) String query) { + this.dataSource = dataSource; + this.unparsed |= !dataSource.isValid(); + this.name = name; + this.query = query; + } + + public MonitorFormulaAndFunctionMetricQueryDefinition aggregator( + MonitorFormulaAndFunctionCostAggregator aggregator) { + this.aggregator = aggregator; + this.unparsed |= !aggregator.isValid(); + return this; + } + + /** + * Aggregation methods for metric queries. + * + * @return aggregator + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_AGGREGATOR) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public MonitorFormulaAndFunctionCostAggregator getAggregator() { + return aggregator; + } + + public void setAggregator(MonitorFormulaAndFunctionCostAggregator aggregator) { + if (!aggregator.isValid()) { + this.unparsed = true; + } + this.aggregator = aggregator; + } + + public MonitorFormulaAndFunctionMetricQueryDefinition dataSource( + MonitorFormulaAndFunctionMetricQueryDataSource dataSource) { + this.dataSource = dataSource; + this.unparsed |= !dataSource.isValid(); + return this; + } + + /** + * Data source for metrics queries. + * + * @return dataSource + */ + @JsonProperty(JSON_PROPERTY_DATA_SOURCE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public MonitorFormulaAndFunctionMetricQueryDataSource getDataSource() { + return dataSource; + } + + public void setDataSource(MonitorFormulaAndFunctionMetricQueryDataSource dataSource) { + if (!dataSource.isValid()) { + this.unparsed = true; + } + this.dataSource = dataSource; + } + + public MonitorFormulaAndFunctionMetricQueryDefinition name(String name) { + this.name = name; + return this; + } + + /** + * Name of the query for use in formulas. + * + * @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 MonitorFormulaAndFunctionMetricQueryDefinition query(String query) { + this.query = query; + return this; + } + + /** + * The metrics query definition. + * + * @return query + */ + @JsonProperty(JSON_PROPERTY_QUERY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getQuery() { + return query; + } + + public void setQuery(String query) { + this.query = query; + } + + /** + * 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 MonitorFormulaAndFunctionMetricQueryDefinition + */ + @JsonAnySetter + public MonitorFormulaAndFunctionMetricQueryDefinition 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 MonitorFormulaAndFunctionMetricQueryDefinition object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MonitorFormulaAndFunctionMetricQueryDefinition monitorFormulaAndFunctionMetricQueryDefinition = + (MonitorFormulaAndFunctionMetricQueryDefinition) o; + return Objects.equals( + this.aggregator, monitorFormulaAndFunctionMetricQueryDefinition.aggregator) + && Objects.equals( + this.dataSource, monitorFormulaAndFunctionMetricQueryDefinition.dataSource) + && Objects.equals(this.name, monitorFormulaAndFunctionMetricQueryDefinition.name) + && Objects.equals(this.query, monitorFormulaAndFunctionMetricQueryDefinition.query) + && Objects.equals( + this.additionalProperties, + monitorFormulaAndFunctionMetricQueryDefinition.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(aggregator, dataSource, name, query, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class MonitorFormulaAndFunctionMetricQueryDefinition {\n"); + sb.append(" aggregator: ").append(toIndentedString(aggregator)).append("\n"); + sb.append(" dataSource: ").append(toIndentedString(dataSource)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" query: ").append(toIndentedString(query)).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 5901d6beb40..5329143ba5d 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 @@ -426,6 +426,59 @@ public MonitorFormulaAndFunctionQueryDefinition deserialize( e); } + // deserialize MonitorFormulaAndFunctionMetricQueryDefinition + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (MonitorFormulaAndFunctionMetricQueryDefinition.class.equals(Integer.class) + || MonitorFormulaAndFunctionMetricQueryDefinition.class.equals(Long.class) + || MonitorFormulaAndFunctionMetricQueryDefinition.class.equals(Float.class) + || MonitorFormulaAndFunctionMetricQueryDefinition.class.equals(Double.class) + || MonitorFormulaAndFunctionMetricQueryDefinition.class.equals(Boolean.class) + || MonitorFormulaAndFunctionMetricQueryDefinition.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((MonitorFormulaAndFunctionMetricQueryDefinition.class.equals(Integer.class) + || MonitorFormulaAndFunctionMetricQueryDefinition.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((MonitorFormulaAndFunctionMetricQueryDefinition.class.equals(Float.class) + || MonitorFormulaAndFunctionMetricQueryDefinition.class.equals( + Double.class)) + && (token == JsonToken.VALUE_NUMBER_FLOAT + || token == JsonToken.VALUE_NUMBER_INT)); + attemptParsing |= + (MonitorFormulaAndFunctionMetricQueryDefinition.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (MonitorFormulaAndFunctionMetricQueryDefinition.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + tmp = + tree.traverse(jp.getCodec()) + .readValueAs(MonitorFormulaAndFunctionMetricQueryDefinition.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 (!((MonitorFormulaAndFunctionMetricQueryDefinition) tmp).unparsed) { + deserialized = tmp; + match++; + } + log.log( + Level.FINER, + "Input data matches schema 'MonitorFormulaAndFunctionMetricQueryDefinition'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log( + Level.FINER, + "Input data does not match schema 'MonitorFormulaAndFunctionMetricQueryDefinition'", + e); + } + MonitorFormulaAndFunctionQueryDefinition ret = new MonitorFormulaAndFunctionQueryDefinition(); if (match == 1) { ret.setActualInstance(deserialized); @@ -490,6 +543,12 @@ public MonitorFormulaAndFunctionQueryDefinition( setActualInstance(o); } + public MonitorFormulaAndFunctionQueryDefinition( + MonitorFormulaAndFunctionMetricQueryDefinition o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + static { schemas.put( "MonitorFormulaAndFunctionEventQueryDefinition", @@ -509,6 +568,9 @@ public MonitorFormulaAndFunctionQueryDefinition( schemas.put( "MonitorFormulaAndFunctionAggregateFilteredQueryDefinition", new GenericType() {}); + schemas.put( + "MonitorFormulaAndFunctionMetricQueryDefinition", + new GenericType() {}); JSON.registerDescendants( MonitorFormulaAndFunctionQueryDefinition.class, Collections.unmodifiableMap(schemas)); } @@ -525,7 +587,8 @@ public Map getSchemas() { * MonitorFormulaAndFunctionDataQualityQueryDefinition, * MonitorFormulaAndFunctionDataJobsQueryDefinition, * MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition, - * MonitorFormulaAndFunctionAggregateFilteredQueryDefinition + * MonitorFormulaAndFunctionAggregateFilteredQueryDefinition, + * MonitorFormulaAndFunctionMetricQueryDefinition * *

It could be an instance of the 'oneOf' schemas. The oneOf child schemas may themselves be a * composed schema (allOf, anyOf, oneOf). @@ -570,6 +633,11 @@ public void setActualInstance(Object instance) { super.setActualInstance(instance); return; } + if (JSON.isInstanceOf( + MonitorFormulaAndFunctionMetricQueryDefinition.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } if (JSON.isInstanceOf(UnparsedObject.class, instance, new HashSet>())) { super.setActualInstance(instance); @@ -581,7 +649,8 @@ public void setActualInstance(Object instance) { + " MonitorFormulaAndFunctionDataQualityQueryDefinition," + " MonitorFormulaAndFunctionDataJobsQueryDefinition," + " MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition," - + " MonitorFormulaAndFunctionAggregateFilteredQueryDefinition"); + + " MonitorFormulaAndFunctionAggregateFilteredQueryDefinition," + + " MonitorFormulaAndFunctionMetricQueryDefinition"); } /** @@ -590,14 +659,16 @@ public void setActualInstance(Object instance) { * MonitorFormulaAndFunctionDataQualityQueryDefinition, * MonitorFormulaAndFunctionDataJobsQueryDefinition, * MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition, - * MonitorFormulaAndFunctionAggregateFilteredQueryDefinition + * MonitorFormulaAndFunctionAggregateFilteredQueryDefinition, + * MonitorFormulaAndFunctionMetricQueryDefinition * * @return The actual instance (MonitorFormulaAndFunctionEventQueryDefinition, * MonitorFormulaAndFunctionCostQueryDefinition, * MonitorFormulaAndFunctionDataQualityQueryDefinition, * MonitorFormulaAndFunctionDataJobsQueryDefinition, * MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition, - * MonitorFormulaAndFunctionAggregateFilteredQueryDefinition) + * MonitorFormulaAndFunctionAggregateFilteredQueryDefinition, + * MonitorFormulaAndFunctionMetricQueryDefinition) */ @Override public Object getActualInstance() { @@ -687,4 +758,18 @@ public Object getActualInstance() { getMonitorFormulaAndFunctionAggregateFilteredQueryDefinition() throws ClassCastException { return (MonitorFormulaAndFunctionAggregateFilteredQueryDefinition) super.getActualInstance(); } + + /** + * Get the actual instance of `MonitorFormulaAndFunctionMetricQueryDefinition`. If the actual + * instance is not `MonitorFormulaAndFunctionMetricQueryDefinition`, the ClassCastException will + * be thrown. + * + * @return The actual instance of `MonitorFormulaAndFunctionMetricQueryDefinition` + * @throws ClassCastException if the instance is not + * `MonitorFormulaAndFunctionMetricQueryDefinition` + */ + public MonitorFormulaAndFunctionMetricQueryDefinition + getMonitorFormulaAndFunctionMetricQueryDefinition() throws ClassCastException { + return (MonitorFormulaAndFunctionMetricQueryDefinition) super.getActualInstance(); + } } 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 fa6affa0f63..e540752e8b7 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 @@ -183,6 +183,15 @@ Feature: Monitors And the response "type" is equal to "log alert" And the response "query" is equal to "logs(\"service:foo AND type:error\").index(\"main\").rollup(\"count\").by(\"source\").last(\"5m\") > 2" + @team:ddoghq/monitor-app + Scenario: Create a monitor with a metrics formula variable returns "OK" response + Given new "CreateMonitor" request + And body with value {"name": "{{ unique }}", "type": "query alert", "query": "formula(\"query1\").rollup(\"avg\").last(\"5m\") > threshold", "message": "some message Notify: @hipchat-channel", "tags": ["test:{{ unique_lower_alnum }}", "env:ci"], "options": {"thresholds": {"critical_query": "formula(\"query1\").rollup(\"p99\").last(\"1w\").multiplier(1.5)"}, "variables": [{"name": "query1", "data_source": "metrics", "query": "avg:system.cpu.user{*}"}]}} + When the request is sent + Then the response status is 200 OK + And the response "options.variables[0].data_source" is equal to "metrics" + And the response "options.variables[0].name" is equal to "query1" + @team:ddoghq/monitor-app Scenario: Create a monitor with aggregate augmented query variables returns "OK" response Given new "CreateMonitor" request diff --git a/src/test/resources/generated-test/test-runner-data/manifest.json b/src/test/resources/generated-test/test-runner-data/manifest.json index 79334fa3a43..f90013113ea 100644 --- a/src/test/resources/generated-test/test-runner-data/manifest.json +++ b/src/test/resources/generated-test/test-runner-data/manifest.json @@ -1519,6 +1519,13 @@ "scenario": "Create a monitor returns \"OK\" response", "version": "v1" }, + { + "feature": "Monitors", + "feature_file": "../../com/datadog/api/client/v1/api/monitors.feature", + "file": "v1/monitors/create-a-monitor-with-a-metrics-formula-variable-returns-ok-response.json", + "scenario": "Create a monitor with a metrics formula variable returns \"OK\" response", + "version": "v1" + }, { "feature": "Monitors", "feature_file": "../../com/datadog/api/client/v1/api/monitors.feature", diff --git a/src/test/resources/generated-test/test-runner-data/v1/monitors/create-a-monitor-with-a-metrics-formula-variable-returns-ok-response.json b/src/test/resources/generated-test/test-runner-data/v1/monitors/create-a-monitor-with-a-metrics-formula-variable-returns-ok-response.json new file mode 100644 index 00000000000..151bac9cc19 --- /dev/null +++ b/src/test/resources/generated-test/test-runner-data/v1/monitors/create-a-monitor-with-a-metrics-formula-variable-returns-ok-response.json @@ -0,0 +1,47 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Create a monitor with a metrics formula variable returns \"OK\" response", + "operation_id": "CreateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "inline", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "{{ unique }}", + "options": { + "thresholds": { + "critical_query": "formula(\"query1\").rollup(\"p99\").last(\"1w\").multiplier(1.5)" + }, + "variables": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*}" + } + ] + }, + "query": "formula(\"query1\").rollup(\"avg\").last(\"5m\") > threshold", + "tags": [ + "test:{{ unique_lower_alnum }}", + "env:ci" + ], + "type": "query alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor" + }, + "scenario": "Create a monitor with a metrics formula variable returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/src/test/resources/generated-test/test-server-data/v1/monitors.json b/src/test/resources/generated-test/test-server-data/v1/monitors.json index 67cf00bca5a..e057021314a 100644 --- a/src/test/resources/generated-test/test-server-data/v1/monitors.json +++ b/src/test/resources/generated-test/test-server-data/v1/monitors.json @@ -1356,6 +1356,81 @@ "scenario": "Create a monitor returns \"OK\" response", "version": "v1" }, + { + "feature": "Monitors", + "frozen_at": "2026-11-02T16:34:19.974Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Test-Create_a_monitor_with_a_metrics_formula_variable_returns_OK_response-1793637259", + "options": { + "thresholds": { + "critical_query": "formula(\"query1\").rollup(\"p99\").last(\"1w\").multiplier(1.5)" + }, + "variables": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*}" + } + ] + }, + "query": "formula(\"query1\").rollup(\"avg\").last(\"5m\") > threshold", + "tags": [ + "test:testcreateamonitorwithametricsformulavariablereturnsokresponse1793637259", + "env:ci" + ], + "type": "query alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":339841166,\"org_id\":321813,\"type\":\"metric alert\",\"name\":\"Test-Create_a_monitor_with_a_metrics_formula_variable_returns_OK_response-1793637259\",\"message\":\"some message Notify: @hipchat-channel\",\"tags\":[\"test:testcreateamonitorwithametricsformulavariablereturnsokresponse1793637259\",\"env:ci\"],\"query\":\"formula(\\\"query1\\\").rollup(\\\"avg\\\").last(\\\"5m\\\") > threshold\",\"options\":{\"thresholds\":{\"critical_query\":\"formula(\\\"query1\\\").rollup(\\\"p99\\\").last(\\\"1w\\\").multiplier(1.5)\"},\"variables\":[{\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{*}\"}],\"notify_no_data\":false,\"notify_audit\":false,\"new_host_delay\":300,\"include_tags\":true,\"silenced\":{}},\"multi\":false,\"created_at\":1793637260000,\"created\":\"2026-11-02T16:34:20.286684+00:00\",\"modified\":\"2026-11-02T16:34:20.286684+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\":\"Jasmine Zhang\",\"handle\":\"jasmine.zhang@datadoghq.com\",\"email\":\"jasmine.zhang@datadoghq.com\",\"id\":72175821}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/339841166", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":339841166}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a monitor with a metrics formula variable returns \"OK\" response", + "version": "v1" + }, { "feature": "Monitors", "frozen_at": "2026-03-04T20:59:52.837Z",