diff --git a/.generator/schemas/v1/openapi.yaml b/.generator/schemas/v1/openapi.yaml index daa9d89fc3..a4c9c61d8e 100644 --- a/.generator/schemas/v1/openapi.yaml +++ b/.generator/schemas/v1/openapi.yaml @@ -2855,6 +2855,127 @@ components: - service - name type: object + FormulaAndFunctionApmMetricStatName: + description: APM metric stat name. + enum: + - errors + - error_rate + - errors_per_second + - latency_avg + - latency_max + - latency_p50 + - latency_p75 + - latency_p90 + - latency_p95 + - latency_p99 + - latency_p999 + - latency_distribution + - hits + - hits_per_second + - total_time + - apdex + example: hits + type: string + x-enum-varnames: + - ERRORS + - ERROR_RATE + - ERRORS_PER_SECOND + - LATENCY_AVG + - LATENCY_MAX + - LATENCY_P50 + - LATENCY_P75 + - LATENCY_P90 + - LATENCY_P95 + - LATENCY_P99 + - LATENCY_P999 + - LATENCY_DISTRIBUTION + - HITS + - HITS_PER_SECOND + - TOTAL_TIME + - APDEX + FormulaAndFunctionApmMetricsDataSource: + description: Data source for APM metrics queries. + enum: + - apm_metrics + example: apm_metrics + type: string + x-enum-varnames: + - APM_METRICS + FormulaAndFunctionApmMetricsQueryDefinition: + description: A formula and functions APM metrics query. + properties: + data_source: + $ref: '#/components/schemas/FormulaAndFunctionApmMetricsDataSource' + group_by: + description: Optional fields to group the query results by. + items: + description: A field to group results by. + example: resource_name + type: string + type: array + name: + description: Name of this query to use in formulas. + example: query_errors + type: string + operation_mode: + description: Optional operation mode to aggregate across operation names. + example: primary + type: string + operation_name: + description: Name of operation on service. If not provided, the primary + operation name is used. + example: web.request + type: string + peer_tags: + description: Tags to query for a specific downstream entity (peer.service, + peer.db_instance, peer.s3, peer.s3.bucket, etc.). + items: + example: peer.service:my-service + type: string + type: array + query_filter: + description: Additional filters for the query using metrics query syntax + (e.g., env, primary_tag). + example: env:prod + type: string + resource_hash: + description: The hash of a specific resource to filter by. + example: abc123 + type: string + resource_name: + description: The full name of a specific resource to filter by. + example: GET /api/v1/users + type: string + service: + description: APM service name. + example: web-store + type: string + span_kind: + $ref: '#/components/schemas/FormulaAndFunctionApmMetricsSpanKind' + stat: + $ref: '#/components/schemas/FormulaAndFunctionApmMetricStatName' + required: + - data_source + - name + - stat + type: object + FormulaAndFunctionApmMetricsSpanKind: + description: Describes the relationship between the span, its parents, and its + children in a trace. + enum: + - consumer + - server + - client + - producer + - internal + example: server + type: string + x-enum-varnames: + - CONSUMER + - SERVER + - CLIENT + - PRODUCER + - INTERNAL FormulaAndFunctionApmResourceStatName: description: APM resource stat name. enum: @@ -3296,6 +3417,7 @@ components: - $ref: '#/components/schemas/FormulaAndFunctionProcessQueryDefinition' - $ref: '#/components/schemas/FormulaAndFunctionApmDependencyStatsQueryDefinition' - $ref: '#/components/schemas/FormulaAndFunctionApmResourceStatsQueryDefinition' + - $ref: '#/components/schemas/FormulaAndFunctionApmMetricsQueryDefinition' - $ref: '#/components/schemas/FormulaAndFunctionSLOQueryDefinition' - $ref: '#/components/schemas/FormulaAndFunctionCloudCostQueryDefinition' FormulaAndFunctionResponseFormat: diff --git a/docs/datadog_api_client.v1.model.rst b/docs/datadog_api_client.v1.model.rst index 707acb5bc9..073a2aa277 100644 --- a/docs/datadog_api_client.v1.model.rst +++ b/docs/datadog_api_client.v1.model.rst @@ -858,6 +858,34 @@ datadog\_api\_client.v1.model.formula\_and\_function\_apm\_dependency\_stats\_qu :members: :show-inheritance: +datadog\_api\_client.v1.model.formula\_and\_function\_apm\_metric\_stat\_name module +------------------------------------------------------------------------------------ + +.. automodule:: datadog_api_client.v1.model.formula_and_function_apm_metric_stat_name + :members: + :show-inheritance: + +datadog\_api\_client.v1.model.formula\_and\_function\_apm\_metrics\_data\_source module +--------------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v1.model.formula_and_function_apm_metrics_data_source + :members: + :show-inheritance: + +datadog\_api\_client.v1.model.formula\_and\_function\_apm\_metrics\_query\_definition module +-------------------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition + :members: + :show-inheritance: + +datadog\_api\_client.v1.model.formula\_and\_function\_apm\_metrics\_span\_kind module +------------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v1.model.formula_and_function_apm_metrics_span_kind + :members: + :show-inheritance: + datadog\_api\_client.v1.model.formula\_and\_function\_apm\_resource\_stat\_name module -------------------------------------------------------------------------------------- diff --git a/examples/v1/dashboards/CreateDashboard_2252738813.py b/examples/v1/dashboards/CreateDashboard_2252738813.py new file mode 100644 index 0000000000..27b432e08b --- /dev/null +++ b/examples/v1/dashboards/CreateDashboard_2252738813.py @@ -0,0 +1,67 @@ +""" +Create a new dashboard with apm metrics widget +""" + +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v1.api.dashboards_api import DashboardsApi +from datadog_api_client.v1.model.dashboard import Dashboard +from datadog_api_client.v1.model.dashboard_layout_type import DashboardLayoutType +from datadog_api_client.v1.model.formula_and_function_apm_metric_stat_name import FormulaAndFunctionApmMetricStatName +from datadog_api_client.v1.model.formula_and_function_apm_metrics_data_source import ( + FormulaAndFunctionApmMetricsDataSource, +) +from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import ( + FormulaAndFunctionApmMetricsQueryDefinition, +) +from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat +from datadog_api_client.v1.model.table_widget_definition import TableWidgetDefinition +from datadog_api_client.v1.model.table_widget_definition_type import TableWidgetDefinitionType +from datadog_api_client.v1.model.table_widget_request import TableWidgetRequest +from datadog_api_client.v1.model.widget import Widget +from datadog_api_client.v1.model.widget_layout import WidgetLayout +from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + +body = Dashboard( + title="Example-Dashboard", + widgets=[ + Widget( + definition=TableWidgetDefinition( + title="", + title_size="16", + title_align=WidgetTextAlign.LEFT, + type=TableWidgetDefinitionType.QUERY_TABLE, + requests=[ + TableWidgetRequest( + response_format=FormulaAndFunctionResponseFormat.SCALAR, + queries=[ + FormulaAndFunctionApmMetricsQueryDefinition( + stat=FormulaAndFunctionApmMetricStatName.HITS, + name="query1", + service="web-store", + data_source=FormulaAndFunctionApmMetricsDataSource.APM_METRICS, + query_filter="env:prod", + group_by=[ + "resource_name", + ], + ), + ], + ), + ], + ), + layout=WidgetLayout( + x=0, + y=0, + width=4, + height=4, + ), + ), + ], + layout_type=DashboardLayoutType.ORDERED, +) + +configuration = Configuration() +with ApiClient(configuration) as api_client: + api_instance = DashboardsApi(api_client) + response = api_instance.create_dashboard(body=body) + + print(response) diff --git a/src/datadog_api_client/v1/model/bar_chart_widget_request.py b/src/datadog_api_client/v1/model/bar_chart_widget_request.py index eefd5b7055..cffff47eb0 100644 --- a/src/datadog_api_client/v1/model/bar_chart_widget_request.py +++ b/src/datadog_api_client/v1/model/bar_chart_widget_request.py @@ -37,6 +37,9 @@ from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import ( FormulaAndFunctionApmResourceStatsQueryDefinition, ) + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import ( + FormulaAndFunctionApmMetricsQueryDefinition, + ) from datadog_api_client.v1.model.formula_and_function_slo_query_definition import ( FormulaAndFunctionSLOQueryDefinition, ) @@ -116,6 +119,7 @@ def __init__( FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, + FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, ] diff --git a/src/datadog_api_client/v1/model/change_widget_request.py b/src/datadog_api_client/v1/model/change_widget_request.py index e7f1b2f1d4..3239cfc6d8 100644 --- a/src/datadog_api_client/v1/model/change_widget_request.py +++ b/src/datadog_api_client/v1/model/change_widget_request.py @@ -38,6 +38,9 @@ from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import ( FormulaAndFunctionApmResourceStatsQueryDefinition, ) + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import ( + FormulaAndFunctionApmMetricsQueryDefinition, + ) from datadog_api_client.v1.model.formula_and_function_slo_query_definition import ( FormulaAndFunctionSLOQueryDefinition, ) @@ -125,6 +128,7 @@ def __init__( FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, + FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, ] diff --git a/src/datadog_api_client/v1/model/distribution_widget_request.py b/src/datadog_api_client/v1/model/distribution_widget_request.py index aa57f430f9..07169bd162 100644 --- a/src/datadog_api_client/v1/model/distribution_widget_request.py +++ b/src/datadog_api_client/v1/model/distribution_widget_request.py @@ -40,6 +40,9 @@ from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import ( FormulaAndFunctionApmResourceStatsQueryDefinition, ) + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import ( + FormulaAndFunctionApmMetricsQueryDefinition, + ) from datadog_api_client.v1.model.formula_and_function_slo_query_definition import ( FormulaAndFunctionSLOQueryDefinition, ) @@ -121,6 +124,7 @@ def __init__( FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, + FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, ] diff --git a/src/datadog_api_client/v1/model/formula_and_function_apm_metric_stat_name.py b/src/datadog_api_client/v1/model/formula_and_function_apm_metric_stat_name.py new file mode 100644 index 0000000000..7c8d416b1e --- /dev/null +++ b/src/datadog_api_client/v1/model/formula_and_function_apm_metric_stat_name.py @@ -0,0 +1,80 @@ +# 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. +from __future__ import annotations + + +from datadog_api_client.model_utils import ( + ModelSimple, + cached_property, +) + +from typing import ClassVar + + +class FormulaAndFunctionApmMetricStatName(ModelSimple): + """ + APM metric stat name. + + :param value: Must be one of ["errors", "error_rate", "errors_per_second", "latency_avg", "latency_max", "latency_p50", "latency_p75", "latency_p90", "latency_p95", "latency_p99", "latency_p999", "latency_distribution", "hits", "hits_per_second", "total_time", "apdex"]. + :type value: str + """ + + allowed_values = { + "errors", + "error_rate", + "errors_per_second", + "latency_avg", + "latency_max", + "latency_p50", + "latency_p75", + "latency_p90", + "latency_p95", + "latency_p99", + "latency_p999", + "latency_distribution", + "hits", + "hits_per_second", + "total_time", + "apdex", + } + ERRORS: ClassVar["FormulaAndFunctionApmMetricStatName"] + ERROR_RATE: ClassVar["FormulaAndFunctionApmMetricStatName"] + ERRORS_PER_SECOND: ClassVar["FormulaAndFunctionApmMetricStatName"] + LATENCY_AVG: ClassVar["FormulaAndFunctionApmMetricStatName"] + LATENCY_MAX: ClassVar["FormulaAndFunctionApmMetricStatName"] + LATENCY_P50: ClassVar["FormulaAndFunctionApmMetricStatName"] + LATENCY_P75: ClassVar["FormulaAndFunctionApmMetricStatName"] + LATENCY_P90: ClassVar["FormulaAndFunctionApmMetricStatName"] + LATENCY_P95: ClassVar["FormulaAndFunctionApmMetricStatName"] + LATENCY_P99: ClassVar["FormulaAndFunctionApmMetricStatName"] + LATENCY_P999: ClassVar["FormulaAndFunctionApmMetricStatName"] + LATENCY_DISTRIBUTION: ClassVar["FormulaAndFunctionApmMetricStatName"] + HITS: ClassVar["FormulaAndFunctionApmMetricStatName"] + HITS_PER_SECOND: ClassVar["FormulaAndFunctionApmMetricStatName"] + TOTAL_TIME: ClassVar["FormulaAndFunctionApmMetricStatName"] + APDEX: ClassVar["FormulaAndFunctionApmMetricStatName"] + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } + + +FormulaAndFunctionApmMetricStatName.ERRORS = FormulaAndFunctionApmMetricStatName("errors") +FormulaAndFunctionApmMetricStatName.ERROR_RATE = FormulaAndFunctionApmMetricStatName("error_rate") +FormulaAndFunctionApmMetricStatName.ERRORS_PER_SECOND = FormulaAndFunctionApmMetricStatName("errors_per_second") +FormulaAndFunctionApmMetricStatName.LATENCY_AVG = FormulaAndFunctionApmMetricStatName("latency_avg") +FormulaAndFunctionApmMetricStatName.LATENCY_MAX = FormulaAndFunctionApmMetricStatName("latency_max") +FormulaAndFunctionApmMetricStatName.LATENCY_P50 = FormulaAndFunctionApmMetricStatName("latency_p50") +FormulaAndFunctionApmMetricStatName.LATENCY_P75 = FormulaAndFunctionApmMetricStatName("latency_p75") +FormulaAndFunctionApmMetricStatName.LATENCY_P90 = FormulaAndFunctionApmMetricStatName("latency_p90") +FormulaAndFunctionApmMetricStatName.LATENCY_P95 = FormulaAndFunctionApmMetricStatName("latency_p95") +FormulaAndFunctionApmMetricStatName.LATENCY_P99 = FormulaAndFunctionApmMetricStatName("latency_p99") +FormulaAndFunctionApmMetricStatName.LATENCY_P999 = FormulaAndFunctionApmMetricStatName("latency_p999") +FormulaAndFunctionApmMetricStatName.LATENCY_DISTRIBUTION = FormulaAndFunctionApmMetricStatName("latency_distribution") +FormulaAndFunctionApmMetricStatName.HITS = FormulaAndFunctionApmMetricStatName("hits") +FormulaAndFunctionApmMetricStatName.HITS_PER_SECOND = FormulaAndFunctionApmMetricStatName("hits_per_second") +FormulaAndFunctionApmMetricStatName.TOTAL_TIME = FormulaAndFunctionApmMetricStatName("total_time") +FormulaAndFunctionApmMetricStatName.APDEX = FormulaAndFunctionApmMetricStatName("apdex") diff --git a/src/datadog_api_client/v1/model/formula_and_function_apm_metrics_data_source.py b/src/datadog_api_client/v1/model/formula_and_function_apm_metrics_data_source.py new file mode 100644 index 0000000000..d7945c838e --- /dev/null +++ b/src/datadog_api_client/v1/model/formula_and_function_apm_metrics_data_source.py @@ -0,0 +1,35 @@ +# 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. +from __future__ import annotations + + +from datadog_api_client.model_utils import ( + ModelSimple, + cached_property, +) + +from typing import ClassVar + + +class FormulaAndFunctionApmMetricsDataSource(ModelSimple): + """ + Data source for APM metrics queries. + + :param value: If omitted defaults to "apm_metrics". Must be one of ["apm_metrics"]. + :type value: str + """ + + allowed_values = { + "apm_metrics", + } + APM_METRICS: ClassVar["FormulaAndFunctionApmMetricsDataSource"] + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } + + +FormulaAndFunctionApmMetricsDataSource.APM_METRICS = FormulaAndFunctionApmMetricsDataSource("apm_metrics") diff --git a/src/datadog_api_client/v1/model/formula_and_function_apm_metrics_query_definition.py b/src/datadog_api_client/v1/model/formula_and_function_apm_metrics_query_definition.py new file mode 100644 index 0000000000..6f40efa05b --- /dev/null +++ b/src/datadog_api_client/v1/model/formula_and_function_apm_metrics_query_definition.py @@ -0,0 +1,148 @@ +# 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. +from __future__ import annotations + +from typing import List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.formula_and_function_apm_metrics_data_source import ( + FormulaAndFunctionApmMetricsDataSource, + ) + from datadog_api_client.v1.model.formula_and_function_apm_metrics_span_kind import ( + FormulaAndFunctionApmMetricsSpanKind, + ) + from datadog_api_client.v1.model.formula_and_function_apm_metric_stat_name import ( + FormulaAndFunctionApmMetricStatName, + ) + + +class FormulaAndFunctionApmMetricsQueryDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.formula_and_function_apm_metrics_data_source import ( + FormulaAndFunctionApmMetricsDataSource, + ) + from datadog_api_client.v1.model.formula_and_function_apm_metrics_span_kind import ( + FormulaAndFunctionApmMetricsSpanKind, + ) + from datadog_api_client.v1.model.formula_and_function_apm_metric_stat_name import ( + FormulaAndFunctionApmMetricStatName, + ) + + return { + "data_source": (FormulaAndFunctionApmMetricsDataSource,), + "group_by": ([str],), + "name": (str,), + "operation_mode": (str,), + "operation_name": (str,), + "peer_tags": ([str],), + "query_filter": (str,), + "resource_hash": (str,), + "resource_name": (str,), + "service": (str,), + "span_kind": (FormulaAndFunctionApmMetricsSpanKind,), + "stat": (FormulaAndFunctionApmMetricStatName,), + } + + attribute_map = { + "data_source": "data_source", + "group_by": "group_by", + "name": "name", + "operation_mode": "operation_mode", + "operation_name": "operation_name", + "peer_tags": "peer_tags", + "query_filter": "query_filter", + "resource_hash": "resource_hash", + "resource_name": "resource_name", + "service": "service", + "span_kind": "span_kind", + "stat": "stat", + } + + def __init__( + self_, + data_source: FormulaAndFunctionApmMetricsDataSource, + name: str, + stat: FormulaAndFunctionApmMetricStatName, + group_by: Union[List[str], UnsetType] = unset, + operation_mode: Union[str, UnsetType] = unset, + operation_name: Union[str, UnsetType] = unset, + peer_tags: Union[List[str], UnsetType] = unset, + query_filter: Union[str, UnsetType] = unset, + resource_hash: Union[str, UnsetType] = unset, + resource_name: Union[str, UnsetType] = unset, + service: Union[str, UnsetType] = unset, + span_kind: Union[FormulaAndFunctionApmMetricsSpanKind, UnsetType] = unset, + **kwargs, + ): + """ + A formula and functions APM metrics query. + + :param data_source: Data source for APM metrics queries. + :type data_source: FormulaAndFunctionApmMetricsDataSource + + :param group_by: Optional fields to group the query results by. + :type group_by: [str], optional + + :param name: Name of this query to use in formulas. + :type name: str + + :param operation_mode: Optional operation mode to aggregate across operation names. + :type operation_mode: str, optional + + :param operation_name: Name of operation on service. If not provided, the primary operation name is used. + :type operation_name: str, optional + + :param peer_tags: Tags to query for a specific downstream entity (peer.service, peer.db_instance, peer.s3, peer.s3.bucket, etc.). + :type peer_tags: [str], optional + + :param query_filter: Additional filters for the query using metrics query syntax (e.g., env, primary_tag). + :type query_filter: str, optional + + :param resource_hash: The hash of a specific resource to filter by. + :type resource_hash: str, optional + + :param resource_name: The full name of a specific resource to filter by. + :type resource_name: str, optional + + :param service: APM service name. + :type service: str, optional + + :param span_kind: Describes the relationship between the span, its parents, and its children in a trace. + :type span_kind: FormulaAndFunctionApmMetricsSpanKind, optional + + :param stat: APM metric stat name. + :type stat: FormulaAndFunctionApmMetricStatName + """ + if group_by is not unset: + kwargs["group_by"] = group_by + if operation_mode is not unset: + kwargs["operation_mode"] = operation_mode + if operation_name is not unset: + kwargs["operation_name"] = operation_name + if peer_tags is not unset: + kwargs["peer_tags"] = peer_tags + if query_filter is not unset: + kwargs["query_filter"] = query_filter + if resource_hash is not unset: + kwargs["resource_hash"] = resource_hash + if resource_name is not unset: + kwargs["resource_name"] = resource_name + if service is not unset: + kwargs["service"] = service + if span_kind is not unset: + kwargs["span_kind"] = span_kind + super().__init__(kwargs) + + self_.data_source = data_source + self_.name = name + self_.stat = stat diff --git a/src/datadog_api_client/v1/model/formula_and_function_apm_metrics_span_kind.py b/src/datadog_api_client/v1/model/formula_and_function_apm_metrics_span_kind.py new file mode 100644 index 0000000000..2296dbf397 --- /dev/null +++ b/src/datadog_api_client/v1/model/formula_and_function_apm_metrics_span_kind.py @@ -0,0 +1,47 @@ +# 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. +from __future__ import annotations + + +from datadog_api_client.model_utils import ( + ModelSimple, + cached_property, +) + +from typing import ClassVar + + +class FormulaAndFunctionApmMetricsSpanKind(ModelSimple): + """ + Describes the relationship between the span, its parents, and its children in a trace. + + :param value: Must be one of ["consumer", "server", "client", "producer", "internal"]. + :type value: str + """ + + allowed_values = { + "consumer", + "server", + "client", + "producer", + "internal", + } + CONSUMER: ClassVar["FormulaAndFunctionApmMetricsSpanKind"] + SERVER: ClassVar["FormulaAndFunctionApmMetricsSpanKind"] + CLIENT: ClassVar["FormulaAndFunctionApmMetricsSpanKind"] + PRODUCER: ClassVar["FormulaAndFunctionApmMetricsSpanKind"] + INTERNAL: ClassVar["FormulaAndFunctionApmMetricsSpanKind"] + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } + + +FormulaAndFunctionApmMetricsSpanKind.CONSUMER = FormulaAndFunctionApmMetricsSpanKind("consumer") +FormulaAndFunctionApmMetricsSpanKind.SERVER = FormulaAndFunctionApmMetricsSpanKind("server") +FormulaAndFunctionApmMetricsSpanKind.CLIENT = FormulaAndFunctionApmMetricsSpanKind("client") +FormulaAndFunctionApmMetricsSpanKind.PRODUCER = FormulaAndFunctionApmMetricsSpanKind("producer") +FormulaAndFunctionApmMetricsSpanKind.INTERNAL = FormulaAndFunctionApmMetricsSpanKind("internal") diff --git a/src/datadog_api_client/v1/model/formula_and_function_query_definition.py b/src/datadog_api_client/v1/model/formula_and_function_query_definition.py index 23b6354aaa..5b3e006fbb 100644 --- a/src/datadog_api_client/v1/model/formula_and_function_query_definition.py +++ b/src/datadog_api_client/v1/model/formula_and_function_query_definition.py @@ -90,6 +90,21 @@ def __init__(self, **kwargs): :param stat: APM statistic. :type stat: FormulaAndFunctionApmDependencyStatName + :param operation_mode: Optional operation mode to aggregate across operation names. + :type operation_mode: str, optional + + :param peer_tags: Tags to query for a specific downstream entity (peer.service, peer.db_instance, peer.s3, peer.s3.bucket, etc.). + :type peer_tags: [str], optional + + :param query_filter: Additional filters for the query using metrics query syntax (e.g., env, primary_tag). + :type query_filter: str, optional + + :param resource_hash: The hash of a specific resource to filter by. + :type resource_hash: str, optional + + :param span_kind: Describes the relationship between the span, its parents, and its children in a trace. + :type span_kind: FormulaAndFunctionApmMetricsSpanKind, optional + :param additional_query_filters: Additional filters applied to the SLO query. :type additional_query_filters: str, optional @@ -131,6 +146,9 @@ def _composed_schemas(_): from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import ( FormulaAndFunctionApmResourceStatsQueryDefinition, ) + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import ( + FormulaAndFunctionApmMetricsQueryDefinition, + ) from datadog_api_client.v1.model.formula_and_function_slo_query_definition import ( FormulaAndFunctionSLOQueryDefinition, ) @@ -145,6 +163,7 @@ def _composed_schemas(_): FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, + FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, ], diff --git a/src/datadog_api_client/v1/model/geomap_widget_request.py b/src/datadog_api_client/v1/model/geomap_widget_request.py index e02097f33c..d24df25ea3 100644 --- a/src/datadog_api_client/v1/model/geomap_widget_request.py +++ b/src/datadog_api_client/v1/model/geomap_widget_request.py @@ -39,6 +39,9 @@ from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import ( FormulaAndFunctionApmResourceStatsQueryDefinition, ) + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import ( + FormulaAndFunctionApmMetricsQueryDefinition, + ) from datadog_api_client.v1.model.formula_and_function_slo_query_definition import ( FormulaAndFunctionSLOQueryDefinition, ) @@ -109,6 +112,7 @@ def __init__( FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, + FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, ] diff --git a/src/datadog_api_client/v1/model/heat_map_widget_request.py b/src/datadog_api_client/v1/model/heat_map_widget_request.py index 4babf46d4f..a2b7c4abd1 100644 --- a/src/datadog_api_client/v1/model/heat_map_widget_request.py +++ b/src/datadog_api_client/v1/model/heat_map_widget_request.py @@ -40,6 +40,9 @@ from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import ( FormulaAndFunctionApmResourceStatsQueryDefinition, ) + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import ( + FormulaAndFunctionApmMetricsQueryDefinition, + ) from datadog_api_client.v1.model.formula_and_function_slo_query_definition import ( FormulaAndFunctionSLOQueryDefinition, ) @@ -118,6 +121,7 @@ def __init__( FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, + FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, ] diff --git a/src/datadog_api_client/v1/model/query_value_widget_request.py b/src/datadog_api_client/v1/model/query_value_widget_request.py index ee3c337bc9..a04c2a8cc0 100644 --- a/src/datadog_api_client/v1/model/query_value_widget_request.py +++ b/src/datadog_api_client/v1/model/query_value_widget_request.py @@ -36,6 +36,9 @@ from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import ( FormulaAndFunctionApmResourceStatsQueryDefinition, ) + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import ( + FormulaAndFunctionApmMetricsQueryDefinition, + ) from datadog_api_client.v1.model.formula_and_function_slo_query_definition import ( FormulaAndFunctionSLOQueryDefinition, ) @@ -113,6 +116,7 @@ def __init__( FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, + FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, ] diff --git a/src/datadog_api_client/v1/model/scatterplot_table_request.py b/src/datadog_api_client/v1/model/scatterplot_table_request.py index 646266d546..7dd99a5a9e 100644 --- a/src/datadog_api_client/v1/model/scatterplot_table_request.py +++ b/src/datadog_api_client/v1/model/scatterplot_table_request.py @@ -32,6 +32,9 @@ from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import ( FormulaAndFunctionApmResourceStatsQueryDefinition, ) + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import ( + FormulaAndFunctionApmMetricsQueryDefinition, + ) from datadog_api_client.v1.model.formula_and_function_slo_query_definition import ( FormulaAndFunctionSLOQueryDefinition, ) @@ -71,6 +74,7 @@ def __init__( FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, + FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, ] diff --git a/src/datadog_api_client/v1/model/sunburst_widget_request.py b/src/datadog_api_client/v1/model/sunburst_widget_request.py index 3dd60710f0..52dea33d24 100644 --- a/src/datadog_api_client/v1/model/sunburst_widget_request.py +++ b/src/datadog_api_client/v1/model/sunburst_widget_request.py @@ -35,6 +35,9 @@ from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import ( FormulaAndFunctionApmResourceStatsQueryDefinition, ) + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import ( + FormulaAndFunctionApmMetricsQueryDefinition, + ) from datadog_api_client.v1.model.formula_and_function_slo_query_definition import ( FormulaAndFunctionSLOQueryDefinition, ) @@ -107,6 +110,7 @@ def __init__( FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, + FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, ] diff --git a/src/datadog_api_client/v1/model/table_widget_request.py b/src/datadog_api_client/v1/model/table_widget_request.py index 8b2032d117..1912bf5ea2 100644 --- a/src/datadog_api_client/v1/model/table_widget_request.py +++ b/src/datadog_api_client/v1/model/table_widget_request.py @@ -41,6 +41,9 @@ from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import ( FormulaAndFunctionApmResourceStatsQueryDefinition, ) + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import ( + FormulaAndFunctionApmMetricsQueryDefinition, + ) from datadog_api_client.v1.model.formula_and_function_slo_query_definition import ( FormulaAndFunctionSLOQueryDefinition, ) @@ -139,6 +142,7 @@ def __init__( FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, + FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, ] diff --git a/src/datadog_api_client/v1/model/timeseries_widget_request.py b/src/datadog_api_client/v1/model/timeseries_widget_request.py index 2396ed38d7..84cc6b6a64 100644 --- a/src/datadog_api_client/v1/model/timeseries_widget_request.py +++ b/src/datadog_api_client/v1/model/timeseries_widget_request.py @@ -37,6 +37,9 @@ from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import ( FormulaAndFunctionApmResourceStatsQueryDefinition, ) + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import ( + FormulaAndFunctionApmMetricsQueryDefinition, + ) from datadog_api_client.v1.model.formula_and_function_slo_query_definition import ( FormulaAndFunctionSLOQueryDefinition, ) @@ -120,6 +123,7 @@ def __init__( FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, + FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, ] diff --git a/src/datadog_api_client/v1/model/toplist_widget_request.py b/src/datadog_api_client/v1/model/toplist_widget_request.py index 2ffa52cfe0..f55fdb3464 100644 --- a/src/datadog_api_client/v1/model/toplist_widget_request.py +++ b/src/datadog_api_client/v1/model/toplist_widget_request.py @@ -37,6 +37,9 @@ from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import ( FormulaAndFunctionApmResourceStatsQueryDefinition, ) + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import ( + FormulaAndFunctionApmMetricsQueryDefinition, + ) from datadog_api_client.v1.model.formula_and_function_slo_query_definition import ( FormulaAndFunctionSLOQueryDefinition, ) @@ -122,6 +125,7 @@ def __init__( FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, + FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, ] diff --git a/src/datadog_api_client/v1/model/tree_map_widget_request.py b/src/datadog_api_client/v1/model/tree_map_widget_request.py index 27bec1f95b..9aff29c1fb 100644 --- a/src/datadog_api_client/v1/model/tree_map_widget_request.py +++ b/src/datadog_api_client/v1/model/tree_map_widget_request.py @@ -32,6 +32,9 @@ from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import ( FormulaAndFunctionApmResourceStatsQueryDefinition, ) + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import ( + FormulaAndFunctionApmMetricsQueryDefinition, + ) from datadog_api_client.v1.model.formula_and_function_slo_query_definition import ( FormulaAndFunctionSLOQueryDefinition, ) @@ -74,6 +77,7 @@ def __init__( FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, + FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, ] diff --git a/src/datadog_api_client/v1/models/__init__.py b/src/datadog_api_client/v1/models/__init__.py index 2220d357ae..6d1797fcf0 100644 --- a/src/datadog_api_client/v1/models/__init__.py +++ b/src/datadog_api_client/v1/models/__init__.py @@ -128,6 +128,14 @@ from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import ( FormulaAndFunctionApmDependencyStatsQueryDefinition, ) +from datadog_api_client.v1.model.formula_and_function_apm_metric_stat_name import FormulaAndFunctionApmMetricStatName +from datadog_api_client.v1.model.formula_and_function_apm_metrics_data_source import ( + FormulaAndFunctionApmMetricsDataSource, +) +from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import ( + FormulaAndFunctionApmMetricsQueryDefinition, +) +from datadog_api_client.v1.model.formula_and_function_apm_metrics_span_kind import FormulaAndFunctionApmMetricsSpanKind from datadog_api_client.v1.model.formula_and_function_apm_resource_stat_name import ( FormulaAndFunctionApmResourceStatName, ) @@ -1328,6 +1336,10 @@ "FormulaAndFunctionApmDependencyStatName", "FormulaAndFunctionApmDependencyStatsDataSource", "FormulaAndFunctionApmDependencyStatsQueryDefinition", + "FormulaAndFunctionApmMetricStatName", + "FormulaAndFunctionApmMetricsDataSource", + "FormulaAndFunctionApmMetricsQueryDefinition", + "FormulaAndFunctionApmMetricsSpanKind", "FormulaAndFunctionApmResourceStatName", "FormulaAndFunctionApmResourceStatsDataSource", "FormulaAndFunctionApmResourceStatsQueryDefinition", diff --git a/tests/v1/cassettes/test_scenarios/test_create_a_new_dashboard_with_apm_metrics_widget.frozen b/tests/v1/cassettes/test_scenarios/test_create_a_new_dashboard_with_apm_metrics_widget.frozen new file mode 100644 index 0000000000..75b84eafed --- /dev/null +++ b/tests/v1/cassettes/test_scenarios/test_create_a_new_dashboard_with_apm_metrics_widget.frozen @@ -0,0 +1 @@ +2025-02-20T10:00:00.000Z \ No newline at end of file diff --git a/tests/v1/cassettes/test_scenarios/test_create_a_new_dashboard_with_apm_metrics_widget.yaml b/tests/v1/cassettes/test_scenarios/test_create_a_new_dashboard_with_apm_metrics_widget.yaml new file mode 100644 index 0000000000..030a3b2ef7 --- /dev/null +++ b/tests/v1/cassettes/test_scenarios/test_create_a_new_dashboard_with_apm_metrics_widget.yaml @@ -0,0 +1,36 @@ +interactions: +- request: + body: '{"layout_type":"ordered","title":"Test-Create_a_new_dashboard_with_apm_metrics_widget-1740045600","widgets":[{"definition":{"requests":[{"queries":[{"data_source":"apm_metrics","group_by":["resource_name"],"name":"query1","query_filter":"env:prod","service":"web-store","stat":"hits"}],"response_format":"scalar"}],"title":"","title_align":"left","title_size":"16","type":"query_table"},"layout":{"height":4,"width":4,"x":0,"y":0}}]}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v1/dashboard + response: + body: + string: '{"id":"apm-met-ric","title":"Test-Create_a_new_dashboard_with_apm_metrics_widget-1740045600","description":null,"author_handle":"test@datadoghq.com","author_name":null,"layout_type":"ordered","url":"/dashboard/apm-met-ric/testcreateanewdashboardwithapmmetricswidget1740045600","is_read_only":false,"template_variables":null,"widgets":[{"definition":{"requests":[{"queries":[{"data_source":"apm_metrics","group_by":["resource_name"],"name":"query1","query_filter":"env:prod","service":"web-store","stat":"hits"}],"response_format":"scalar"}],"title":"","title_align":"left","title_size":"16","type":"query_table"},"layout":{"height":4,"width":4,"x":0,"y":0},"id":1234567890123456}],"notify_list":null,"created_at":"2025-02-20T10:00:01.000000+00:00","modified_at":"2025-02-20T10:00:01.000000+00:00","restricted_roles":[]}' + headers: + content-type: + - application/json + status: + code: 200 + message: OK +- request: + body: null + headers: + accept: + - application/json + method: DELETE + uri: https://api.datadoghq.com/api/v1/dashboard/apm-met-ric + response: + body: + string: '{"deleted_dashboard_id":"apm-met-ric"}' + headers: + content-type: + - application/json + status: + code: 200 + message: OK +version: 1 diff --git a/tests/v1/features/dashboards.feature b/tests/v1/features/dashboards.feature index e8c10d7cc5..e894b96bfa 100644 --- a/tests/v1/features/dashboards.feature +++ b/tests/v1/features/dashboards.feature @@ -320,6 +320,20 @@ 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-backend + Scenario: Create a new dashboard with apm metrics widget + Given new "CreateDashboard" request + And body with value { "title": "{{ unique }}", "widgets": [{"definition": { "title": "", "title_size": "16", "title_align": "left", "type": "query_table", "requests": [ { "response_format": "scalar", "queries": [ { "stat": "hits", "name": "query1", "service": "web-store", "data_source": "apm_metrics", "query_filter": "env:prod", "group_by": ["resource_name"] } ] } ] }, "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].stat" is equal to "hits" + And the response "widgets[0].definition.requests[0].queries[0].group_by[0]" is equal to "resource_name" + 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].service" is equal to "web-store" + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "apm_metrics" + And the response "widgets[0].definition.requests[0].queries[0].query_filter" is equal to "env:prod" + @team:DataDog/dashboards-backend Scenario: Create a new dashboard with apm resource stats widget Given new "CreateDashboard" request