diff --git a/.generator/schemas/v1/openapi.yaml b/.generator/schemas/v1/openapi.yaml index 715f38f30c7..7fa5596d4be 100644 --- a/.generator/schemas/v1/openapi.yaml +++ b/.generator/schemas/v1/openapi.yaml @@ -2855,6 +2855,127 @@ components: - service - name type: object + FormulaAndFunctionApmMetricStatName: + description: APM metric stat name. + enum: + - errors + - error_rate + - errors_per_second + - latency_avg + - latency_max + - latency_p50 + - latency_p75 + - latency_p90 + - latency_p95 + - latency_p99 + - latency_p999 + - latency_distribution + - hits + - hits_per_second + - total_time + - apdex + example: hits + type: string + x-enum-varnames: + - ERRORS + - ERROR_RATE + - ERRORS_PER_SECOND + - LATENCY_AVG + - LATENCY_MAX + - LATENCY_P50 + - LATENCY_P75 + - LATENCY_P90 + - LATENCY_P95 + - LATENCY_P99 + - LATENCY_P999 + - LATENCY_DISTRIBUTION + - HITS + - HITS_PER_SECOND + - TOTAL_TIME + - APDEX + FormulaAndFunctionApmMetricsDataSource: + description: Data source for APM metrics queries. + enum: + - apm_metrics + example: apm_metrics + type: string + x-enum-varnames: + - APM_METRICS + FormulaAndFunctionApmMetricsQueryDefinition: + description: A formula and functions APM metrics query. + properties: + data_source: + $ref: '#/components/schemas/FormulaAndFunctionApmMetricsDataSource' + group_by: + description: Optional fields to group the query results by. + items: + description: A field to group results by. + example: resource_name + type: string + type: array + name: + description: Name of this query to use in formulas. + example: query_errors + type: string + operation_mode: + description: Optional operation mode to aggregate across operation names. + example: primary + type: string + operation_name: + description: Name of operation on service. If not provided, the primary + operation name is used. + example: web.request + type: string + peer_tags: + description: Tags to query for a specific downstream entity (peer.service, + peer.db_instance, peer.s3, peer.s3.bucket, etc.). + items: + example: peer.service:my-service + type: string + type: array + query_filter: + description: Additional filters for the query using metrics query syntax + (e.g., env, primary_tag). + example: env:prod + type: string + resource_hash: + description: The hash of a specific resource to filter by. + example: abc123 + type: string + resource_name: + description: The full name of a specific resource to filter by. + example: GET /api/v1/users + type: string + service: + description: APM service name. + example: web-store + type: string + span_kind: + $ref: '#/components/schemas/FormulaAndFunctionApmMetricsSpanKind' + stat: + $ref: '#/components/schemas/FormulaAndFunctionApmMetricStatName' + required: + - data_source + - name + - stat + type: object + FormulaAndFunctionApmMetricsSpanKind: + description: Describes the relationship between the span, its parents, and its + children in a trace. + enum: + - consumer + - server + - client + - producer + - internal + example: server + type: string + x-enum-varnames: + - CONSUMER + - SERVER + - CLIENT + - PRODUCER + - INTERNAL FormulaAndFunctionApmResourceStatName: description: APM resource stat name. enum: @@ -3296,6 +3417,7 @@ components: - $ref: '#/components/schemas/FormulaAndFunctionProcessQueryDefinition' - $ref: '#/components/schemas/FormulaAndFunctionApmDependencyStatsQueryDefinition' - $ref: '#/components/schemas/FormulaAndFunctionApmResourceStatsQueryDefinition' + - $ref: '#/components/schemas/FormulaAndFunctionApmMetricsQueryDefinition' - $ref: '#/components/schemas/FormulaAndFunctionSLOQueryDefinition' - $ref: '#/components/schemas/FormulaAndFunctionCloudCostQueryDefinition' FormulaAndFunctionResponseFormat: diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index 7c5de28af80..7ae721a4124 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -102212,6 +102212,13 @@ paths: get: description: Get the list of all critical assets. operationId: ListSecurityMonitoringCriticalAssets + parameters: + - description: Query string. + in: query + name: query + required: false + schema: + type: string responses: '200': content: diff --git a/examples/v1/dashboards/CreateDashboard_2252738813.java b/examples/v1/dashboards/CreateDashboard_2252738813.java new file mode 100644 index 00000000000..6c314934ee7 --- /dev/null +++ b/examples/v1/dashboards/CreateDashboard_2252738813.java @@ -0,0 +1,75 @@ +// Create a new dashboard with apm metrics widget + +import com.datadog.api.client.ApiClient; +import com.datadog.api.client.ApiException; +import com.datadog.api.client.v1.api.DashboardsApi; +import com.datadog.api.client.v1.model.Dashboard; +import com.datadog.api.client.v1.model.DashboardLayoutType; +import com.datadog.api.client.v1.model.FormulaAndFunctionApmMetricStatName; +import com.datadog.api.client.v1.model.FormulaAndFunctionApmMetricsDataSource; +import com.datadog.api.client.v1.model.FormulaAndFunctionApmMetricsQueryDefinition; +import com.datadog.api.client.v1.model.FormulaAndFunctionQueryDefinition; +import com.datadog.api.client.v1.model.FormulaAndFunctionResponseFormat; +import com.datadog.api.client.v1.model.TableWidgetDefinition; +import com.datadog.api.client.v1.model.TableWidgetDefinitionType; +import com.datadog.api.client.v1.model.TableWidgetRequest; +import com.datadog.api.client.v1.model.Widget; +import com.datadog.api.client.v1.model.WidgetDefinition; +import com.datadog.api.client.v1.model.WidgetLayout; +import com.datadog.api.client.v1.model.WidgetTextAlign; +import java.util.Collections; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = ApiClient.getDefaultApiClient(); + DashboardsApi apiInstance = new DashboardsApi(defaultClient); + + Dashboard body = + new Dashboard() + .title("Example-Dashboard") + .widgets( + Collections.singletonList( + new Widget() + .definition( + new WidgetDefinition( + new TableWidgetDefinition() + .title("") + .titleSize("16") + .titleAlign(WidgetTextAlign.LEFT) + .type(TableWidgetDefinitionType.QUERY_TABLE) + .requests( + Collections.singletonList( + new TableWidgetRequest() + .responseFormat( + FormulaAndFunctionResponseFormat.SCALAR) + .queries( + Collections.singletonList( + new FormulaAndFunctionQueryDefinition( + new FormulaAndFunctionApmMetricsQueryDefinition() + .stat( + FormulaAndFunctionApmMetricStatName + .HITS) + .name("query1") + .service("web-store") + .dataSource( + FormulaAndFunctionApmMetricsDataSource + .APM_METRICS) + .queryFilter("env:prod") + .groupBy( + Collections.singletonList( + "resource_name"))))))))) + .layout(new WidgetLayout().x(0L).y(0L).width(4L).height(4L)))) + .layoutType(DashboardLayoutType.ORDERED); + + try { + Dashboard result = apiInstance.createDashboard(body); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling DashboardsApi#createDashboard"); + 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/FormulaAndFunctionApmMetricStatName.java b/src/main/java/com/datadog/api/client/v1/model/FormulaAndFunctionApmMetricStatName.java new file mode 100644 index 00000000000..5971ecd26ec --- /dev/null +++ b/src/main/java/com/datadog/api/client/v1/model/FormulaAndFunctionApmMetricStatName.java @@ -0,0 +1,106 @@ +/* + * 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; + +/** APM metric stat name. */ +@JsonSerialize( + using = FormulaAndFunctionApmMetricStatName.FormulaAndFunctionApmMetricStatNameSerializer.class) +public class FormulaAndFunctionApmMetricStatName extends ModelEnum { + + private static final Set allowedValues = + new HashSet( + Arrays.asList( + "errors", + "error_rate", + "errors_per_second", + "latency_avg", + "latency_max", + "latency_p50", + "latency_p75", + "latency_p90", + "latency_p95", + "latency_p99", + "latency_p999", + "latency_distribution", + "hits", + "hits_per_second", + "total_time", + "apdex")); + + public static final FormulaAndFunctionApmMetricStatName ERRORS = + new FormulaAndFunctionApmMetricStatName("errors"); + public static final FormulaAndFunctionApmMetricStatName ERROR_RATE = + new FormulaAndFunctionApmMetricStatName("error_rate"); + public static final FormulaAndFunctionApmMetricStatName ERRORS_PER_SECOND = + new FormulaAndFunctionApmMetricStatName("errors_per_second"); + public static final FormulaAndFunctionApmMetricStatName LATENCY_AVG = + new FormulaAndFunctionApmMetricStatName("latency_avg"); + public static final FormulaAndFunctionApmMetricStatName LATENCY_MAX = + new FormulaAndFunctionApmMetricStatName("latency_max"); + public static final FormulaAndFunctionApmMetricStatName LATENCY_P50 = + new FormulaAndFunctionApmMetricStatName("latency_p50"); + public static final FormulaAndFunctionApmMetricStatName LATENCY_P75 = + new FormulaAndFunctionApmMetricStatName("latency_p75"); + public static final FormulaAndFunctionApmMetricStatName LATENCY_P90 = + new FormulaAndFunctionApmMetricStatName("latency_p90"); + public static final FormulaAndFunctionApmMetricStatName LATENCY_P95 = + new FormulaAndFunctionApmMetricStatName("latency_p95"); + public static final FormulaAndFunctionApmMetricStatName LATENCY_P99 = + new FormulaAndFunctionApmMetricStatName("latency_p99"); + public static final FormulaAndFunctionApmMetricStatName LATENCY_P999 = + new FormulaAndFunctionApmMetricStatName("latency_p999"); + public static final FormulaAndFunctionApmMetricStatName LATENCY_DISTRIBUTION = + new FormulaAndFunctionApmMetricStatName("latency_distribution"); + public static final FormulaAndFunctionApmMetricStatName HITS = + new FormulaAndFunctionApmMetricStatName("hits"); + public static final FormulaAndFunctionApmMetricStatName HITS_PER_SECOND = + new FormulaAndFunctionApmMetricStatName("hits_per_second"); + public static final FormulaAndFunctionApmMetricStatName TOTAL_TIME = + new FormulaAndFunctionApmMetricStatName("total_time"); + public static final FormulaAndFunctionApmMetricStatName APDEX = + new FormulaAndFunctionApmMetricStatName("apdex"); + + FormulaAndFunctionApmMetricStatName(String value) { + super(value, allowedValues); + } + + public static class FormulaAndFunctionApmMetricStatNameSerializer + extends StdSerializer { + public FormulaAndFunctionApmMetricStatNameSerializer( + Class t) { + super(t); + } + + public FormulaAndFunctionApmMetricStatNameSerializer() { + this(null); + } + + @Override + public void serialize( + FormulaAndFunctionApmMetricStatName value, JsonGenerator jgen, SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static FormulaAndFunctionApmMetricStatName fromValue(String value) { + return new FormulaAndFunctionApmMetricStatName(value); + } +} diff --git a/src/main/java/com/datadog/api/client/v1/model/FormulaAndFunctionApmMetricsDataSource.java b/src/main/java/com/datadog/api/client/v1/model/FormulaAndFunctionApmMetricsDataSource.java new file mode 100644 index 00000000000..8979e8e9515 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v1/model/FormulaAndFunctionApmMetricsDataSource.java @@ -0,0 +1,63 @@ +/* + * 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 APM metrics queries. */ +@JsonSerialize( + using = + FormulaAndFunctionApmMetricsDataSource.FormulaAndFunctionApmMetricsDataSourceSerializer + .class) +public class FormulaAndFunctionApmMetricsDataSource extends ModelEnum { + + private static final Set allowedValues = + new HashSet(Arrays.asList("apm_metrics")); + + public static final FormulaAndFunctionApmMetricsDataSource APM_METRICS = + new FormulaAndFunctionApmMetricsDataSource("apm_metrics"); + + FormulaAndFunctionApmMetricsDataSource(String value) { + super(value, allowedValues); + } + + public static class FormulaAndFunctionApmMetricsDataSourceSerializer + extends StdSerializer { + public FormulaAndFunctionApmMetricsDataSourceSerializer( + Class t) { + super(t); + } + + public FormulaAndFunctionApmMetricsDataSourceSerializer() { + this(null); + } + + @Override + public void serialize( + FormulaAndFunctionApmMetricsDataSource value, + JsonGenerator jgen, + SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static FormulaAndFunctionApmMetricsDataSource fromValue(String value) { + return new FormulaAndFunctionApmMetricsDataSource(value); + } +} diff --git a/src/main/java/com/datadog/api/client/v1/model/FormulaAndFunctionApmMetricsQueryDefinition.java b/src/main/java/com/datadog/api/client/v1/model/FormulaAndFunctionApmMetricsQueryDefinition.java new file mode 100644 index 00000000000..dd426558d39 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v1/model/FormulaAndFunctionApmMetricsQueryDefinition.java @@ -0,0 +1,503 @@ +/* + * 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.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** A formula and functions APM metrics query. */ +@JsonPropertyOrder({ + FormulaAndFunctionApmMetricsQueryDefinition.JSON_PROPERTY_DATA_SOURCE, + FormulaAndFunctionApmMetricsQueryDefinition.JSON_PROPERTY_GROUP_BY, + FormulaAndFunctionApmMetricsQueryDefinition.JSON_PROPERTY_NAME, + FormulaAndFunctionApmMetricsQueryDefinition.JSON_PROPERTY_OPERATION_MODE, + FormulaAndFunctionApmMetricsQueryDefinition.JSON_PROPERTY_OPERATION_NAME, + FormulaAndFunctionApmMetricsQueryDefinition.JSON_PROPERTY_PEER_TAGS, + FormulaAndFunctionApmMetricsQueryDefinition.JSON_PROPERTY_QUERY_FILTER, + FormulaAndFunctionApmMetricsQueryDefinition.JSON_PROPERTY_RESOURCE_HASH, + FormulaAndFunctionApmMetricsQueryDefinition.JSON_PROPERTY_RESOURCE_NAME, + FormulaAndFunctionApmMetricsQueryDefinition.JSON_PROPERTY_SERVICE, + FormulaAndFunctionApmMetricsQueryDefinition.JSON_PROPERTY_SPAN_KIND, + FormulaAndFunctionApmMetricsQueryDefinition.JSON_PROPERTY_STAT +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class FormulaAndFunctionApmMetricsQueryDefinition { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_DATA_SOURCE = "data_source"; + private FormulaAndFunctionApmMetricsDataSource dataSource; + + public static final String JSON_PROPERTY_GROUP_BY = "group_by"; + private List groupBy = null; + + public static final String JSON_PROPERTY_NAME = "name"; + private String name; + + public static final String JSON_PROPERTY_OPERATION_MODE = "operation_mode"; + private String operationMode; + + public static final String JSON_PROPERTY_OPERATION_NAME = "operation_name"; + private String operationName; + + public static final String JSON_PROPERTY_PEER_TAGS = "peer_tags"; + private List peerTags = null; + + public static final String JSON_PROPERTY_QUERY_FILTER = "query_filter"; + private String queryFilter; + + public static final String JSON_PROPERTY_RESOURCE_HASH = "resource_hash"; + private String resourceHash; + + public static final String JSON_PROPERTY_RESOURCE_NAME = "resource_name"; + private String resourceName; + + public static final String JSON_PROPERTY_SERVICE = "service"; + private String service; + + public static final String JSON_PROPERTY_SPAN_KIND = "span_kind"; + private FormulaAndFunctionApmMetricsSpanKind spanKind; + + public static final String JSON_PROPERTY_STAT = "stat"; + private FormulaAndFunctionApmMetricStatName stat; + + public FormulaAndFunctionApmMetricsQueryDefinition() {} + + @JsonCreator + public FormulaAndFunctionApmMetricsQueryDefinition( + @JsonProperty(required = true, value = JSON_PROPERTY_DATA_SOURCE) + FormulaAndFunctionApmMetricsDataSource dataSource, + @JsonProperty(required = true, value = JSON_PROPERTY_NAME) String name, + @JsonProperty(required = true, value = JSON_PROPERTY_STAT) + FormulaAndFunctionApmMetricStatName stat) { + this.dataSource = dataSource; + this.unparsed |= !dataSource.isValid(); + this.name = name; + this.stat = stat; + this.unparsed |= !stat.isValid(); + } + + public FormulaAndFunctionApmMetricsQueryDefinition dataSource( + FormulaAndFunctionApmMetricsDataSource dataSource) { + this.dataSource = dataSource; + this.unparsed |= !dataSource.isValid(); + return this; + } + + /** + * Data source for APM metrics queries. + * + * @return dataSource + */ + @JsonProperty(JSON_PROPERTY_DATA_SOURCE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public FormulaAndFunctionApmMetricsDataSource getDataSource() { + return dataSource; + } + + public void setDataSource(FormulaAndFunctionApmMetricsDataSource dataSource) { + if (!dataSource.isValid()) { + this.unparsed = true; + } + this.dataSource = dataSource; + } + + public FormulaAndFunctionApmMetricsQueryDefinition groupBy(List groupBy) { + this.groupBy = groupBy; + return this; + } + + public FormulaAndFunctionApmMetricsQueryDefinition addGroupByItem(String groupByItem) { + if (this.groupBy == null) { + this.groupBy = new ArrayList<>(); + } + this.groupBy.add(groupByItem); + return this; + } + + /** + * Optional fields to group the query results by. + * + * @return groupBy + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_GROUP_BY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getGroupBy() { + return groupBy; + } + + public void setGroupBy(List groupBy) { + this.groupBy = groupBy; + } + + public FormulaAndFunctionApmMetricsQueryDefinition name(String name) { + this.name = name; + return this; + } + + /** + * Name of this query to 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 FormulaAndFunctionApmMetricsQueryDefinition operationMode(String operationMode) { + this.operationMode = operationMode; + return this; + } + + /** + * Optional operation mode to aggregate across operation names. + * + * @return operationMode + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_OPERATION_MODE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getOperationMode() { + return operationMode; + } + + public void setOperationMode(String operationMode) { + this.operationMode = operationMode; + } + + public FormulaAndFunctionApmMetricsQueryDefinition operationName(String operationName) { + this.operationName = operationName; + return this; + } + + /** + * Name of operation on service. If not provided, the primary operation name is used. + * + * @return operationName + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_OPERATION_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getOperationName() { + return operationName; + } + + public void setOperationName(String operationName) { + this.operationName = operationName; + } + + public FormulaAndFunctionApmMetricsQueryDefinition peerTags(List peerTags) { + this.peerTags = peerTags; + return this; + } + + public FormulaAndFunctionApmMetricsQueryDefinition addPeerTagsItem(String peerTagsItem) { + if (this.peerTags == null) { + this.peerTags = new ArrayList<>(); + } + this.peerTags.add(peerTagsItem); + return this; + } + + /** + * Tags to query for a specific downstream entity (peer.service, peer.db_instance, peer.s3, + * peer.s3.bucket, etc.). + * + * @return peerTags + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_PEER_TAGS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getPeerTags() { + return peerTags; + } + + public void setPeerTags(List peerTags) { + this.peerTags = peerTags; + } + + public FormulaAndFunctionApmMetricsQueryDefinition queryFilter(String queryFilter) { + this.queryFilter = queryFilter; + return this; + } + + /** + * Additional filters for the query using metrics query syntax (e.g., env, primary_tag). + * + * @return queryFilter + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_QUERY_FILTER) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getQueryFilter() { + return queryFilter; + } + + public void setQueryFilter(String queryFilter) { + this.queryFilter = queryFilter; + } + + public FormulaAndFunctionApmMetricsQueryDefinition resourceHash(String resourceHash) { + this.resourceHash = resourceHash; + return this; + } + + /** + * The hash of a specific resource to filter by. + * + * @return resourceHash + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_RESOURCE_HASH) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getResourceHash() { + return resourceHash; + } + + public void setResourceHash(String resourceHash) { + this.resourceHash = resourceHash; + } + + public FormulaAndFunctionApmMetricsQueryDefinition resourceName(String resourceName) { + this.resourceName = resourceName; + return this; + } + + /** + * The full name of a specific resource to filter by. + * + * @return resourceName + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_RESOURCE_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getResourceName() { + return resourceName; + } + + public void setResourceName(String resourceName) { + this.resourceName = resourceName; + } + + public FormulaAndFunctionApmMetricsQueryDefinition service(String service) { + this.service = service; + return this; + } + + /** + * APM service name. + * + * @return service + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_SERVICE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getService() { + return service; + } + + public void setService(String service) { + this.service = service; + } + + public FormulaAndFunctionApmMetricsQueryDefinition spanKind( + FormulaAndFunctionApmMetricsSpanKind spanKind) { + this.spanKind = spanKind; + this.unparsed |= !spanKind.isValid(); + return this; + } + + /** + * Describes the relationship between the span, its parents, and its children in a trace. + * + * @return spanKind + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_SPAN_KIND) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public FormulaAndFunctionApmMetricsSpanKind getSpanKind() { + return spanKind; + } + + public void setSpanKind(FormulaAndFunctionApmMetricsSpanKind spanKind) { + if (!spanKind.isValid()) { + this.unparsed = true; + } + this.spanKind = spanKind; + } + + public FormulaAndFunctionApmMetricsQueryDefinition stat( + FormulaAndFunctionApmMetricStatName stat) { + this.stat = stat; + this.unparsed |= !stat.isValid(); + return this; + } + + /** + * APM metric stat name. + * + * @return stat + */ + @JsonProperty(JSON_PROPERTY_STAT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public FormulaAndFunctionApmMetricStatName getStat() { + return stat; + } + + public void setStat(FormulaAndFunctionApmMetricStatName stat) { + if (!stat.isValid()) { + this.unparsed = true; + } + this.stat = stat; + } + + /** + * 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 FormulaAndFunctionApmMetricsQueryDefinition + */ + @JsonAnySetter + public FormulaAndFunctionApmMetricsQueryDefinition 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 FormulaAndFunctionApmMetricsQueryDefinition object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + FormulaAndFunctionApmMetricsQueryDefinition formulaAndFunctionApmMetricsQueryDefinition = + (FormulaAndFunctionApmMetricsQueryDefinition) o; + return Objects.equals(this.dataSource, formulaAndFunctionApmMetricsQueryDefinition.dataSource) + && Objects.equals(this.groupBy, formulaAndFunctionApmMetricsQueryDefinition.groupBy) + && Objects.equals(this.name, formulaAndFunctionApmMetricsQueryDefinition.name) + && Objects.equals( + this.operationMode, formulaAndFunctionApmMetricsQueryDefinition.operationMode) + && Objects.equals( + this.operationName, formulaAndFunctionApmMetricsQueryDefinition.operationName) + && Objects.equals(this.peerTags, formulaAndFunctionApmMetricsQueryDefinition.peerTags) + && Objects.equals(this.queryFilter, formulaAndFunctionApmMetricsQueryDefinition.queryFilter) + && Objects.equals( + this.resourceHash, formulaAndFunctionApmMetricsQueryDefinition.resourceHash) + && Objects.equals( + this.resourceName, formulaAndFunctionApmMetricsQueryDefinition.resourceName) + && Objects.equals(this.service, formulaAndFunctionApmMetricsQueryDefinition.service) + && Objects.equals(this.spanKind, formulaAndFunctionApmMetricsQueryDefinition.spanKind) + && Objects.equals(this.stat, formulaAndFunctionApmMetricsQueryDefinition.stat) + && Objects.equals( + this.additionalProperties, + formulaAndFunctionApmMetricsQueryDefinition.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash( + dataSource, + groupBy, + name, + operationMode, + operationName, + peerTags, + queryFilter, + resourceHash, + resourceName, + service, + spanKind, + stat, + additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class FormulaAndFunctionApmMetricsQueryDefinition {\n"); + sb.append(" dataSource: ").append(toIndentedString(dataSource)).append("\n"); + sb.append(" groupBy: ").append(toIndentedString(groupBy)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" operationMode: ").append(toIndentedString(operationMode)).append("\n"); + sb.append(" operationName: ").append(toIndentedString(operationName)).append("\n"); + sb.append(" peerTags: ").append(toIndentedString(peerTags)).append("\n"); + sb.append(" queryFilter: ").append(toIndentedString(queryFilter)).append("\n"); + sb.append(" resourceHash: ").append(toIndentedString(resourceHash)).append("\n"); + sb.append(" resourceName: ").append(toIndentedString(resourceName)).append("\n"); + sb.append(" service: ").append(toIndentedString(service)).append("\n"); + sb.append(" spanKind: ").append(toIndentedString(spanKind)).append("\n"); + sb.append(" stat: ").append(toIndentedString(stat)).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/FormulaAndFunctionApmMetricsSpanKind.java b/src/main/java/com/datadog/api/client/v1/model/FormulaAndFunctionApmMetricsSpanKind.java new file mode 100644 index 00000000000..bccb28a4374 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v1/model/FormulaAndFunctionApmMetricsSpanKind.java @@ -0,0 +1,68 @@ +/* + * 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; + +/** Describes the relationship between the span, its parents, and its children in a trace. */ +@JsonSerialize( + using = + FormulaAndFunctionApmMetricsSpanKind.FormulaAndFunctionApmMetricsSpanKindSerializer.class) +public class FormulaAndFunctionApmMetricsSpanKind extends ModelEnum { + + private static final Set allowedValues = + new HashSet(Arrays.asList("consumer", "server", "client", "producer", "internal")); + + public static final FormulaAndFunctionApmMetricsSpanKind CONSUMER = + new FormulaAndFunctionApmMetricsSpanKind("consumer"); + public static final FormulaAndFunctionApmMetricsSpanKind SERVER = + new FormulaAndFunctionApmMetricsSpanKind("server"); + public static final FormulaAndFunctionApmMetricsSpanKind CLIENT = + new FormulaAndFunctionApmMetricsSpanKind("client"); + public static final FormulaAndFunctionApmMetricsSpanKind PRODUCER = + new FormulaAndFunctionApmMetricsSpanKind("producer"); + public static final FormulaAndFunctionApmMetricsSpanKind INTERNAL = + new FormulaAndFunctionApmMetricsSpanKind("internal"); + + FormulaAndFunctionApmMetricsSpanKind(String value) { + super(value, allowedValues); + } + + public static class FormulaAndFunctionApmMetricsSpanKindSerializer + extends StdSerializer { + public FormulaAndFunctionApmMetricsSpanKindSerializer( + Class t) { + super(t); + } + + public FormulaAndFunctionApmMetricsSpanKindSerializer() { + this(null); + } + + @Override + public void serialize( + FormulaAndFunctionApmMetricsSpanKind value, JsonGenerator jgen, SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static FormulaAndFunctionApmMetricsSpanKind fromValue(String value) { + return new FormulaAndFunctionApmMetricsSpanKind(value); + } +} diff --git a/src/main/java/com/datadog/api/client/v1/model/FormulaAndFunctionQueryDefinition.java b/src/main/java/com/datadog/api/client/v1/model/FormulaAndFunctionQueryDefinition.java index 2848b8a47c2..2d1335882c0 100644 --- a/src/main/java/com/datadog/api/client/v1/model/FormulaAndFunctionQueryDefinition.java +++ b/src/main/java/com/datadog/api/client/v1/model/FormulaAndFunctionQueryDefinition.java @@ -345,6 +345,58 @@ public FormulaAndFunctionQueryDefinition deserialize(JsonParser jp, Deserializat e); } + // deserialize FormulaAndFunctionApmMetricsQueryDefinition + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (FormulaAndFunctionApmMetricsQueryDefinition.class.equals(Integer.class) + || FormulaAndFunctionApmMetricsQueryDefinition.class.equals(Long.class) + || FormulaAndFunctionApmMetricsQueryDefinition.class.equals(Float.class) + || FormulaAndFunctionApmMetricsQueryDefinition.class.equals(Double.class) + || FormulaAndFunctionApmMetricsQueryDefinition.class.equals(Boolean.class) + || FormulaAndFunctionApmMetricsQueryDefinition.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((FormulaAndFunctionApmMetricsQueryDefinition.class.equals(Integer.class) + || FormulaAndFunctionApmMetricsQueryDefinition.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((FormulaAndFunctionApmMetricsQueryDefinition.class.equals(Float.class) + || FormulaAndFunctionApmMetricsQueryDefinition.class.equals(Double.class)) + && (token == JsonToken.VALUE_NUMBER_FLOAT + || token == JsonToken.VALUE_NUMBER_INT)); + attemptParsing |= + (FormulaAndFunctionApmMetricsQueryDefinition.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (FormulaAndFunctionApmMetricsQueryDefinition.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + tmp = + tree.traverse(jp.getCodec()) + .readValueAs(FormulaAndFunctionApmMetricsQueryDefinition.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 (!((FormulaAndFunctionApmMetricsQueryDefinition) tmp).unparsed) { + deserialized = tmp; + match++; + } + log.log( + Level.FINER, + "Input data matches schema 'FormulaAndFunctionApmMetricsQueryDefinition'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log( + Level.FINER, + "Input data does not match schema 'FormulaAndFunctionApmMetricsQueryDefinition'", + e); + } + // deserialize FormulaAndFunctionSLOQueryDefinition try { boolean attemptParsing = true; @@ -501,6 +553,11 @@ public FormulaAndFunctionQueryDefinition(FormulaAndFunctionApmResourceStatsQuery setActualInstance(o); } + public FormulaAndFunctionQueryDefinition(FormulaAndFunctionApmMetricsQueryDefinition o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + public FormulaAndFunctionQueryDefinition(FormulaAndFunctionSLOQueryDefinition o) { super("oneOf", Boolean.FALSE); setActualInstance(o); @@ -527,6 +584,9 @@ public FormulaAndFunctionQueryDefinition(FormulaAndFunctionCloudCostQueryDefinit schemas.put( "FormulaAndFunctionApmResourceStatsQueryDefinition", new GenericType() {}); + schemas.put( + "FormulaAndFunctionApmMetricsQueryDefinition", + new GenericType() {}); schemas.put( "FormulaAndFunctionSLOQueryDefinition", new GenericType() {}); @@ -547,8 +607,8 @@ public Map getSchemas() { * against the oneOf child schemas: FormulaAndFunctionMetricQueryDefinition, * FormulaAndFunctionEventQueryDefinition, FormulaAndFunctionProcessQueryDefinition, * FormulaAndFunctionApmDependencyStatsQueryDefinition, - * FormulaAndFunctionApmResourceStatsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, - * FormulaAndFunctionCloudCostQueryDefinition + * FormulaAndFunctionApmResourceStatsQueryDefinition, FormulaAndFunctionApmMetricsQueryDefinition, + * FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition * *

It could be an instance of the 'oneOf' schemas. The oneOf child schemas may themselves be a * composed schema (allOf, anyOf, oneOf). @@ -584,6 +644,11 @@ public void setActualInstance(Object instance) { super.setActualInstance(instance); return; } + if (JSON.isInstanceOf( + FormulaAndFunctionApmMetricsQueryDefinition.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } if (JSON.isInstanceOf( FormulaAndFunctionSLOQueryDefinition.class, instance, new HashSet>())) { super.setActualInstance(instance); @@ -604,20 +669,22 @@ public void setActualInstance(Object instance) { + " FormulaAndFunctionEventQueryDefinition, FormulaAndFunctionProcessQueryDefinition," + " FormulaAndFunctionApmDependencyStatsQueryDefinition," + " FormulaAndFunctionApmResourceStatsQueryDefinition," - + " FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition"); + + " FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition," + + " FormulaAndFunctionCloudCostQueryDefinition"); } /** * Get the actual instance, which can be the following: FormulaAndFunctionMetricQueryDefinition, * FormulaAndFunctionEventQueryDefinition, FormulaAndFunctionProcessQueryDefinition, * FormulaAndFunctionApmDependencyStatsQueryDefinition, - * FormulaAndFunctionApmResourceStatsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, - * FormulaAndFunctionCloudCostQueryDefinition + * FormulaAndFunctionApmResourceStatsQueryDefinition, FormulaAndFunctionApmMetricsQueryDefinition, + * FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition * * @return The actual instance (FormulaAndFunctionMetricQueryDefinition, * FormulaAndFunctionEventQueryDefinition, FormulaAndFunctionProcessQueryDefinition, * FormulaAndFunctionApmDependencyStatsQueryDefinition, - * FormulaAndFunctionApmResourceStatsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, + * FormulaAndFunctionApmResourceStatsQueryDefinition, + * FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, * FormulaAndFunctionCloudCostQueryDefinition) */ @Override @@ -689,6 +756,19 @@ public FormulaAndFunctionProcessQueryDefinition getFormulaAndFunctionProcessQuer return (FormulaAndFunctionApmResourceStatsQueryDefinition) super.getActualInstance(); } + /** + * Get the actual instance of `FormulaAndFunctionApmMetricsQueryDefinition`. If the actual + * instance is not `FormulaAndFunctionApmMetricsQueryDefinition`, the ClassCastException will be + * thrown. + * + * @return The actual instance of `FormulaAndFunctionApmMetricsQueryDefinition` + * @throws ClassCastException if the instance is not `FormulaAndFunctionApmMetricsQueryDefinition` + */ + public FormulaAndFunctionApmMetricsQueryDefinition + getFormulaAndFunctionApmMetricsQueryDefinition() throws ClassCastException { + return (FormulaAndFunctionApmMetricsQueryDefinition) super.getActualInstance(); + } + /** * Get the actual instance of `FormulaAndFunctionSLOQueryDefinition`. If the actual instance is * not `FormulaAndFunctionSLOQueryDefinition`, the ClassCastException will be thrown. diff --git a/src/main/java/com/datadog/api/client/v2/api/SecurityMonitoringApi.java b/src/main/java/com/datadog/api/client/v2/api/SecurityMonitoringApi.java index 6ea7df0811d..1d8927d8442 100644 --- a/src/main/java/com/datadog/api/client/v2/api/SecurityMonitoringApi.java +++ b/src/main/java/com/datadog/api/client/v2/api/SecurityMonitoringApi.java @@ -10087,6 +10087,22 @@ public ApiResponse listSecurityFindingsWithHttpInf new GenericType() {}); } + /** Manage optional parameters to listSecurityMonitoringCriticalAssets. */ + public static class ListSecurityMonitoringCriticalAssetsOptionalParameters { + private String query; + + /** + * Set query. + * + * @param query Query string. (optional) + * @return ListSecurityMonitoringCriticalAssetsOptionalParameters + */ + public ListSecurityMonitoringCriticalAssetsOptionalParameters query(String query) { + this.query = query; + return this; + } + } + /** * Get all critical assets. * @@ -10097,7 +10113,9 @@ public ApiResponse listSecurityFindingsWithHttpInf */ public SecurityMonitoringCriticalAssetsResponse listSecurityMonitoringCriticalAssets() throws ApiException { - return listSecurityMonitoringCriticalAssetsWithHttpInfo().getData(); + return listSecurityMonitoringCriticalAssetsWithHttpInfo( + new ListSecurityMonitoringCriticalAssetsOptionalParameters()) + .getData(); } /** @@ -10109,7 +10127,40 @@ public SecurityMonitoringCriticalAssetsResponse listSecurityMonitoringCriticalAs */ public CompletableFuture listSecurityMonitoringCriticalAssetsAsync() { - return listSecurityMonitoringCriticalAssetsWithHttpInfoAsync() + return listSecurityMonitoringCriticalAssetsWithHttpInfoAsync( + new ListSecurityMonitoringCriticalAssetsOptionalParameters()) + .thenApply( + response -> { + return response.getData(); + }); + } + + /** + * Get all critical assets. + * + *

See {@link #listSecurityMonitoringCriticalAssetsWithHttpInfo}. + * + * @param parameters Optional parameters for the request. + * @return SecurityMonitoringCriticalAssetsResponse + * @throws ApiException if fails to make API call + */ + public SecurityMonitoringCriticalAssetsResponse listSecurityMonitoringCriticalAssets( + ListSecurityMonitoringCriticalAssetsOptionalParameters parameters) throws ApiException { + return listSecurityMonitoringCriticalAssetsWithHttpInfo(parameters).getData(); + } + + /** + * Get all critical assets. + * + *

See {@link #listSecurityMonitoringCriticalAssetsWithHttpInfoAsync}. + * + * @param parameters Optional parameters for the request. + * @return CompletableFuture<SecurityMonitoringCriticalAssetsResponse> + */ + public CompletableFuture + listSecurityMonitoringCriticalAssetsAsync( + ListSecurityMonitoringCriticalAssetsOptionalParameters parameters) { + return listSecurityMonitoringCriticalAssetsWithHttpInfoAsync(parameters) .thenApply( response -> { return response.getData(); @@ -10119,6 +10170,7 @@ public SecurityMonitoringCriticalAssetsResponse listSecurityMonitoringCriticalAs /** * Get the list of all critical assets. * + * @param parameters Optional parameters for the request. * @return ApiResponse<SecurityMonitoringCriticalAssetsResponse> * @throws ApiException if fails to make API call * @http.response.details @@ -10131,18 +10183,23 @@ public SecurityMonitoringCriticalAssetsResponse listSecurityMonitoringCriticalAs * */ public ApiResponse - listSecurityMonitoringCriticalAssetsWithHttpInfo() throws ApiException { + listSecurityMonitoringCriticalAssetsWithHttpInfo( + ListSecurityMonitoringCriticalAssetsOptionalParameters parameters) throws ApiException { Object localVarPostBody = null; + String query = parameters.query; // create path and map variables String localVarPath = "/api/v2/security_monitoring/configuration/critical_assets"; + List localVarQueryParams = new ArrayList(); Map localVarHeaderParams = new HashMap(); + localVarQueryParams.addAll(apiClient.parameterToPairs("", "query", query)); + Invocation.Builder builder = apiClient.createBuilder( "v2.SecurityMonitoringApi.listSecurityMonitoringCriticalAssets", localVarPath, - new ArrayList(), + localVarQueryParams, localVarHeaderParams, new HashMap(), new String[] {"application/json"}, @@ -10163,23 +10220,29 @@ public SecurityMonitoringCriticalAssetsResponse listSecurityMonitoringCriticalAs * *

See {@link #listSecurityMonitoringCriticalAssetsWithHttpInfo}. * + * @param parameters Optional parameters for the request. * @return CompletableFuture<ApiResponse<SecurityMonitoringCriticalAssetsResponse>> */ public CompletableFuture> - listSecurityMonitoringCriticalAssetsWithHttpInfoAsync() { + listSecurityMonitoringCriticalAssetsWithHttpInfoAsync( + ListSecurityMonitoringCriticalAssetsOptionalParameters parameters) { Object localVarPostBody = null; + String query = parameters.query; // create path and map variables String localVarPath = "/api/v2/security_monitoring/configuration/critical_assets"; + List localVarQueryParams = new ArrayList(); Map localVarHeaderParams = new HashMap(); + localVarQueryParams.addAll(apiClient.parameterToPairs("", "query", query)); + Invocation.Builder builder; try { builder = apiClient.createBuilder( "v2.SecurityMonitoringApi.listSecurityMonitoringCriticalAssets", localVarPath, - new ArrayList(), + localVarQueryParams, localVarHeaderParams, new HashMap(), new String[] {"application/json"}, diff --git a/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_apm_metrics_widget.freeze b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_apm_metrics_widget.freeze new file mode 100644 index 00000000000..75b84eafed7 --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_apm_metrics_widget.freeze @@ -0,0 +1 @@ +2025-02-20T10:00:00.000Z \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_apm_metrics_widget.json b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_apm_metrics_widget.json new file mode 100644 index 00000000000..a9b2027cc75 --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_apm_metrics_widget.json @@ -0,0 +1,58 @@ +[ + { + "httpRequest": { + "body": { + "type": "JSON", + "json": "{\"layout_type\":\"ordered\",\"title\":\"Test-Create_a_new_dashboard_with_apm_metrics_widget-1740045600\",\"widgets\":[{\"definition\":{\"requests\":[{\"queries\":[{\"data_source\":\"apm_metrics\",\"group_by\":[\"resource_name\"],\"name\":\"query1\",\"query_filter\":\"env:prod\",\"service\":\"web-store\",\"stat\":\"hits\"}],\"response_format\":\"scalar\"}],\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"query_table\"},\"layout\":{\"height\":4,\"width\":4,\"x\":0,\"y\":0}}]}" + }, + "headers": {}, + "method": "POST", + "path": "/api/v1/dashboard", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"id\":\"apm-met-ric\",\"title\":\"Test-Create_a_new_dashboard_with_apm_metrics_widget-1740045600\",\"description\":null,\"author_handle\":\"test@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/apm-met-ric/testcreateanewdashboardwithapmmetricswidget1740045600\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"queries\":[{\"data_source\":\"apm_metrics\",\"group_by\":[\"resource_name\"],\"name\":\"query1\",\"query_filter\":\"env:prod\",\"service\":\"web-store\",\"stat\":\"hits\"}],\"response_format\":\"scalar\"}],\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"query_table\"},\"layout\":{\"height\":4,\"width\":4,\"x\":0,\"y\":0},\"id\":1234567890123456}],\"notify_list\":null,\"created_at\":\"2025-02-20T10:00:01.000000+00:00\",\"modified_at\":\"2025-02-20T10:00:01.000000+00:00\",\"restricted_roles\":[]}", + "headers": { + "Content-Type": [ + "application/json" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "1cfcf5cc-d2e7-dff3-d4f3-b05c53d79057" + }, + { + "httpRequest": { + "headers": {}, + "method": "DELETE", + "path": "/api/v1/dashboard/apm-met-ric", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"deleted_dashboard_id\":\"apm-met-ric\"}", + "headers": { + "Content-Type": [ + "application/json" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "71162de5-2581-d0f3-91d9-49ff27e2aac0" + } +] \ No newline at end of file diff --git a/src/test/resources/com/datadog/api/client/v1/api/dashboards.feature b/src/test/resources/com/datadog/api/client/v1/api/dashboards.feature index e8c10d7cc5f..e894b96bfa8 100644 --- a/src/test/resources/com/datadog/api/client/v1/api/dashboards.feature +++ b/src/test/resources/com/datadog/api/client/v1/api/dashboards.feature @@ -320,6 +320,20 @@ Feature: Dashboards And the response "widgets[0].definition.requests[0].queries[0].primary_tag_name" is equal to "datacenter" And the response "widgets[0].definition.requests[0].queries[0].operation_name" is equal to "cassandra.query" + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with apm metrics widget + Given new "CreateDashboard" request + And body with value { "title": "{{ unique }}", "widgets": [{"definition": { "title": "", "title_size": "16", "title_align": "left", "type": "query_table", "requests": [ { "response_format": "scalar", "queries": [ { "stat": "hits", "name": "query1", "service": "web-store", "data_source": "apm_metrics", "query_filter": "env:prod", "group_by": ["resource_name"] } ] } ] }, "layout": { "x": 0, "y": 0, "width": 4, "height": 4 } } ], "layout_type": "ordered" } + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].response_format" is equal to "scalar" + And the response "widgets[0].definition.requests[0].queries[0].stat" is equal to "hits" + And the response "widgets[0].definition.requests[0].queries[0].group_by[0]" is equal to "resource_name" + And the response "widgets[0].definition.requests[0].queries[0].name" is equal to "query1" + And the response "widgets[0].definition.requests[0].queries[0].service" is equal to "web-store" + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "apm_metrics" + And the response "widgets[0].definition.requests[0].queries[0].query_filter" is equal to "env:prod" + @team:DataDog/dashboards-backend Scenario: Create a new dashboard with apm resource stats widget Given new "CreateDashboard" request