diff --git a/.apigentools-info b/.apigentools-info index 03fd565fbc8f..52ac331122a2 100644 --- a/.apigentools-info +++ b/.apigentools-info @@ -4,13 +4,13 @@ "spec_versions": { "v1": { "apigentools_version": "1.5.1.dev2", - "regenerated": "2022-01-04 14:48:51.731558", - "spec_repo_commit": "116ef08" + "regenerated": "2022-01-04 16:17:59.978670", + "spec_repo_commit": "37a4c8d" }, "v2": { "apigentools_version": "1.5.1.dev2", - "regenerated": "2022-01-04 14:48:51.764179", - "spec_repo_commit": "116ef08" + "regenerated": "2022-01-04 16:18:00.015072", + "spec_repo_commit": "37a4c8d" } } } \ No newline at end of file diff --git a/.generator/schemas/v1/openapi.yaml b/.generator/schemas/v1/openapi.yaml index b98a0fc6303a..8a4af43aa44c 100644 --- a/.generator/schemas/v1/openapi.yaml +++ b/.generator/schemas/v1/openapi.yaml @@ -1721,6 +1721,7 @@ components: description: A day of the week, formatted as `Mon`, `Tue`, `Wed`, `Thu`, `Fri`, `Sat` or `Sun`. type: string + nullable: true type: array type: object Event: diff --git a/features/v1/dashboards.feature b/features/v1/dashboards.feature index 153658192024..d4257e7238af 100644 --- a/features/v1/dashboards.feature +++ b/features/v1/dashboards.feature @@ -48,6 +48,27 @@ Feature: Dashboards When the request is sent Then the response status is 200 OK + @team:DataDog/dashboards + Scenario: Create a new dashboard with alert_graph widget + Given there is a valid "monitor" in the system + And new "CreateDashboard" request + And body from file "dashboards_json_payload/alert_graph_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "alert_graph" + And the response "widgets[0].definition.viz_type" is equal to "timeseries" + And the response "widgets[0].definition.alert_id" is equal to "{{ monitor.id }}" + + @team:DataDog/dashboards + Scenario: Create a new dashboard with alert_value widget + Given there is a valid "monitor" in the system + And new "CreateDashboard" request + And body from file "dashboards_json_payload/alert_value_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "alert_value" + And the response "widgets[0].definition.alert_id" is equal to "{{ monitor.id }}" + @team:DataDog/dashboards Scenario: Create a new dashboard with an audit logs query Given new "CreateDashboard" request @@ -89,6 +110,16 @@ 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 + Scenario: Create a new dashboard with check_status widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/check_status_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "check_status" + And the response "widgets[0].definition.check" is equal to "datadog.agent.up" + And the response "widgets[0].definition.grouping" is equal to "check" + @team:DataDog/dashboards Scenario: Create a new dashboard with distribution widget and apm stats data Given new "CreateDashboard" request @@ -101,6 +132,24 @@ Feature: Dashboards And the response "widgets[0].definition.requests[0].apm_stats_query.service" is equal to "cassandra" And the response "widgets[0].definition.requests[0].apm_stats_query.name" is equal to "cassandra.query" + @team:DataDog/dashboards + Scenario: Create a new dashboard with event_stream widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/event_stream_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "event_stream" + And the response "widgets[0].definition.query" is equal to "example-query" + + @team:DataDog/dashboards + Scenario: Create a new dashboard with event_timeline widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/event_timeline_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "event_timeline" + And the response "widgets[0].definition.query" is equal to "status:error priority:all" + @team:DataDog/dashboards Scenario: Create a new dashboard with formulas and functions scatterplot widget Given new "CreateDashboard" request @@ -123,93 +172,6 @@ Feature: Dashboards And the response "widgets[0].definition.requests.table.queries[1].aggregator" is equal to "avg" And the response "widgets[0].definition.requests.table.response_format" is equal to "scalar" - @team:DataDog/dashboards - Scenario: Create a new dashboard with funnel widget - Given new "CreateDashboard" request - And body with value {"layout_type": "ordered", "title": "{{ unique }} with funnel widget","widgets": [{"definition": {"type": "funnel","requests": [{"query":{"data_source":"rum","query_string":"","steps":[]},"request_type":"funnel"}]}}]} - When the request is sent - Then the response status is 200 OK - - @team:DataDog/dashboards - Scenario: Create a new dashboard with list_stream widget - Given new "CreateDashboard" request - And body with value {"layout_type": "ordered", "title": "{{ unique }} with list_stream widget","widgets": [{"definition": {"type": "list_stream","requests": [{"columns":[{"width":"auto","field":"timestamp"}],"query":{"data_source":"issue_stream","query_string":""},"response_format":"event_list"}]}}]} - When the request is sent - Then the response status is 200 OK - - @team:DataDog/dashboards - Scenario: Create a new dashboard with sunburst widget and metrics data - Given new "CreateDashboard" request - And body with value { "title": "{{ unique }}", "widgets": [ { "definition": { "title": "", "title_size": "16", "title_align": "left", "type": "sunburst", "requests": [ { "response_format": "scalar", "formulas": [ { "formula": "query1" } ], "queries": [ { "query": "sum:system.mem.used{*} by {service}", "data_source": "metrics", "name": "query1", "aggregator": "sum" } ] } ] }, "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].query" is equal to "sum:system.mem.used{*} by {service}" - And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "metrics" - 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].aggregator" is equal to "sum" - And the response "widgets[0].definition.requests[0].formulas[0].formula" is equal to "query1" - - @team:DataDog/dashboards - Scenario: Create a new dashboard with timeseries widget containing style attributes - Given new "CreateDashboard" request - And body with value {"layout_type": "ordered", "title": "{{ unique }} with timeseries widget","widgets": [{"definition": {"type": "timeseries","requests": [{"q": "sum:trace.test.errors{env:prod,service:datadog-api-spec} by {resource_name}.as_count()","on_right_yaxis": false,"style": {"palette": "warm","line_type": "solid","line_width": "normal"},"display_type": "bars"}]}}]} - When the request is sent - Then the response status is 200 OK - And the response "widgets[0].definition.requests[0].on_right_yaxis" is false - And the response "widgets[0].definition.requests[0].style" is equal to {"palette": "warm","line_type": "solid","line_width": "normal"} - 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 - Scenario: Create a new dashboard with alert_graph widget - Given there is a valid "monitor" in the system - And new "CreateDashboard" request - And body from file "dashboards_json_payload/alert_graph_widget.json" - When the request is sent - Then the response status is 200 OK - And the response "widgets[0].definition.type" is equal to "alert_graph" - And the response "widgets[0].definition.viz_type" is equal to "timeseries" - And the response "widgets[0].definition.alert_id" is equal to "{{ monitor.id }}" - - @team:DataDog/dashboards - Scenario: Create a new dashboard with alert_value widget - Given there is a valid "monitor" in the system - And new "CreateDashboard" request - And body from file "dashboards_json_payload/alert_value_widget.json" - When the request is sent - Then the response status is 200 OK - And the response "widgets[0].definition.type" is equal to "alert_value" - And the response "widgets[0].definition.alert_id" is equal to "{{ monitor.id }}" - - @team:DataDog/dashboards - Scenario: Create a new dashboard with check_status widget - Given new "CreateDashboard" request - And body from file "dashboards_json_payload/check_status_widget.json" - When the request is sent - Then the response status is 200 OK - And the response "widgets[0].definition.type" is equal to "check_status" - And the response "widgets[0].definition.check" is equal to "datadog.agent.up" - And the response "widgets[0].definition.grouping" is equal to "check" - - @team:DataDog/dashboards - Scenario: Create a new dashboard with event_stream widget - Given new "CreateDashboard" request - And body from file "dashboards_json_payload/event_stream_widget.json" - When the request is sent - Then the response status is 200 OK - And the response "widgets[0].definition.type" is equal to "event_stream" - And the response "widgets[0].definition.query" is equal to "example-query" - - @team:DataDog/dashboards - Scenario: Create a new dashboard with event_timeline widget - Given new "CreateDashboard" request - And body from file "dashboards_json_payload/event_timeline_widget.json" - When the request is sent - Then the response status is 200 OK - And the response "widgets[0].definition.type" is equal to "event_timeline" - And the response "widgets[0].definition.query" is equal to "status:error priority:all" - @team:DataDog/dashboards Scenario: Create a new dashboard with free_text widget Given new "CreateDashboard" request @@ -220,6 +182,13 @@ Feature: Dashboards And the response "widgets[0].definition.text" is equal to "Example free text" And the response "widgets[0].definition.color" is equal to "#4d4d4d" + @team:DataDog/dashboards + Scenario: Create a new dashboard with funnel widget + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with funnel widget","widgets": [{"definition": {"type": "funnel","requests": [{"query":{"data_source":"rum","query_string":"","steps":[]},"request_type":"funnel"}]}}]} + When the request is sent + Then the response status is 200 OK + @team:DataDog/dashboards Scenario: Create a new dashboard with geomap widget Given new "CreateDashboard" request @@ -264,6 +233,13 @@ Feature: Dashboards And the response "widgets[0].definition.type" is equal to "image" And the response "widgets[0].definition.url" is equal to "https://example.com/image.png" + @team:DataDog/dashboards + Scenario: Create a new dashboard with list_stream widget + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with list_stream widget","widgets": [{"definition": {"type": "list_stream","requests": [{"columns":[{"width":"auto","field":"timestamp"}],"query":{"data_source":"issue_stream","query_string":""},"response_format":"event_list"}]}}]} + When the request is sent + Then the response status is 200 OK + @team:DataDog/dashboards Scenario: Create a new dashboard with log_stream widget Given new "CreateDashboard" request @@ -291,6 +267,14 @@ Feature: Dashboards And the response "widgets[0].definition.type" is equal to "note" And the response "widgets[0].definition.content" is equal to "# Example Note" + @team:DataDog/dashboards + Scenario: Create a new dashboard with query_table widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/query_table_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "query_table" + @team:DataDog/dashboards Scenario: Create a new dashboard with query_value widget Given new "CreateDashboard" request @@ -308,6 +292,15 @@ Feature: Dashboards Then the response status is 200 OK And the response "widgets[0].definition.type" is equal to "scatterplot" + @team:DataDog/dashboards + Scenario: Create a new dashboard with servicemap widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/servicemap_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "servicemap" + And the response "widgets[0].definition.filters" is equal to ["env:none","environment:*"] + @team:DataDog/dashboards Scenario: Create a new dashboard with slo widget Given there is a valid "slo" in the system @@ -319,38 +312,45 @@ Feature: Dashboards And the response "widgets[0].definition.slo_id" is equal to "{{ slo.data[0].id }}" @team:DataDog/dashboards - Scenario: Create a new dashboard with servicemap widget + Scenario: Create a new dashboard with sunburst widget and metrics data Given new "CreateDashboard" request - And body from file "dashboards_json_payload/servicemap_widget.json" + And body with value { "title": "{{ unique }}", "widgets": [ { "definition": { "title": "", "title_size": "16", "title_align": "left", "type": "sunburst", "requests": [ { "response_format": "scalar", "formulas": [ { "formula": "query1" } ], "queries": [ { "query": "sum:system.mem.used{*} by {service}", "data_source": "metrics", "name": "query1", "aggregator": "sum" } ] } ] }, "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.type" is equal to "servicemap" - And the response "widgets[0].definition.filters" is equal to ["env:none","environment:*"] + And the response "widgets[0].definition.requests[0].response_format" is equal to "scalar" + And the response "widgets[0].definition.requests[0].queries[0].query" is equal to "sum:system.mem.used{*} by {service}" + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "metrics" + 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].aggregator" is equal to "sum" + And the response "widgets[0].definition.requests[0].formulas[0].formula" is equal to "query1" @team:DataDog/dashboards - Scenario: Create a new dashboard with trace_service widget + Scenario: Create a new dashboard with timeseries widget containing style attributes Given new "CreateDashboard" request - And body from file "dashboards_json_payload/trace_service_widget.json" + And body with value {"layout_type": "ordered", "title": "{{ unique }} with timeseries widget","widgets": [{"definition": {"type": "timeseries","requests": [{"q": "sum:trace.test.errors{env:prod,service:datadog-api-spec} by {resource_name}.as_count()","on_right_yaxis": false,"style": {"palette": "warm","line_type": "solid","line_width": "normal"},"display_type": "bars"}]}}]} When the request is sent Then the response status is 200 OK - And the response "widgets[0].definition.type" is equal to "trace_service" - And the response "widgets[0].definition.env" is equal to "none" + And the response "widgets[0].definition.requests[0].on_right_yaxis" is false + And the response "widgets[0].definition.requests[0].style" is equal to {"palette": "warm","line_type": "solid","line_width": "normal"} + 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 - Scenario: Create a new dashboard with query_table widget + Scenario: Create a new dashboard with toplist widget Given new "CreateDashboard" request - And body from file "dashboards_json_payload/query_table_widget.json" + And body from file "dashboards_json_payload/toplist_widget.json" When the request is sent Then the response status is 200 OK - And the response "widgets[0].definition.type" is equal to "query_table" + And the response "widgets[0].definition.type" is equal to "toplist" @team:DataDog/dashboards - Scenario: Create a new dashboard with toplist widget + Scenario: Create a new dashboard with trace_service widget Given new "CreateDashboard" request - And body from file "dashboards_json_payload/toplist_widget.json" + And body from file "dashboards_json_payload/trace_service_widget.json" When the request is sent Then the response status is 200 OK - And the response "widgets[0].definition.type" is equal to "toplist" + And the response "widgets[0].definition.type" is equal to "trace_service" + And the response "widgets[0].definition.env" is equal to "none" @generated @skip @team:DataDog/dashboards Scenario: Delete a dashboard returns "Dashboards Not Found" response