Skip to content

Commit 7289544

Browse files
api-clients-generation-pipeline[bot]ci.datadog-api-spec
andauthored
Add product analytics to FormulaAndFunctionEventsDataSource (#3137)
Co-authored-by: ci.datadog-api-spec <packages@datadoghq.com>
1 parent be2058a commit 7289544

File tree

6 files changed

+179
-1
lines changed

6 files changed

+179
-1
lines changed

.generator/schemas/v1/openapi.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2875,6 +2875,7 @@ components:
28752875
- ci_tests
28762876
- ci_pipelines
28772877
- incident_analytics
2878+
- product_analytics
28782879
example: logs
28792880
type: string
28802881
x-enum-varnames:
@@ -2889,6 +2890,7 @@ components:
28892890
- CI_TESTS
28902891
- CI_PIPELINES
28912892
- INCIDENT_ANALYTICS
2893+
- PRODUCT_ANALYTICS
28922894
FormulaAndFunctionMetricAggregation:
28932895
description: The aggregation methods available for metrics queries.
28942896
enum:
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
// Create a new timeseries widget with product_analytics data source
2+
3+
import com.datadog.api.client.ApiClient;
4+
import com.datadog.api.client.ApiException;
5+
import com.datadog.api.client.v1.api.DashboardsApi;
6+
import com.datadog.api.client.v1.model.Dashboard;
7+
import com.datadog.api.client.v1.model.DashboardLayoutType;
8+
import com.datadog.api.client.v1.model.DashboardReflowType;
9+
import com.datadog.api.client.v1.model.FormulaAndFunctionEventAggregation;
10+
import com.datadog.api.client.v1.model.FormulaAndFunctionEventQueryDefinition;
11+
import com.datadog.api.client.v1.model.FormulaAndFunctionEventQueryDefinitionCompute;
12+
import com.datadog.api.client.v1.model.FormulaAndFunctionEventQueryDefinitionSearch;
13+
import com.datadog.api.client.v1.model.FormulaAndFunctionEventsDataSource;
14+
import com.datadog.api.client.v1.model.FormulaAndFunctionQueryDefinition;
15+
import com.datadog.api.client.v1.model.FormulaAndFunctionResponseFormat;
16+
import com.datadog.api.client.v1.model.TimeseriesWidgetDefinition;
17+
import com.datadog.api.client.v1.model.TimeseriesWidgetDefinitionType;
18+
import com.datadog.api.client.v1.model.TimeseriesWidgetLegendColumn;
19+
import com.datadog.api.client.v1.model.TimeseriesWidgetLegendLayout;
20+
import com.datadog.api.client.v1.model.TimeseriesWidgetRequest;
21+
import com.datadog.api.client.v1.model.Widget;
22+
import com.datadog.api.client.v1.model.WidgetDefinition;
23+
import com.datadog.api.client.v1.model.WidgetDisplayType;
24+
import com.datadog.api.client.v1.model.WidgetFormula;
25+
import com.datadog.api.client.v1.model.WidgetLegacyLiveSpan;
26+
import com.datadog.api.client.v1.model.WidgetLineType;
27+
import com.datadog.api.client.v1.model.WidgetLineWidth;
28+
import com.datadog.api.client.v1.model.WidgetRequestStyle;
29+
import com.datadog.api.client.v1.model.WidgetTime;
30+
import java.util.Arrays;
31+
import java.util.Collections;
32+
33+
public class Example {
34+
public static void main(String[] args) {
35+
ApiClient defaultClient = ApiClient.getDefaultApiClient();
36+
DashboardsApi apiInstance = new DashboardsApi(defaultClient);
37+
38+
Dashboard body =
39+
new Dashboard()
40+
.title("Example-Dashboard with product_analytics datasource")
41+
.widgets(
42+
Collections.singletonList(
43+
new Widget()
44+
.definition(
45+
new WidgetDefinition(
46+
new TimeseriesWidgetDefinition()
47+
.title("")
48+
.showLegend(true)
49+
.legendLayout(TimeseriesWidgetLegendLayout.AUTO)
50+
.legendColumns(
51+
Arrays.asList(
52+
TimeseriesWidgetLegendColumn.AVG,
53+
TimeseriesWidgetLegendColumn.MIN,
54+
TimeseriesWidgetLegendColumn.MAX,
55+
TimeseriesWidgetLegendColumn.VALUE,
56+
TimeseriesWidgetLegendColumn.SUM))
57+
.time(new WidgetTime(new WidgetLegacyLiveSpan()))
58+
.type(TimeseriesWidgetDefinitionType.TIMESERIES)
59+
.requests(
60+
Collections.singletonList(
61+
new TimeseriesWidgetRequest()
62+
.formulas(
63+
Collections.singletonList(
64+
new WidgetFormula().formula("query1")))
65+
.queries(
66+
Collections.singletonList(
67+
new FormulaAndFunctionQueryDefinition(
68+
new FormulaAndFunctionEventQueryDefinition()
69+
.dataSource(
70+
FormulaAndFunctionEventsDataSource
71+
.PRODUCT_ANALYTICS)
72+
.name("query1")
73+
.search(
74+
new FormulaAndFunctionEventQueryDefinitionSearch()
75+
.query("test_level:test"))
76+
.indexes(
77+
Collections.singletonList("*"))
78+
.compute(
79+
new FormulaAndFunctionEventQueryDefinitionCompute()
80+
.aggregation(
81+
FormulaAndFunctionEventAggregation
82+
.COUNT)))))
83+
.responseFormat(
84+
FormulaAndFunctionResponseFormat.TIMESERIES)
85+
.style(
86+
new WidgetRequestStyle()
87+
.palette("dog_classic")
88+
.lineType(WidgetLineType.SOLID)
89+
.lineWidth(WidgetLineWidth.NORMAL))
90+
.displayType(WidgetDisplayType.LINE)))))))
91+
.layoutType(DashboardLayoutType.ORDERED)
92+
.reflowType(DashboardReflowType.AUTO);
93+
94+
try {
95+
Dashboard result = apiInstance.createDashboard(body);
96+
System.out.println(result);
97+
} catch (ApiException e) {
98+
System.err.println("Exception when calling DashboardsApi#createDashboard");
99+
System.err.println("Status code: " + e.getCode());
100+
System.err.println("Reason: " + e.getResponseBody());
101+
System.err.println("Response headers: " + e.getResponseHeaders());
102+
e.printStackTrace();
103+
}
104+
}
105+
}

src/main/java/com/datadog/api/client/v1/model/FormulaAndFunctionEventsDataSource.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ public class FormulaAndFunctionEventsDataSource extends ModelEnum<String> {
3636
"events",
3737
"ci_tests",
3838
"ci_pipelines",
39-
"incident_analytics"));
39+
"incident_analytics",
40+
"product_analytics"));
4041

4142
public static final FormulaAndFunctionEventsDataSource LOGS =
4243
new FormulaAndFunctionEventsDataSource("logs");
@@ -60,6 +61,8 @@ public class FormulaAndFunctionEventsDataSource extends ModelEnum<String> {
6061
new FormulaAndFunctionEventsDataSource("ci_pipelines");
6162
public static final FormulaAndFunctionEventsDataSource INCIDENT_ANALYTICS =
6263
new FormulaAndFunctionEventsDataSource("incident_analytics");
64+
public static final FormulaAndFunctionEventsDataSource PRODUCT_ANALYTICS =
65+
new FormulaAndFunctionEventsDataSource("product_analytics");
6366

6467
FormulaAndFunctionEventsDataSource(String value) {
6568
super(value, allowedValues);
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2025-09-18T18:51:17.951Z
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
[
2+
{
3+
"httpRequest": {
4+
"body": {
5+
"type": "JSON",
6+
"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\"}}]}"
7+
},
8+
"headers": {},
9+
"method": "POST",
10+
"path": "/api/v1/dashboard",
11+
"keepAlive": false,
12+
"secure": true
13+
},
14+
"httpResponse": {
15+
"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\":[]}",
16+
"headers": {
17+
"Content-Type": [
18+
"application/json"
19+
]
20+
},
21+
"statusCode": 200,
22+
"reasonPhrase": "OK"
23+
},
24+
"times": {
25+
"remainingTimes": 1
26+
},
27+
"timeToLive": {
28+
"unlimited": true
29+
},
30+
"id": "8fcc4923-c4ef-8c94-eabc-b970afb3a8e2"
31+
},
32+
{
33+
"httpRequest": {
34+
"headers": {},
35+
"method": "DELETE",
36+
"path": "/api/v1/dashboard/zvr-td5-ppm",
37+
"keepAlive": false,
38+
"secure": true
39+
},
40+
"httpResponse": {
41+
"body": "{\"deleted_dashboard_id\":\"zvr-td5-ppm\"}\n",
42+
"headers": {
43+
"Content-Type": [
44+
"application/json"
45+
]
46+
},
47+
"statusCode": 200,
48+
"reasonPhrase": "OK"
49+
},
50+
"times": {
51+
"remainingTimes": 1
52+
},
53+
"timeToLive": {
54+
"unlimited": true
55+
},
56+
"id": "b2bcdc4b-8964-a91c-4df0-a3bfb46ad9f5"
57+
}
58+
]

src/test/resources/com/datadog/api/client/v1/api/dashboards.feature

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -950,6 +950,15 @@ Feature: Dashboards
950950
And the response "widgets[0].definition.time.value" is equal to 8
951951
And the response "widgets[0].definition.time.hide_incomplete_cost_data" is equal to true
952952

953+
@team:DataDog/dashboards-backend
954+
Scenario: Create a new timeseries widget with product_analytics data source
955+
Given new "CreateDashboard" request
956+
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"}
957+
When the request is sent
958+
Then the response status is 200 OK
959+
And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "product_analytics"
960+
And the response "widgets[0].definition.requests[0].queries[0].search.query" is equal to "test_level:test"
961+
953962
@generated @skip @team:DataDog/reporting-and-sharing
954963
Scenario: Create a shared dashboard returns "Bad Request" response
955964
Given new "CreatePublicDashboard" request

0 commit comments

Comments
 (0)