diff --git a/.generator/schemas/v1/openapi.yaml b/.generator/schemas/v1/openapi.yaml index 150bd49be13..b4c65dd34aa 100644 --- a/.generator/schemas/v1/openapi.yaml +++ b/.generator/schemas/v1/openapi.yaml @@ -25934,6 +25934,8 @@ components: $ref: '#/components/schemas/WidgetLineType' line_width: $ref: '#/components/schemas/WidgetLineWidth' + order_by: + $ref: '#/components/schemas/WidgetStyleOrderBy' palette: description: Color palette to apply to the widget. type: string @@ -25996,6 +25998,19 @@ components: description: Color palette to apply to the widget. type: string type: object + WidgetStyleOrderBy: + description: 'How to order series in timeseries visualizations. + + - `tags`: Order series alphabetically by tag name (default behavior) + + - `values`: Order series by their current metric values (typically descending)' + enum: + - tags + - values + type: string + x-enum-varnames: + - TAGS + - VALUES WidgetSummaryType: description: Which summary type should be used. enum: diff --git a/examples/v1/dashboards/CreateDashboard_1259346254.java b/examples/v1/dashboards/CreateDashboard_1259346254.java new file mode 100644 index 00000000000..472246e8ed2 --- /dev/null +++ b/examples/v1/dashboards/CreateDashboard_1259346254.java @@ -0,0 +1,55 @@ +// Create a new dashboard with timeseries widget using order_by values + +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.TimeseriesWidgetDefinition; +import com.datadog.api.client.v1.model.TimeseriesWidgetDefinitionType; +import com.datadog.api.client.v1.model.TimeseriesWidgetRequest; +import com.datadog.api.client.v1.model.Widget; +import com.datadog.api.client.v1.model.WidgetDefinition; +import com.datadog.api.client.v1.model.WidgetDisplayType; +import com.datadog.api.client.v1.model.WidgetRequestStyle; +import com.datadog.api.client.v1.model.WidgetStyleOrderBy; +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() + .layoutType(DashboardLayoutType.ORDERED) + .title("Example-Dashboard with order_by values") + .widgets( + Collections.singletonList( + new Widget() + .definition( + new WidgetDefinition( + new TimeseriesWidgetDefinition() + .type(TimeseriesWidgetDefinitionType.TIMESERIES) + .requests( + Collections.singletonList( + new TimeseriesWidgetRequest() + .q("avg:system.cpu.user{*} by {host}") + .style( + new WidgetRequestStyle() + .palette("warm") + .orderBy(WidgetStyleOrderBy.VALUES)) + .displayType(WidgetDisplayType.LINE))))))); + + 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/examples/v1/dashboards/CreateDashboard_3631423980.java b/examples/v1/dashboards/CreateDashboard_3631423980.java new file mode 100644 index 00000000000..df98fc294b6 --- /dev/null +++ b/examples/v1/dashboards/CreateDashboard_3631423980.java @@ -0,0 +1,57 @@ +// Create a new dashboard with timeseries widget without order_by for backward compatibility + +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.TimeseriesWidgetDefinition; +import com.datadog.api.client.v1.model.TimeseriesWidgetDefinitionType; +import com.datadog.api.client.v1.model.TimeseriesWidgetRequest; +import com.datadog.api.client.v1.model.Widget; +import com.datadog.api.client.v1.model.WidgetDefinition; +import com.datadog.api.client.v1.model.WidgetDisplayType; +import com.datadog.api.client.v1.model.WidgetLineType; +import com.datadog.api.client.v1.model.WidgetLineWidth; +import com.datadog.api.client.v1.model.WidgetRequestStyle; +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() + .layoutType(DashboardLayoutType.ORDERED) + .title("Example-Dashboard without order_by") + .widgets( + Collections.singletonList( + new Widget() + .definition( + new WidgetDefinition( + new TimeseriesWidgetDefinition() + .type(TimeseriesWidgetDefinitionType.TIMESERIES) + .requests( + Collections.singletonList( + new TimeseriesWidgetRequest() + .q("avg:system.cpu.user{*} by {host}") + .style( + new WidgetRequestStyle() + .palette("dog_classic") + .lineType(WidgetLineType.SOLID) + .lineWidth(WidgetLineWidth.NORMAL)) + .displayType(WidgetDisplayType.LINE))))))); + + 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/examples/v1/dashboards/CreateDashboard_416487533.java b/examples/v1/dashboards/CreateDashboard_416487533.java new file mode 100644 index 00000000000..71c68439838 --- /dev/null +++ b/examples/v1/dashboards/CreateDashboard_416487533.java @@ -0,0 +1,55 @@ +// Create a new dashboard with timeseries widget using order_by tags + +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.TimeseriesWidgetDefinition; +import com.datadog.api.client.v1.model.TimeseriesWidgetDefinitionType; +import com.datadog.api.client.v1.model.TimeseriesWidgetRequest; +import com.datadog.api.client.v1.model.Widget; +import com.datadog.api.client.v1.model.WidgetDefinition; +import com.datadog.api.client.v1.model.WidgetDisplayType; +import com.datadog.api.client.v1.model.WidgetRequestStyle; +import com.datadog.api.client.v1.model.WidgetStyleOrderBy; +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() + .layoutType(DashboardLayoutType.ORDERED) + .title("Example-Dashboard with order_by tags") + .widgets( + Collections.singletonList( + new Widget() + .definition( + new WidgetDefinition( + new TimeseriesWidgetDefinition() + .type(TimeseriesWidgetDefinitionType.TIMESERIES) + .requests( + Collections.singletonList( + new TimeseriesWidgetRequest() + .q("avg:system.cpu.user{*} by {host}") + .style( + new WidgetRequestStyle() + .palette("dog_classic") + .orderBy(WidgetStyleOrderBy.TAGS)) + .displayType(WidgetDisplayType.LINE))))))); + + 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/WidgetRequestStyle.java b/src/main/java/com/datadog/api/client/v1/model/WidgetRequestStyle.java index b1d80d0014b..1f45735cdc3 100644 --- a/src/main/java/com/datadog/api/client/v1/model/WidgetRequestStyle.java +++ b/src/main/java/com/datadog/api/client/v1/model/WidgetRequestStyle.java @@ -20,6 +20,7 @@ @JsonPropertyOrder({ WidgetRequestStyle.JSON_PROPERTY_LINE_TYPE, WidgetRequestStyle.JSON_PROPERTY_LINE_WIDTH, + WidgetRequestStyle.JSON_PROPERTY_ORDER_BY, WidgetRequestStyle.JSON_PROPERTY_PALETTE }) @jakarta.annotation.Generated( @@ -32,6 +33,9 @@ public class WidgetRequestStyle { public static final String JSON_PROPERTY_LINE_WIDTH = "line_width"; private WidgetLineWidth lineWidth; + public static final String JSON_PROPERTY_ORDER_BY = "order_by"; + private WidgetStyleOrderBy orderBy; + public static final String JSON_PROPERTY_PALETTE = "palette"; private String palette; @@ -85,6 +89,33 @@ public void setLineWidth(WidgetLineWidth lineWidth) { this.lineWidth = lineWidth; } + public WidgetRequestStyle orderBy(WidgetStyleOrderBy orderBy) { + this.orderBy = orderBy; + this.unparsed |= !orderBy.isValid(); + return this; + } + + /** + * How to order series in timeseries visualizations. - tags: Order series + * alphabetically by tag name (default behavior) - values: Order series by their + * current metric values (typically descending) + * + * @return orderBy + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_ORDER_BY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public WidgetStyleOrderBy getOrderBy() { + return orderBy; + } + + public void setOrderBy(WidgetStyleOrderBy orderBy) { + if (!orderBy.isValid()) { + this.unparsed = true; + } + this.orderBy = orderBy; + } + public WidgetRequestStyle palette(String palette) { this.palette = palette; return this; @@ -164,13 +195,14 @@ public boolean equals(Object o) { WidgetRequestStyle widgetRequestStyle = (WidgetRequestStyle) o; return Objects.equals(this.lineType, widgetRequestStyle.lineType) && Objects.equals(this.lineWidth, widgetRequestStyle.lineWidth) + && Objects.equals(this.orderBy, widgetRequestStyle.orderBy) && Objects.equals(this.palette, widgetRequestStyle.palette) && Objects.equals(this.additionalProperties, widgetRequestStyle.additionalProperties); } @Override public int hashCode() { - return Objects.hash(lineType, lineWidth, palette, additionalProperties); + return Objects.hash(lineType, lineWidth, orderBy, palette, additionalProperties); } @Override @@ -179,6 +211,7 @@ public String toString() { sb.append("class WidgetRequestStyle {\n"); sb.append(" lineType: ").append(toIndentedString(lineType)).append("\n"); sb.append(" lineWidth: ").append(toIndentedString(lineWidth)).append("\n"); + sb.append(" orderBy: ").append(toIndentedString(orderBy)).append("\n"); sb.append(" palette: ").append(toIndentedString(palette)).append("\n"); sb.append(" additionalProperties: ") .append(toIndentedString(additionalProperties)) diff --git a/src/main/java/com/datadog/api/client/v1/model/WidgetStyleOrderBy.java b/src/main/java/com/datadog/api/client/v1/model/WidgetStyleOrderBy.java new file mode 100644 index 00000000000..68d85e59f88 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v1/model/WidgetStyleOrderBy.java @@ -0,0 +1,59 @@ +/* + * 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; + +/** + * How to order series in timeseries visualizations. - tags: Order series + * alphabetically by tag name (default behavior) - values: Order series by their + * current metric values (typically descending) + */ +@JsonSerialize(using = WidgetStyleOrderBy.WidgetStyleOrderBySerializer.class) +public class WidgetStyleOrderBy extends ModelEnum { + + private static final Set allowedValues = + new HashSet(Arrays.asList("tags", "values")); + + public static final WidgetStyleOrderBy TAGS = new WidgetStyleOrderBy("tags"); + public static final WidgetStyleOrderBy VALUES = new WidgetStyleOrderBy("values"); + + WidgetStyleOrderBy(String value) { + super(value, allowedValues); + } + + public static class WidgetStyleOrderBySerializer extends StdSerializer { + public WidgetStyleOrderBySerializer(Class t) { + super(t); + } + + public WidgetStyleOrderBySerializer() { + this(null); + } + + @Override + public void serialize(WidgetStyleOrderBy value, JsonGenerator jgen, SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static WidgetStyleOrderBy fromValue(String value) { + return new WidgetStyleOrderBy(value); + } +} diff --git a/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_tags.freeze b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_tags.freeze new file mode 100644 index 00000000000..951919f26bd --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_tags.freeze @@ -0,0 +1 @@ +2026-01-20T23:39:22.864Z \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_tags.json b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_tags.json new file mode 100644 index 00000000000..0268f5ae5a2 --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_tags.json @@ -0,0 +1,58 @@ +[ + { + "httpRequest": { + "body": { + "type": "JSON", + "json": "{\"layout_type\":\"ordered\",\"title\":\"Test-Create_a_new_dashboard_with_timeseries_widget_using_order_by_tags-1768952362 with order_by tags\",\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"line\",\"q\":\"avg:system.cpu.user{*} by {host}\",\"style\":{\"order_by\":\"tags\",\"palette\":\"dog_classic\"}}],\"type\":\"timeseries\"}}]}" + }, + "headers": {}, + "method": "POST", + "path": "/api/v1/dashboard", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"id\":\"2r3-a4g-ubz\",\"title\":\"Test-Create_a_new_dashboard_with_timeseries_widget_using_order_by_tags-1768952362 with order_by tags\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":\"frog\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/2r3-a4g-ubz/test-createanewdashboardwithtimeserieswidgetusingorderbytags-1768952362-with-ord\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"line\",\"q\":\"avg:system.cpu.user{*} by {host}\",\"style\":{\"order_by\":\"tags\",\"palette\":\"dog_classic\"}}],\"type\":\"timeseries\"},\"id\":8704189893014651}],\"notify_list\":null,\"created_at\":\"2026-01-20T23:39:22.992533+00:00\",\"modified_at\":\"2026-01-20T23:39:22.992533+00:00\",\"restricted_roles\":[]}", + "headers": { + "Content-Type": [ + "application/json" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "abeac4e0-5184-00e1-9b5a-81838f265016" + }, + { + "httpRequest": { + "headers": {}, + "method": "DELETE", + "path": "/api/v1/dashboard/2r3-a4g-ubz", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"deleted_dashboard_id\":\"2r3-a4g-ubz\"}", + "headers": { + "Content-Type": [ + "application/json" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "b2a45bba-7e7d-6dd1-c196-6614f1adfe42" + } +] \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_values.freeze b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_values.freeze new file mode 100644 index 00000000000..67f72333494 --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_values.freeze @@ -0,0 +1 @@ +2026-01-20T23:39:50.889Z \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_values.json b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_values.json new file mode 100644 index 00000000000..492a66c2e8f --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_using_order_by_values.json @@ -0,0 +1,58 @@ +[ + { + "httpRequest": { + "body": { + "type": "JSON", + "json": "{\"layout_type\":\"ordered\",\"title\":\"Test-Create_a_new_dashboard_with_timeseries_widget_using_order_by_values-1768952390 with order_by values\",\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"line\",\"q\":\"avg:system.cpu.user{*} by {host}\",\"style\":{\"order_by\":\"values\",\"palette\":\"warm\"}}],\"type\":\"timeseries\"}}]}" + }, + "headers": {}, + "method": "POST", + "path": "/api/v1/dashboard", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"id\":\"5ee-dqv-ruw\",\"title\":\"Test-Create_a_new_dashboard_with_timeseries_widget_using_order_by_values-1768952390 with order_by values\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":\"frog\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/5ee-dqv-ruw/test-createanewdashboardwithtimeserieswidgetusingorderbyvalues-1768952390-with-o\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"line\",\"q\":\"avg:system.cpu.user{*} by {host}\",\"style\":{\"order_by\":\"values\",\"palette\":\"warm\"}}],\"type\":\"timeseries\"},\"id\":8314193502199768}],\"notify_list\":null,\"created_at\":\"2026-01-20T23:39:51.018015+00:00\",\"modified_at\":\"2026-01-20T23:39:51.018015+00:00\",\"restricted_roles\":[]}", + "headers": { + "Content-Type": [ + "application/json" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "234d406c-2755-1e9a-049a-34be4f0dfc42" + }, + { + "httpRequest": { + "headers": {}, + "method": "DELETE", + "path": "/api/v1/dashboard/5ee-dqv-ruw", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"deleted_dashboard_id\":\"5ee-dqv-ruw\"}", + "headers": { + "Content-Type": [ + "application/json" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "d72a5f38-3cf3-59ed-2726-0704c0e048a9" + } +] \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_without_order_by_for_backward_compatibility.freeze b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_without_order_by_for_backward_compatibility.freeze new file mode 100644 index 00000000000..608e803e2fa --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_without_order_by_for_backward_compatibility.freeze @@ -0,0 +1 @@ +2026-01-20T23:40:15.566Z \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_without_order_by_for_backward_compatibility.json b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_without_order_by_for_backward_compatibility.json new file mode 100644 index 00000000000..158ff1249fd --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_new_dashboard_with_timeseries_widget_without_order_by_for_backward_compatibility.json @@ -0,0 +1,58 @@ +[ + { + "httpRequest": { + "body": { + "type": "JSON", + "json": "{\"layout_type\":\"ordered\",\"title\":\"Test-Create_a_new_dashboard_with_timeseries_widget_without_order_by_for_backward_compatibility-1768952415 without order_by\",\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"line\",\"q\":\"avg:system.cpu.user{*} by {host}\",\"style\":{\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"dog_classic\"}}],\"type\":\"timeseries\"}}]}" + }, + "headers": {}, + "method": "POST", + "path": "/api/v1/dashboard", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"id\":\"6bg-rgq-fxc\",\"title\":\"Test-Create_a_new_dashboard_with_timeseries_widget_without_order_by_for_backward_compatibility-1768952415 without order_by\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":\"frog\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/6bg-rgq-fxc/test-createanewdashboardwithtimeserieswidgetwithoutorderbyforbackwardcompatibili\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"line\",\"q\":\"avg:system.cpu.user{*} by {host}\",\"style\":{\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"dog_classic\"}}],\"type\":\"timeseries\"},\"id\":2503785343641105}],\"notify_list\":null,\"created_at\":\"2026-01-20T23:40:15.937647+00:00\",\"modified_at\":\"2026-01-20T23:40:15.937647+00:00\",\"restricted_roles\":[]}", + "headers": { + "Content-Type": [ + "application/json" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "dce11a09-aa12-a01e-d5be-e912789a546a" + }, + { + "httpRequest": { + "headers": {}, + "method": "DELETE", + "path": "/api/v1/dashboard/6bg-rgq-fxc", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"deleted_dashboard_id\":\"6bg-rgq-fxc\"}", + "headers": { + "Content-Type": [ + "application/json" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "e3bd787e-08c1-2124-e7f8-0f3491c37147" + } +] \ 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 6b67bc65044..349f7de6f9d 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 @@ -946,6 +946,24 @@ Feature: Dashboards And the response "widgets[0].definition.requests[0].display_type" is equal to "bars" And the response "widgets[0].definition.requests[0].q" is equal to "sum:trace.test.errors{env:prod,service:datadog-api-spec} by {resource_name}.as_count()" + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with timeseries widget using order_by tags + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with order_by tags","widgets": [{"definition": {"type": "timeseries","requests": [{"q": "avg:system.cpu.user{*} by {host}","style": {"palette": "dog_classic","order_by": "tags"},"display_type": "line"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].style.order_by" is equal to "tags" + And the response "widgets[0].definition.requests[0].style.palette" is equal to "dog_classic" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with timeseries widget using order_by values + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with order_by values","widgets": [{"definition": {"type": "timeseries","requests": [{"q": "avg:system.cpu.user{*} by {host}","style": {"palette": "warm","order_by": "values"},"display_type": "line"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].style.order_by" is equal to "values" + And the response "widgets[0].definition.requests[0].style.palette" is equal to "warm" + @team:DataDog/dashboards-backend Scenario: Create a new dashboard with timeseries widget with custom_unit Given new "CreateDashboard" request @@ -958,6 +976,16 @@ Feature: Dashboards And the response "widgets[0].definition.requests[0].formulas[0].number_format.unit.type" is equal to "canonical_unit" And the response "widgets[0].definition.requests[0].formulas[0].number_format.unit.unit_name" is equal to "fraction" + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with timeseries widget without order_by for backward compatibility + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} without order_by","widgets": [{"definition": {"type": "timeseries","requests": [{"q": "avg:system.cpu.user{*} by {host}","style": {"palette": "dog_classic","line_type": "solid","line_width": "normal"},"display_type": "line"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].style.palette" is equal to "dog_classic" + And the response "widgets[0].definition.requests[0].style.line_type" is equal to "solid" + And the response "widgets[0].definition.requests[0].style.line_width" is equal to "normal" + @team:DataDog/dashboards-backend Scenario: Create a new dashboard with toplist widget Given new "CreateDashboard" request