Skip to content

Commit 7e05986

Browse files
api-clients-generation-pipeline[bot]ci.datadog-api-spec
andauthored
Add order_by field to timeseries widget request schema (#3113)
Co-authored-by: ci.datadog-api-spec <packages@datadoghq.com>
1 parent d70f765 commit 7e05986

15 files changed

+362
-0
lines changed

.generator/schemas/v1/openapi.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25956,6 +25956,8 @@ components:
2595625956
$ref: '#/components/schemas/WidgetLineType'
2595725957
line_width:
2595825958
$ref: '#/components/schemas/WidgetLineWidth'
25959+
order_by:
25960+
$ref: '#/components/schemas/WidgetStyleOrderBy'
2595925961
palette:
2596025962
description: Color palette to apply to the widget.
2596125963
type: string
@@ -26018,6 +26020,19 @@ components:
2601826020
description: Color palette to apply to the widget.
2601926021
type: string
2602026022
type: object
26023+
WidgetStyleOrderBy:
26024+
description: 'How to order series in timeseries visualizations.
26025+
26026+
- `tags`: Order series alphabetically by tag name (default behavior)
26027+
26028+
- `values`: Order series by their current metric values (typically descending)'
26029+
enum:
26030+
- tags
26031+
- values
26032+
type: string
26033+
x-enum-varnames:
26034+
- TAGS
26035+
- VALUES
2602126036
WidgetSummaryType:
2602226037
description: Which summary type should be used.
2602326038
enum:

docs/datadog_api_client.v1.model.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6857,6 +6857,13 @@ datadog\_api\_client.v1.model.widget\_style module
68576857
:members:
68586858
:show-inheritance:
68596859

6860+
datadog\_api\_client.v1.model.widget\_style\_order\_by module
6861+
-------------------------------------------------------------
6862+
6863+
.. automodule:: datadog_api_client.v1.model.widget_style_order_by
6864+
:members:
6865+
:show-inheritance:
6866+
68606867
datadog\_api\_client.v1.model.widget\_summary\_type module
68616868
----------------------------------------------------------
68626869

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
"""
2+
Create a new dashboard with timeseries widget using order_by values
3+
"""
4+
5+
from datadog_api_client import ApiClient, Configuration
6+
from datadog_api_client.v1.api.dashboards_api import DashboardsApi
7+
from datadog_api_client.v1.model.dashboard import Dashboard
8+
from datadog_api_client.v1.model.dashboard_layout_type import DashboardLayoutType
9+
from datadog_api_client.v1.model.timeseries_widget_definition import TimeseriesWidgetDefinition
10+
from datadog_api_client.v1.model.timeseries_widget_definition_type import TimeseriesWidgetDefinitionType
11+
from datadog_api_client.v1.model.timeseries_widget_request import TimeseriesWidgetRequest
12+
from datadog_api_client.v1.model.widget import Widget
13+
from datadog_api_client.v1.model.widget_display_type import WidgetDisplayType
14+
from datadog_api_client.v1.model.widget_request_style import WidgetRequestStyle
15+
from datadog_api_client.v1.model.widget_style_order_by import WidgetStyleOrderBy
16+
17+
body = Dashboard(
18+
layout_type=DashboardLayoutType.ORDERED,
19+
title="Example-Dashboard with order_by values",
20+
widgets=[
21+
Widget(
22+
definition=TimeseriesWidgetDefinition(
23+
type=TimeseriesWidgetDefinitionType.TIMESERIES,
24+
requests=[
25+
TimeseriesWidgetRequest(
26+
q="avg:system.cpu.user{*} by {host}",
27+
style=WidgetRequestStyle(
28+
palette="warm",
29+
order_by=WidgetStyleOrderBy.VALUES,
30+
),
31+
display_type=WidgetDisplayType.LINE,
32+
),
33+
],
34+
),
35+
),
36+
],
37+
)
38+
39+
configuration = Configuration()
40+
with ApiClient(configuration) as api_client:
41+
api_instance = DashboardsApi(api_client)
42+
response = api_instance.create_dashboard(body=body)
43+
44+
print(response)
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
"""
2+
Create a new dashboard with timeseries widget without order_by for backward compatibility
3+
"""
4+
5+
from datadog_api_client import ApiClient, Configuration
6+
from datadog_api_client.v1.api.dashboards_api import DashboardsApi
7+
from datadog_api_client.v1.model.dashboard import Dashboard
8+
from datadog_api_client.v1.model.dashboard_layout_type import DashboardLayoutType
9+
from datadog_api_client.v1.model.timeseries_widget_definition import TimeseriesWidgetDefinition
10+
from datadog_api_client.v1.model.timeseries_widget_definition_type import TimeseriesWidgetDefinitionType
11+
from datadog_api_client.v1.model.timeseries_widget_request import TimeseriesWidgetRequest
12+
from datadog_api_client.v1.model.widget import Widget
13+
from datadog_api_client.v1.model.widget_display_type import WidgetDisplayType
14+
from datadog_api_client.v1.model.widget_line_type import WidgetLineType
15+
from datadog_api_client.v1.model.widget_line_width import WidgetLineWidth
16+
from datadog_api_client.v1.model.widget_request_style import WidgetRequestStyle
17+
18+
body = Dashboard(
19+
layout_type=DashboardLayoutType.ORDERED,
20+
title="Example-Dashboard without order_by",
21+
widgets=[
22+
Widget(
23+
definition=TimeseriesWidgetDefinition(
24+
type=TimeseriesWidgetDefinitionType.TIMESERIES,
25+
requests=[
26+
TimeseriesWidgetRequest(
27+
q="avg:system.cpu.user{*} by {host}",
28+
style=WidgetRequestStyle(
29+
palette="dog_classic",
30+
line_type=WidgetLineType.SOLID,
31+
line_width=WidgetLineWidth.NORMAL,
32+
),
33+
display_type=WidgetDisplayType.LINE,
34+
),
35+
],
36+
),
37+
),
38+
],
39+
)
40+
41+
configuration = Configuration()
42+
with ApiClient(configuration) as api_client:
43+
api_instance = DashboardsApi(api_client)
44+
response = api_instance.create_dashboard(body=body)
45+
46+
print(response)
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
"""
2+
Create a new dashboard with timeseries widget using order_by tags
3+
"""
4+
5+
from datadog_api_client import ApiClient, Configuration
6+
from datadog_api_client.v1.api.dashboards_api import DashboardsApi
7+
from datadog_api_client.v1.model.dashboard import Dashboard
8+
from datadog_api_client.v1.model.dashboard_layout_type import DashboardLayoutType
9+
from datadog_api_client.v1.model.timeseries_widget_definition import TimeseriesWidgetDefinition
10+
from datadog_api_client.v1.model.timeseries_widget_definition_type import TimeseriesWidgetDefinitionType
11+
from datadog_api_client.v1.model.timeseries_widget_request import TimeseriesWidgetRequest
12+
from datadog_api_client.v1.model.widget import Widget
13+
from datadog_api_client.v1.model.widget_display_type import WidgetDisplayType
14+
from datadog_api_client.v1.model.widget_request_style import WidgetRequestStyle
15+
from datadog_api_client.v1.model.widget_style_order_by import WidgetStyleOrderBy
16+
17+
body = Dashboard(
18+
layout_type=DashboardLayoutType.ORDERED,
19+
title="Example-Dashboard with order_by tags",
20+
widgets=[
21+
Widget(
22+
definition=TimeseriesWidgetDefinition(
23+
type=TimeseriesWidgetDefinitionType.TIMESERIES,
24+
requests=[
25+
TimeseriesWidgetRequest(
26+
q="avg:system.cpu.user{*} by {host}",
27+
style=WidgetRequestStyle(
28+
palette="dog_classic",
29+
order_by=WidgetStyleOrderBy.TAGS,
30+
),
31+
display_type=WidgetDisplayType.LINE,
32+
),
33+
],
34+
),
35+
),
36+
],
37+
)
38+
39+
configuration = Configuration()
40+
with ApiClient(configuration) as api_client:
41+
api_instance = DashboardsApi(api_client)
42+
response = api_instance.create_dashboard(body=body)
43+
44+
print(response)

src/datadog_api_client/v1/model/widget_request_style.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,35 @@
1616
if TYPE_CHECKING:
1717
from datadog_api_client.v1.model.widget_line_type import WidgetLineType
1818
from datadog_api_client.v1.model.widget_line_width import WidgetLineWidth
19+
from datadog_api_client.v1.model.widget_style_order_by import WidgetStyleOrderBy
1920

2021

2122
class WidgetRequestStyle(ModelNormal):
2223
@cached_property
2324
def openapi_types(_):
2425
from datadog_api_client.v1.model.widget_line_type import WidgetLineType
2526
from datadog_api_client.v1.model.widget_line_width import WidgetLineWidth
27+
from datadog_api_client.v1.model.widget_style_order_by import WidgetStyleOrderBy
2628

2729
return {
2830
"line_type": (WidgetLineType,),
2931
"line_width": (WidgetLineWidth,),
32+
"order_by": (WidgetStyleOrderBy,),
3033
"palette": (str,),
3134
}
3235

3336
attribute_map = {
3437
"line_type": "line_type",
3538
"line_width": "line_width",
39+
"order_by": "order_by",
3640
"palette": "palette",
3741
}
3842

3943
def __init__(
4044
self_,
4145
line_type: Union[WidgetLineType, UnsetType] = unset,
4246
line_width: Union[WidgetLineWidth, UnsetType] = unset,
47+
order_by: Union[WidgetStyleOrderBy, UnsetType] = unset,
4348
palette: Union[str, UnsetType] = unset,
4449
**kwargs,
4550
):
@@ -52,13 +57,21 @@ def __init__(
5257
:param line_width: Width of line displayed.
5358
:type line_width: WidgetLineWidth, optional
5459
60+
:param order_by: How to order series in timeseries visualizations.
61+
62+
* ``tags`` : Order series alphabetically by tag name (default behavior)
63+
* ``values`` : Order series by their current metric values (typically descending)
64+
:type order_by: WidgetStyleOrderBy, optional
65+
5566
:param palette: Color palette to apply to the widget.
5667
:type palette: str, optional
5768
"""
5869
if line_type is not unset:
5970
kwargs["line_type"] = line_type
6071
if line_width is not unset:
6172
kwargs["line_width"] = line_width
73+
if order_by is not unset:
74+
kwargs["order_by"] = order_by
6275
if palette is not unset:
6376
kwargs["palette"] = palette
6477
super().__init__(kwargs)
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License.
2+
# This product includes software developed at Datadog (https://www.datadoghq.com/).
3+
# Copyright 2019-Present Datadog, Inc.
4+
from __future__ import annotations
5+
6+
7+
from datadog_api_client.model_utils import (
8+
ModelSimple,
9+
cached_property,
10+
)
11+
12+
from typing import ClassVar
13+
14+
15+
class WidgetStyleOrderBy(ModelSimple):
16+
"""
17+
How to order series in timeseries visualizations.
18+
- `tags`: Order series alphabetically by tag name (default behavior)
19+
- `values`: Order series by their current metric values (typically descending)
20+
21+
:param value: Must be one of ["tags", "values"].
22+
:type value: str
23+
"""
24+
25+
allowed_values = {
26+
"tags",
27+
"values",
28+
}
29+
TAGS: ClassVar["WidgetStyleOrderBy"]
30+
VALUES: ClassVar["WidgetStyleOrderBy"]
31+
32+
@cached_property
33+
def openapi_types(_):
34+
return {
35+
"value": (str,),
36+
}
37+
38+
39+
WidgetStyleOrderBy.TAGS = WidgetStyleOrderBy("tags")
40+
WidgetStyleOrderBy.VALUES = WidgetStyleOrderBy("values")

src/datadog_api_client/v1/models/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1138,6 +1138,7 @@
11381138
from datadog_api_client.v1.model.widget_sort_by import WidgetSortBy
11391139
from datadog_api_client.v1.model.widget_sort_order_by import WidgetSortOrderBy
11401140
from datadog_api_client.v1.model.widget_style import WidgetStyle
1141+
from datadog_api_client.v1.model.widget_style_order_by import WidgetStyleOrderBy
11411142
from datadog_api_client.v1.model.widget_summary_type import WidgetSummaryType
11421143
from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign
11431144
from datadog_api_client.v1.model.widget_tick_edge import WidgetTickEdge
@@ -2128,6 +2129,7 @@
21282129
"WidgetSortBy",
21292130
"WidgetSortOrderBy",
21302131
"WidgetStyle",
2132+
"WidgetStyleOrderBy",
21312133
"WidgetSummaryType",
21322134
"WidgetTextAlign",
21332135
"WidgetTickEdge",
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2026-01-20T23:39:22.864Z
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
interactions:
2+
- request:
3+
body: '{"layout_type":"ordered","title":"Test-Create_a_new_dashboard_with_timeseries_widget_using_order_by_tags-1768952362
4+
with order_by tags","widgets":[{"definition":{"requests":[{"display_type":"line","q":"avg:system.cpu.user{*}
5+
by {host}","style":{"order_by":"tags","palette":"dog_classic"}}],"type":"timeseries"}}]}'
6+
headers:
7+
accept:
8+
- application/json
9+
content-type:
10+
- application/json
11+
method: POST
12+
uri: https://api.datadoghq.com/api/v1/dashboard
13+
response:
14+
body:
15+
string: '{"id":"2r3-a4g-ubz","title":"Test-Create_a_new_dashboard_with_timeseries_widget_using_order_by_tags-1768952362
16+
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{*}
17+
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":[]}'
18+
headers:
19+
content-type:
20+
- application/json
21+
status:
22+
code: 200
23+
message: OK
24+
- request:
25+
body: null
26+
headers:
27+
accept:
28+
- application/json
29+
method: DELETE
30+
uri: https://api.datadoghq.com/api/v1/dashboard/2r3-a4g-ubz
31+
response:
32+
body:
33+
string: '{"deleted_dashboard_id":"2r3-a4g-ubz"}'
34+
headers:
35+
content-type:
36+
- application/json
37+
status:
38+
code: 200
39+
message: OK
40+
version: 1

0 commit comments

Comments
 (0)