diff --git a/.generator/schemas/v1/openapi.yaml b/.generator/schemas/v1/openapi.yaml index a1335722ca4..dc6c8110eef 100644 --- a/.generator/schemas/v1/openapi.yaml +++ b/.generator/schemas/v1/openapi.yaml @@ -2875,6 +2875,7 @@ components: - ci_tests - ci_pipelines - incident_analytics + - product_analytics example: logs type: string x-enum-varnames: @@ -2889,6 +2890,7 @@ components: - CI_TESTS - CI_PIPELINES - INCIDENT_ANALYTICS + - PRODUCT_ANALYTICS FormulaAndFunctionMetricAggregation: description: The aggregation methods available for metrics queries. enum: diff --git a/examples/v1/dashboards/CreateDashboard_607525069.java b/examples/v1/dashboards/CreateDashboard_607525069.java new file mode 100644 index 00000000000..ea085020ef0 --- /dev/null +++ b/examples/v1/dashboards/CreateDashboard_607525069.java @@ -0,0 +1,105 @@ +// Create a new timeseries widget with product_analytics data source + +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.DashboardReflowType; +import com.datadog.api.client.v1.model.FormulaAndFunctionEventAggregation; +import com.datadog.api.client.v1.model.FormulaAndFunctionEventQueryDefinition; +import com.datadog.api.client.v1.model.FormulaAndFunctionEventQueryDefinitionCompute; +import com.datadog.api.client.v1.model.FormulaAndFunctionEventQueryDefinitionSearch; +import com.datadog.api.client.v1.model.FormulaAndFunctionEventsDataSource; +import com.datadog.api.client.v1.model.FormulaAndFunctionQueryDefinition; +import com.datadog.api.client.v1.model.FormulaAndFunctionResponseFormat; +import com.datadog.api.client.v1.model.TimeseriesWidgetDefinition; +import com.datadog.api.client.v1.model.TimeseriesWidgetDefinitionType; +import com.datadog.api.client.v1.model.TimeseriesWidgetLegendColumn; +import com.datadog.api.client.v1.model.TimeseriesWidgetLegendLayout; +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.WidgetFormula; +import com.datadog.api.client.v1.model.WidgetLegacyLiveSpan; +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 com.datadog.api.client.v1.model.WidgetTime; +import java.util.Arrays; +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 with product_analytics datasource") + .widgets( + Collections.singletonList( + new Widget() + .definition( + new WidgetDefinition( + new TimeseriesWidgetDefinition() + .title("") + .showLegend(true) + .legendLayout(TimeseriesWidgetLegendLayout.AUTO) + .legendColumns( + Arrays.asList( + TimeseriesWidgetLegendColumn.AVG, + TimeseriesWidgetLegendColumn.MIN, + TimeseriesWidgetLegendColumn.MAX, + TimeseriesWidgetLegendColumn.VALUE, + TimeseriesWidgetLegendColumn.SUM)) + .time(new WidgetTime(new WidgetLegacyLiveSpan())) + .type(TimeseriesWidgetDefinitionType.TIMESERIES) + .requests( + Collections.singletonList( + new TimeseriesWidgetRequest() + .formulas( + Collections.singletonList( + new WidgetFormula().formula("query1"))) + .queries( + Collections.singletonList( + new FormulaAndFunctionQueryDefinition( + new FormulaAndFunctionEventQueryDefinition() + .dataSource( + FormulaAndFunctionEventsDataSource + .PRODUCT_ANALYTICS) + .name("query1") + .search( + new FormulaAndFunctionEventQueryDefinitionSearch() + .query("test_level:test")) + .indexes( + Collections.singletonList("*")) + .compute( + new FormulaAndFunctionEventQueryDefinitionCompute() + .aggregation( + FormulaAndFunctionEventAggregation + .COUNT))))) + .responseFormat( + FormulaAndFunctionResponseFormat.TIMESERIES) + .style( + new WidgetRequestStyle() + .palette("dog_classic") + .lineType(WidgetLineType.SOLID) + .lineWidth(WidgetLineWidth.NORMAL)) + .displayType(WidgetDisplayType.LINE))))))) + .layoutType(DashboardLayoutType.ORDERED) + .reflowType(DashboardReflowType.AUTO); + + 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/FormulaAndFunctionEventsDataSource.java b/src/main/java/com/datadog/api/client/v1/model/FormulaAndFunctionEventsDataSource.java index 9d09dfb0efb..4fb35c0a27b 100644 --- a/src/main/java/com/datadog/api/client/v1/model/FormulaAndFunctionEventsDataSource.java +++ b/src/main/java/com/datadog/api/client/v1/model/FormulaAndFunctionEventsDataSource.java @@ -36,7 +36,8 @@ public class FormulaAndFunctionEventsDataSource extends ModelEnum { "events", "ci_tests", "ci_pipelines", - "incident_analytics")); + "incident_analytics", + "product_analytics")); public static final FormulaAndFunctionEventsDataSource LOGS = new FormulaAndFunctionEventsDataSource("logs"); @@ -60,6 +61,8 @@ public class FormulaAndFunctionEventsDataSource extends ModelEnum { new FormulaAndFunctionEventsDataSource("ci_pipelines"); public static final FormulaAndFunctionEventsDataSource INCIDENT_ANALYTICS = new FormulaAndFunctionEventsDataSource("incident_analytics"); + public static final FormulaAndFunctionEventsDataSource PRODUCT_ANALYTICS = + new FormulaAndFunctionEventsDataSource("product_analytics"); FormulaAndFunctionEventsDataSource(String value) { super(value, allowedValues); diff --git a/src/test/resources/cassettes/features/v1/Create_a_new_timeseries_widget_with_product_analytics_data_source.freeze b/src/test/resources/cassettes/features/v1/Create_a_new_timeseries_widget_with_product_analytics_data_source.freeze new file mode 100644 index 00000000000..ccf84dbc10c --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_new_timeseries_widget_with_product_analytics_data_source.freeze @@ -0,0 +1 @@ +2025-09-18T18:51:17.951Z \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v1/Create_a_new_timeseries_widget_with_product_analytics_data_source.json b/src/test/resources/cassettes/features/v1/Create_a_new_timeseries_widget_with_product_analytics_data_source.json new file mode 100644 index 00000000000..e8023c7f3d2 --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_new_timeseries_widget_with_product_analytics_data_source.json @@ -0,0 +1,58 @@ +[ + { + "httpRequest": { + "body": { + "type": "JSON", + "json": "{\"layout_type\":\"ordered\",\"reflow_type\":\"auto\",\"title\":\"Test-Create_a_new_timeseries_widget_with_product_analytics_data_source-1758221477 with product_analytics datasource\",\"widgets\":[{\"definition\":{\"legend_columns\":[\"avg\",\"min\",\"max\",\"value\",\"sum\"],\"legend_layout\":\"auto\",\"requests\":[{\"display_type\":\"line\",\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"product_analytics\",\"group_by\":[],\"indexes\":[\"*\"],\"name\":\"query1\",\"search\":{\"query\":\"test_level:test\"}}],\"response_format\":\"timeseries\",\"style\":{\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"dog_classic\"}}],\"show_legend\":true,\"time\":{},\"title\":\"\",\"type\":\"timeseries\"}}]}" + }, + "headers": {}, + "method": "POST", + "path": "/api/v1/dashboard", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"id\":\"zvr-td5-ppm\",\"title\":\"Test-Create_a_new_timeseries_widget_with_product_analytics_data_source-1758221477 with product_analytics datasource\",\"description\":null,\"author_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"author_name\":\"CI Account\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/zvr-td5-ppm/test-createanewtimeserieswidgetwithproductanalyticsdatasource-1758221477-with-pr\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"legend_columns\":[\"avg\",\"min\",\"max\",\"value\",\"sum\"],\"legend_layout\":\"auto\",\"requests\":[{\"display_type\":\"line\",\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"product_analytics\",\"group_by\":[],\"indexes\":[\"*\"],\"name\":\"query1\",\"search\":{\"query\":\"test_level:test\"}}],\"response_format\":\"timeseries\",\"style\":{\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"dog_classic\"}}],\"show_legend\":true,\"time\":{},\"title\":\"\",\"type\":\"timeseries\"},\"id\":6058978575853641}],\"notify_list\":null,\"created_at\":\"2025-09-18T18:51:18.107135+00:00\",\"modified_at\":\"2025-09-18T18:51:18.107135+00:00\",\"reflow_type\":\"auto\",\"restricted_roles\":[]}", + "headers": { + "Content-Type": [ + "application/json" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "8fcc4923-c4ef-8c94-eabc-b970afb3a8e2" + }, + { + "httpRequest": { + "headers": {}, + "method": "DELETE", + "path": "/api/v1/dashboard/zvr-td5-ppm", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"deleted_dashboard_id\":\"zvr-td5-ppm\"}\n", + "headers": { + "Content-Type": [ + "application/json" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "b2bcdc4b-8964-a91c-4df0-a3bfb46ad9f5" + } +] \ 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 f267082830d..0d161522e95 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 @@ -950,6 +950,15 @@ Feature: Dashboards And the response "widgets[0].definition.time.value" is equal to 8 And the response "widgets[0].definition.time.hide_incomplete_cost_data" is equal to true + @team:DataDog/dashboards-backend + Scenario: Create a new timeseries widget with product_analytics data source + Given new "CreateDashboard" request + And body with value {"title":"{{ unique }} with product_analytics datasource","widgets":[{"definition":{"title":"","show_legend":true,"legend_layout":"auto","legend_columns":["avg","min","max","value","sum"],"time":{},"type":"timeseries","requests":[{"formulas":[{"formula":"query1"}],"queries":[{"data_source":"product_analytics","name":"query1","search":{"query":"test_level:test"},"indexes":["*"],"compute":{"aggregation":"count"},"group_by":[]}],"response_format":"timeseries","style":{"palette":"dog_classic","line_type":"solid","line_width":"normal"},"display_type":"line"}]}}],"layout_type":"ordered","reflow_type":"auto"} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "product_analytics" + And the response "widgets[0].definition.requests[0].queries[0].search.query" is equal to "test_level:test" + @generated @skip @team:DataDog/reporting-and-sharing Scenario: Create a shared dashboard returns "Bad Request" response Given new "CreatePublicDashboard" request