diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index 67ea97d1d673..3bfbcde3ae6d 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -1512,6 +1512,15 @@ components: example: "550e8400-e29b-41d4-a716-446655440000" format: uuid type: string + suggestion_id: + description: The ID of the flag suggestion. + in: path + name: suggestion_id + required: true + schema: + example: "550e8400-e29b-41d4-a716-446655440020" + format: uuid + type: string requestBodies: {} responses: BadRequestResponse: @@ -4068,293 +4077,6 @@ components: example: "90646597-5fdb-4a17-a240-647003f8c028" format: uuid type: string - ApmDependencyStatName: - description: The APM dependency statistic to query. - enum: - - avg_duration - - avg_root_duration - - avg_spans_per_trace - - error_rate - - pct_exec_time - - pct_of_traces - - total_traces_count - example: avg_duration - type: string - x-enum-varnames: - - AVG_DURATION - - AVG_ROOT_DURATION - - AVG_SPANS_PER_TRACE - - ERROR_RATE - - PCT_EXEC_TIME - - PCT_OF_TRACES - - TOTAL_TRACES_COUNT - ApmDependencyStatsDataSource: - default: apm_dependency_stats - description: A data source for APM dependency statistics queries. - enum: - - apm_dependency_stats - example: apm_dependency_stats - type: string - x-enum-varnames: - - APM_DEPENDENCY_STATS - ApmDependencyStatsQuery: - description: >- - A query for APM dependency statistics between services, such as call latency and error rates. - properties: - data_source: - $ref: "#/components/schemas/ApmDependencyStatsDataSource" - env: - description: The environment to query. - example: prod - type: string - is_upstream: - description: Determines whether stats for upstream or downstream dependencies should be queried. - example: true - type: boolean - name: - description: The variable name for use in formulas. - example: query1 - type: string - operation_name: - description: The APM operation name. - example: web.request - type: string - primary_tag_name: - description: The name of the second primary tag used within APM; required when `primary_tag_value` is specified. See https://docs.datadoghq.com/tracing/guide/setting_primary_tags_to_scope/#add-a-second-primary-tag-in-datadog. - example: datacenter - type: string - primary_tag_value: - description: Filter APM data by the second primary tag. `primary_tag_name` must also be specified. - example: us-east-1 - type: string - resource_name: - description: The resource name to filter by. - example: "GET /api/v2/users" - type: string - service: - description: The service name to filter by. - example: web-store - type: string - stat: - $ref: "#/components/schemas/ApmDependencyStatName" - required: - - data_source - - name - - env - - operation_name - - resource_name - - service - - stat - type: object - ApmMetricsDataSource: - default: apm_metrics - description: A data source for APM metrics queries. - enum: - - apm_metrics - example: apm_metrics - type: string - x-enum-varnames: - - APM_METRICS - ApmMetricsQuery: - description: >- - A query for APM trace metrics such as hits, errors, and latency percentiles, aggregated across services. - properties: - data_source: - $ref: "#/components/schemas/ApmMetricsDataSource" - group_by: - description: Optional fields to group the query results by. - items: - description: A field to group results by. - example: service - type: string - type: array - name: - description: The variable name for use in formulas. - example: query1 - 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: - description: A peer tag value. - example: "peer.service:my-service" - type: string - type: array - query_filter: - description: Additional filters for the query using metrics query syntax (for example, env, primary_tag). - example: "env:prod" - type: string - resource_hash: - description: The resource hash for exact matching. - 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: The service name to filter by. - example: web-store - type: string - span_kind: - $ref: "#/components/schemas/ApmMetricsSpanKind" - stat: - $ref: "#/components/schemas/ApmMetricsStat" - required: - - data_source - - name - - stat - type: object - ApmMetricsSpanKind: - 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 - ApmMetricsStat: - description: The APM metric statistic to query. - enum: - - error_rate - - errors - - errors_per_second - - hits - - hits_per_second - - apdex - - latency_avg - - latency_max - - latency_p50 - - latency_p75 - - latency_p90 - - latency_p95 - - latency_p99 - - latency_p999 - - latency_distribution - - total_time - example: latency_p99 - type: string - x-enum-varnames: - - ERROR_RATE - - ERRORS - - ERRORS_PER_SECOND - - HITS - - HITS_PER_SECOND - - APDEX - - LATENCY_AVG - - LATENCY_MAX - - LATENCY_P50 - - LATENCY_P75 - - LATENCY_P90 - - LATENCY_P95 - - LATENCY_P99 - - LATENCY_P999 - - LATENCY_DISTRIBUTION - - TOTAL_TIME - ApmResourceStatName: - description: The APM resource statistic to query. - enum: - - error_rate - - errors - - hits - - latency_avg - - latency_max - - latency_p50 - - latency_p75 - - latency_p90 - - latency_p95 - - latency_p99 - - latency_distribution - - total_time - example: latency_p95 - type: string - x-enum-varnames: - - ERROR_RATE - - ERRORS - - HITS - - LATENCY_AVG - - LATENCY_MAX - - LATENCY_P50 - - LATENCY_P75 - - LATENCY_P90 - - LATENCY_P95 - - LATENCY_P99 - - LATENCY_DISTRIBUTION - - TOTAL_TIME - ApmResourceStatsDataSource: - default: apm_resource_stats - description: A data source for APM resource statistics queries. - enum: - - apm_resource_stats - example: apm_resource_stats - type: string - x-enum-varnames: - - APM_RESOURCE_STATS - ApmResourceStatsQuery: - description: >- - A query for APM resource statistics such as latency, error rate, and hit count, grouped by resource name. - properties: - data_source: - $ref: "#/components/schemas/ApmResourceStatsDataSource" - env: - description: The environment to query. - example: prod - type: string - group_by: - description: Tag keys to group results by. - items: - description: A tag key to group by. - example: resource_name - type: string - type: array - name: - description: The variable name for use in formulas. - example: query1 - type: string - operation_name: - description: The APM operation name. - example: web.request - type: string - primary_tag_name: - description: Name of the second primary tag used within APM. Required when `primary_tag_value` is specified. See https://docs.datadoghq.com/tracing/guide/setting_primary_tags_to_scope/#add-a-second-primary-tag-in-datadog - example: datacenter - type: string - primary_tag_value: - description: Value of the second primary tag by which to filter APM data. `primary_tag_name` must also be specified. - example: us-east-1 - type: string - resource_name: - description: The resource name to filter by. - example: "Admin::ProductsController#create" - type: string - service: - description: The service name to filter by. - example: web-store - type: string - stat: - $ref: "#/components/schemas/ApmResourceStatName" - required: - - data_source - - name - - env - - service - - stat - type: object ApmRetentionFilterType: default: apm_retention_filter description: The type of the resource. @@ -14469,15 +14191,6 @@ components: type: string type: array type: object - ContainerDataSource: - default: container - description: A data source for container-level infrastructure metrics. - enum: - - container - example: container - type: string - x-enum-varnames: - - CONTAINER ContainerGroup: description: Container group object. properties: @@ -14889,82 +14602,6 @@ components: type: string x-enum-varnames: - CURSOR_LIMIT - ContainerScalarQuery: - description: A query for container-level metrics such as CPU and memory usage. - properties: - aggregator: - $ref: "#/components/schemas/MetricsAggregator" - data_source: - $ref: "#/components/schemas/ContainerDataSource" - is_normalized_cpu: - description: Whether CPU metrics should be normalized by core count. - type: boolean - limit: - description: Maximum number of results to return. - format: int64 - type: integer - metric: - description: The container metric to query. - example: process.stat.container.cpu.total_pct - type: string - name: - description: The variable name for use in formulas. - example: query1 - type: string - sort: - $ref: "#/components/schemas/QuerySortOrder" - tag_filters: - description: Tag filters to narrow down containers. - items: - description: A tag filter value. - example: "env:prod" - type: string - type: array - text_filter: - description: A full-text search filter to match container names. - type: string - required: - - data_source - - name - - metric - type: object - ContainerTimeseriesQuery: - description: A query for container-level metrics such as CPU and memory usage. - properties: - data_source: - $ref: "#/components/schemas/ContainerDataSource" - is_normalized_cpu: - description: Whether CPU metrics should be normalized by core count. - type: boolean - limit: - description: Maximum number of results to return. - format: int64 - type: integer - metric: - description: The container metric to query. - example: process.stat.container.cpu.total_pct - type: string - name: - description: The variable name for use in formulas. - example: query1 - type: string - sort: - $ref: "#/components/schemas/QuerySortOrder" - tag_filters: - description: Tag filters to narrow down containers. - items: - description: A tag filter value. - example: "env:prod" - type: string - type: array - text_filter: - description: A full-text search filter to match container names. - type: string - required: - - data_source - - name - - metric - type: object ContainerType: default: container description: Type of container. @@ -16304,6 +15941,62 @@ components: required: - data type: object + CreateFlagSuggestionAttributes: + description: Attributes for creating a flag suggestion. + properties: + action: + $ref: "#/components/schemas/FlagSuggestionAction" + comment: + description: Optional comment explaining the change. + example: "Archive this deprecated flag" + type: string + environment_id: + description: The environment ID for environment-scoped changes. + example: "550e8400-e29b-41d4-a716-446655440001" + format: uuid + type: string + notification_rule_targets: + description: |- + Notification handles (without @ prefix) to receive approval or rejection notifications. + For example, an email address or Slack channel name. + example: + - "user@example.com" + items: + type: string + minItems: 1 + type: array + property: + $ref: "#/components/schemas/FlagSuggestionProperty" + suggestion: + description: The suggested new value (empty string for flag-level actions like archive, JSON-encoded for complex properties like allocations). + example: "ENABLED" + type: string + suggestion_metadata: + $ref: "#/components/schemas/SuggestionMetadata" + required: + - action + - property + - notification_rule_targets + type: object + CreateFlagSuggestionData: + description: Data for creating a flag suggestion. + properties: + attributes: + $ref: "#/components/schemas/CreateFlagSuggestionAttributes" + type: + $ref: "#/components/schemas/FlagSuggestionDataType" + required: + - type + - attributes + type: object + CreateFlagSuggestionRequest: + description: Request to create a flag suggestion. + properties: + data: + $ref: "#/components/schemas/CreateFlagSuggestionData" + required: + - data + type: object CreateIncidentNotificationRuleRequest: description: Create request for a notification rule. properties: @@ -25606,35 +25299,13 @@ components: description: A data source that is powered by the Events Platform. enum: - logs - - spans - - network - rum - - security_signals - - profiles - - audit - - events - - ci_tests - - ci_pipelines - - incident_analytics - - product_analytics - - on_call_events - dora example: logs type: string x-enum-varnames: - LOGS - - SPANS - - NETWORK - RUM - - SECURITY_SIGNALS - - PROFILES - - AUDIT - - EVENTS - - CI_TESTS - - CI_PIPELINES - - INCIDENT_ANALYTICS - - PRODUCT_ANALYTICS - - ON_CALL_EVENTS - DORA EventsGroupBy: description: A dimension on which to split a query's results. @@ -25803,8 +25474,7 @@ components: type: string type: object EventsScalarQuery: - description: >- - An individual scalar query for logs, RUM, traces, CI pipelines, security signals, and other event-based data sources. Use this query type for any data source powered by the Events Platform. See the data_source field for the full list of supported sources. + description: An individual scalar events query. properties: compute: $ref: "#/components/schemas/EventsCompute" @@ -25856,8 +25526,7 @@ components: - ALPHABETICAL - MEASURE EventsTimeseriesQuery: - description: >- - An individual timeseries query for logs, RUM, traces, CI pipelines, security signals, and other event-based data sources. Use this query type for any data source powered by the Events Platform. See the data_source field for the full list of supported sources. + description: An individual timeseries events query. properties: compute: $ref: "#/components/schemas/EventsCompute" @@ -27010,6 +26679,197 @@ components: $ref: "#/components/schemas/FindingData" type: array type: object + FlagSuggestion: + description: A flag change suggestion. + properties: + attributes: + $ref: "#/components/schemas/FlagSuggestionAttributes" + id: + description: Unique identifier for the suggestion. + example: "550e8400-e29b-41d4-a716-446655440020" + format: uuid + type: string + type: + $ref: "#/components/schemas/FlagSuggestionDataType" + required: + - id + - type + - attributes + type: object + FlagSuggestionAction: + description: The type of change action for a suggestion. + enum: + - created + - updated + - deleted + - archived + - unarchived + - started + - stopped + - paused + - unpaused + example: archived + type: string + x-enum-varnames: + - CREATED + - UPDATED + - DELETED + - ARCHIVED + - UNARCHIVED + - STARTED + - STOPPED + - PAUSED + - UNPAUSED + FlagSuggestionAttributes: + description: Attributes of a flag suggestion. + properties: + action: + $ref: "#/components/schemas/FlagSuggestionAction" + base_flag_history_id: + description: The flag history version this suggestion was based on. + example: "550e8400-e29b-41d4-a716-446655440030" + format: uuid + type: string + comment: + description: Optional comment from the requester. + example: "Please archive this deprecated flag" + nullable: true + type: string + created_at: + description: When the suggestion was created. + example: "2024-01-15T10:30:00Z" + format: date-time + type: string + created_by: + description: UUID of the user who created the suggestion. + example: "550e8400-e29b-41d4-a716-446655440099" + format: uuid + type: string + current_status: + $ref: "#/components/schemas/FlagSuggestionStatus" + current_value: + description: The current value before the suggested change (empty string for flag-level actions like archive). + example: "DISABLED" + type: string + deleted_at: + description: When the suggestion was soft-deleted. + format: date-time + nullable: true + type: string + deleted_by: + description: UUID of the user who deleted the suggestion. + format: uuid + nullable: true + type: string + environment_id: + description: The environment ID for environment-scoped suggestions. Null for flag-level changes. + example: "550e8400-e29b-41d4-a716-446655440001" + format: uuid + nullable: true + type: string + feature_flag_id: + description: The ID of the feature flag this suggestion applies to. + example: "550e8400-e29b-41d4-a716-446655440000" + format: uuid + type: string + message: + description: Human-readable message about the suggestion (populated on auto-created suggestions). + example: "This flag requires approval to archive. A suggestion has been created and is pending review." + type: string + property: + $ref: "#/components/schemas/FlagSuggestionProperty" + suggestion: + description: The suggested new value (JSON-encoded for complex properties, empty string for flag-level actions like archive). + example: "ENABLED" + type: string + suggestion_metadata: + $ref: "#/components/schemas/SuggestionMetadata" + updated_at: + description: When the suggestion was last updated. + format: date-time + nullable: true + type: string + updated_by: + description: UUID of the user who last updated the suggestion. + format: uuid + nullable: true + type: string + required: + - feature_flag_id + - current_status + - action + - property + - created_by + - created_at + type: object + FlagSuggestionDataType: + description: Flag suggestions resource type. + enum: + - "flag-suggestions" + example: "flag-suggestions" + type: string + x-enum-varnames: + - FLAG_SUGGESTIONS + FlagSuggestionEventDataType: + description: Flag suggestion events resource type. + enum: + - "flag-suggestion-events" + example: "flag-suggestion-events" + type: string + x-enum-varnames: + - FLAG_SUGGESTION_EVENTS + FlagSuggestionProperty: + description: The flag property being changed. + enum: + - FLAG + - FLAG_NAME + - FLAG_DESCRIPTION + - JSON_SCHEMA + - DISTRIBUTION_CHANNEL + - VARIANT + - VARIANT_NAME + - VARIANT_VALUE + - ALLOCATIONS + - ROLLOUT + - ENVIRONMENT_STATUS + - DEFAULT_VARIANT + - OVERRIDE_VARIANT + example: FLAG + type: string + x-enum-varnames: + - FLAG + - FLAG_NAME + - FLAG_DESCRIPTION + - JSON_SCHEMA + - DISTRIBUTION_CHANNEL + - VARIANT + - VARIANT_NAME + - VARIANT_VALUE + - ALLOCATIONS + - ROLLOUT + - ENVIRONMENT_STATUS + - DEFAULT_VARIANT + - OVERRIDE_VARIANT + FlagSuggestionResponse: + description: Response containing a flag suggestion. + properties: + data: + $ref: "#/components/schemas/FlagSuggestion" + required: + - data + type: object + FlagSuggestionStatus: + description: The status of a flag suggestion. + enum: + - pending + - rejected + - approved + example: pending + type: string + x-enum-varnames: + - PENDING + - REJECTED + - APPROVED FlakyTest: description: A flaky test object. properties: @@ -42983,7 +42843,7 @@ components: type: string type: object MetricsScalarQuery: - description: A query against Datadog custom metrics or Cloud Cost data sources. + description: An individual scalar metrics query. properties: aggregator: $ref: "#/components/schemas/MetricsAggregator" @@ -43002,7 +42862,7 @@ components: - aggregator type: object MetricsTimeseriesQuery: - description: A query against Datadog custom metrics or Cloud Cost data sources. + description: An individual timeseries metrics query. properties: data_source: $ref: "#/components/schemas/MetricsDataSource" @@ -53665,54 +53525,6 @@ components: required: - type type: object - ProcessDataSource: - default: process - description: A data source for process-level infrastructure metrics. - enum: - - process - example: process - type: string - x-enum-varnames: - - PROCESS - ProcessScalarQuery: - description: A query for host-level process metrics such as CPU and memory usage. - properties: - aggregator: - $ref: "#/components/schemas/MetricsAggregator" - data_source: - $ref: "#/components/schemas/ProcessDataSource" - is_normalized_cpu: - description: Whether CPU metrics should be normalized by core count. - type: boolean - limit: - description: Maximum number of results to return. - format: int64 - type: integer - metric: - description: The process metric to query. - example: process.stat.cpu.total_pct - type: string - name: - description: The variable name for use in formulas. - example: query1 - type: string - sort: - $ref: "#/components/schemas/QuerySortOrder" - tag_filters: - description: Tag filters to narrow down processes. - items: - description: A tag filter value. - example: "env:prod" - type: string - type: array - text_filter: - description: A full-text search filter to match process names or commands. - type: string - required: - - data_source - - name - - metric - type: object ProcessSummariesMeta: description: Response metadata object. properties: @@ -53799,43 +53611,6 @@ components: type: string x-enum-varnames: - PROCESS - ProcessTimeseriesQuery: - description: A query for host-level process metrics such as CPU and memory usage. - properties: - data_source: - $ref: "#/components/schemas/ProcessDataSource" - is_normalized_cpu: - description: Whether CPU metrics should be normalized by core count. - type: boolean - limit: - description: Maximum number of results to return. - format: int64 - type: integer - metric: - description: The process metric to query. - example: process.stat.cpu.total_pct - type: string - name: - description: The variable name for use in formulas. - example: query1 - type: string - sort: - $ref: "#/components/schemas/QuerySortOrder" - tag_filters: - description: Tag filters to narrow down processes. - items: - description: A tag filter value. - example: "env:prod" - type: string - type: array - text_filter: - description: A full-text search filter to match process names or commands. - type: string - required: - - data_source - - name - - metric - type: object ProductAnalyticsAnalyticsQuery: description: The analytics query definition containing a base query, compute rule, and optional grouping. properties: @@ -57686,6 +57461,32 @@ components: description: Target revision ID to revert to type: string type: object + ReviewFlagSuggestionAttributes: + description: Attributes for reviewing a flag suggestion. + properties: + comment: + description: Optional comment from the reviewer. + example: "Looks good, approved!" + type: string + type: object + ReviewFlagSuggestionData: + description: Data for reviewing a flag suggestion. + properties: + attributes: + $ref: "#/components/schemas/ReviewFlagSuggestionAttributes" + type: + $ref: "#/components/schemas/FlagSuggestionEventDataType" + required: + - type + type: object + ReviewFlagSuggestionRequest: + description: Request to approve or reject a flag suggestion. + properties: + data: + $ref: "#/components/schemas/ReviewFlagSuggestionData" + required: + - data + type: object Role: description: Role object returned by the API. properties: @@ -60044,12 +59845,6 @@ components: oneOf: - $ref: "#/components/schemas/MetricsScalarQuery" - $ref: "#/components/schemas/EventsScalarQuery" - - $ref: "#/components/schemas/ApmResourceStatsQuery" - - $ref: "#/components/schemas/ApmMetricsQuery" - - $ref: "#/components/schemas/ApmDependencyStatsQuery" - - $ref: "#/components/schemas/SloQuery" - - $ref: "#/components/schemas/ProcessScalarQuery" - - $ref: "#/components/schemas/ContainerScalarQuery" ScalarResponse: description: A message containing the response to a scalar query. properties: @@ -67933,51 +67728,6 @@ components: required: - slackTrigger type: object - SloDataSource: - default: slo - description: A data source for SLO queries. - enum: - - slo - example: slo - type: string - x-enum-varnames: - - SLO - SloQuery: - description: A query for SLO status, error budget, and burn rate metrics. - example: - additional_query_filters: "*" - data_source: "slo" - group_mode: "overall" - measure: "good_events" - name: "my_slo" - slo_id: "12345678910" - slo_query_type: "metric" - properties: - additional_query_filters: - description: Additional filters applied to the SLO query. - example: "host:host_a,env:prod" - type: string - data_source: - $ref: "#/components/schemas/SloDataSource" - group_mode: - $ref: "#/components/schemas/SlosGroupMode" - measure: - $ref: "#/components/schemas/SlosMeasure" - name: - description: The variable name for use in formulas. - example: query1 - type: string - slo_id: - description: The unique identifier of the SLO to query. - example: "a]b123c45de6f78g90h" - type: string - slo_query_type: - $ref: "#/components/schemas/SlosQueryType" - required: - - data_source - - slo_id - - measure - type: object SloReportCreateRequest: description: The SLO report request body. properties: @@ -68085,54 +67835,6 @@ components: type: string x-enum-varnames: - SLO_STATUS - SlosGroupMode: - description: How SLO results are grouped in the response. - enum: - - overall - - components - example: overall - type: string - x-enum-varnames: - - OVERALL - - COMPONENTS - SlosMeasure: - description: The SLO measurement to retrieve. - enum: - - good_events - - bad_events - - slo_status - - error_budget_remaining - - error_budget_remaining_history - - error_budget_burndown - - burn_rate - - slo_status_history - - good_minutes - - bad_minutes - example: slo_status - type: string - x-enum-varnames: - - GOOD_EVENTS - - BAD_EVENTS - - SLO_STATUS - - ERROR_BUDGET_REMAINING - - ERROR_BUDGET_REMAINING_HISTORY - - ERROR_BUDGET_BURNDOWN - - BURN_RATE - - SLO_STATUS_HISTORY - - GOOD_MINUTES - - BAD_MINUTES - SlosQueryType: - description: The type of SLO definition being queried. - enum: - - metric - - time_slice - - monitor - example: metric - type: string - x-enum-varnames: - - METRIC - - TIME_SLICE - - MONITOR Snapshot: description: A single heatmap snapshot resource returned by create or update operations. properties: @@ -70281,6 +69983,14 @@ components: format: double type: number type: object + SuggestionMetadata: + description: Optional metadata for a suggestion. + properties: + variant_id: + description: Variant ID for variant delete suggestions. + example: "550e8400-e29b-41d4-a716-446655440005" + type: string + type: object SuiteCreateEdit: description: Data object for creating or editing a Synthetic test suite. properties: @@ -75203,12 +74913,6 @@ components: oneOf: - $ref: "#/components/schemas/MetricsTimeseriesQuery" - $ref: "#/components/schemas/EventsTimeseriesQuery" - - $ref: "#/components/schemas/ApmResourceStatsQuery" - - $ref: "#/components/schemas/ApmMetricsQuery" - - $ref: "#/components/schemas/ApmDependencyStatsQuery" - - $ref: "#/components/schemas/SloQuery" - - $ref: "#/components/schemas/ProcessTimeseriesQuery" - - $ref: "#/components/schemas/ContainerTimeseriesQuery" TimeseriesResponse: description: A message containing the response to a timeseries query. properties: @@ -91805,6 +91509,194 @@ paths: operator: AND permissions: - feature_flag_config_write + /api/v2/feature-flags/suggestions/{suggestion_id}: + delete: + description: |- + Delete a pending flag change suggestion. Approved suggestions cannot be deleted. + operationId: DeleteFlagSuggestion + parameters: + - $ref: "#/components/parameters/suggestion_id" + responses: + "204": + description: No Content + "400": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Bad Request + "403": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Forbidden + "404": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Not Found + "429": + $ref: "#/components/responses/TooManyRequestsResponse" + security: + - apiKeyAuth: [] + appKeyAuth: [] + summary: Delete a flag suggestion + tags: + - Feature Flags + x-permission: + operator: AND + permissions: + - feature_flag_config_write + - feature_flag_environment_config_read + get: + description: |- + Get a flag change suggestion by ID. + operationId: GetFlagSuggestion + parameters: + - $ref: "#/components/parameters/suggestion_id" + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/FlagSuggestionResponse" + description: OK + "400": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Bad Request + "403": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Forbidden + "404": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Not Found + "429": + $ref: "#/components/responses/TooManyRequestsResponse" + security: + - apiKeyAuth: [] + appKeyAuth: [] + summary: Get a flag suggestion + tags: + - Feature Flags + x-permission: + operator: AND + permissions: + - feature_flag_config_write + - feature_flag_environment_config_read + /api/v2/feature-flags/suggestions/{suggestion_id}/approve: + post: + description: |- + Approve a pending flag change suggestion. The change is applied immediately + upon approval. A user cannot approve their own suggestion. + operationId: ApproveFlagSuggestion + parameters: + - $ref: "#/components/parameters/suggestion_id" + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ReviewFlagSuggestionRequest" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/FlagSuggestionResponse" + description: OK + "400": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Bad Request + "403": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Forbidden - Cannot approve your own suggestion + "404": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Not Found + "429": + $ref: "#/components/responses/TooManyRequestsResponse" + security: + - apiKeyAuth: [] + appKeyAuth: [] + summary: Approve a flag suggestion + tags: + - Feature Flags + x-permission: + operator: AND + permissions: + - feature_flag_config_write + - feature_flag_environment_config_read + /api/v2/feature-flags/suggestions/{suggestion_id}/reject: + post: + description: |- + Reject a pending flag change suggestion. The suggested change is not applied. + operationId: RejectFlagSuggestion + parameters: + - $ref: "#/components/parameters/suggestion_id" + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ReviewFlagSuggestionRequest" + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/FlagSuggestionResponse" + description: OK + "400": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Bad Request + "403": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Forbidden + "404": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Not Found + "429": + $ref: "#/components/responses/TooManyRequestsResponse" + security: + - apiKeyAuth: [] + appKeyAuth: [] + summary: Reject a flag suggestion + tags: + - Feature Flags + x-permission: + operator: AND + permissions: + - feature_flag_config_write + - feature_flag_environment_config_read /api/v2/feature-flags/{feature_flag_id}: get: description: |- @@ -92216,6 +92108,65 @@ paths: permissions: - feature_flag_config_write - feature_flag_environment_config_read + /api/v2/feature-flags/{feature_flag_id}/suggestions: + post: + description: |- + Create a change suggestion for a feature flag. Suggestions require approval + before the change is applied. The request must include at least one + notification_rule_targets handle to receive approval or rejection notifications. + operationId: CreateFlagSuggestion + parameters: + - $ref: "#/components/parameters/feature_flag_id" + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/CreateFlagSuggestionRequest" + required: true + responses: + "201": + content: + application/json: + schema: + $ref: "#/components/schemas/FlagSuggestionResponse" + description: Created + "400": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Bad Request + "403": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Forbidden + "404": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Not Found + "409": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Conflict + "429": + $ref: "#/components/responses/TooManyRequestsResponse" + security: + - apiKeyAuth: [] + appKeyAuth: [] + summary: Create a flag suggestion + tags: + - Feature Flags + x-permission: + operator: AND + permissions: + - feature_flag_config_write + - feature_flag_environment_config_read /api/v2/feature-flags/{feature_flag_id}/unarchive: post: description: |- diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_dependency_stats-data-source-returns-OK-response_1257822553/frozen.json b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_dependency_stats-data-source-returns-OK-response_1257822553/frozen.json deleted file mode 100644 index 17b54c84dcdf..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_dependency_stats-data-source-returns-OK-response_1257822553/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-08T15:25:29.994Z" diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_dependency_stats-data-source-returns-OK-response_1257822553/recording.har b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_dependency_stats-data-source-returns-OK-response_1257822553/recording.har deleted file mode 100644 index 7f27532ad32e..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_dependency_stats-data-source-returns-OK-response_1257822553/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Scalar cross product query with apm_dependency_stats data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "b500451c53464b5849afdb6ff1691048", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 504, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 562, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1775658329000,\"queries\":[{\"data_source\":\"apm_dependency_stats\",\"env\":\"ci\",\"name\":\"a\",\"operation_name\":\"cassandra.query\",\"primary_tag_name\":\"datacenter\",\"primary_tag_value\":\"edge-eu1.prod.dog\",\"resource_name\":\"DELETE FROM monitor_history.monitor_state_change_history WHERE org_id = ? AND monitor_id IN ? AND group = ?\",\"service\":\"cassandra\",\"stat\":\"avg_duration\"}],\"to\":1775661929000},\"type\":\"scalar_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/scalar" - }, - "response": { - "bodySize": 248, - "content": { - "mimeType": "application/vnd.api+json", - "size": 248, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":[{\"family\":\"time\",\"name\":\"microsecond\",\"plural\":\"microseconds\",\"scale_factor\":0.000001,\"short_name\":\"\u03bcs\",\"id\":9},null]}}]}}}" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 663, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-08T15:25:30.862Z", - "time": 184 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_metrics-data-source-and-span_kind-returns-OK-response_3489103309/frozen.json b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_metrics-data-source-and-span_kind-returns-OK-response_3489103309/frozen.json deleted file mode 100644 index 1f11bc334cbe..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_metrics-data-source-and-span_kind-returns-OK-response_3489103309/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-09T18:41:04.011Z" diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_metrics-data-source-and-span_kind-returns-OK-response_3489103309/recording.har b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_metrics-data-source-and-span_kind-returns-OK-response_3489103309/recording.har deleted file mode 100644 index f29ec1fa888c..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_metrics-data-source-and-span_kind-returns-OK-response_3489103309/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Scalar cross product query with apm_metrics data source and span_kind returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "9c5b26f69dbc190e6b2ff2ec9ea60a4f", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 319, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 562, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1775756464000,\"queries\":[{\"data_source\":\"apm_metrics\",\"group_by\":[\"resource_name\"],\"name\":\"a\",\"query_filter\":\"env:prod\",\"service\":\"web-store\",\"span_kind\":\"server\",\"stat\":\"hits\"}],\"to\":1775760064000},\"type\":\"scalar_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/scalar" - }, - "response": { - "bodySize": 133, - "content": { - "mimeType": "application/vnd.api+json", - "size": 133, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 662, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-09T18:41:04.902Z", - "time": 166 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_metrics-data-source-returns-OK-response_88042147/frozen.json b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_metrics-data-source-returns-OK-response_88042147/frozen.json deleted file mode 100644 index d1b10a783d39..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_metrics-data-source-returns-OK-response_88042147/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-08T15:25:31.055Z" diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_metrics-data-source-returns-OK-response_88042147/recording.har b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_metrics-data-source-returns-OK-response_88042147/recording.har deleted file mode 100644 index 71285ef968d4..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_metrics-data-source-returns-OK-response_88042147/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Scalar cross product query with apm_metrics data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "39727778207a72b2bcf8cb00d2b605dc", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 298, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 561, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1775658331000,\"queries\":[{\"data_source\":\"apm_metrics\",\"group_by\":[\"resource_name\"],\"name\":\"a\",\"query_filter\":\"env:prod\",\"service\":\"web-store\",\"stat\":\"hits\"}],\"to\":1775661931000},\"type\":\"scalar_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/scalar" - }, - "response": { - "bodySize": 133, - "content": { - "mimeType": "application/vnd.api+json", - "size": 133, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 662, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-08T15:25:31.060Z", - "time": 178 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_resource_stats-data-source-returns-OK-response_3966739012/frozen.json b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_resource_stats-data-source-returns-OK-response_3966739012/frozen.json deleted file mode 100644 index db45dab5dcbc..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_resource_stats-data-source-returns-OK-response_3966739012/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-08T15:25:31.243Z" diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_resource_stats-data-source-returns-OK-response_3966739012/recording.har b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_resource_stats-data-source-returns-OK-response_3966739012/recording.har deleted file mode 100644 index 08a48d84f415..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-apm_resource_stats-data-source-returns-OK-response_3966739012/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Scalar cross product query with apm_resource_stats data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "b95530cc8297971b309c385c98c13599", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 394, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 562, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1775658331000,\"queries\":[{\"data_source\":\"apm_resource_stats\",\"env\":\"staging\",\"group_by\":[\"resource_name\"],\"name\":\"a\",\"operation_name\":\"cassandra.query\",\"primary_tag_name\":\"datacenter\",\"primary_tag_value\":\"*\",\"service\":\"azure-bill-import\",\"stat\":\"hits\"}],\"to\":1775661931000},\"type\":\"scalar_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/scalar" - }, - "response": { - "bodySize": 133, - "content": { - "mimeType": "application/vnd.api+json", - "size": 133, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 662, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-08T15:25:31.245Z", - "time": 415 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-audit-data-source-returns-OK-response_1203458350/frozen.json b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-audit-data-source-returns-OK-response_1203458350/frozen.json deleted file mode 100644 index 50759f67f3ac..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-audit-data-source-returns-OK-response_1203458350/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:35.324Z" diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-audit-data-source-returns-OK-response_1203458350/recording.har b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-audit-data-source-returns-OK-response_1203458350/recording.har deleted file mode 100644 index 1a153360ff51..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-audit-data-source-returns-OK-response_1203458350/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Scalar cross product query with audit data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "b88d1d11e7a9b790d7945f67fccc8ae3", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 274, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 562, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290795000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"audit\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294395000},\"type\":\"scalar_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/scalar" - }, - "response": { - "bodySize": 138, - "content": { - "mimeType": "application/vnd.api+json", - "size": 138, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[983.0],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 662, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:36.204Z", - "time": 465 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-ci_pipelines-data-source-returns-OK-response_619845833/frozen.json b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-ci_pipelines-data-source-returns-OK-response_619845833/frozen.json deleted file mode 100644 index a647e0501973..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-ci_pipelines-data-source-returns-OK-response_619845833/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:36.679Z" diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-ci_pipelines-data-source-returns-OK-response_619845833/recording.har b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-ci_pipelines-data-source-returns-OK-response_619845833/recording.har deleted file mode 100644 index 810907acfb65..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-ci_pipelines-data-source-returns-OK-response_619845833/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Scalar cross product query with ci_pipelines data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "13ddd9779f4e857da2b881a1f7107007", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 281, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 562, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290796000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"ci_pipelines\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294396000},\"type\":\"scalar_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/scalar" - }, - "response": { - "bodySize": 136, - "content": { - "mimeType": "application/vnd.api+json", - "size": 136, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[9.0],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 662, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:36.683Z", - "time": 314 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-ci_tests-data-source-returns-OK-response_2419723191/frozen.json b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-ci_tests-data-source-returns-OK-response_2419723191/frozen.json deleted file mode 100644 index 4b5f6803b5cf..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-ci_tests-data-source-returns-OK-response_2419723191/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:37.003Z" diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-ci_tests-data-source-returns-OK-response_2419723191/recording.har b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-ci_tests-data-source-returns-OK-response_2419723191/recording.har deleted file mode 100644 index 6d4939776354..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-ci_tests-data-source-returns-OK-response_2419723191/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Scalar cross product query with ci_tests data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "0070818510f35203eca78a357f650160", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 277, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 562, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290797000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"ci_tests\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294397000},\"type\":\"scalar_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/scalar" - }, - "response": { - "bodySize": 133, - "content": { - "mimeType": "application/vnd.api+json", - "size": 133, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 662, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:37.006Z", - "time": 309 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-container-data-source-returns-OK-response_4133843090/frozen.json b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-container-data-source-returns-OK-response_4133843090/frozen.json deleted file mode 100644 index a26516705bb8..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-container-data-source-returns-OK-response_4133843090/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-08T15:25:31.666Z" diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-container-data-source-returns-OK-response_4133843090/recording.har b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-container-data-source-returns-OK-response_4133843090/recording.har deleted file mode 100644 index c26a5bf1e718..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-container-data-source-returns-OK-response_4133843090/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Scalar cross product query with container data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "d8098ce137fa43a0309cf74d7422cac0", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 315, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 561, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1775658331000,\"queries\":[{\"aggregator\":\"avg\",\"data_source\":\"container\",\"limit\":10,\"metric\":\"process.stat.container.cpu.system_pct\",\"name\":\"a\",\"sort\":\"desc\",\"tag_filters\":[]}],\"to\":1775661931000},\"type\":\"scalar_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/scalar" - }, - "response": { - "bodySize": 239, - "content": { - "mimeType": "application/vnd.api+json", - "size": 239, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":[{\"family\":\"percentage\",\"name\":\"percent\",\"plural\":\"percent\",\"scale_factor\":1.0,\"short_name\":\"%\",\"id\":17},null]}}]}}}" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 662, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-08T15:25:31.669Z", - "time": 164 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-events-data-source-returns-OK-response_3158011884/frozen.json b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-events-data-source-returns-OK-response_3158011884/frozen.json deleted file mode 100644 index d5a10c7329a9..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-events-data-source-returns-OK-response_3158011884/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:37.321Z" diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-events-data-source-returns-OK-response_3158011884/recording.har b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-events-data-source-returns-OK-response_3158011884/recording.har deleted file mode 100644 index 7ccc91e73696..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-events-data-source-returns-OK-response_3158011884/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Scalar cross product query with events data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "025e8ae78c72fdaf21057e0f32327b90", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 275, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 562, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290797000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"events\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294397000},\"type\":\"scalar_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/scalar" - }, - "response": { - "bodySize": 138, - "content": { - "mimeType": "application/vnd.api+json", - "size": 138, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[322.0],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 662, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:37.323Z", - "time": 378 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-logs-data-source-returns-OK-response_3898307586/frozen.json b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-logs-data-source-returns-OK-response_3898307586/frozen.json deleted file mode 100644 index 2c304c037c5e..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-logs-data-source-returns-OK-response_3898307586/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:37.705Z" diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-logs-data-source-returns-OK-response_3898307586/recording.har b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-logs-data-source-returns-OK-response_3898307586/recording.har deleted file mode 100644 index bf7a427210ce..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-logs-data-source-returns-OK-response_3898307586/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Scalar cross product query with logs data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "880816ccc6d62012f34f311cdb585364", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 273, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 561, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290797000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"logs\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294397000},\"type\":\"scalar_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/scalar" - }, - "response": { - "bodySize": 133, - "content": { - "mimeType": "application/vnd.api+json", - "size": 133, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 662, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:37.707Z", - "time": 348 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-network-data-source-returns-OK-response_846224347/frozen.json b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-network-data-source-returns-OK-response_846224347/frozen.json deleted file mode 100644 index 9b47afaf1d3a..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-network-data-source-returns-OK-response_846224347/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:38.061Z" diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-network-data-source-returns-OK-response_846224347/recording.har b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-network-data-source-returns-OK-response_846224347/recording.har deleted file mode 100644 index 4a40c5c7e0c4..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-network-data-source-returns-OK-response_846224347/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Scalar cross product query with network data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "f5c29aef4e7534eff8b8f2cb0921267a", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 276, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 562, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290798000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"network\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294398000},\"type\":\"scalar_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/scalar" - }, - "response": { - "bodySize": 133, - "content": { - "mimeType": "application/vnd.api+json", - "size": 133, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 662, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:38.063Z", - "time": 281 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-on_call_events-data-source-returns-OK-response_1840633531/frozen.json b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-on_call_events-data-source-returns-OK-response_1840633531/frozen.json deleted file mode 100644 index a11143bf9744..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-on_call_events-data-source-returns-OK-response_1840633531/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:38.350Z" diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-on_call_events-data-source-returns-OK-response_1840633531/recording.har b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-on_call_events-data-source-returns-OK-response_1840633531/recording.har deleted file mode 100644 index 2cdad3900584..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-on_call_events-data-source-returns-OK-response_1840633531/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Scalar cross product query with on_call_events data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "1c89c1d33a5dc854076201159c0c54f8", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 283, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 562, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290798000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"on_call_events\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294398000},\"type\":\"scalar_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/scalar" - }, - "response": { - "bodySize": 136, - "content": { - "mimeType": "application/vnd.api+json", - "size": 136, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[5.0],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 662, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:38.352Z", - "time": 305 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-process-data-source-returns-OK-response_1148763892/frozen.json b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-process-data-source-returns-OK-response_1148763892/frozen.json deleted file mode 100644 index 0ae51cbefd47..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-process-data-source-returns-OK-response_1148763892/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-08T15:25:31.838Z" diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-process-data-source-returns-OK-response_1148763892/recording.har b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-process-data-source-returns-OK-response_1148763892/recording.har deleted file mode 100644 index a42f05389007..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-process-data-source-returns-OK-response_1148763892/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Scalar cross product query with process data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "b5fabe8820777542f642503ef115dbd6", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 345, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 562, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1775658331000,\"queries\":[{\"aggregator\":\"avg\",\"data_source\":\"process\",\"is_normalized_cpu\":false,\"limit\":10,\"metric\":\"process.stat.cpu.total_pct\",\"name\":\"a\",\"sort\":\"desc\",\"tag_filters\":[],\"text_filter\":\"\"}],\"to\":1775661931000},\"type\":\"scalar_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/scalar" - }, - "response": { - "bodySize": 239, - "content": { - "mimeType": "application/vnd.api+json", - "size": 239, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":[{\"family\":\"percentage\",\"name\":\"percent\",\"plural\":\"percent\",\"scale_factor\":1.0,\"short_name\":\"%\",\"id\":17},null]}}]}}}" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 662, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-08T15:25:31.841Z", - "time": 171 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-product_analytics-data-source-returns-OK-response_3282787281/frozen.json b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-product_analytics-data-source-returns-OK-response_3282787281/frozen.json deleted file mode 100644 index 5ba6073d4978..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-product_analytics-data-source-returns-OK-response_3282787281/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:38.663Z" diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-product_analytics-data-source-returns-OK-response_3282787281/recording.har b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-product_analytics-data-source-returns-OK-response_3282787281/recording.har deleted file mode 100644 index 1db914f874f2..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-product_analytics-data-source-returns-OK-response_3282787281/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Scalar cross product query with product_analytics data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "74ea29f9edf876dcb9c7f84f5eec1bd4", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 286, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 562, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290798000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"product_analytics\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294398000},\"type\":\"scalar_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/scalar" - }, - "response": { - "bodySize": 133, - "content": { - "mimeType": "application/vnd.api+json", - "size": 133, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 662, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:38.665Z", - "time": 340 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-profiles-data-source-returns-OK-response_2804512159/frozen.json b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-profiles-data-source-returns-OK-response_2804512159/frozen.json deleted file mode 100644 index fd42a25ebfa4..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-profiles-data-source-returns-OK-response_2804512159/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:39.011Z" diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-profiles-data-source-returns-OK-response_2804512159/recording.har b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-profiles-data-source-returns-OK-response_2804512159/recording.har deleted file mode 100644 index 7ee957edc6b8..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-profiles-data-source-returns-OK-response_2804512159/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Scalar cross product query with profiles data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "fc18cb1c95d50cb42cfaa2549fc78591", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 277, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 562, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290799000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"profiles\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294399000},\"type\":\"scalar_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/scalar" - }, - "response": { - "bodySize": 133, - "content": { - "mimeType": "application/vnd.api+json", - "size": 133, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 662, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:39.014Z", - "time": 309 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-rum-data-source-returns-OK-response_2266889829/frozen.json b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-rum-data-source-returns-OK-response_2266889829/frozen.json deleted file mode 100644 index 6b4d87ba016b..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-rum-data-source-returns-OK-response_2266889829/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:39.329Z" diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-rum-data-source-returns-OK-response_2266889829/recording.har b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-rum-data-source-returns-OK-response_2266889829/recording.har deleted file mode 100644 index cd377d5c0ffa..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-rum-data-source-returns-OK-response_2266889829/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Scalar cross product query with rum data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "20ccb29e0ba19d5167287cf6c7edd841", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 272, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 562, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290799000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"rum\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294399000},\"type\":\"scalar_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/scalar" - }, - "response": { - "bodySize": 138, - "content": { - "mimeType": "application/vnd.api+json", - "size": 138, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[338.0],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 662, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:39.331Z", - "time": 466 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-security_signals-data-source-returns-OK-response_1711091745/frozen.json b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-security_signals-data-source-returns-OK-response_1711091745/frozen.json deleted file mode 100644 index 1114b591093e..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-security_signals-data-source-returns-OK-response_1711091745/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:39.804Z" diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-security_signals-data-source-returns-OK-response_1711091745/recording.har b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-security_signals-data-source-returns-OK-response_1711091745/recording.har deleted file mode 100644 index 35a58559bba1..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-security_signals-data-source-returns-OK-response_1711091745/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Scalar cross product query with security_signals data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "8b6d24dfc05b6b341d9fda6ba0692a1c", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 285, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 562, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290799000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"security_signals\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294399000},\"type\":\"scalar_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/scalar" - }, - "response": { - "bodySize": 133, - "content": { - "mimeType": "application/vnd.api+json", - "size": 133, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 663, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:39.806Z", - "time": 298 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-slo-data-source-returns-OK-response_2401466805/frozen.json b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-slo-data-source-returns-OK-response_2401466805/frozen.json deleted file mode 100644 index d6958e17ab37..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-slo-data-source-returns-OK-response_2401466805/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-08T15:25:32.018Z" diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-slo-data-source-returns-OK-response_2401466805/recording.har b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-slo-data-source-returns-OK-response_2401466805/recording.har deleted file mode 100644 index da84c9ca8b23..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-slo-data-source-returns-OK-response_2401466805/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Scalar cross product query with slo data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "fcc74edd85f35b43a106604f8ebb1c5a", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 325, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 562, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1775658332000,\"queries\":[{\"additional_query_filters\":\"*\",\"data_source\":\"slo\",\"group_mode\":\"overall\",\"measure\":\"slo_status\",\"name\":\"a\",\"slo_id\":\"12345678910\",\"slo_query_type\":\"metric\"}],\"to\":1775661932000},\"type\":\"scalar_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/scalar" - }, - "response": { - "bodySize": 239, - "content": { - "mimeType": "application/vnd.api+json", - "size": 239, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":[{\"family\":\"percentage\",\"name\":\"percent\",\"plural\":\"percent\",\"scale_factor\":1.0,\"short_name\":\"%\",\"id\":17},null]}}]}}}" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 662, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-08T15:25:32.020Z", - "time": 116 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-spans-data-source-returns-OK-response_3177956840/frozen.json b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-spans-data-source-returns-OK-response_3177956840/frozen.json deleted file mode 100644 index 701c37be7d5a..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-spans-data-source-returns-OK-response_3177956840/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:40.111Z" diff --git a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-spans-data-source-returns-OK-response_3177956840/recording.har b/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-spans-data-source-returns-OK-response_3177956840/recording.har deleted file mode 100644 index 3bfa98bf94a7..000000000000 --- a/cassettes/v2/Metrics_2046978582/Scalar-cross-product-query-with-spans-data-source-returns-OK-response_3177956840/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Scalar cross product query with spans data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "8ff4675001de5f9da321d7e98072ac23", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 274, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 562, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290800000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"spans\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294400000},\"type\":\"scalar_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/scalar" - }, - "response": { - "bodySize": 133, - "content": { - "mimeType": "application/vnd.api+json", - "size": 133, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 663, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:40.113Z", - "time": 337 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_dependency_stats-data-source-returns-OK-response_410628325/frozen.json b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_dependency_stats-data-source-returns-OK-response_410628325/frozen.json deleted file mode 100644 index ad441c299f69..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_dependency_stats-data-source-returns-OK-response_410628325/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-08T15:25:32.147Z" diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_dependency_stats-data-source-returns-OK-response_410628325/recording.har b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_dependency_stats-data-source-returns-OK-response_410628325/recording.har deleted file mode 100644 index 0c7c78c83499..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_dependency_stats-data-source-returns-OK-response_410628325/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Timeseries cross product query with apm_dependency_stats data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "9a8d6c689dd7106ecbc57c0aa5097500", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 524, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 570, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1775658332000,\"interval\":5000,\"queries\":[{\"data_source\":\"apm_dependency_stats\",\"env\":\"ci\",\"name\":\"a\",\"operation_name\":\"cassandra.query\",\"primary_tag_name\":\"datacenter\",\"primary_tag_value\":\"edge-eu1.prod.dog\",\"resource_name\":\"DELETE FROM monitor_history.monitor_state_change_history WHERE org_id = ? AND monitor_id IN ? AND group = ?\",\"service\":\"cassandra\",\"stat\":\"avg_duration\"}],\"to\":1775661932000},\"type\":\"timeseries_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/timeseries" - }, - "response": { - "bodySize": 99, - "content": { - "mimeType": "application/vnd.api+json", - "size": 99, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-08T15:25:32.150Z", - "time": 208 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_metrics-data-source-and-span_kind-returns-OK-resp_4151523513/frozen.json b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_metrics-data-source-and-span_kind-returns-OK-resp_4151523513/frozen.json deleted file mode 100644 index 7b80f64ef66c..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_metrics-data-source-and-span_kind-returns-OK-resp_4151523513/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-09T18:41:05.084Z" diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_metrics-data-source-and-span_kind-returns-OK-resp_4151523513/recording.har b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_metrics-data-source-and-span_kind-returns-OK-resp_4151523513/recording.har deleted file mode 100644 index 1a20c80b485f..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_metrics-data-source-and-span_kind-returns-OK-resp_4151523513/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Timeseries cross product query with apm_metrics data source and span_kind returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "6c87e9f90f6649431f6608d92a25c377", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 339, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 570, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1775756465000,\"interval\":5000,\"queries\":[{\"data_source\":\"apm_metrics\",\"group_by\":[\"resource_name\"],\"name\":\"a\",\"query_filter\":\"env:prod\",\"service\":\"web-store\",\"span_kind\":\"server\",\"stat\":\"hits\"}],\"to\":1775760065000},\"type\":\"timeseries_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/timeseries" - }, - "response": { - "bodySize": 99, - "content": { - "mimeType": "application/vnd.api+json", - "size": 99, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-09T18:41:05.089Z", - "time": 148 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_metrics-data-source-returns-OK-response_2242043199/frozen.json b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_metrics-data-source-returns-OK-response_2242043199/frozen.json deleted file mode 100644 index 2d2fb0c9e28b..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_metrics-data-source-returns-OK-response_2242043199/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-08T15:25:32.363Z" diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_metrics-data-source-returns-OK-response_2242043199/recording.har b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_metrics-data-source-returns-OK-response_2242043199/recording.har deleted file mode 100644 index aa4440a5dbfb..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_metrics-data-source-returns-OK-response_2242043199/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Timeseries cross product query with apm_metrics data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "a272178f7525135da4e09b44b37c8657", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 318, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 570, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1775658332000,\"interval\":5000,\"queries\":[{\"data_source\":\"apm_metrics\",\"group_by\":[\"resource_name\"],\"name\":\"a\",\"query_filter\":\"env:prod\",\"service\":\"web-store\",\"stat\":\"hits\"}],\"to\":1775661932000},\"type\":\"timeseries_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/timeseries" - }, - "response": { - "bodySize": 99, - "content": { - "mimeType": "application/vnd.api+json", - "size": 99, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-08T15:25:32.365Z", - "time": 200 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_resource_stats-data-source-returns-OK-response_3455584792/frozen.json b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_resource_stats-data-source-returns-OK-response_3455584792/frozen.json deleted file mode 100644 index 0552424491a4..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_resource_stats-data-source-returns-OK-response_3455584792/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-08T15:25:32.570Z" diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_resource_stats-data-source-returns-OK-response_3455584792/recording.har b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_resource_stats-data-source-returns-OK-response_3455584792/recording.har deleted file mode 100644 index 8513db2766e2..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-apm_resource_stats-data-source-returns-OK-response_3455584792/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Timeseries cross product query with apm_resource_stats data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "418a1d055a152db9609465988030239b", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 414, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 570, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1775658332000,\"interval\":5000,\"queries\":[{\"data_source\":\"apm_resource_stats\",\"env\":\"staging\",\"group_by\":[\"resource_name\"],\"name\":\"a\",\"operation_name\":\"cassandra.query\",\"primary_tag_name\":\"datacenter\",\"primary_tag_value\":\"*\",\"service\":\"azure-bill-import\",\"stat\":\"hits\"}],\"to\":1775661932000},\"type\":\"timeseries_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/timeseries" - }, - "response": { - "bodySize": 99, - "content": { - "mimeType": "application/vnd.api+json", - "size": 99, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-08T15:25:32.572Z", - "time": 138 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-audit-data-source-returns-OK-response_1989437242/frozen.json b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-audit-data-source-returns-OK-response_1989437242/frozen.json deleted file mode 100644 index 1bea5503526f..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-audit-data-source-returns-OK-response_1989437242/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:40.465Z" diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-audit-data-source-returns-OK-response_1989437242/recording.har b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-audit-data-source-returns-OK-response_1989437242/recording.har deleted file mode 100644 index e05761a9b9e6..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-audit-data-source-returns-OK-response_1989437242/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Timeseries cross product query with audit data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "84aac7a431ba5b27851abc0693732347", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 294, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 570, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290800000,\"interval\":5000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"audit\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294400000},\"type\":\"timeseries_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/timeseries" - }, - "response": { - "bodySize": 2562, - "content": { - "mimeType": "application/vnd.api+json", - "size": 2562, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[{\"group_tags\":[],\"query_index\":0,\"unit\":null}],\"times\":[1776290800000,1776290835000,1776290860000,1776290895000,1776290915000,1776290920000,1776290945000,1776290955000,1776290980000,1776291020000,1776291040000,1776291080000,1776291100000,1776291140000,1776291160000,1776291200000,1776291220000,1776291245000,1776291260000,1776291280000,1776291320000,1776291325000,1776291330000,1776291335000,1776291340000,1776291345000,1776291385000,1776291400000,1776291415000,1776291445000,1776291460000,1776291505000,1776291520000,1776291535000,1776291540000,1776291565000,1776291580000,1776291630000,1776291640000,1776291690000,1776291700000,1776291750000,1776291760000,1776291810000,1776291820000,1776291870000,1776291880000,1776291890000,1776291935000,1776291940000,1776291995000,1776292000000,1776292010000,1776292015000,1776292020000,1776292055000,1776292060000,1776292115000,1776292120000,1776292175000,1776292180000,1776292195000,1776292200000,1776292205000,1776292240000,1776292300000,1776292360000,1776292390000,1776292420000,1776292460000,1776292480000,1776292540000,1776292545000,1776292565000,1776292600000,1776292605000,1776292660000,1776292665000,1776292720000,1776292725000,1776292765000,1776292780000,1776292785000,1776292840000,1776292850000,1776292900000,1776292910000,1776292960000,1776292970000,1776293005000,1776293020000,1776293030000,1776293080000,1776293090000,1776293140000,1776293155000,1776293200000,1776293215000,1776293260000,1776293265000,1776293275000,1776293320000,1776293335000,1776293355000,1776293380000,1776293395000,1776293440000,1776293460000,1776293500000,1776293520000,1776293545000,1776293550000,1776293555000,1776293560000,1776293580000,1776293620000,1776293640000,1776293680000,1776293700000,1776293740000,1776293760000,1776293765000,1776293770000,1776293785000,1776293790000,1776293800000,1776293825000,1776293860000,1776293865000,1776293885000,1776293920000,1776293945000,1776293955000,1776293980000,1776294005000,1776294040000,1776294070000,1776294100000,1776294130000,1776294160000,1776294190000,1776294220000,1776294240000,1776294245000,1776294250000,1776294280000,1776294285000,1776294310000,1776294340000,1776294375000],\"values\":[[2,2,3,2,13,2,3,2,3,2,1,2,3,2,3,2,1,4,2,3,11,104,140,28,9,2,2,1,3,2,3,2,4,1,1,2,1,2,3,2,1,2,3,2,3,2,3,3,2,1,2,3,7,14,10,2,1,2,3,2,3,8,14,9,3,5,3,8,5,9,3,3,2,4,1,2,3,2,3,2,1,1,2,3,2,1,2,3,2,1,1,2,54,2,1,2,3,2,6,2,2,1,2,4,3,2,1,2,3,2,5,15,7,3,2,1,2,3,2,2,14,29,2,19,9,2,2,2,1,2,3,2,55,1,2,3,2,1,2,3,2,3,3,3,2,38,73,2,3,1]]}}}\n" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 668, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:40.468Z", - "time": 312 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-ci_pipelines-data-source-returns-OK-response_618963805/frozen.json b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-ci_pipelines-data-source-returns-OK-response_618963805/frozen.json deleted file mode 100644 index bb76b1b75129..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-ci_pipelines-data-source-returns-OK-response_618963805/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:40.785Z" diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-ci_pipelines-data-source-returns-OK-response_618963805/recording.har b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-ci_pipelines-data-source-returns-OK-response_618963805/recording.har deleted file mode 100644 index 0ff051fbc57f..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-ci_pipelines-data-source-returns-OK-response_618963805/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Timeseries cross product query with ci_pipelines data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "462a586d1fbb2dbc8ac640ea1eed6b91", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 301, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 570, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290800000,\"interval\":5000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"ci_pipelines\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294400000},\"type\":\"timeseries_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/timeseries" - }, - "response": { - "bodySize": 240, - "content": { - "mimeType": "application/vnd.api+json", - "size": 240, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[{\"group_tags\":[],\"query_index\":0,\"unit\":null}],\"times\":[1776291235000,1776291290000,1776291295000,1776291370000,1776291380000,1776291385000],\"values\":[[1,1,3,1,1,2]]}}}\n" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 667, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:40.788Z", - "time": 392 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-ci_tests-data-source-returns-OK-response_1909507155/frozen.json b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-ci_tests-data-source-returns-OK-response_1909507155/frozen.json deleted file mode 100644 index 3a91533173cc..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-ci_tests-data-source-returns-OK-response_1909507155/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:41.185Z" diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-ci_tests-data-source-returns-OK-response_1909507155/recording.har b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-ci_tests-data-source-returns-OK-response_1909507155/recording.har deleted file mode 100644 index 42a8215a5ee8..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-ci_tests-data-source-returns-OK-response_1909507155/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Timeseries cross product query with ci_tests data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "a099b29c26afada64c41b39adbb22563", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 297, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 570, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290801000,\"interval\":5000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"ci_tests\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294401000},\"type\":\"timeseries_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/timeseries" - }, - "response": { - "bodySize": 99, - "content": { - "mimeType": "application/vnd.api+json", - "size": 99, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:41.187Z", - "time": 315 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-container-data-source-returns-OK-response_3051251422/frozen.json b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-container-data-source-returns-OK-response_3051251422/frozen.json deleted file mode 100644 index 3ecb4fe0cdda..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-container-data-source-returns-OK-response_3051251422/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-08T15:25:32.715Z" diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-container-data-source-returns-OK-response_3051251422/recording.har b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-container-data-source-returns-OK-response_3051251422/recording.har deleted file mode 100644 index 494b453a2b14..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-container-data-source-returns-OK-response_3051251422/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Timeseries cross product query with container data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "8e86418819eb8f46a54060133cd9a878", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 316, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 570, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1775658332000,\"interval\":5000,\"queries\":[{\"data_source\":\"container\",\"limit\":10,\"metric\":\"process.stat.container.cpu.system_pct\",\"name\":\"a\",\"sort\":\"desc\",\"tag_filters\":[]}],\"to\":1775661932000},\"type\":\"timeseries_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/timeseries" - }, - "response": { - "bodySize": 99, - "content": { - "mimeType": "application/vnd.api+json", - "size": 99, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-08T15:25:32.718Z", - "time": 187 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-events-data-source-returns-OK-response_3902683472/frozen.json b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-events-data-source-returns-OK-response_3902683472/frozen.json deleted file mode 100644 index 67c7650a55a9..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-events-data-source-returns-OK-response_3902683472/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:41.507Z" diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-events-data-source-returns-OK-response_3902683472/recording.har b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-events-data-source-returns-OK-response_3902683472/recording.har deleted file mode 100644 index fb3be0c99b39..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-events-data-source-returns-OK-response_3902683472/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Timeseries cross product query with events data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "8d1f6a17c16b1aea5f1460c4906515c2", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 295, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 570, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290801000,\"interval\":5000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"events\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294401000},\"type\":\"timeseries_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/timeseries" - }, - "response": { - "bodySize": 1299, - "content": { - "mimeType": "application/vnd.api+json", - "size": 1299, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[{\"group_tags\":[],\"query_index\":0,\"unit\":null}],\"times\":[1776290845000,1776290905000,1776290910000,1776290970000,1776291035000,1776291100000,1776291160000,1776291165000,1776291225000,1776291290000,1776291355000,1776291415000,1776291420000,1776291480000,1776291545000,1776291605000,1776291610000,1776291670000,1776291735000,1776291800000,1776291870000,1776291940000,1776292005000,1776292065000,1776292070000,1776292130000,1776292195000,1776292255000,1776292260000,1776292285000,1776292320000,1776292345000,1776292385000,1776292450000,1776292460000,1776292465000,1776292510000,1776292525000,1776292575000,1776292640000,1776292700000,1776292705000,1776292765000,1776292830000,1776292895000,1776292965000,1776293035000,1776293100000,1776293165000,1776293230000,1776293300000,1776293365000,1776293370000,1776293430000,1776293495000,1776293560000,1776293630000,1776293710000,1776293760000,1776293765000,1776293780000,1776293845000,1776293910000,1776293970000,1776293975000,1776294040000,1776294110000,1776294175000,1776294235000,1776294240000,1776294285000,1776294305000],\"values\":[[4,2,2,4,4,4,2,2,4,4,4,2,2,4,4,2,2,4,4,4,4,4,4,2,2,4,4,2,2,1,4,1,4,4,2,1,4,1,4,4,2,2,4,4,4,4,4,4,4,4,4,2,2,4,4,4,4,4,15,75,4,4,4,2,2,4,4,4,2,2,12,2]]}}}\n" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 667, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:41.509Z", - "time": 357 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-logs-data-source-returns-OK-response_1937179526/frozen.json b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-logs-data-source-returns-OK-response_1937179526/frozen.json deleted file mode 100644 index 7d35a37de4c4..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-logs-data-source-returns-OK-response_1937179526/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:41.871Z" diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-logs-data-source-returns-OK-response_1937179526/recording.har b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-logs-data-source-returns-OK-response_1937179526/recording.har deleted file mode 100644 index b330c8c3052b..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-logs-data-source-returns-OK-response_1937179526/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Timeseries cross product query with logs data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "c433fce3bec977ce189ed0d7c3d524ff", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 293, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 570, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290801000,\"interval\":5000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"logs\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294401000},\"type\":\"timeseries_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/timeseries" - }, - "response": { - "bodySize": 99, - "content": { - "mimeType": "application/vnd.api+json", - "size": 99, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:41.873Z", - "time": 605 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-network-data-source-returns-OK-response_3719766887/frozen.json b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-network-data-source-returns-OK-response_3719766887/frozen.json deleted file mode 100644 index db784badac3b..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-network-data-source-returns-OK-response_3719766887/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:42.484Z" diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-network-data-source-returns-OK-response_3719766887/recording.har b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-network-data-source-returns-OK-response_3719766887/recording.har deleted file mode 100644 index b5ba451ae96b..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-network-data-source-returns-OK-response_3719766887/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Timeseries cross product query with network data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "44b22e421d41e38f4eafa9ce3454f2e1", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 296, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 570, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290802000,\"interval\":5000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"network\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294402000},\"type\":\"timeseries_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/timeseries" - }, - "response": { - "bodySize": 99, - "content": { - "mimeType": "application/vnd.api+json", - "size": 99, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:42.486Z", - "time": 278 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-on_call_events-data-source-returns-OK-response_2667262207/frozen.json b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-on_call_events-data-source-returns-OK-response_2667262207/frozen.json deleted file mode 100644 index 8c52818c5d3b..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-on_call_events-data-source-returns-OK-response_2667262207/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:42.769Z" diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-on_call_events-data-source-returns-OK-response_2667262207/recording.har b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-on_call_events-data-source-returns-OK-response_2667262207/recording.har deleted file mode 100644 index da7a60212991..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-on_call_events-data-source-returns-OK-response_2667262207/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Timeseries cross product query with on_call_events data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "28293b728a62fd3c3b77a5c3dfb8237a", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 303, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 570, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290802000,\"interval\":5000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"on_call_events\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294402000},\"type\":\"timeseries_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/timeseries" - }, - "response": { - "bodySize": 176, - "content": { - "mimeType": "application/vnd.api+json", - "size": 176, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[{\"group_tags\":[],\"query_index\":0,\"unit\":null}],\"times\":[1776294280000,1776294285000],\"values\":[[2,3]]}}}\n" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 666, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:42.771Z", - "time": 304 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-process-data-source-returns-OK-response_3666776376/frozen.json b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-process-data-source-returns-OK-response_3666776376/frozen.json deleted file mode 100644 index e9ac334a8914..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-process-data-source-returns-OK-response_3666776376/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-08T15:25:32.912Z" diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-process-data-source-returns-OK-response_3666776376/recording.har b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-process-data-source-returns-OK-response_3666776376/recording.har deleted file mode 100644 index aaa2ce7beeaa..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-process-data-source-returns-OK-response_3666776376/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Timeseries cross product query with process data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "a58d654ec36cd34bc4fc2730a933a4ef", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 346, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 568, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1775658332000,\"interval\":5000,\"queries\":[{\"data_source\":\"process\",\"is_normalized_cpu\":false,\"limit\":10,\"metric\":\"process.stat.cpu.total_pct\",\"name\":\"a\",\"sort\":\"desc\",\"tag_filters\":[],\"text_filter\":\"\"}],\"to\":1775661932000},\"type\":\"timeseries_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/timeseries" - }, - "response": { - "bodySize": 99, - "content": { - "mimeType": "application/vnd.api+json", - "size": 99, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-08T15:25:32.915Z", - "time": 203 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-product_analytics-data-source-returns-OK-response_340760245/frozen.json b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-product_analytics-data-source-returns-OK-response_340760245/frozen.json deleted file mode 100644 index bdb7d03e7376..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-product_analytics-data-source-returns-OK-response_340760245/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:43.081Z" diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-product_analytics-data-source-returns-OK-response_340760245/recording.har b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-product_analytics-data-source-returns-OK-response_340760245/recording.har deleted file mode 100644 index aaea65c48748..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-product_analytics-data-source-returns-OK-response_340760245/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Timeseries cross product query with product_analytics data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "39646338fb17146f8eb0e83f95eb8463", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 306, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 569, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290803000,\"interval\":5000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"product_analytics\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294403000},\"type\":\"timeseries_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/timeseries" - }, - "response": { - "bodySize": 99, - "content": { - "mimeType": "application/vnd.api+json", - "size": 99, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:43.083Z", - "time": 298 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-profiles-data-source-returns-OK-response_1033448731/frozen.json b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-profiles-data-source-returns-OK-response_1033448731/frozen.json deleted file mode 100644 index 873aa811aee1..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-profiles-data-source-returns-OK-response_1033448731/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:43.385Z" diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-profiles-data-source-returns-OK-response_1033448731/recording.har b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-profiles-data-source-returns-OK-response_1033448731/recording.har deleted file mode 100644 index 66ddf6847ee1..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-profiles-data-source-returns-OK-response_1033448731/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Timeseries cross product query with profiles data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "b9c8f7cf80dac8a0a041d00ff8ecf2c0", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 297, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 570, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290803000,\"interval\":5000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"profiles\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294403000},\"type\":\"timeseries_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/timeseries" - }, - "response": { - "bodySize": 99, - "content": { - "mimeType": "application/vnd.api+json", - "size": 99, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:43.387Z", - "time": 320 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-rum-data-source-returns-OK-response_2838592249/frozen.json b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-rum-data-source-returns-OK-response_2838592249/frozen.json deleted file mode 100644 index 4db9c8ce4ec7..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-rum-data-source-returns-OK-response_2838592249/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:43.715Z" diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-rum-data-source-returns-OK-response_2838592249/recording.har b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-rum-data-source-returns-OK-response_2838592249/recording.har deleted file mode 100644 index 66bc25a6b162..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-rum-data-source-returns-OK-response_2838592249/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Timeseries cross product query with rum data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "6260e695f8779962119fac17292e4689", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 292, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 570, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290803000,\"interval\":5000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"rum\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294403000},\"type\":\"timeseries_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/timeseries" - }, - "response": { - "bodySize": 364, - "content": { - "mimeType": "application/vnd.api+json", - "size": 364, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[{\"group_tags\":[],\"query_index\":0,\"unit\":null}],\"times\":[1776290870000,1776291170000,1776291175000,1776291470000,1776291770000,1776292070000,1776292370000,1776292670000,1776292970000,1776293270000,1776293570000,1776293870000,1776294170000],\"values\":[[28,30,2,28,30,27,26,26,27,30,28,26,30]]}}}\n" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 666, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:43.717Z", - "time": 305 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-security_signals-data-source-returns-OK-response_3522135061/frozen.json b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-security_signals-data-source-returns-OK-response_3522135061/frozen.json deleted file mode 100644 index d4551289126e..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-security_signals-data-source-returns-OK-response_3522135061/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:44.027Z" diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-security_signals-data-source-returns-OK-response_3522135061/recording.har b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-security_signals-data-source-returns-OK-response_3522135061/recording.har deleted file mode 100644 index 73f45c4e5fe7..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-security_signals-data-source-returns-OK-response_3522135061/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Timeseries cross product query with security_signals data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "1315def6372c7b88ef7dde6a44ea63af", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 305, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 570, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290804000,\"interval\":5000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"security_signals\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294404000},\"type\":\"timeseries_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/timeseries" - }, - "response": { - "bodySize": 99, - "content": { - "mimeType": "application/vnd.api+json", - "size": 99, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:44.029Z", - "time": 289 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-slo-data-source-returns-OK-response_2541293737/frozen.json b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-slo-data-source-returns-OK-response_2541293737/frozen.json deleted file mode 100644 index 49a2c14f5e57..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-slo-data-source-returns-OK-response_2541293737/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-08T15:25:33.123Z" diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-slo-data-source-returns-OK-response_2541293737/recording.har b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-slo-data-source-returns-OK-response_2541293737/recording.har deleted file mode 100644 index d5417796bf84..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-slo-data-source-returns-OK-response_2541293737/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Timeseries cross product query with slo data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "38b1dc77d3ec87e1be529ab937e5a85c", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 345, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 570, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1775658333000,\"interval\":5000,\"queries\":[{\"additional_query_filters\":\"*\",\"data_source\":\"slo\",\"group_mode\":\"overall\",\"measure\":\"slo_status\",\"name\":\"a\",\"slo_id\":\"12345678910\",\"slo_query_type\":\"metric\"}],\"to\":1775661933000},\"type\":\"timeseries_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/timeseries" - }, - "response": { - "bodySize": 99, - "content": { - "mimeType": "application/vnd.api+json", - "size": 99, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-08T15:25:33.129Z", - "time": 144 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-spans-data-source-returns-OK-response_1132781428/frozen.json b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-spans-data-source-returns-OK-response_1132781428/frozen.json deleted file mode 100644 index fdde3dfe7c3c..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-spans-data-source-returns-OK-response_1132781428/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2026-04-15T23:06:44.323Z" diff --git a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-spans-data-source-returns-OK-response_1132781428/recording.har b/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-spans-data-source-returns-OK-response_1132781428/recording.har deleted file mode 100644 index d7b8d784db81..000000000000 --- a/cassettes/v2/Metrics_2046978582/Timeseries-cross-product-query-with-spans-data-source-returns-OK-response_1132781428/recording.har +++ /dev/null @@ -1,67 +0,0 @@ -{ - "log": { - "_recordingName": "Metrics/Timeseries cross product query with spans data source returns \"OK\" response", - "creator": { - "comment": "persister:fs", - "name": "Polly.JS", - "version": "6.0.5" - }, - "entries": [ - { - "_id": "06c9574e31834ff31b3552bb70f2bb68", - "_order": 0, - "cache": {}, - "request": { - "bodySize": 294, - "cookies": [], - "headers": [ - { - "_fromType": "array", - "name": "accept", - "value": "application/json" - }, - { - "_fromType": "array", - "name": "content-type", - "value": "application/json" - } - ], - "headersSize": 569, - "httpVersion": "HTTP/1.1", - "method": "POST", - "postData": { - "mimeType": "application/json", - "params": [], - "text": "{\"data\":{\"attributes\":{\"formulas\":[{\"formula\":\"a\",\"limit\":{\"count\":10,\"order\":\"desc\"}}],\"from\":1776290804000,\"interval\":5000,\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"spans\",\"indexes\":[\"*\"],\"name\":\"a\",\"search\":{\"query\":\"*\"}}],\"to\":1776294404000},\"type\":\"timeseries_request\"}}" - }, - "queryString": [], - "url": "https://api.datadoghq.com/api/v2/query/timeseries" - }, - "response": { - "bodySize": 99, - "content": { - "mimeType": "application/vnd.api+json", - "size": 99, - "text": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" - }, - "cookies": [], - "headers": [ - { - "name": "content-type", - "value": "application/vnd.api+json" - } - ], - "headersSize": 665, - "httpVersion": "HTTP/1.1", - "redirectURL": "", - "status": 200, - "statusText": "OK" - }, - "startedDateTime": "2026-04-15T23:06:44.327Z", - "time": 387 - } - ], - "pages": [], - "version": "1.2" - } -} diff --git a/features/v2/feature_flags.feature b/features/v2/feature_flags.feature index fd2ff16520c5..b2642c78ca51 100644 --- a/features/v2/feature_flags.feature +++ b/features/v2/feature_flags.feature @@ -7,6 +7,30 @@ Feature: Feature Flags And a valid "appKeyAuth" key in the system And an instance of "FeatureFlags" API + @generated @skip @team:DataDog/feature-flags + Scenario: Approve a flag suggestion returns "Bad Request" response + Given new "ApproveFlagSuggestion" request + And request contains "suggestion_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"comment": "Looks good, approved!"}, "type": "flag-suggestion-events"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/feature-flags + Scenario: Approve a flag suggestion returns "Not Found" response + Given new "ApproveFlagSuggestion" request + And request contains "suggestion_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"comment": "Looks good, approved!"}, "type": "flag-suggestion-events"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/feature-flags + Scenario: Approve a flag suggestion returns "OK" response + Given new "ApproveFlagSuggestion" request + And request contains "suggestion_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"comment": "Looks good, approved!"}, "type": "flag-suggestion-events"}} + When the request is sent + Then the response status is 200 OK + @skip @team:DataDog/feature-flags Scenario: Archive a feature flag returns "Bad Request" response Given new "ArchiveFeatureFlag" request @@ -53,6 +77,38 @@ Feature: Feature Flags And the response "data.attributes.name" is equal to "Test Feature Flag {{ unique }}" And the response "data.attributes.value_type" is equal to "BOOLEAN" + @generated @skip @team:DataDog/feature-flags + Scenario: Create a flag suggestion returns "Bad Request" response + Given new "CreateFlagSuggestion" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"action": "archived", "comment": "Archive this deprecated flag", "environment_id": "550e8400-e29b-41d4-a716-446655440001", "notification_rule_targets": ["user@example.com"], "property": "FLAG", "suggestion": "ENABLED", "suggestion_metadata": {"variant_id": "550e8400-e29b-41d4-a716-446655440005"}}, "type": "flag-suggestions"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/feature-flags + Scenario: Create a flag suggestion returns "Conflict" response + Given new "CreateFlagSuggestion" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"action": "archived", "comment": "Archive this deprecated flag", "environment_id": "550e8400-e29b-41d4-a716-446655440001", "notification_rule_targets": ["user@example.com"], "property": "FLAG", "suggestion": "ENABLED", "suggestion_metadata": {"variant_id": "550e8400-e29b-41d4-a716-446655440005"}}, "type": "flag-suggestions"}} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/feature-flags + Scenario: Create a flag suggestion returns "Created" response + Given new "CreateFlagSuggestion" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"action": "archived", "comment": "Archive this deprecated flag", "environment_id": "550e8400-e29b-41d4-a716-446655440001", "notification_rule_targets": ["user@example.com"], "property": "FLAG", "suggestion": "ENABLED", "suggestion_metadata": {"variant_id": "550e8400-e29b-41d4-a716-446655440005"}}, "type": "flag-suggestions"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/feature-flags + Scenario: Create a flag suggestion returns "Not Found" response + Given new "CreateFlagSuggestion" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"action": "archived", "comment": "Archive this deprecated flag", "environment_id": "550e8400-e29b-41d4-a716-446655440001", "notification_rule_targets": ["user@example.com"], "property": "FLAG", "suggestion": "ENABLED", "suggestion_metadata": {"variant_id": "550e8400-e29b-41d4-a716-446655440005"}}, "type": "flag-suggestions"}} + When the request is sent + Then the response status is 404 Not Found + @team:DataDog/feature-flags Scenario: Create allocation for a flag in an environment returns "Created" response Given there is a valid "feature_flag" in the system @@ -130,6 +186,27 @@ Feature: Feature Flags When the request is sent Then the response status is 404 Not Found + @generated @skip @team:DataDog/feature-flags + Scenario: Delete a flag suggestion returns "Bad Request" response + Given new "DeleteFlagSuggestion" request + And request contains "suggestion_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/feature-flags + Scenario: Delete a flag suggestion returns "No Content" response + Given new "DeleteFlagSuggestion" request + And request contains "suggestion_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/feature-flags + Scenario: Delete a flag suggestion returns "Not Found" response + Given new "DeleteFlagSuggestion" request + And request contains "suggestion_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + @skip @team:DataDog/feature-flags Scenario: Delete an environment returns "No Content" response Given there is a valid "environment" in the system @@ -219,6 +296,27 @@ Feature: Feature Flags And the response "data.attributes.name" has the same value as "feature_flag.data.attributes.name" And the response "data.attributes.value_type" has the same value as "feature_flag.data.attributes.value_type" + @generated @skip @team:DataDog/feature-flags + Scenario: Get a flag suggestion returns "Bad Request" response + Given new "GetFlagSuggestion" request + And request contains "suggestion_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/feature-flags + Scenario: Get a flag suggestion returns "Not Found" response + Given new "GetFlagSuggestion" request + And request contains "suggestion_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/feature-flags + Scenario: Get a flag suggestion returns "OK" response + Given new "GetFlagSuggestion" request + And request contains "suggestion_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + @skip @team:DataDog/feature-flags Scenario: Get an environment returns "Not Found" response Given new "GetFeatureFlagsEnvironment" request @@ -274,6 +372,30 @@ Feature: Feature Flags When the request is sent Then the response status is 200 OK + @generated @skip @team:DataDog/feature-flags + Scenario: Reject a flag suggestion returns "Bad Request" response + Given new "RejectFlagSuggestion" request + And request contains "suggestion_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"comment": "Looks good, approved!"}, "type": "flag-suggestion-events"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/feature-flags + Scenario: Reject a flag suggestion returns "Not Found" response + Given new "RejectFlagSuggestion" request + And request contains "suggestion_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"comment": "Looks good, approved!"}, "type": "flag-suggestion-events"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/feature-flags + Scenario: Reject a flag suggestion returns "OK" response + Given new "RejectFlagSuggestion" request + And request contains "suggestion_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"comment": "Looks good, approved!"}, "type": "flag-suggestion-events"}} + When the request is sent + Then the response status is 200 OK + @generated @skip @team:DataDog/feature-flags Scenario: Resume a progressive rollout returns "Bad Request" response Given new "ResumeExposureSchedule" request diff --git a/features/v2/metrics.feature b/features/v2/metrics.feature index 114814e21e20..41e753dfb3f1 100644 --- a/features/v2/metrics.feature +++ b/features/v2/metrics.feature @@ -344,177 +344,6 @@ Feature: Metrics And the response "data.type" is equal to "scalar_response" And the response "data.attributes.columns[0].name" is equal to "a" - @skip-validation @team:Datadog/timeseries-query - Scenario: Scalar cross product query with apm_dependency_stats data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryScalarData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "apm_dependency_stats", "name": "a", "env": "ci", "service": "cassandra", "stat": "avg_duration", "operation_name": "cassandra.query", "resource_name": "DELETE FROM monitor_history.monitor_state_change_history WHERE org_id = ? AND monitor_id IN ? AND group = ?", "primary_tag_name": "datacenter", "primary_tag_value": "edge-eu1.prod.dog"}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "scalar_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Scalar cross product query with apm_metrics data source and span_kind returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryScalarData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "apm_metrics", "name": "a", "stat": "hits", "service": "web-store", "query_filter": "env:prod", "span_kind": "server", "group_by": ["resource_name"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "scalar_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Scalar cross product query with apm_metrics data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryScalarData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "apm_metrics", "name": "a", "stat": "hits", "service": "web-store", "query_filter": "env:prod", "group_by": ["resource_name"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "scalar_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Scalar cross product query with apm_resource_stats data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryScalarData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "apm_resource_stats", "name": "a", "env": "staging", "service": "azure-bill-import", "stat": "hits", "operation_name": "cassandra.query", "group_by": ["resource_name"], "primary_tag_name": "datacenter", "primary_tag_value": "*"}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "scalar_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Scalar cross product query with audit data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryScalarData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "audit", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "scalar_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Scalar cross product query with ci_pipelines data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryScalarData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "ci_pipelines", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "scalar_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Scalar cross product query with ci_tests data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryScalarData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "ci_tests", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "scalar_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Scalar cross product query with container data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryScalarData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "container", "name": "a", "metric": "process.stat.container.cpu.system_pct", "aggregator": "avg", "tag_filters": [], "limit": 10, "sort": "desc"}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "scalar_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Scalar cross product query with events data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryScalarData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "events", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "scalar_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Scalar cross product query with logs data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryScalarData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "logs", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "scalar_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Scalar cross product query with network data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryScalarData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "network", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "scalar_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Scalar cross product query with on_call_events data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryScalarData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "on_call_events", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "scalar_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Scalar cross product query with process data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryScalarData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "process", "name": "a", "metric": "process.stat.cpu.total_pct", "aggregator": "avg", "text_filter": "", "tag_filters": [], "limit": 10, "sort": "desc", "is_normalized_cpu": false}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "scalar_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Scalar cross product query with product_analytics data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryScalarData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "product_analytics", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "scalar_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Scalar cross product query with profiles data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryScalarData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "profiles", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "scalar_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Scalar cross product query with rum data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryScalarData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "rum", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "scalar_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Scalar cross product query with security_signals data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryScalarData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "security_signals", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "scalar_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Scalar cross product query with slo data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryScalarData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "slo", "name": "a", "slo_id": "12345678910", "measure": "slo_status", "slo_query_type": "metric", "group_mode": "overall", "additional_query_filters": "*"}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "scalar_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Scalar cross product query with spans data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryScalarData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "spans", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "scalar_response" - @generated @skip @team:DataDog/metrics-intake Scenario: Submit metrics returns "Bad Request" response Given new "SubmitMetrics" request @@ -586,177 +415,6 @@ Feature: Metrics Then the response status is 200 OK And the response "data.type" is equal to "timeseries_response" - @skip-validation @team:Datadog/timeseries-query - Scenario: Timeseries cross product query with apm_dependency_stats data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryTimeseriesData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "apm_dependency_stats", "name": "a", "env": "ci", "service": "cassandra", "stat": "avg_duration", "operation_name": "cassandra.query", "resource_name": "DELETE FROM monitor_history.monitor_state_change_history WHERE org_id = ? AND monitor_id IN ? AND group = ?", "primary_tag_name": "datacenter", "primary_tag_value": "edge-eu1.prod.dog"}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "timeseries_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Timeseries cross product query with apm_metrics data source and span_kind returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryTimeseriesData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "apm_metrics", "name": "a", "stat": "hits", "service": "web-store", "query_filter": "env:prod", "span_kind": "server", "group_by": ["resource_name"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "timeseries_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Timeseries cross product query with apm_metrics data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryTimeseriesData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "apm_metrics", "name": "a", "stat": "hits", "service": "web-store", "query_filter": "env:prod", "group_by": ["resource_name"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "timeseries_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Timeseries cross product query with apm_resource_stats data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryTimeseriesData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "apm_resource_stats", "name": "a", "env": "staging", "service": "azure-bill-import", "stat": "hits", "operation_name": "cassandra.query", "group_by": ["resource_name"], "primary_tag_name": "datacenter", "primary_tag_value": "*"}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "timeseries_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Timeseries cross product query with audit data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryTimeseriesData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "audit", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "timeseries_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Timeseries cross product query with ci_pipelines data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryTimeseriesData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "ci_pipelines", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "timeseries_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Timeseries cross product query with ci_tests data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryTimeseriesData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "ci_tests", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "timeseries_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Timeseries cross product query with container data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryTimeseriesData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "container", "name": "a", "metric": "process.stat.container.cpu.system_pct", "tag_filters": [], "limit": 10, "sort": "desc"}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "timeseries_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Timeseries cross product query with events data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryTimeseriesData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "events", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "timeseries_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Timeseries cross product query with logs data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryTimeseriesData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "logs", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "timeseries_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Timeseries cross product query with network data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryTimeseriesData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "network", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "timeseries_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Timeseries cross product query with on_call_events data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryTimeseriesData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "on_call_events", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "timeseries_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Timeseries cross product query with process data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryTimeseriesData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "process", "name": "a", "metric": "process.stat.cpu.total_pct", "text_filter": "", "tag_filters": [], "limit": 10, "sort": "desc", "is_normalized_cpu": false}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "timeseries_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Timeseries cross product query with product_analytics data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryTimeseriesData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "product_analytics", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "timeseries_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Timeseries cross product query with profiles data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryTimeseriesData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "profiles", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "timeseries_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Timeseries cross product query with rum data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryTimeseriesData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "rum", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "timeseries_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Timeseries cross product query with security_signals data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryTimeseriesData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "security_signals", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "timeseries_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Timeseries cross product query with slo data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryTimeseriesData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "slo", "name": "a", "slo_id": "12345678910", "measure": "slo_status", "slo_query_type": "metric", "group_mode": "overall", "additional_query_filters": "*"}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "timeseries_response" - - @skip-validation @team:Datadog/timeseries-query - Scenario: Timeseries cross product query with spans data source returns "OK" response - Given a valid "appKeyAuth" key in the system - And new "QueryTimeseriesData" request - And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "spans", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} - When the request is sent - Then the response status is 200 OK - And the response "data.type" is equal to "timeseries_response" - @generated @skip @team:DataDog/metrics-experience Scenario: Update a tag configuration returns "Bad Request" response Given a valid "appKeyAuth" key in the system diff --git a/features/v2/undo.json b/features/v2/undo.json index c7ef9624df90..82d07461c4cb 100644 --- a/features/v2/undo.json +++ b/features/v2/undo.json @@ -1954,6 +1954,30 @@ "type": "idempotent" } }, + "DeleteFlagSuggestion": { + "tag": "Feature Flags", + "undo": { + "type": "idempotent" + } + }, + "GetFlagSuggestion": { + "tag": "Feature Flags", + "undo": { + "type": "safe" + } + }, + "ApproveFlagSuggestion": { + "tag": "Feature Flags", + "undo": { + "type": "safe" + } + }, + "RejectFlagSuggestion": { + "tag": "Feature Flags", + "undo": { + "type": "safe" + } + }, "GetFeatureFlag": { "tag": "Feature Flags", "undo": { @@ -2003,6 +2027,19 @@ "type": "idempotent" } }, + "CreateFlagSuggestion": { + "tag": "Feature Flags", + "undo": { + "operationId": "DeleteFlagSuggestion", + "parameters": [ + { + "name": "suggestion_id", + "source": "data.id" + } + ], + "type": "unsafe" + } + }, "UnarchiveFeatureFlag": { "tag": "Feature Flags", "undo": { diff --git a/private/bdd_runner/src/support/scenarios_model_mapping.ts b/private/bdd_runner/src/support/scenarios_model_mapping.ts index f8c034f9f37a..ff41d072c9be 100644 --- a/private/bdd_runner/src/support/scenarios_model_mapping.ts +++ b/private/bdd_runner/src/support/scenarios_model_mapping.ts @@ -6590,6 +6590,42 @@ export const ScenariosModelMappings: { [key: string]: OperationMapping } = { }, operationResponseType: "AllocationExposureScheduleResponse", }, + "FeatureFlagsApi.V2.GetFlagSuggestion": { + suggestionId: { + type: "string", + format: "uuid", + }, + operationResponseType: "FlagSuggestionResponse", + }, + "FeatureFlagsApi.V2.DeleteFlagSuggestion": { + suggestionId: { + type: "string", + format: "uuid", + }, + operationResponseType: "{}", + }, + "FeatureFlagsApi.V2.ApproveFlagSuggestion": { + suggestionId: { + type: "string", + format: "uuid", + }, + body: { + type: "ReviewFlagSuggestionRequest", + format: "", + }, + operationResponseType: "FlagSuggestionResponse", + }, + "FeatureFlagsApi.V2.RejectFlagSuggestion": { + suggestionId: { + type: "string", + format: "uuid", + }, + body: { + type: "ReviewFlagSuggestionRequest", + format: "", + }, + operationResponseType: "FlagSuggestionResponse", + }, "FeatureFlagsApi.V2.GetFeatureFlag": { featureFlagId: { type: "string", @@ -6667,6 +6703,17 @@ export const ScenariosModelMappings: { [key: string]: OperationMapping } = { }, operationResponseType: "{}", }, + "FeatureFlagsApi.V2.CreateFlagSuggestion": { + featureFlagId: { + type: "string", + format: "uuid", + }, + body: { + type: "CreateFlagSuggestionRequest", + format: "", + }, + operationResponseType: "FlagSuggestionResponse", + }, "FeatureFlagsApi.V2.UnarchiveFeatureFlag": { featureFlagId: { type: "string", diff --git a/services/feature_flags/src/v2/FeatureFlagsApi.ts b/services/feature_flags/src/v2/FeatureFlagsApi.ts index 684935ee9b39..00ee07005b75 100644 --- a/services/feature_flags/src/v2/FeatureFlagsApi.ts +++ b/services/feature_flags/src/v2/FeatureFlagsApi.ts @@ -28,12 +28,15 @@ import { APIErrorResponse } from "./models/APIErrorResponse"; import { CreateAllocationsRequest } from "./models/CreateAllocationsRequest"; import { CreateEnvironmentRequest } from "./models/CreateEnvironmentRequest"; import { CreateFeatureFlagRequest } from "./models/CreateFeatureFlagRequest"; +import { CreateFlagSuggestionRequest } from "./models/CreateFlagSuggestionRequest"; import { EnvironmentResponse } from "./models/EnvironmentResponse"; import { FeatureFlagResponse } from "./models/FeatureFlagResponse"; +import { FlagSuggestionResponse } from "./models/FlagSuggestionResponse"; import { ListAllocationsResponse } from "./models/ListAllocationsResponse"; import { ListEnvironmentsResponse } from "./models/ListEnvironmentsResponse"; import { ListFeatureFlagsResponse } from "./models/ListFeatureFlagsResponse"; import { OverwriteAllocationsRequest } from "./models/OverwriteAllocationsRequest"; +import { ReviewFlagSuggestionRequest } from "./models/ReviewFlagSuggestionRequest"; import { UpdateEnvironmentRequest } from "./models/UpdateEnvironmentRequest"; import { UpdateFeatureFlagRequest } from "./models/UpdateFeatureFlagRequest"; import { version } from "../version"; @@ -47,6 +50,66 @@ export class FeatureFlagsApiRequestFactory extends BaseAPIRequestFactory { this.userAgent = buildUserAgent("feature-flags", version); } } + public async approveFlagSuggestion( + suggestionId: string, + body: ReviewFlagSuggestionRequest, + _options?: Configuration, + ): Promise { + const _config = _options || this.configuration; + + // verify required parameter 'suggestionId' is not null or undefined + if (suggestionId === null || suggestionId === undefined) { + throw new RequiredError("suggestionId", "approveFlagSuggestion"); + } + + // verify required parameter 'body' is not null or undefined + if (body === null || body === undefined) { + throw new RequiredError("body", "approveFlagSuggestion"); + } + + // Path Params + const localVarPath = + "/api/v2/feature-flags/suggestions/{suggestion_id}/approve".replace( + "{suggestion_id}", + encodeURIComponent(String(suggestionId)), + ); + + // Make Request Context + const { server, overrides } = _config.getServerAndOverrides( + "FeatureFlagsApi.v2.approveFlagSuggestion", + FeatureFlagsApi.operationServers, + ); + const requestContext = server.makeRequestContext( + localVarPath, + HttpMethod.POST, + overrides, + ); + requestContext.setHeaderParam("Accept", "application/json"); + requestContext.setHttpConfig(_config.httpConfig); + + // Set User-Agent + if (this.userAgent) { + requestContext.setHeaderParam("User-Agent", this.userAgent); + } + + // Body Params + const contentType = getPreferredMediaType(["application/json"]); + requestContext.setHeaderParam("Content-Type", contentType); + const serializedBody = stringify( + serialize(body, TypingInfo, "ReviewFlagSuggestionRequest", ""), + contentType, + ); + requestContext.setBody(serializedBody); + + // Apply auth methods + applySecurityAuthentication(_config, requestContext, [ + "apiKeyAuth", + "appKeyAuth", + ]); + + return requestContext; + } + public async archiveFeatureFlag( featureFlagId: string, _options?: Configuration, @@ -266,6 +329,66 @@ export class FeatureFlagsApiRequestFactory extends BaseAPIRequestFactory { return requestContext; } + public async createFlagSuggestion( + featureFlagId: string, + body: CreateFlagSuggestionRequest, + _options?: Configuration, + ): Promise { + const _config = _options || this.configuration; + + // verify required parameter 'featureFlagId' is not null or undefined + if (featureFlagId === null || featureFlagId === undefined) { + throw new RequiredError("featureFlagId", "createFlagSuggestion"); + } + + // verify required parameter 'body' is not null or undefined + if (body === null || body === undefined) { + throw new RequiredError("body", "createFlagSuggestion"); + } + + // Path Params + const localVarPath = + "/api/v2/feature-flags/{feature_flag_id}/suggestions".replace( + "{feature_flag_id}", + encodeURIComponent(String(featureFlagId)), + ); + + // Make Request Context + const { server, overrides } = _config.getServerAndOverrides( + "FeatureFlagsApi.v2.createFlagSuggestion", + FeatureFlagsApi.operationServers, + ); + const requestContext = server.makeRequestContext( + localVarPath, + HttpMethod.POST, + overrides, + ); + requestContext.setHeaderParam("Accept", "application/json"); + requestContext.setHttpConfig(_config.httpConfig); + + // Set User-Agent + if (this.userAgent) { + requestContext.setHeaderParam("User-Agent", this.userAgent); + } + + // Body Params + const contentType = getPreferredMediaType(["application/json"]); + requestContext.setHeaderParam("Content-Type", contentType); + const serializedBody = stringify( + serialize(body, TypingInfo, "CreateFlagSuggestionRequest", ""), + contentType, + ); + requestContext.setBody(serializedBody); + + // Apply auth methods + applySecurityAuthentication(_config, requestContext, [ + "apiKeyAuth", + "appKeyAuth", + ]); + + return requestContext; + } + public async deleteFeatureFlagsEnvironment( environmentId: string, _options?: Configuration, @@ -311,6 +434,51 @@ export class FeatureFlagsApiRequestFactory extends BaseAPIRequestFactory { return requestContext; } + public async deleteFlagSuggestion( + suggestionId: string, + _options?: Configuration, + ): Promise { + const _config = _options || this.configuration; + + // verify required parameter 'suggestionId' is not null or undefined + if (suggestionId === null || suggestionId === undefined) { + throw new RequiredError("suggestionId", "deleteFlagSuggestion"); + } + + // Path Params + const localVarPath = + "/api/v2/feature-flags/suggestions/{suggestion_id}".replace( + "{suggestion_id}", + encodeURIComponent(String(suggestionId)), + ); + + // Make Request Context + const { server, overrides } = _config.getServerAndOverrides( + "FeatureFlagsApi.v2.deleteFlagSuggestion", + FeatureFlagsApi.operationServers, + ); + const requestContext = server.makeRequestContext( + localVarPath, + HttpMethod.DELETE, + overrides, + ); + requestContext.setHeaderParam("Accept", "*/*"); + requestContext.setHttpConfig(_config.httpConfig); + + // Set User-Agent + if (this.userAgent) { + requestContext.setHeaderParam("User-Agent", this.userAgent); + } + + // Apply auth methods + applySecurityAuthentication(_config, requestContext, [ + "apiKeyAuth", + "appKeyAuth", + ]); + + return requestContext; + } + public async disableFeatureFlagEnvironment( featureFlagId: string, environmentId: string, @@ -500,6 +668,51 @@ export class FeatureFlagsApiRequestFactory extends BaseAPIRequestFactory { return requestContext; } + public async getFlagSuggestion( + suggestionId: string, + _options?: Configuration, + ): Promise { + const _config = _options || this.configuration; + + // verify required parameter 'suggestionId' is not null or undefined + if (suggestionId === null || suggestionId === undefined) { + throw new RequiredError("suggestionId", "getFlagSuggestion"); + } + + // Path Params + const localVarPath = + "/api/v2/feature-flags/suggestions/{suggestion_id}".replace( + "{suggestion_id}", + encodeURIComponent(String(suggestionId)), + ); + + // Make Request Context + const { server, overrides } = _config.getServerAndOverrides( + "FeatureFlagsApi.v2.getFlagSuggestion", + FeatureFlagsApi.operationServers, + ); + const requestContext = server.makeRequestContext( + localVarPath, + HttpMethod.GET, + overrides, + ); + requestContext.setHeaderParam("Accept", "application/json"); + requestContext.setHttpConfig(_config.httpConfig); + + // Set User-Agent + if (this.userAgent) { + requestContext.setHeaderParam("User-Agent", this.userAgent); + } + + // Apply auth methods + applySecurityAuthentication(_config, requestContext, [ + "apiKeyAuth", + "appKeyAuth", + ]); + + return requestContext; + } + public async listFeatureFlags( key?: string, isArchived?: boolean, @@ -683,6 +896,66 @@ export class FeatureFlagsApiRequestFactory extends BaseAPIRequestFactory { return requestContext; } + public async rejectFlagSuggestion( + suggestionId: string, + body: ReviewFlagSuggestionRequest, + _options?: Configuration, + ): Promise { + const _config = _options || this.configuration; + + // verify required parameter 'suggestionId' is not null or undefined + if (suggestionId === null || suggestionId === undefined) { + throw new RequiredError("suggestionId", "rejectFlagSuggestion"); + } + + // verify required parameter 'body' is not null or undefined + if (body === null || body === undefined) { + throw new RequiredError("body", "rejectFlagSuggestion"); + } + + // Path Params + const localVarPath = + "/api/v2/feature-flags/suggestions/{suggestion_id}/reject".replace( + "{suggestion_id}", + encodeURIComponent(String(suggestionId)), + ); + + // Make Request Context + const { server, overrides } = _config.getServerAndOverrides( + "FeatureFlagsApi.v2.rejectFlagSuggestion", + FeatureFlagsApi.operationServers, + ); + const requestContext = server.makeRequestContext( + localVarPath, + HttpMethod.POST, + overrides, + ); + requestContext.setHeaderParam("Accept", "application/json"); + requestContext.setHttpConfig(_config.httpConfig); + + // Set User-Agent + if (this.userAgent) { + requestContext.setHeaderParam("User-Agent", this.userAgent); + } + + // Body Params + const contentType = getPreferredMediaType(["application/json"]); + requestContext.setHeaderParam("Content-Type", contentType); + const serializedBody = stringify( + serialize(body, TypingInfo, "ReviewFlagSuggestionRequest", ""), + contentType, + ); + requestContext.setBody(serializedBody); + + // Apply auth methods + applySecurityAuthentication(_config, requestContext, [ + "apiKeyAuth", + "appKeyAuth", + ]); + + return requestContext; + } + public async resumeExposureSchedule( exposureScheduleId: string, _options?: Configuration, @@ -1058,6 +1331,67 @@ export class FeatureFlagsApiRequestFactory extends BaseAPIRequestFactory { } export class FeatureFlagsApiResponseProcessor { + /** + * Unwraps the actual response sent by the server from the response context and deserializes the response content + * to the expected objects + * + * @params response Response returned by the server for a request to approveFlagSuggestion + * @throws ApiException if the response code was not in [200, 299] + */ + public async approveFlagSuggestion( + response: ResponseContext, + ): Promise { + const contentType = normalizeMediaType(response.headers["content-type"]); + if (response.httpStatusCode === 200) { + const body: FlagSuggestionResponse = deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "FlagSuggestionResponse", + ) as FlagSuggestionResponse; + return body; + } + if ( + response.httpStatusCode === 400 || + response.httpStatusCode === 403 || + response.httpStatusCode === 404 || + response.httpStatusCode === 429 + ) { + const bodyText = parse(await response.body.text(), contentType); + let body: APIErrorResponse; + try { + body = deserialize( + bodyText, + TypingInfo, + "APIErrorResponse", + ) as APIErrorResponse; + } catch (error) { + logger.debug(`Got error deserializing error: ${error}`); + throw new ApiException( + response.httpStatusCode, + bodyText, + ); + } + throw new ApiException(response.httpStatusCode, body); + } + + // Work around for missing responses in specification, e.g. for petstore.yaml + if (response.httpStatusCode >= 200 && response.httpStatusCode <= 299) { + const body: FlagSuggestionResponse = deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "FlagSuggestionResponse", + "", + ) as FlagSuggestionResponse; + return body; + } + + const body = (await response.body.text()) || ""; + throw new ApiException( + response.httpStatusCode, + 'Unknown API Status Code!\nBody: "' + body + '"', + ); + } + /** * Unwraps the actual response sent by the server from the response context and deserializes the response content * to the expected objects @@ -1170,7 +1504,129 @@ export class FeatureFlagsApiResponseProcessor { TypingInfo, "AllocationResponse", "", - ) as AllocationResponse; + ) as AllocationResponse; + return body; + } + + const body = (await response.body.text()) || ""; + throw new ApiException( + response.httpStatusCode, + 'Unknown API Status Code!\nBody: "' + body + '"', + ); + } + + /** + * Unwraps the actual response sent by the server from the response context and deserializes the response content + * to the expected objects + * + * @params response Response returned by the server for a request to createFeatureFlag + * @throws ApiException if the response code was not in [200, 299] + */ + public async createFeatureFlag( + response: ResponseContext, + ): Promise { + const contentType = normalizeMediaType(response.headers["content-type"]); + if (response.httpStatusCode === 201) { + const body: FeatureFlagResponse = deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "FeatureFlagResponse", + ) as FeatureFlagResponse; + return body; + } + if ( + response.httpStatusCode === 400 || + response.httpStatusCode === 403 || + response.httpStatusCode === 409 || + response.httpStatusCode === 429 + ) { + const bodyText = parse(await response.body.text(), contentType); + let body: APIErrorResponse; + try { + body = deserialize( + bodyText, + TypingInfo, + "APIErrorResponse", + ) as APIErrorResponse; + } catch (error) { + logger.debug(`Got error deserializing error: ${error}`); + throw new ApiException( + response.httpStatusCode, + bodyText, + ); + } + throw new ApiException(response.httpStatusCode, body); + } + + // Work around for missing responses in specification, e.g. for petstore.yaml + if (response.httpStatusCode >= 200 && response.httpStatusCode <= 299) { + const body: FeatureFlagResponse = deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "FeatureFlagResponse", + "", + ) as FeatureFlagResponse; + return body; + } + + const body = (await response.body.text()) || ""; + throw new ApiException( + response.httpStatusCode, + 'Unknown API Status Code!\nBody: "' + body + '"', + ); + } + + /** + * Unwraps the actual response sent by the server from the response context and deserializes the response content + * to the expected objects + * + * @params response Response returned by the server for a request to createFeatureFlagsEnvironment + * @throws ApiException if the response code was not in [200, 299] + */ + public async createFeatureFlagsEnvironment( + response: ResponseContext, + ): Promise { + const contentType = normalizeMediaType(response.headers["content-type"]); + if (response.httpStatusCode === 201) { + const body: EnvironmentResponse = deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "EnvironmentResponse", + ) as EnvironmentResponse; + return body; + } + if ( + response.httpStatusCode === 400 || + response.httpStatusCode === 403 || + response.httpStatusCode === 409 || + response.httpStatusCode === 429 + ) { + const bodyText = parse(await response.body.text(), contentType); + let body: APIErrorResponse; + try { + body = deserialize( + bodyText, + TypingInfo, + "APIErrorResponse", + ) as APIErrorResponse; + } catch (error) { + logger.debug(`Got error deserializing error: ${error}`); + throw new ApiException( + response.httpStatusCode, + bodyText, + ); + } + throw new ApiException(response.httpStatusCode, body); + } + + // Work around for missing responses in specification, e.g. for petstore.yaml + if (response.httpStatusCode >= 200 && response.httpStatusCode <= 299) { + const body: EnvironmentResponse = deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "EnvironmentResponse", + "", + ) as EnvironmentResponse; return body; } @@ -1185,24 +1641,25 @@ export class FeatureFlagsApiResponseProcessor { * Unwraps the actual response sent by the server from the response context and deserializes the response content * to the expected objects * - * @params response Response returned by the server for a request to createFeatureFlag + * @params response Response returned by the server for a request to createFlagSuggestion * @throws ApiException if the response code was not in [200, 299] */ - public async createFeatureFlag( + public async createFlagSuggestion( response: ResponseContext, - ): Promise { + ): Promise { const contentType = normalizeMediaType(response.headers["content-type"]); if (response.httpStatusCode === 201) { - const body: FeatureFlagResponse = deserialize( + const body: FlagSuggestionResponse = deserialize( parse(await response.body.text(), contentType), TypingInfo, - "FeatureFlagResponse", - ) as FeatureFlagResponse; + "FlagSuggestionResponse", + ) as FlagSuggestionResponse; return body; } if ( response.httpStatusCode === 400 || response.httpStatusCode === 403 || + response.httpStatusCode === 404 || response.httpStatusCode === 409 || response.httpStatusCode === 429 ) { @@ -1226,12 +1683,12 @@ export class FeatureFlagsApiResponseProcessor { // Work around for missing responses in specification, e.g. for petstore.yaml if (response.httpStatusCode >= 200 && response.httpStatusCode <= 299) { - const body: FeatureFlagResponse = deserialize( + const body: FlagSuggestionResponse = deserialize( parse(await response.body.text(), contentType), TypingInfo, - "FeatureFlagResponse", + "FlagSuggestionResponse", "", - ) as FeatureFlagResponse; + ) as FlagSuggestionResponse; return body; } @@ -1246,25 +1703,19 @@ export class FeatureFlagsApiResponseProcessor { * Unwraps the actual response sent by the server from the response context and deserializes the response content * to the expected objects * - * @params response Response returned by the server for a request to createFeatureFlagsEnvironment + * @params response Response returned by the server for a request to deleteFeatureFlagsEnvironment * @throws ApiException if the response code was not in [200, 299] */ - public async createFeatureFlagsEnvironment( + public async deleteFeatureFlagsEnvironment( response: ResponseContext, - ): Promise { + ): Promise { const contentType = normalizeMediaType(response.headers["content-type"]); - if (response.httpStatusCode === 201) { - const body: EnvironmentResponse = deserialize( - parse(await response.body.text(), contentType), - TypingInfo, - "EnvironmentResponse", - ) as EnvironmentResponse; - return body; + if (response.httpStatusCode === 204) { + return; } if ( - response.httpStatusCode === 400 || response.httpStatusCode === 403 || - response.httpStatusCode === 409 || + response.httpStatusCode === 404 || response.httpStatusCode === 429 ) { const bodyText = parse(await response.body.text(), contentType); @@ -1287,13 +1738,7 @@ export class FeatureFlagsApiResponseProcessor { // Work around for missing responses in specification, e.g. for petstore.yaml if (response.httpStatusCode >= 200 && response.httpStatusCode <= 299) { - const body: EnvironmentResponse = deserialize( - parse(await response.body.text(), contentType), - TypingInfo, - "EnvironmentResponse", - "", - ) as EnvironmentResponse; - return body; + return; } const body = (await response.body.text()) || ""; @@ -1307,17 +1752,16 @@ export class FeatureFlagsApiResponseProcessor { * Unwraps the actual response sent by the server from the response context and deserializes the response content * to the expected objects * - * @params response Response returned by the server for a request to deleteFeatureFlagsEnvironment + * @params response Response returned by the server for a request to deleteFlagSuggestion * @throws ApiException if the response code was not in [200, 299] */ - public async deleteFeatureFlagsEnvironment( - response: ResponseContext, - ): Promise { + public async deleteFlagSuggestion(response: ResponseContext): Promise { const contentType = normalizeMediaType(response.headers["content-type"]); if (response.httpStatusCode === 204) { return; } if ( + response.httpStatusCode === 400 || response.httpStatusCode === 403 || response.httpStatusCode === 404 || response.httpStatusCode === 429 @@ -1570,6 +2014,67 @@ export class FeatureFlagsApiResponseProcessor { ); } + /** + * Unwraps the actual response sent by the server from the response context and deserializes the response content + * to the expected objects + * + * @params response Response returned by the server for a request to getFlagSuggestion + * @throws ApiException if the response code was not in [200, 299] + */ + public async getFlagSuggestion( + response: ResponseContext, + ): Promise { + const contentType = normalizeMediaType(response.headers["content-type"]); + if (response.httpStatusCode === 200) { + const body: FlagSuggestionResponse = deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "FlagSuggestionResponse", + ) as FlagSuggestionResponse; + return body; + } + if ( + response.httpStatusCode === 400 || + response.httpStatusCode === 403 || + response.httpStatusCode === 404 || + response.httpStatusCode === 429 + ) { + const bodyText = parse(await response.body.text(), contentType); + let body: APIErrorResponse; + try { + body = deserialize( + bodyText, + TypingInfo, + "APIErrorResponse", + ) as APIErrorResponse; + } catch (error) { + logger.debug(`Got error deserializing error: ${error}`); + throw new ApiException( + response.httpStatusCode, + bodyText, + ); + } + throw new ApiException(response.httpStatusCode, body); + } + + // Work around for missing responses in specification, e.g. for petstore.yaml + if (response.httpStatusCode >= 200 && response.httpStatusCode <= 299) { + const body: FlagSuggestionResponse = deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "FlagSuggestionResponse", + "", + ) as FlagSuggestionResponse; + return body; + } + + const body = (await response.body.text()) || ""; + throw new ApiException( + response.httpStatusCode, + 'Unknown API Status Code!\nBody: "' + body + '"', + ); + } + /** * Unwraps the actual response sent by the server from the response context and deserializes the response content * to the expected objects @@ -1744,6 +2249,67 @@ export class FeatureFlagsApiResponseProcessor { ); } + /** + * Unwraps the actual response sent by the server from the response context and deserializes the response content + * to the expected objects + * + * @params response Response returned by the server for a request to rejectFlagSuggestion + * @throws ApiException if the response code was not in [200, 299] + */ + public async rejectFlagSuggestion( + response: ResponseContext, + ): Promise { + const contentType = normalizeMediaType(response.headers["content-type"]); + if (response.httpStatusCode === 200) { + const body: FlagSuggestionResponse = deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "FlagSuggestionResponse", + ) as FlagSuggestionResponse; + return body; + } + if ( + response.httpStatusCode === 400 || + response.httpStatusCode === 403 || + response.httpStatusCode === 404 || + response.httpStatusCode === 429 + ) { + const bodyText = parse(await response.body.text(), contentType); + let body: APIErrorResponse; + try { + body = deserialize( + bodyText, + TypingInfo, + "APIErrorResponse", + ) as APIErrorResponse; + } catch (error) { + logger.debug(`Got error deserializing error: ${error}`); + throw new ApiException( + response.httpStatusCode, + bodyText, + ); + } + throw new ApiException(response.httpStatusCode, body); + } + + // Work around for missing responses in specification, e.g. for petstore.yaml + if (response.httpStatusCode >= 200 && response.httpStatusCode <= 299) { + const body: FlagSuggestionResponse = deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "FlagSuggestionResponse", + "", + ) as FlagSuggestionResponse; + return body; + } + + const body = (await response.body.text()) || ""; + throw new ApiException( + response.httpStatusCode, + 'Unknown API Status Code!\nBody: "' + body + '"', + ); + } + /** * Unwraps the actual response sent by the server from the response context and deserializes the response content * to the expected objects @@ -2176,6 +2742,18 @@ export class FeatureFlagsApiResponseProcessor { } } +export interface FeatureFlagsApiApproveFlagSuggestionRequest { + /** + * The ID of the flag suggestion. + * @type string + */ + suggestionId: string; + /** + * @type ReviewFlagSuggestionRequest + */ + body: ReviewFlagSuggestionRequest; +} + export interface FeatureFlagsApiArchiveFeatureFlagRequest { /** * The ID of the feature flag. @@ -2215,6 +2793,18 @@ export interface FeatureFlagsApiCreateFeatureFlagsEnvironmentRequest { body: CreateEnvironmentRequest; } +export interface FeatureFlagsApiCreateFlagSuggestionRequest { + /** + * The ID of the feature flag. + * @type string + */ + featureFlagId: string; + /** + * @type CreateFlagSuggestionRequest + */ + body: CreateFlagSuggestionRequest; +} + export interface FeatureFlagsApiDeleteFeatureFlagsEnvironmentRequest { /** * The ID of the environment. @@ -2223,6 +2813,14 @@ export interface FeatureFlagsApiDeleteFeatureFlagsEnvironmentRequest { environmentId: string; } +export interface FeatureFlagsApiDeleteFlagSuggestionRequest { + /** + * The ID of the flag suggestion. + * @type string + */ + suggestionId: string; +} + export interface FeatureFlagsApiDisableFeatureFlagEnvironmentRequest { /** * The ID of the feature flag. @@ -2265,6 +2863,14 @@ export interface FeatureFlagsApiGetFeatureFlagsEnvironmentRequest { environmentId: string; } +export interface FeatureFlagsApiGetFlagSuggestionRequest { + /** + * The ID of the flag suggestion. + * @type string + */ + suggestionId: string; +} + export interface FeatureFlagsApiListFeatureFlagsRequest { /** * Filter feature flags by key (partial matching). @@ -2319,6 +2925,18 @@ export interface FeatureFlagsApiPauseExposureScheduleRequest { exposureScheduleId: string; } +export interface FeatureFlagsApiRejectFlagSuggestionRequest { + /** + * The ID of the flag suggestion. + * @type string + */ + suggestionId: string; + /** + * @type ReviewFlagSuggestionRequest + */ + body: ReviewFlagSuggestionRequest; +} + export interface FeatureFlagsApiResumeExposureScheduleRequest { /** * The ID of the exposure schedule. @@ -2411,6 +3029,29 @@ export class FeatureFlagsApi { responseProcessor || new FeatureFlagsApiResponseProcessor(); } + /** + * Approve a pending flag change suggestion. The change is applied immediately + * upon approval. A user cannot approve their own suggestion. + * @param param The request object + */ + public approveFlagSuggestion( + param: FeatureFlagsApiApproveFlagSuggestionRequest, + options?: Configuration, + ): Promise { + const requestContextPromise = this.requestFactory.approveFlagSuggestion( + param.suggestionId, + param.body, + options, + ); + return requestContextPromise.then((requestContext) => { + return this.configuration.httpApi + .send(requestContext) + .then((responseContext) => { + return this.responseProcessor.approveFlagSuggestion(responseContext); + }); + }); + } + /** * Archives a feature flag. Archived flags are * hidden from the main list but remain accessible and can be unarchived. @@ -2501,6 +3142,30 @@ export class FeatureFlagsApi { }); } + /** + * Create a change suggestion for a feature flag. Suggestions require approval + * before the change is applied. The request must include at least one + * notification_rule_targets handle to receive approval or rejection notifications. + * @param param The request object + */ + public createFlagSuggestion( + param: FeatureFlagsApiCreateFlagSuggestionRequest, + options?: Configuration, + ): Promise { + const requestContextPromise = this.requestFactory.createFlagSuggestion( + param.featureFlagId, + param.body, + options, + ); + return requestContextPromise.then((requestContext) => { + return this.configuration.httpApi + .send(requestContext) + .then((responseContext) => { + return this.responseProcessor.createFlagSuggestion(responseContext); + }); + }); + } + /** * Deletes an environment. This operation cannot be undone. * @param param The request object @@ -2525,6 +3190,27 @@ export class FeatureFlagsApi { }); } + /** + * Delete a pending flag change suggestion. Approved suggestions cannot be deleted. + * @param param The request object + */ + public deleteFlagSuggestion( + param: FeatureFlagsApiDeleteFlagSuggestionRequest, + options?: Configuration, + ): Promise { + const requestContextPromise = this.requestFactory.deleteFlagSuggestion( + param.suggestionId, + options, + ); + return requestContextPromise.then((requestContext) => { + return this.configuration.httpApi + .send(requestContext) + .then((responseContext) => { + return this.responseProcessor.deleteFlagSuggestion(responseContext); + }); + }); + } + /** * Disable a feature flag in a specific environment. * @param param The request object @@ -2621,6 +3307,27 @@ export class FeatureFlagsApi { }); } + /** + * Get a flag change suggestion by ID. + * @param param The request object + */ + public getFlagSuggestion( + param: FeatureFlagsApiGetFlagSuggestionRequest, + options?: Configuration, + ): Promise { + const requestContextPromise = this.requestFactory.getFlagSuggestion( + param.suggestionId, + options, + ); + return requestContextPromise.then((requestContext) => { + return this.configuration.httpApi + .send(requestContext) + .then((responseContext) => { + return this.responseProcessor.getFlagSuggestion(responseContext); + }); + }); + } + /** * Returns a list of feature flags for the organization. * Supports filtering by key and archived status. @@ -2695,6 +3402,28 @@ export class FeatureFlagsApi { }); } + /** + * Reject a pending flag change suggestion. The suggested change is not applied. + * @param param The request object + */ + public rejectFlagSuggestion( + param: FeatureFlagsApiRejectFlagSuggestionRequest, + options?: Configuration, + ): Promise { + const requestContextPromise = this.requestFactory.rejectFlagSuggestion( + param.suggestionId, + param.body, + options, + ); + return requestContextPromise.then((requestContext) => { + return this.configuration.httpApi + .send(requestContext) + .then((responseContext) => { + return this.responseProcessor.rejectFlagSuggestion(responseContext); + }); + }); + } + /** * Resumes progression for a previously paused progressive rollout. * @param param The request object diff --git a/services/feature_flags/src/v2/index.ts b/services/feature_flags/src/v2/index.ts index 276405693bfb..b08eb75e71f9 100644 --- a/services/feature_flags/src/v2/index.ts +++ b/services/feature_flags/src/v2/index.ts @@ -1,16 +1,21 @@ export { + FeatureFlagsApiApproveFlagSuggestionRequest, FeatureFlagsApiArchiveFeatureFlagRequest, FeatureFlagsApiCreateAllocationsForFeatureFlagInEnvironmentRequest, FeatureFlagsApiCreateFeatureFlagRequest, FeatureFlagsApiCreateFeatureFlagsEnvironmentRequest, + FeatureFlagsApiCreateFlagSuggestionRequest, FeatureFlagsApiDeleteFeatureFlagsEnvironmentRequest, + FeatureFlagsApiDeleteFlagSuggestionRequest, FeatureFlagsApiDisableFeatureFlagEnvironmentRequest, FeatureFlagsApiEnableFeatureFlagEnvironmentRequest, FeatureFlagsApiGetFeatureFlagRequest, FeatureFlagsApiGetFeatureFlagsEnvironmentRequest, + FeatureFlagsApiGetFlagSuggestionRequest, FeatureFlagsApiListFeatureFlagsRequest, FeatureFlagsApiListFeatureFlagsEnvironmentsRequest, FeatureFlagsApiPauseExposureScheduleRequest, + FeatureFlagsApiRejectFlagSuggestionRequest, FeatureFlagsApiResumeExposureScheduleRequest, FeatureFlagsApiStartExposureScheduleRequest, FeatureFlagsApiStopExposureScheduleRequest, @@ -46,6 +51,9 @@ export { CreateFeatureFlagAttributes } from "./models/CreateFeatureFlagAttribute export { CreateFeatureFlagData } from "./models/CreateFeatureFlagData"; export { CreateFeatureFlagDataType } from "./models/CreateFeatureFlagDataType"; export { CreateFeatureFlagRequest } from "./models/CreateFeatureFlagRequest"; +export { CreateFlagSuggestionAttributes } from "./models/CreateFlagSuggestionAttributes"; +export { CreateFlagSuggestionData } from "./models/CreateFlagSuggestionData"; +export { CreateFlagSuggestionRequest } from "./models/CreateFlagSuggestionRequest"; export { CreateVariant } from "./models/CreateVariant"; export { Environment } from "./models/Environment"; export { EnvironmentAttributes } from "./models/EnvironmentAttributes"; @@ -61,6 +69,14 @@ export { FeatureFlagResponse } from "./models/FeatureFlagResponse"; export { FeatureFlagsPaginationMeta } from "./models/FeatureFlagsPaginationMeta"; export { FeatureFlagsPaginationMetaPage } from "./models/FeatureFlagsPaginationMetaPage"; export { FeatureFlagStatus } from "./models/FeatureFlagStatus"; +export { FlagSuggestion } from "./models/FlagSuggestion"; +export { FlagSuggestionAction } from "./models/FlagSuggestionAction"; +export { FlagSuggestionAttributes } from "./models/FlagSuggestionAttributes"; +export { FlagSuggestionDataType } from "./models/FlagSuggestionDataType"; +export { FlagSuggestionEventDataType } from "./models/FlagSuggestionEventDataType"; +export { FlagSuggestionProperty } from "./models/FlagSuggestionProperty"; +export { FlagSuggestionResponse } from "./models/FlagSuggestionResponse"; +export { FlagSuggestionStatus } from "./models/FlagSuggestionStatus"; export { GuardrailMetric } from "./models/GuardrailMetric"; export { GuardrailMetricRequest } from "./models/GuardrailMetricRequest"; export { GuardrailTriggerAction } from "./models/GuardrailTriggerAction"; @@ -68,9 +84,13 @@ export { ListAllocationsResponse } from "./models/ListAllocationsResponse"; export { ListEnvironmentsResponse } from "./models/ListEnvironmentsResponse"; export { ListFeatureFlagsResponse } from "./models/ListFeatureFlagsResponse"; export { OverwriteAllocationsRequest } from "./models/OverwriteAllocationsRequest"; +export { ReviewFlagSuggestionAttributes } from "./models/ReviewFlagSuggestionAttributes"; +export { ReviewFlagSuggestionData } from "./models/ReviewFlagSuggestionData"; +export { ReviewFlagSuggestionRequest } from "./models/ReviewFlagSuggestionRequest"; export { RolloutOptions } from "./models/RolloutOptions"; export { RolloutOptionsRequest } from "./models/RolloutOptionsRequest"; export { RolloutStrategy } from "./models/RolloutStrategy"; +export { SuggestionMetadata } from "./models/SuggestionMetadata"; export { TargetingRule } from "./models/TargetingRule"; export { TargetingRuleRequest } from "./models/TargetingRuleRequest"; export { UpdateEnvironmentAttributes } from "./models/UpdateEnvironmentAttributes"; diff --git a/services/feature_flags/src/v2/models/CreateFlagSuggestionAttributes.ts b/services/feature_flags/src/v2/models/CreateFlagSuggestionAttributes.ts new file mode 100644 index 000000000000..ac1fa08bdd0a --- /dev/null +++ b/services/feature_flags/src/v2/models/CreateFlagSuggestionAttributes.ts @@ -0,0 +1,101 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { FlagSuggestionAction } from "./FlagSuggestionAction"; +import { FlagSuggestionProperty } from "./FlagSuggestionProperty"; +import { SuggestionMetadata } from "./SuggestionMetadata"; + +/** + * Attributes for creating a flag suggestion. + */ +export class CreateFlagSuggestionAttributes { + /** + * The type of change action for a suggestion. + */ + "action": FlagSuggestionAction; + /** + * Optional comment explaining the change. + */ + "comment"?: string; + /** + * The environment ID for environment-scoped changes. + */ + "environmentId"?: string; + /** + * Notification handles (without @ prefix) to receive approval or rejection notifications. + * For example, an email address or Slack channel name. + */ + "notificationRuleTargets": Array; + /** + * The flag property being changed. + */ + "property": FlagSuggestionProperty; + /** + * The suggested new value (empty string for flag-level actions like archive, JSON-encoded for complex properties like allocations). + */ + "suggestion"?: string; + /** + * Optional metadata for a suggestion. + */ + "suggestionMetadata"?: SuggestionMetadata; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + action: { + baseName: "action", + type: "FlagSuggestionAction", + required: true, + }, + comment: { + baseName: "comment", + type: "string", + }, + environmentId: { + baseName: "environment_id", + type: "string", + format: "uuid", + }, + notificationRuleTargets: { + baseName: "notification_rule_targets", + type: "Array", + required: true, + }, + property: { + baseName: "property", + type: "FlagSuggestionProperty", + required: true, + }, + suggestion: { + baseName: "suggestion", + type: "string", + }, + suggestionMetadata: { + baseName: "suggestion_metadata", + type: "SuggestionMetadata", + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return CreateFlagSuggestionAttributes.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/feature_flags/src/v2/models/CreateFlagSuggestionData.ts b/services/feature_flags/src/v2/models/CreateFlagSuggestionData.ts new file mode 100644 index 000000000000..691730c6ad24 --- /dev/null +++ b/services/feature_flags/src/v2/models/CreateFlagSuggestionData.ts @@ -0,0 +1,57 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { CreateFlagSuggestionAttributes } from "./CreateFlagSuggestionAttributes"; +import { FlagSuggestionDataType } from "./FlagSuggestionDataType"; + +/** + * Data for creating a flag suggestion. + */ +export class CreateFlagSuggestionData { + /** + * Attributes for creating a flag suggestion. + */ + "attributes": CreateFlagSuggestionAttributes; + /** + * Flag suggestions resource type. + */ + "type": FlagSuggestionDataType; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + attributes: { + baseName: "attributes", + type: "CreateFlagSuggestionAttributes", + required: true, + }, + type: { + baseName: "type", + type: "FlagSuggestionDataType", + required: true, + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return CreateFlagSuggestionData.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/feature_flags/src/v2/models/CreateFlagSuggestionRequest.ts b/services/feature_flags/src/v2/models/CreateFlagSuggestionRequest.ts new file mode 100644 index 000000000000..76399d14f014 --- /dev/null +++ b/services/feature_flags/src/v2/models/CreateFlagSuggestionRequest.ts @@ -0,0 +1,47 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { CreateFlagSuggestionData } from "./CreateFlagSuggestionData"; + +/** + * Request to create a flag suggestion. + */ +export class CreateFlagSuggestionRequest { + /** + * Data for creating a flag suggestion. + */ + "data": CreateFlagSuggestionData; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + data: { + baseName: "data", + type: "CreateFlagSuggestionData", + required: true, + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return CreateFlagSuggestionRequest.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/feature_flags/src/v2/models/FlagSuggestion.ts b/services/feature_flags/src/v2/models/FlagSuggestion.ts new file mode 100644 index 000000000000..cd623c3c8600 --- /dev/null +++ b/services/feature_flags/src/v2/models/FlagSuggestion.ts @@ -0,0 +1,67 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { FlagSuggestionAttributes } from "./FlagSuggestionAttributes"; +import { FlagSuggestionDataType } from "./FlagSuggestionDataType"; + +/** + * A flag change suggestion. + */ +export class FlagSuggestion { + /** + * Attributes of a flag suggestion. + */ + "attributes": FlagSuggestionAttributes; + /** + * Unique identifier for the suggestion. + */ + "id": string; + /** + * Flag suggestions resource type. + */ + "type": FlagSuggestionDataType; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + attributes: { + baseName: "attributes", + type: "FlagSuggestionAttributes", + required: true, + }, + id: { + baseName: "id", + type: "string", + required: true, + format: "uuid", + }, + type: { + baseName: "type", + type: "FlagSuggestionDataType", + required: true, + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return FlagSuggestion.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/feature_flags/src/v2/models/FlagSuggestionAction.ts b/services/feature_flags/src/v2/models/FlagSuggestionAction.ts new file mode 100644 index 000000000000..be669c53d0f3 --- /dev/null +++ b/services/feature_flags/src/v2/models/FlagSuggestionAction.ts @@ -0,0 +1,25 @@ +import { UnparsedObject } from "@datadog/datadog-api-client"; + +/** + * The type of change action for a suggestion. + */ +export type FlagSuggestionAction = + | typeof CREATED + | typeof UPDATED + | typeof DELETED + | typeof ARCHIVED + | typeof UNARCHIVED + | typeof STARTED + | typeof STOPPED + | typeof PAUSED + | typeof UNPAUSED + | UnparsedObject; +export const CREATED = "created"; +export const UPDATED = "updated"; +export const DELETED = "deleted"; +export const ARCHIVED = "archived"; +export const UNARCHIVED = "unarchived"; +export const STARTED = "started"; +export const STOPPED = "stopped"; +export const PAUSED = "paused"; +export const UNPAUSED = "unpaused"; diff --git a/services/feature_flags/src/v2/models/FlagSuggestionAttributes.ts b/services/feature_flags/src/v2/models/FlagSuggestionAttributes.ts new file mode 100644 index 000000000000..d247da396ee0 --- /dev/null +++ b/services/feature_flags/src/v2/models/FlagSuggestionAttributes.ts @@ -0,0 +1,192 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { FlagSuggestionAction } from "./FlagSuggestionAction"; +import { FlagSuggestionProperty } from "./FlagSuggestionProperty"; +import { FlagSuggestionStatus } from "./FlagSuggestionStatus"; +import { SuggestionMetadata } from "./SuggestionMetadata"; + +/** + * Attributes of a flag suggestion. + */ +export class FlagSuggestionAttributes { + /** + * The type of change action for a suggestion. + */ + "action": FlagSuggestionAction; + /** + * The flag history version this suggestion was based on. + */ + "baseFlagHistoryId"?: string; + /** + * Optional comment from the requester. + */ + "comment"?: string; + /** + * When the suggestion was created. + */ + "createdAt": Date; + /** + * UUID of the user who created the suggestion. + */ + "createdBy": string; + /** + * The status of a flag suggestion. + */ + "currentStatus": FlagSuggestionStatus; + /** + * The current value before the suggested change (empty string for flag-level actions like archive). + */ + "currentValue"?: string; + /** + * When the suggestion was soft-deleted. + */ + "deletedAt"?: Date; + /** + * UUID of the user who deleted the suggestion. + */ + "deletedBy"?: string; + /** + * The environment ID for environment-scoped suggestions. Null for flag-level changes. + */ + "environmentId"?: string; + /** + * The ID of the feature flag this suggestion applies to. + */ + "featureFlagId": string; + /** + * Human-readable message about the suggestion (populated on auto-created suggestions). + */ + "message"?: string; + /** + * The flag property being changed. + */ + "property": FlagSuggestionProperty; + /** + * The suggested new value (JSON-encoded for complex properties, empty string for flag-level actions like archive). + */ + "suggestion"?: string; + /** + * Optional metadata for a suggestion. + */ + "suggestionMetadata"?: SuggestionMetadata; + /** + * When the suggestion was last updated. + */ + "updatedAt"?: Date; + /** + * UUID of the user who last updated the suggestion. + */ + "updatedBy"?: string; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + action: { + baseName: "action", + type: "FlagSuggestionAction", + required: true, + }, + baseFlagHistoryId: { + baseName: "base_flag_history_id", + type: "string", + format: "uuid", + }, + comment: { + baseName: "comment", + type: "string", + }, + createdAt: { + baseName: "created_at", + type: "Date", + required: true, + format: "date-time", + }, + createdBy: { + baseName: "created_by", + type: "string", + required: true, + format: "uuid", + }, + currentStatus: { + baseName: "current_status", + type: "FlagSuggestionStatus", + required: true, + }, + currentValue: { + baseName: "current_value", + type: "string", + }, + deletedAt: { + baseName: "deleted_at", + type: "Date", + format: "date-time", + }, + deletedBy: { + baseName: "deleted_by", + type: "string", + format: "uuid", + }, + environmentId: { + baseName: "environment_id", + type: "string", + format: "uuid", + }, + featureFlagId: { + baseName: "feature_flag_id", + type: "string", + required: true, + format: "uuid", + }, + message: { + baseName: "message", + type: "string", + }, + property: { + baseName: "property", + type: "FlagSuggestionProperty", + required: true, + }, + suggestion: { + baseName: "suggestion", + type: "string", + }, + suggestionMetadata: { + baseName: "suggestion_metadata", + type: "SuggestionMetadata", + }, + updatedAt: { + baseName: "updated_at", + type: "Date", + format: "date-time", + }, + updatedBy: { + baseName: "updated_by", + type: "string", + format: "uuid", + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return FlagSuggestionAttributes.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/feature_flags/src/v2/models/FlagSuggestionDataType.ts b/services/feature_flags/src/v2/models/FlagSuggestionDataType.ts new file mode 100644 index 000000000000..9f6aa079005b --- /dev/null +++ b/services/feature_flags/src/v2/models/FlagSuggestionDataType.ts @@ -0,0 +1,7 @@ +import { UnparsedObject } from "@datadog/datadog-api-client"; + +/** + * Flag suggestions resource type. + */ +export type FlagSuggestionDataType = typeof FLAG_SUGGESTIONS | UnparsedObject; +export const FLAG_SUGGESTIONS = "flag-suggestions"; diff --git a/services/feature_flags/src/v2/models/FlagSuggestionEventDataType.ts b/services/feature_flags/src/v2/models/FlagSuggestionEventDataType.ts new file mode 100644 index 000000000000..820c2d60e348 --- /dev/null +++ b/services/feature_flags/src/v2/models/FlagSuggestionEventDataType.ts @@ -0,0 +1,9 @@ +import { UnparsedObject } from "@datadog/datadog-api-client"; + +/** + * Flag suggestion events resource type. + */ +export type FlagSuggestionEventDataType = + | typeof FLAG_SUGGESTION_EVENTS + | UnparsedObject; +export const FLAG_SUGGESTION_EVENTS = "flag-suggestion-events"; diff --git a/services/feature_flags/src/v2/models/FlagSuggestionProperty.ts b/services/feature_flags/src/v2/models/FlagSuggestionProperty.ts new file mode 100644 index 000000000000..e4a38909bd07 --- /dev/null +++ b/services/feature_flags/src/v2/models/FlagSuggestionProperty.ts @@ -0,0 +1,33 @@ +import { UnparsedObject } from "@datadog/datadog-api-client"; + +/** + * The flag property being changed. + */ +export type FlagSuggestionProperty = + | typeof FLAG + | typeof FLAG_NAME + | typeof FLAG_DESCRIPTION + | typeof JSON_SCHEMA + | typeof DISTRIBUTION_CHANNEL + | typeof VARIANT + | typeof VARIANT_NAME + | typeof VARIANT_VALUE + | typeof ALLOCATIONS + | typeof ROLLOUT + | typeof ENVIRONMENT_STATUS + | typeof DEFAULT_VARIANT + | typeof OVERRIDE_VARIANT + | UnparsedObject; +export const FLAG = "FLAG"; +export const FLAG_NAME = "FLAG_NAME"; +export const FLAG_DESCRIPTION = "FLAG_DESCRIPTION"; +export const JSON_SCHEMA = "JSON_SCHEMA"; +export const DISTRIBUTION_CHANNEL = "DISTRIBUTION_CHANNEL"; +export const VARIANT = "VARIANT"; +export const VARIANT_NAME = "VARIANT_NAME"; +export const VARIANT_VALUE = "VARIANT_VALUE"; +export const ALLOCATIONS = "ALLOCATIONS"; +export const ROLLOUT = "ROLLOUT"; +export const ENVIRONMENT_STATUS = "ENVIRONMENT_STATUS"; +export const DEFAULT_VARIANT = "DEFAULT_VARIANT"; +export const OVERRIDE_VARIANT = "OVERRIDE_VARIANT"; diff --git a/services/feature_flags/src/v2/models/FlagSuggestionResponse.ts b/services/feature_flags/src/v2/models/FlagSuggestionResponse.ts new file mode 100644 index 000000000000..111bbe81701a --- /dev/null +++ b/services/feature_flags/src/v2/models/FlagSuggestionResponse.ts @@ -0,0 +1,47 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { FlagSuggestion } from "./FlagSuggestion"; + +/** + * Response containing a flag suggestion. + */ +export class FlagSuggestionResponse { + /** + * A flag change suggestion. + */ + "data": FlagSuggestion; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + data: { + baseName: "data", + type: "FlagSuggestion", + required: true, + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return FlagSuggestionResponse.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/feature_flags/src/v2/models/FlagSuggestionStatus.ts b/services/feature_flags/src/v2/models/FlagSuggestionStatus.ts new file mode 100644 index 000000000000..17578fc2c9ff --- /dev/null +++ b/services/feature_flags/src/v2/models/FlagSuggestionStatus.ts @@ -0,0 +1,13 @@ +import { UnparsedObject } from "@datadog/datadog-api-client"; + +/** + * The status of a flag suggestion. + */ +export type FlagSuggestionStatus = + | typeof PENDING + | typeof REJECTED + | typeof APPROVED + | UnparsedObject; +export const PENDING = "pending"; +export const REJECTED = "rejected"; +export const APPROVED = "approved"; diff --git a/services/feature_flags/src/v2/models/ReviewFlagSuggestionAttributes.ts b/services/feature_flags/src/v2/models/ReviewFlagSuggestionAttributes.ts new file mode 100644 index 000000000000..b4f2ab632723 --- /dev/null +++ b/services/feature_flags/src/v2/models/ReviewFlagSuggestionAttributes.ts @@ -0,0 +1,44 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +/** + * Attributes for reviewing a flag suggestion. + */ +export class ReviewFlagSuggestionAttributes { + /** + * Optional comment from the reviewer. + */ + "comment"?: string; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + comment: { + baseName: "comment", + type: "string", + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return ReviewFlagSuggestionAttributes.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/feature_flags/src/v2/models/ReviewFlagSuggestionData.ts b/services/feature_flags/src/v2/models/ReviewFlagSuggestionData.ts new file mode 100644 index 000000000000..295ceb1bb15a --- /dev/null +++ b/services/feature_flags/src/v2/models/ReviewFlagSuggestionData.ts @@ -0,0 +1,56 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { FlagSuggestionEventDataType } from "./FlagSuggestionEventDataType"; +import { ReviewFlagSuggestionAttributes } from "./ReviewFlagSuggestionAttributes"; + +/** + * Data for reviewing a flag suggestion. + */ +export class ReviewFlagSuggestionData { + /** + * Attributes for reviewing a flag suggestion. + */ + "attributes"?: ReviewFlagSuggestionAttributes; + /** + * Flag suggestion events resource type. + */ + "type": FlagSuggestionEventDataType; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + attributes: { + baseName: "attributes", + type: "ReviewFlagSuggestionAttributes", + }, + type: { + baseName: "type", + type: "FlagSuggestionEventDataType", + required: true, + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return ReviewFlagSuggestionData.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/feature_flags/src/v2/models/ReviewFlagSuggestionRequest.ts b/services/feature_flags/src/v2/models/ReviewFlagSuggestionRequest.ts new file mode 100644 index 000000000000..e81be8840755 --- /dev/null +++ b/services/feature_flags/src/v2/models/ReviewFlagSuggestionRequest.ts @@ -0,0 +1,47 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { ReviewFlagSuggestionData } from "./ReviewFlagSuggestionData"; + +/** + * Request to approve or reject a flag suggestion. + */ +export class ReviewFlagSuggestionRequest { + /** + * Data for reviewing a flag suggestion. + */ + "data": ReviewFlagSuggestionData; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + data: { + baseName: "data", + type: "ReviewFlagSuggestionData", + required: true, + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return ReviewFlagSuggestionRequest.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/feature_flags/src/v2/models/SuggestionMetadata.ts b/services/feature_flags/src/v2/models/SuggestionMetadata.ts new file mode 100644 index 000000000000..e6b244aca534 --- /dev/null +++ b/services/feature_flags/src/v2/models/SuggestionMetadata.ts @@ -0,0 +1,44 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +/** + * Optional metadata for a suggestion. + */ +export class SuggestionMetadata { + /** + * Variant ID for variant delete suggestions. + */ + "variantId"?: string; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + variantId: { + baseName: "variant_id", + type: "string", + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return SuggestionMetadata.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/feature_flags/src/v2/models/TypingInfo.ts b/services/feature_flags/src/v2/models/TypingInfo.ts index ebdc151a5c6c..fe8fc9658fbd 100644 --- a/services/feature_flags/src/v2/models/TypingInfo.ts +++ b/services/feature_flags/src/v2/models/TypingInfo.ts @@ -19,6 +19,9 @@ import { CreateEnvironmentRequest } from "./CreateEnvironmentRequest"; import { CreateFeatureFlagAttributes } from "./CreateFeatureFlagAttributes"; import { CreateFeatureFlagData } from "./CreateFeatureFlagData"; import { CreateFeatureFlagRequest } from "./CreateFeatureFlagRequest"; +import { CreateFlagSuggestionAttributes } from "./CreateFlagSuggestionAttributes"; +import { CreateFlagSuggestionData } from "./CreateFlagSuggestionData"; +import { CreateFlagSuggestionRequest } from "./CreateFlagSuggestionRequest"; import { CreateVariant } from "./CreateVariant"; import { Environment } from "./Environment"; import { EnvironmentAttributes } from "./EnvironmentAttributes"; @@ -33,14 +36,21 @@ import { FeatureFlagEnvironment } from "./FeatureFlagEnvironment"; import { FeatureFlagResponse } from "./FeatureFlagResponse"; import { FeatureFlagsPaginationMeta } from "./FeatureFlagsPaginationMeta"; import { FeatureFlagsPaginationMetaPage } from "./FeatureFlagsPaginationMetaPage"; +import { FlagSuggestion } from "./FlagSuggestion"; +import { FlagSuggestionAttributes } from "./FlagSuggestionAttributes"; +import { FlagSuggestionResponse } from "./FlagSuggestionResponse"; import { GuardrailMetric } from "./GuardrailMetric"; import { GuardrailMetricRequest } from "./GuardrailMetricRequest"; import { ListAllocationsResponse } from "./ListAllocationsResponse"; import { ListEnvironmentsResponse } from "./ListEnvironmentsResponse"; import { ListFeatureFlagsResponse } from "./ListFeatureFlagsResponse"; import { OverwriteAllocationsRequest } from "./OverwriteAllocationsRequest"; +import { ReviewFlagSuggestionAttributes } from "./ReviewFlagSuggestionAttributes"; +import { ReviewFlagSuggestionData } from "./ReviewFlagSuggestionData"; +import { ReviewFlagSuggestionRequest } from "./ReviewFlagSuggestionRequest"; import { RolloutOptions } from "./RolloutOptions"; import { RolloutOptionsRequest } from "./RolloutOptionsRequest"; +import { SuggestionMetadata } from "./SuggestionMetadata"; import { TargetingRule } from "./TargetingRule"; import { TargetingRuleRequest } from "./TargetingRuleRequest"; import { UpdateEnvironmentAttributes } from "./UpdateEnvironmentAttributes"; @@ -74,6 +84,35 @@ export const TypingInfo: ModelTypingInfo = { CreateEnvironmentDataType: ["environments"], CreateFeatureFlagDataType: ["feature-flags"], FeatureFlagStatus: ["ENABLED", "DISABLED"], + FlagSuggestionAction: [ + "created", + "updated", + "deleted", + "archived", + "unarchived", + "started", + "stopped", + "paused", + "unpaused", + ], + FlagSuggestionDataType: ["flag-suggestions"], + FlagSuggestionEventDataType: ["flag-suggestion-events"], + FlagSuggestionProperty: [ + "FLAG", + "FLAG_NAME", + "FLAG_DESCRIPTION", + "JSON_SCHEMA", + "DISTRIBUTION_CHANNEL", + "VARIANT", + "VARIANT_NAME", + "VARIANT_VALUE", + "ALLOCATIONS", + "ROLLOUT", + "ENVIRONMENT_STATUS", + "DEFAULT_VARIANT", + "OVERRIDE_VARIANT", + ], + FlagSuggestionStatus: ["pending", "rejected", "approved"], GuardrailTriggerAction: ["PAUSE", "ABORT"], RolloutStrategy: ["UNIFORM_INTERVALS", "NO_ROLLOUT"], UpdateEnvironmentDataType: ["environments"], @@ -101,6 +140,9 @@ export const TypingInfo: ModelTypingInfo = { CreateFeatureFlagAttributes: CreateFeatureFlagAttributes, CreateFeatureFlagData: CreateFeatureFlagData, CreateFeatureFlagRequest: CreateFeatureFlagRequest, + CreateFlagSuggestionAttributes: CreateFlagSuggestionAttributes, + CreateFlagSuggestionData: CreateFlagSuggestionData, + CreateFlagSuggestionRequest: CreateFlagSuggestionRequest, CreateVariant: CreateVariant, Environment: Environment, EnvironmentAttributes: EnvironmentAttributes, @@ -115,14 +157,21 @@ export const TypingInfo: ModelTypingInfo = { FeatureFlagResponse: FeatureFlagResponse, FeatureFlagsPaginationMeta: FeatureFlagsPaginationMeta, FeatureFlagsPaginationMetaPage: FeatureFlagsPaginationMetaPage, + FlagSuggestion: FlagSuggestion, + FlagSuggestionAttributes: FlagSuggestionAttributes, + FlagSuggestionResponse: FlagSuggestionResponse, GuardrailMetric: GuardrailMetric, GuardrailMetricRequest: GuardrailMetricRequest, ListAllocationsResponse: ListAllocationsResponse, ListEnvironmentsResponse: ListEnvironmentsResponse, ListFeatureFlagsResponse: ListFeatureFlagsResponse, OverwriteAllocationsRequest: OverwriteAllocationsRequest, + ReviewFlagSuggestionAttributes: ReviewFlagSuggestionAttributes, + ReviewFlagSuggestionData: ReviewFlagSuggestionData, + ReviewFlagSuggestionRequest: ReviewFlagSuggestionRequest, RolloutOptions: RolloutOptions, RolloutOptionsRequest: RolloutOptionsRequest, + SuggestionMetadata: SuggestionMetadata, TargetingRule: TargetingRule, TargetingRuleRequest: TargetingRuleRequest, UpdateEnvironmentAttributes: UpdateEnvironmentAttributes, diff --git a/services/metrics/src/v2/index.ts b/services/metrics/src/v2/index.ts index 1380b2d803d3..3edb7748a6a2 100644 --- a/services/metrics/src/v2/index.ts +++ b/services/metrics/src/v2/index.ts @@ -19,19 +19,6 @@ export { } from "./MetricsApi"; export { APIErrorResponse } from "./models/APIErrorResponse"; -export { ApmDependencyStatName } from "./models/ApmDependencyStatName"; -export { ApmDependencyStatsDataSource } from "./models/ApmDependencyStatsDataSource"; -export { ApmDependencyStatsQuery } from "./models/ApmDependencyStatsQuery"; -export { ApmMetricsDataSource } from "./models/ApmMetricsDataSource"; -export { ApmMetricsQuery } from "./models/ApmMetricsQuery"; -export { ApmMetricsSpanKind } from "./models/ApmMetricsSpanKind"; -export { ApmMetricsStat } from "./models/ApmMetricsStat"; -export { ApmResourceStatName } from "./models/ApmResourceStatName"; -export { ApmResourceStatsDataSource } from "./models/ApmResourceStatsDataSource"; -export { ApmResourceStatsQuery } from "./models/ApmResourceStatsQuery"; -export { ContainerDataSource } from "./models/ContainerDataSource"; -export { ContainerScalarQuery } from "./models/ContainerScalarQuery"; -export { ContainerTimeseriesQuery } from "./models/ContainerTimeseriesQuery"; export { DataScalarColumn } from "./models/DataScalarColumn"; export { EventsAggregation } from "./models/EventsAggregation"; export { EventsCompute } from "./models/EventsCompute"; @@ -139,9 +126,6 @@ export { MetricTagConfigurationUpdateRequest } from "./models/MetricTagConfigura export { MetricType } from "./models/MetricType"; export { MetricVolumes } from "./models/MetricVolumes"; export { MetricVolumesResponse } from "./models/MetricVolumesResponse"; -export { ProcessDataSource } from "./models/ProcessDataSource"; -export { ProcessScalarQuery } from "./models/ProcessScalarQuery"; -export { ProcessTimeseriesQuery } from "./models/ProcessTimeseriesQuery"; export { QueryFormula } from "./models/QueryFormula"; export { QuerySortOrder } from "./models/QuerySortOrder"; export { ScalarColumn } from "./models/ScalarColumn"; @@ -157,11 +141,6 @@ export { ScalarFormulaResponseType } from "./models/ScalarFormulaResponseType"; export { ScalarMeta } from "./models/ScalarMeta"; export { ScalarQuery } from "./models/ScalarQuery"; export { ScalarResponse } from "./models/ScalarResponse"; -export { SloDataSource } from "./models/SloDataSource"; -export { SloQuery } from "./models/SloQuery"; -export { SlosGroupMode } from "./models/SlosGroupMode"; -export { SlosMeasure } from "./models/SlosMeasure"; -export { SlosQueryType } from "./models/SlosQueryType"; export { TimeseriesFormulaQueryRequest } from "./models/TimeseriesFormulaQueryRequest"; export { TimeseriesFormulaQueryResponse } from "./models/TimeseriesFormulaQueryResponse"; export { TimeseriesFormulaRequest } from "./models/TimeseriesFormulaRequest"; diff --git a/services/metrics/src/v2/models/ApmDependencyStatName.ts b/services/metrics/src/v2/models/ApmDependencyStatName.ts deleted file mode 100644 index 46aaff511759..000000000000 --- a/services/metrics/src/v2/models/ApmDependencyStatName.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { UnparsedObject } from "@datadog/datadog-api-client"; - -/** - * The APM dependency statistic to query. - */ -export type ApmDependencyStatName = - | typeof AVG_DURATION - | typeof AVG_ROOT_DURATION - | typeof AVG_SPANS_PER_TRACE - | typeof ERROR_RATE - | typeof PCT_EXEC_TIME - | typeof PCT_OF_TRACES - | typeof TOTAL_TRACES_COUNT - | UnparsedObject; -export const AVG_DURATION = "avg_duration"; -export const AVG_ROOT_DURATION = "avg_root_duration"; -export const AVG_SPANS_PER_TRACE = "avg_spans_per_trace"; -export const ERROR_RATE = "error_rate"; -export const PCT_EXEC_TIME = "pct_exec_time"; -export const PCT_OF_TRACES = "pct_of_traces"; -export const TOTAL_TRACES_COUNT = "total_traces_count"; diff --git a/services/metrics/src/v2/models/ApmDependencyStatsDataSource.ts b/services/metrics/src/v2/models/ApmDependencyStatsDataSource.ts deleted file mode 100644 index 71d4b622940b..000000000000 --- a/services/metrics/src/v2/models/ApmDependencyStatsDataSource.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { UnparsedObject } from "@datadog/datadog-api-client"; - -/** - * A data source for APM dependency statistics queries. - */ -export type ApmDependencyStatsDataSource = - | typeof APM_DEPENDENCY_STATS - | UnparsedObject; -export const APM_DEPENDENCY_STATS = "apm_dependency_stats"; diff --git a/services/metrics/src/v2/models/ApmDependencyStatsQuery.ts b/services/metrics/src/v2/models/ApmDependencyStatsQuery.ts deleted file mode 100644 index f89a5594dfa3..000000000000 --- a/services/metrics/src/v2/models/ApmDependencyStatsQuery.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { AttributeTypeMap } from "@datadog/datadog-api-client"; - -import { ApmDependencyStatName } from "./ApmDependencyStatName"; -import { ApmDependencyStatsDataSource } from "./ApmDependencyStatsDataSource"; - -/** - * A query for APM dependency statistics between services, such as call latency and error rates. - */ -export class ApmDependencyStatsQuery { - /** - * A data source for APM dependency statistics queries. - */ - "dataSource": ApmDependencyStatsDataSource; - /** - * The environment to query. - */ - "env": string; - /** - * Determines whether stats for upstream or downstream dependencies should be queried. - */ - "isUpstream"?: boolean; - /** - * The variable name for use in formulas. - */ - "name": string; - /** - * The APM operation name. - */ - "operationName": string; - /** - * The name of the second primary tag used within APM; required when `primary_tag_value` is specified. See https://docs.datadoghq.com/tracing/guide/setting_primary_tags_to_scope/#add-a-second-primary-tag-in-datadog. - */ - "primaryTagName"?: string; - /** - * Filter APM data by the second primary tag. `primary_tag_name` must also be specified. - */ - "primaryTagValue"?: string; - /** - * The resource name to filter by. - */ - "resourceName": string; - /** - * The service name to filter by. - */ - "service": string; - /** - * The APM dependency statistic to query. - */ - "stat": ApmDependencyStatName; - /** - * A container for additional, undeclared properties. - * This is a holder for any undeclared properties as specified with - * the 'additionalProperties' keyword in the OAS document. - */ - "additionalProperties"?: { [key: string]: any }; - /** - * @ignore - */ - "_unparsed"?: boolean; - - /** - * @ignore - */ - static readonly attributeTypeMap: AttributeTypeMap = { - dataSource: { - baseName: "data_source", - type: "ApmDependencyStatsDataSource", - required: true, - }, - env: { - baseName: "env", - type: "string", - required: true, - }, - isUpstream: { - baseName: "is_upstream", - type: "boolean", - }, - name: { - baseName: "name", - type: "string", - required: true, - }, - operationName: { - baseName: "operation_name", - type: "string", - required: true, - }, - primaryTagName: { - baseName: "primary_tag_name", - type: "string", - }, - primaryTagValue: { - baseName: "primary_tag_value", - type: "string", - }, - resourceName: { - baseName: "resource_name", - type: "string", - required: true, - }, - service: { - baseName: "service", - type: "string", - required: true, - }, - stat: { - baseName: "stat", - type: "ApmDependencyStatName", - required: true, - }, - additionalProperties: { - baseName: "additionalProperties", - type: "{ [key: string]: any; }", - }, - }; - - /** - * @ignore - */ - static getAttributeTypeMap(): AttributeTypeMap { - return ApmDependencyStatsQuery.attributeTypeMap; - } - - public constructor() {} -} diff --git a/services/metrics/src/v2/models/ApmMetricsDataSource.ts b/services/metrics/src/v2/models/ApmMetricsDataSource.ts deleted file mode 100644 index 1c78ed670e68..000000000000 --- a/services/metrics/src/v2/models/ApmMetricsDataSource.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { UnparsedObject } from "@datadog/datadog-api-client"; - -/** - * A data source for APM metrics queries. - */ -export type ApmMetricsDataSource = typeof APM_METRICS | UnparsedObject; -export const APM_METRICS = "apm_metrics"; diff --git a/services/metrics/src/v2/models/ApmMetricsQuery.ts b/services/metrics/src/v2/models/ApmMetricsQuery.ts deleted file mode 100644 index 50db036fb302..000000000000 --- a/services/metrics/src/v2/models/ApmMetricsQuery.ts +++ /dev/null @@ -1,139 +0,0 @@ -import { AttributeTypeMap } from "@datadog/datadog-api-client"; - -import { ApmMetricsDataSource } from "./ApmMetricsDataSource"; -import { ApmMetricsSpanKind } from "./ApmMetricsSpanKind"; -import { ApmMetricsStat } from "./ApmMetricsStat"; - -/** - * A query for APM trace metrics such as hits, errors, and latency percentiles, aggregated across services. - */ -export class ApmMetricsQuery { - /** - * A data source for APM metrics queries. - */ - "dataSource": ApmMetricsDataSource; - /** - * Optional fields to group the query results by. - */ - "groupBy"?: Array; - /** - * The variable name for use in formulas. - */ - "name": string; - /** - * Optional operation mode to aggregate across operation names. - */ - "operationMode"?: string; - /** - * Name of operation on service. If not provided, the primary operation name is used. - */ - "operationName"?: string; - /** - * Tags to query for a specific downstream entity (peer.service, peer.db_instance, peer.s3, peer.s3.bucket, etc.). - */ - "peerTags"?: Array; - /** - * Additional filters for the query using metrics query syntax (for example, env, primary_tag). - */ - "queryFilter"?: string; - /** - * The resource hash for exact matching. - */ - "resourceHash"?: string; - /** - * The full name of a specific resource to filter by. - */ - "resourceName"?: string; - /** - * The service name to filter by. - */ - "service"?: string; - /** - * Describes the relationship between the span, its parents, and its children in a trace. - */ - "spanKind"?: ApmMetricsSpanKind; - /** - * The APM metric statistic to query. - */ - "stat": ApmMetricsStat; - /** - * A container for additional, undeclared properties. - * This is a holder for any undeclared properties as specified with - * the 'additionalProperties' keyword in the OAS document. - */ - "additionalProperties"?: { [key: string]: any }; - /** - * @ignore - */ - "_unparsed"?: boolean; - - /** - * @ignore - */ - static readonly attributeTypeMap: AttributeTypeMap = { - dataSource: { - baseName: "data_source", - type: "ApmMetricsDataSource", - required: true, - }, - groupBy: { - baseName: "group_by", - type: "Array", - }, - name: { - baseName: "name", - type: "string", - required: true, - }, - operationMode: { - baseName: "operation_mode", - type: "string", - }, - operationName: { - baseName: "operation_name", - type: "string", - }, - peerTags: { - baseName: "peer_tags", - type: "Array", - }, - queryFilter: { - baseName: "query_filter", - type: "string", - }, - resourceHash: { - baseName: "resource_hash", - type: "string", - }, - resourceName: { - baseName: "resource_name", - type: "string", - }, - service: { - baseName: "service", - type: "string", - }, - spanKind: { - baseName: "span_kind", - type: "ApmMetricsSpanKind", - }, - stat: { - baseName: "stat", - type: "ApmMetricsStat", - required: true, - }, - additionalProperties: { - baseName: "additionalProperties", - type: "{ [key: string]: any; }", - }, - }; - - /** - * @ignore - */ - static getAttributeTypeMap(): AttributeTypeMap { - return ApmMetricsQuery.attributeTypeMap; - } - - public constructor() {} -} diff --git a/services/metrics/src/v2/models/ApmMetricsSpanKind.ts b/services/metrics/src/v2/models/ApmMetricsSpanKind.ts deleted file mode 100644 index d390dac77a83..000000000000 --- a/services/metrics/src/v2/models/ApmMetricsSpanKind.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { UnparsedObject } from "@datadog/datadog-api-client"; - -/** - * Describes the relationship between the span, its parents, and its children in a trace. - */ -export type ApmMetricsSpanKind = - | typeof CONSUMER - | typeof SERVER - | typeof CLIENT - | typeof PRODUCER - | typeof INTERNAL - | UnparsedObject; -export const CONSUMER = "consumer"; -export const SERVER = "server"; -export const CLIENT = "client"; -export const PRODUCER = "producer"; -export const INTERNAL = "internal"; diff --git a/services/metrics/src/v2/models/ApmMetricsStat.ts b/services/metrics/src/v2/models/ApmMetricsStat.ts deleted file mode 100644 index dc7cc1ddad97..000000000000 --- a/services/metrics/src/v2/models/ApmMetricsStat.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { UnparsedObject } from "@datadog/datadog-api-client"; - -/** - * The APM metric statistic to query. - */ -export type ApmMetricsStat = - | typeof ERROR_RATE - | typeof ERRORS - | typeof ERRORS_PER_SECOND - | typeof HITS - | typeof HITS_PER_SECOND - | typeof APDEX - | typeof LATENCY_AVG - | typeof LATENCY_MAX - | typeof LATENCY_P50 - | typeof LATENCY_P75 - | typeof LATENCY_P90 - | typeof LATENCY_P95 - | typeof LATENCY_P99 - | typeof LATENCY_P999 - | typeof LATENCY_DISTRIBUTION - | typeof TOTAL_TIME - | UnparsedObject; -export const ERROR_RATE = "error_rate"; -export const ERRORS = "errors"; -export const ERRORS_PER_SECOND = "errors_per_second"; -export const HITS = "hits"; -export const HITS_PER_SECOND = "hits_per_second"; -export const APDEX = "apdex"; -export const LATENCY_AVG = "latency_avg"; -export const LATENCY_MAX = "latency_max"; -export const LATENCY_P50 = "latency_p50"; -export const LATENCY_P75 = "latency_p75"; -export const LATENCY_P90 = "latency_p90"; -export const LATENCY_P95 = "latency_p95"; -export const LATENCY_P99 = "latency_p99"; -export const LATENCY_P999 = "latency_p999"; -export const LATENCY_DISTRIBUTION = "latency_distribution"; -export const TOTAL_TIME = "total_time"; diff --git a/services/metrics/src/v2/models/ApmResourceStatName.ts b/services/metrics/src/v2/models/ApmResourceStatName.ts deleted file mode 100644 index 212d56939280..000000000000 --- a/services/metrics/src/v2/models/ApmResourceStatName.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { UnparsedObject } from "@datadog/datadog-api-client"; - -/** - * The APM resource statistic to query. - */ -export type ApmResourceStatName = - | typeof ERROR_RATE - | typeof ERRORS - | typeof HITS - | typeof LATENCY_AVG - | typeof LATENCY_MAX - | typeof LATENCY_P50 - | typeof LATENCY_P75 - | typeof LATENCY_P90 - | typeof LATENCY_P95 - | typeof LATENCY_P99 - | typeof LATENCY_DISTRIBUTION - | typeof TOTAL_TIME - | UnparsedObject; -export const ERROR_RATE = "error_rate"; -export const ERRORS = "errors"; -export const HITS = "hits"; -export const LATENCY_AVG = "latency_avg"; -export const LATENCY_MAX = "latency_max"; -export const LATENCY_P50 = "latency_p50"; -export const LATENCY_P75 = "latency_p75"; -export const LATENCY_P90 = "latency_p90"; -export const LATENCY_P95 = "latency_p95"; -export const LATENCY_P99 = "latency_p99"; -export const LATENCY_DISTRIBUTION = "latency_distribution"; -export const TOTAL_TIME = "total_time"; diff --git a/services/metrics/src/v2/models/ApmResourceStatsDataSource.ts b/services/metrics/src/v2/models/ApmResourceStatsDataSource.ts deleted file mode 100644 index edc11cf90102..000000000000 --- a/services/metrics/src/v2/models/ApmResourceStatsDataSource.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { UnparsedObject } from "@datadog/datadog-api-client"; - -/** - * A data source for APM resource statistics queries. - */ -export type ApmResourceStatsDataSource = - | typeof APM_RESOURCE_STATS - | UnparsedObject; -export const APM_RESOURCE_STATS = "apm_resource_stats"; diff --git a/services/metrics/src/v2/models/ApmResourceStatsQuery.ts b/services/metrics/src/v2/models/ApmResourceStatsQuery.ts deleted file mode 100644 index 586776d78207..000000000000 --- a/services/metrics/src/v2/models/ApmResourceStatsQuery.ts +++ /dev/null @@ -1,124 +0,0 @@ -import { AttributeTypeMap } from "@datadog/datadog-api-client"; - -import { ApmResourceStatName } from "./ApmResourceStatName"; -import { ApmResourceStatsDataSource } from "./ApmResourceStatsDataSource"; - -/** - * A query for APM resource statistics such as latency, error rate, and hit count, grouped by resource name. - */ -export class ApmResourceStatsQuery { - /** - * A data source for APM resource statistics queries. - */ - "dataSource": ApmResourceStatsDataSource; - /** - * The environment to query. - */ - "env": string; - /** - * Tag keys to group results by. - */ - "groupBy"?: Array; - /** - * The variable name for use in formulas. - */ - "name": string; - /** - * The APM operation name. - */ - "operationName"?: string; - /** - * Name of the second primary tag used within APM. Required when `primary_tag_value` is specified. See https://docs.datadoghq.com/tracing/guide/setting_primary_tags_to_scope/#add-a-second-primary-tag-in-datadog - */ - "primaryTagName"?: string; - /** - * Value of the second primary tag by which to filter APM data. `primary_tag_name` must also be specified. - */ - "primaryTagValue"?: string; - /** - * The resource name to filter by. - */ - "resourceName"?: string; - /** - * The service name to filter by. - */ - "service": string; - /** - * The APM resource statistic to query. - */ - "stat": ApmResourceStatName; - /** - * A container for additional, undeclared properties. - * This is a holder for any undeclared properties as specified with - * the 'additionalProperties' keyword in the OAS document. - */ - "additionalProperties"?: { [key: string]: any }; - /** - * @ignore - */ - "_unparsed"?: boolean; - - /** - * @ignore - */ - static readonly attributeTypeMap: AttributeTypeMap = { - dataSource: { - baseName: "data_source", - type: "ApmResourceStatsDataSource", - required: true, - }, - env: { - baseName: "env", - type: "string", - required: true, - }, - groupBy: { - baseName: "group_by", - type: "Array", - }, - name: { - baseName: "name", - type: "string", - required: true, - }, - operationName: { - baseName: "operation_name", - type: "string", - }, - primaryTagName: { - baseName: "primary_tag_name", - type: "string", - }, - primaryTagValue: { - baseName: "primary_tag_value", - type: "string", - }, - resourceName: { - baseName: "resource_name", - type: "string", - }, - service: { - baseName: "service", - type: "string", - required: true, - }, - stat: { - baseName: "stat", - type: "ApmResourceStatName", - required: true, - }, - additionalProperties: { - baseName: "additionalProperties", - type: "{ [key: string]: any; }", - }, - }; - - /** - * @ignore - */ - static getAttributeTypeMap(): AttributeTypeMap { - return ApmResourceStatsQuery.attributeTypeMap; - } - - public constructor() {} -} diff --git a/services/metrics/src/v2/models/ContainerDataSource.ts b/services/metrics/src/v2/models/ContainerDataSource.ts deleted file mode 100644 index 3c956b6f235c..000000000000 --- a/services/metrics/src/v2/models/ContainerDataSource.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { UnparsedObject } from "@datadog/datadog-api-client"; - -/** - * A data source for container-level infrastructure metrics. - */ -export type ContainerDataSource = typeof CONTAINER | UnparsedObject; -export const CONTAINER = "container"; diff --git a/services/metrics/src/v2/models/ContainerScalarQuery.ts b/services/metrics/src/v2/models/ContainerScalarQuery.ts deleted file mode 100644 index 35c8dde6857b..000000000000 --- a/services/metrics/src/v2/models/ContainerScalarQuery.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { AttributeTypeMap } from "@datadog/datadog-api-client"; - -import { ContainerDataSource } from "./ContainerDataSource"; -import { MetricsAggregator } from "./MetricsAggregator"; -import { QuerySortOrder } from "./QuerySortOrder"; - -/** - * A query for container-level metrics such as CPU and memory usage. - */ -export class ContainerScalarQuery { - /** - * The type of aggregation that can be performed on metrics-based queries. - */ - "aggregator"?: MetricsAggregator; - /** - * A data source for container-level infrastructure metrics. - */ - "dataSource": ContainerDataSource; - /** - * Whether CPU metrics should be normalized by core count. - */ - "isNormalizedCpu"?: boolean; - /** - * Maximum number of results to return. - */ - "limit"?: number; - /** - * The container metric to query. - */ - "metric": string; - /** - * The variable name for use in formulas. - */ - "name": string; - /** - * Direction of sort. - */ - "sort"?: QuerySortOrder; - /** - * Tag filters to narrow down containers. - */ - "tagFilters"?: Array; - /** - * A full-text search filter to match container names. - */ - "textFilter"?: string; - /** - * A container for additional, undeclared properties. - * This is a holder for any undeclared properties as specified with - * the 'additionalProperties' keyword in the OAS document. - */ - "additionalProperties"?: { [key: string]: any }; - /** - * @ignore - */ - "_unparsed"?: boolean; - - /** - * @ignore - */ - static readonly attributeTypeMap: AttributeTypeMap = { - aggregator: { - baseName: "aggregator", - type: "MetricsAggregator", - }, - dataSource: { - baseName: "data_source", - type: "ContainerDataSource", - required: true, - }, - isNormalizedCpu: { - baseName: "is_normalized_cpu", - type: "boolean", - }, - limit: { - baseName: "limit", - type: "number", - format: "int64", - }, - metric: { - baseName: "metric", - type: "string", - required: true, - }, - name: { - baseName: "name", - type: "string", - required: true, - }, - sort: { - baseName: "sort", - type: "QuerySortOrder", - }, - tagFilters: { - baseName: "tag_filters", - type: "Array", - }, - textFilter: { - baseName: "text_filter", - type: "string", - }, - additionalProperties: { - baseName: "additionalProperties", - type: "{ [key: string]: any; }", - }, - }; - - /** - * @ignore - */ - static getAttributeTypeMap(): AttributeTypeMap { - return ContainerScalarQuery.attributeTypeMap; - } - - public constructor() {} -} diff --git a/services/metrics/src/v2/models/ContainerTimeseriesQuery.ts b/services/metrics/src/v2/models/ContainerTimeseriesQuery.ts deleted file mode 100644 index 188ff5edd596..000000000000 --- a/services/metrics/src/v2/models/ContainerTimeseriesQuery.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { AttributeTypeMap } from "@datadog/datadog-api-client"; - -import { ContainerDataSource } from "./ContainerDataSource"; -import { QuerySortOrder } from "./QuerySortOrder"; - -/** - * A query for container-level metrics such as CPU and memory usage. - */ -export class ContainerTimeseriesQuery { - /** - * A data source for container-level infrastructure metrics. - */ - "dataSource": ContainerDataSource; - /** - * Whether CPU metrics should be normalized by core count. - */ - "isNormalizedCpu"?: boolean; - /** - * Maximum number of results to return. - */ - "limit"?: number; - /** - * The container metric to query. - */ - "metric": string; - /** - * The variable name for use in formulas. - */ - "name": string; - /** - * Direction of sort. - */ - "sort"?: QuerySortOrder; - /** - * Tag filters to narrow down containers. - */ - "tagFilters"?: Array; - /** - * A full-text search filter to match container names. - */ - "textFilter"?: string; - /** - * A container for additional, undeclared properties. - * This is a holder for any undeclared properties as specified with - * the 'additionalProperties' keyword in the OAS document. - */ - "additionalProperties"?: { [key: string]: any }; - /** - * @ignore - */ - "_unparsed"?: boolean; - - /** - * @ignore - */ - static readonly attributeTypeMap: AttributeTypeMap = { - dataSource: { - baseName: "data_source", - type: "ContainerDataSource", - required: true, - }, - isNormalizedCpu: { - baseName: "is_normalized_cpu", - type: "boolean", - }, - limit: { - baseName: "limit", - type: "number", - format: "int64", - }, - metric: { - baseName: "metric", - type: "string", - required: true, - }, - name: { - baseName: "name", - type: "string", - required: true, - }, - sort: { - baseName: "sort", - type: "QuerySortOrder", - }, - tagFilters: { - baseName: "tag_filters", - type: "Array", - }, - textFilter: { - baseName: "text_filter", - type: "string", - }, - additionalProperties: { - baseName: "additionalProperties", - type: "{ [key: string]: any; }", - }, - }; - - /** - * @ignore - */ - static getAttributeTypeMap(): AttributeTypeMap { - return ContainerTimeseriesQuery.attributeTypeMap; - } - - public constructor() {} -} diff --git a/services/metrics/src/v2/models/EventsDataSource.ts b/services/metrics/src/v2/models/EventsDataSource.ts index 40436350333c..b90baa1d9c0a 100644 --- a/services/metrics/src/v2/models/EventsDataSource.ts +++ b/services/metrics/src/v2/models/EventsDataSource.ts @@ -5,31 +5,9 @@ import { UnparsedObject } from "@datadog/datadog-api-client"; */ export type EventsDataSource = | typeof LOGS - | typeof SPANS - | typeof NETWORK | typeof RUM - | typeof SECURITY_SIGNALS - | typeof PROFILES - | typeof AUDIT - | typeof EVENTS - | typeof CI_TESTS - | typeof CI_PIPELINES - | typeof INCIDENT_ANALYTICS - | typeof PRODUCT_ANALYTICS - | typeof ON_CALL_EVENTS | typeof DORA | UnparsedObject; export const LOGS = "logs"; -export const SPANS = "spans"; -export const NETWORK = "network"; export const RUM = "rum"; -export const SECURITY_SIGNALS = "security_signals"; -export const PROFILES = "profiles"; -export const AUDIT = "audit"; -export const EVENTS = "events"; -export const CI_TESTS = "ci_tests"; -export const CI_PIPELINES = "ci_pipelines"; -export const INCIDENT_ANALYTICS = "incident_analytics"; -export const PRODUCT_ANALYTICS = "product_analytics"; -export const ON_CALL_EVENTS = "on_call_events"; export const DORA = "dora"; diff --git a/services/metrics/src/v2/models/EventsScalarQuery.ts b/services/metrics/src/v2/models/EventsScalarQuery.ts index e49c1b731fc6..41c9bf6ff303 100644 --- a/services/metrics/src/v2/models/EventsScalarQuery.ts +++ b/services/metrics/src/v2/models/EventsScalarQuery.ts @@ -6,7 +6,7 @@ import { EventsGroupBy } from "./EventsGroupBy"; import { EventsSearch } from "./EventsSearch"; /** - * An individual scalar query for logs, RUM, traces, CI pipelines, security signals, and other event-based data sources. Use this query type for any data source powered by the Events Platform. See the data_source field for the full list of supported sources. + * An individual scalar events query. */ export class EventsScalarQuery { /** diff --git a/services/metrics/src/v2/models/EventsTimeseriesQuery.ts b/services/metrics/src/v2/models/EventsTimeseriesQuery.ts index e4685f43fa25..f7d1fc07807c 100644 --- a/services/metrics/src/v2/models/EventsTimeseriesQuery.ts +++ b/services/metrics/src/v2/models/EventsTimeseriesQuery.ts @@ -6,7 +6,7 @@ import { EventsGroupBy } from "./EventsGroupBy"; import { EventsSearch } from "./EventsSearch"; /** - * An individual timeseries query for logs, RUM, traces, CI pipelines, security signals, and other event-based data sources. Use this query type for any data source powered by the Events Platform. See the data_source field for the full list of supported sources. + * An individual timeseries events query. */ export class EventsTimeseriesQuery { /** diff --git a/services/metrics/src/v2/models/MetricsScalarQuery.ts b/services/metrics/src/v2/models/MetricsScalarQuery.ts index 2e6d912ffbad..df2d8a68013f 100644 --- a/services/metrics/src/v2/models/MetricsScalarQuery.ts +++ b/services/metrics/src/v2/models/MetricsScalarQuery.ts @@ -4,7 +4,7 @@ import { MetricsAggregator } from "./MetricsAggregator"; import { MetricsDataSource } from "./MetricsDataSource"; /** - * A query against Datadog custom metrics or Cloud Cost data sources. + * An individual scalar metrics query. */ export class MetricsScalarQuery { /** diff --git a/services/metrics/src/v2/models/MetricsTimeseriesQuery.ts b/services/metrics/src/v2/models/MetricsTimeseriesQuery.ts index f8f4cfaf8daa..cea0665fef51 100644 --- a/services/metrics/src/v2/models/MetricsTimeseriesQuery.ts +++ b/services/metrics/src/v2/models/MetricsTimeseriesQuery.ts @@ -3,7 +3,7 @@ import { AttributeTypeMap } from "@datadog/datadog-api-client"; import { MetricsDataSource } from "./MetricsDataSource"; /** - * A query against Datadog custom metrics or Cloud Cost data sources. + * An individual timeseries metrics query. */ export class MetricsTimeseriesQuery { /** diff --git a/services/metrics/src/v2/models/ProcessDataSource.ts b/services/metrics/src/v2/models/ProcessDataSource.ts deleted file mode 100644 index 0d3b28115958..000000000000 --- a/services/metrics/src/v2/models/ProcessDataSource.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { UnparsedObject } from "@datadog/datadog-api-client"; - -/** - * A data source for process-level infrastructure metrics. - */ -export type ProcessDataSource = typeof PROCESS | UnparsedObject; -export const PROCESS = "process"; diff --git a/services/metrics/src/v2/models/ProcessScalarQuery.ts b/services/metrics/src/v2/models/ProcessScalarQuery.ts deleted file mode 100644 index 169796cd742d..000000000000 --- a/services/metrics/src/v2/models/ProcessScalarQuery.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { AttributeTypeMap } from "@datadog/datadog-api-client"; - -import { MetricsAggregator } from "./MetricsAggregator"; -import { ProcessDataSource } from "./ProcessDataSource"; -import { QuerySortOrder } from "./QuerySortOrder"; - -/** - * A query for host-level process metrics such as CPU and memory usage. - */ -export class ProcessScalarQuery { - /** - * The type of aggregation that can be performed on metrics-based queries. - */ - "aggregator"?: MetricsAggregator; - /** - * A data source for process-level infrastructure metrics. - */ - "dataSource": ProcessDataSource; - /** - * Whether CPU metrics should be normalized by core count. - */ - "isNormalizedCpu"?: boolean; - /** - * Maximum number of results to return. - */ - "limit"?: number; - /** - * The process metric to query. - */ - "metric": string; - /** - * The variable name for use in formulas. - */ - "name": string; - /** - * Direction of sort. - */ - "sort"?: QuerySortOrder; - /** - * Tag filters to narrow down processes. - */ - "tagFilters"?: Array; - /** - * A full-text search filter to match process names or commands. - */ - "textFilter"?: string; - /** - * A container for additional, undeclared properties. - * This is a holder for any undeclared properties as specified with - * the 'additionalProperties' keyword in the OAS document. - */ - "additionalProperties"?: { [key: string]: any }; - /** - * @ignore - */ - "_unparsed"?: boolean; - - /** - * @ignore - */ - static readonly attributeTypeMap: AttributeTypeMap = { - aggregator: { - baseName: "aggregator", - type: "MetricsAggregator", - }, - dataSource: { - baseName: "data_source", - type: "ProcessDataSource", - required: true, - }, - isNormalizedCpu: { - baseName: "is_normalized_cpu", - type: "boolean", - }, - limit: { - baseName: "limit", - type: "number", - format: "int64", - }, - metric: { - baseName: "metric", - type: "string", - required: true, - }, - name: { - baseName: "name", - type: "string", - required: true, - }, - sort: { - baseName: "sort", - type: "QuerySortOrder", - }, - tagFilters: { - baseName: "tag_filters", - type: "Array", - }, - textFilter: { - baseName: "text_filter", - type: "string", - }, - additionalProperties: { - baseName: "additionalProperties", - type: "{ [key: string]: any; }", - }, - }; - - /** - * @ignore - */ - static getAttributeTypeMap(): AttributeTypeMap { - return ProcessScalarQuery.attributeTypeMap; - } - - public constructor() {} -} diff --git a/services/metrics/src/v2/models/ProcessTimeseriesQuery.ts b/services/metrics/src/v2/models/ProcessTimeseriesQuery.ts deleted file mode 100644 index bbed298c2466..000000000000 --- a/services/metrics/src/v2/models/ProcessTimeseriesQuery.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { AttributeTypeMap } from "@datadog/datadog-api-client"; - -import { ProcessDataSource } from "./ProcessDataSource"; -import { QuerySortOrder } from "./QuerySortOrder"; - -/** - * A query for host-level process metrics such as CPU and memory usage. - */ -export class ProcessTimeseriesQuery { - /** - * A data source for process-level infrastructure metrics. - */ - "dataSource": ProcessDataSource; - /** - * Whether CPU metrics should be normalized by core count. - */ - "isNormalizedCpu"?: boolean; - /** - * Maximum number of results to return. - */ - "limit"?: number; - /** - * The process metric to query. - */ - "metric": string; - /** - * The variable name for use in formulas. - */ - "name": string; - /** - * Direction of sort. - */ - "sort"?: QuerySortOrder; - /** - * Tag filters to narrow down processes. - */ - "tagFilters"?: Array; - /** - * A full-text search filter to match process names or commands. - */ - "textFilter"?: string; - /** - * A container for additional, undeclared properties. - * This is a holder for any undeclared properties as specified with - * the 'additionalProperties' keyword in the OAS document. - */ - "additionalProperties"?: { [key: string]: any }; - /** - * @ignore - */ - "_unparsed"?: boolean; - - /** - * @ignore - */ - static readonly attributeTypeMap: AttributeTypeMap = { - dataSource: { - baseName: "data_source", - type: "ProcessDataSource", - required: true, - }, - isNormalizedCpu: { - baseName: "is_normalized_cpu", - type: "boolean", - }, - limit: { - baseName: "limit", - type: "number", - format: "int64", - }, - metric: { - baseName: "metric", - type: "string", - required: true, - }, - name: { - baseName: "name", - type: "string", - required: true, - }, - sort: { - baseName: "sort", - type: "QuerySortOrder", - }, - tagFilters: { - baseName: "tag_filters", - type: "Array", - }, - textFilter: { - baseName: "text_filter", - type: "string", - }, - additionalProperties: { - baseName: "additionalProperties", - type: "{ [key: string]: any; }", - }, - }; - - /** - * @ignore - */ - static getAttributeTypeMap(): AttributeTypeMap { - return ProcessTimeseriesQuery.attributeTypeMap; - } - - public constructor() {} -} diff --git a/services/metrics/src/v2/models/ScalarQuery.ts b/services/metrics/src/v2/models/ScalarQuery.ts index 2fd29d848c98..788fdb502e75 100644 --- a/services/metrics/src/v2/models/ScalarQuery.ts +++ b/services/metrics/src/v2/models/ScalarQuery.ts @@ -1,13 +1,7 @@ import { UnparsedObject } from "@datadog/datadog-api-client"; -import { ApmDependencyStatsQuery } from "./ApmDependencyStatsQuery"; -import { ApmMetricsQuery } from "./ApmMetricsQuery"; -import { ApmResourceStatsQuery } from "./ApmResourceStatsQuery"; -import { ContainerScalarQuery } from "./ContainerScalarQuery"; import { EventsScalarQuery } from "./EventsScalarQuery"; import { MetricsScalarQuery } from "./MetricsScalarQuery"; -import { ProcessScalarQuery } from "./ProcessScalarQuery"; -import { SloQuery } from "./SloQuery"; /** * An individual scalar query to one of the basic Datadog data sources. @@ -15,10 +9,4 @@ import { SloQuery } from "./SloQuery"; export type ScalarQuery = | MetricsScalarQuery | EventsScalarQuery - | ApmResourceStatsQuery - | ApmMetricsQuery - | ApmDependencyStatsQuery - | SloQuery - | ProcessScalarQuery - | ContainerScalarQuery | UnparsedObject; diff --git a/services/metrics/src/v2/models/SloDataSource.ts b/services/metrics/src/v2/models/SloDataSource.ts deleted file mode 100644 index b8b9bb7ecaf3..000000000000 --- a/services/metrics/src/v2/models/SloDataSource.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { UnparsedObject } from "@datadog/datadog-api-client"; - -/** - * A data source for SLO queries. - */ -export type SloDataSource = typeof SLO | UnparsedObject; -export const SLO = "slo"; diff --git a/services/metrics/src/v2/models/SloQuery.ts b/services/metrics/src/v2/models/SloQuery.ts deleted file mode 100644 index 7769ff7be6d5..000000000000 --- a/services/metrics/src/v2/models/SloQuery.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { AttributeTypeMap } from "@datadog/datadog-api-client"; - -import { SloDataSource } from "./SloDataSource"; -import { SlosGroupMode } from "./SlosGroupMode"; -import { SlosMeasure } from "./SlosMeasure"; -import { SlosQueryType } from "./SlosQueryType"; - -/** - * A query for SLO status, error budget, and burn rate metrics. - */ -export class SloQuery { - /** - * Additional filters applied to the SLO query. - */ - "additionalQueryFilters"?: string; - /** - * A data source for SLO queries. - */ - "dataSource": SloDataSource; - /** - * How SLO results are grouped in the response. - */ - "groupMode"?: SlosGroupMode; - /** - * The SLO measurement to retrieve. - */ - "measure": SlosMeasure; - /** - * The variable name for use in formulas. - */ - "name"?: string; - /** - * The unique identifier of the SLO to query. - */ - "sloId": string; - /** - * The type of SLO definition being queried. - */ - "sloQueryType"?: SlosQueryType; - /** - * A container for additional, undeclared properties. - * This is a holder for any undeclared properties as specified with - * the 'additionalProperties' keyword in the OAS document. - */ - "additionalProperties"?: { [key: string]: any }; - /** - * @ignore - */ - "_unparsed"?: boolean; - - /** - * @ignore - */ - static readonly attributeTypeMap: AttributeTypeMap = { - additionalQueryFilters: { - baseName: "additional_query_filters", - type: "string", - }, - dataSource: { - baseName: "data_source", - type: "SloDataSource", - required: true, - }, - groupMode: { - baseName: "group_mode", - type: "SlosGroupMode", - }, - measure: { - baseName: "measure", - type: "SlosMeasure", - required: true, - }, - name: { - baseName: "name", - type: "string", - }, - sloId: { - baseName: "slo_id", - type: "string", - required: true, - }, - sloQueryType: { - baseName: "slo_query_type", - type: "SlosQueryType", - }, - additionalProperties: { - baseName: "additionalProperties", - type: "{ [key: string]: any; }", - }, - }; - - /** - * @ignore - */ - static getAttributeTypeMap(): AttributeTypeMap { - return SloQuery.attributeTypeMap; - } - - public constructor() {} -} diff --git a/services/metrics/src/v2/models/SlosGroupMode.ts b/services/metrics/src/v2/models/SlosGroupMode.ts deleted file mode 100644 index 539642f724a3..000000000000 --- a/services/metrics/src/v2/models/SlosGroupMode.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { UnparsedObject } from "@datadog/datadog-api-client"; - -/** - * How SLO results are grouped in the response. - */ -export type SlosGroupMode = typeof OVERALL | typeof COMPONENTS | UnparsedObject; -export const OVERALL = "overall"; -export const COMPONENTS = "components"; diff --git a/services/metrics/src/v2/models/SlosMeasure.ts b/services/metrics/src/v2/models/SlosMeasure.ts deleted file mode 100644 index 692efad183d8..000000000000 --- a/services/metrics/src/v2/models/SlosMeasure.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { UnparsedObject } from "@datadog/datadog-api-client"; - -/** - * The SLO measurement to retrieve. - */ -export type SlosMeasure = - | typeof GOOD_EVENTS - | typeof BAD_EVENTS - | typeof SLO_STATUS - | typeof ERROR_BUDGET_REMAINING - | typeof ERROR_BUDGET_REMAINING_HISTORY - | typeof ERROR_BUDGET_BURNDOWN - | typeof BURN_RATE - | typeof SLO_STATUS_HISTORY - | typeof GOOD_MINUTES - | typeof BAD_MINUTES - | UnparsedObject; -export const GOOD_EVENTS = "good_events"; -export const BAD_EVENTS = "bad_events"; -export const SLO_STATUS = "slo_status"; -export const ERROR_BUDGET_REMAINING = "error_budget_remaining"; -export const ERROR_BUDGET_REMAINING_HISTORY = "error_budget_remaining_history"; -export const ERROR_BUDGET_BURNDOWN = "error_budget_burndown"; -export const BURN_RATE = "burn_rate"; -export const SLO_STATUS_HISTORY = "slo_status_history"; -export const GOOD_MINUTES = "good_minutes"; -export const BAD_MINUTES = "bad_minutes"; diff --git a/services/metrics/src/v2/models/SlosQueryType.ts b/services/metrics/src/v2/models/SlosQueryType.ts deleted file mode 100644 index e3336fea45bf..000000000000 --- a/services/metrics/src/v2/models/SlosQueryType.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { UnparsedObject } from "@datadog/datadog-api-client"; - -/** - * The type of SLO definition being queried. - */ -export type SlosQueryType = - | typeof METRIC - | typeof TIME_SLICE - | typeof MONITOR - | UnparsedObject; -export const METRIC = "metric"; -export const TIME_SLICE = "time_slice"; -export const MONITOR = "monitor"; diff --git a/services/metrics/src/v2/models/TimeseriesQuery.ts b/services/metrics/src/v2/models/TimeseriesQuery.ts index 7a5c6343e34c..6d7b19552001 100644 --- a/services/metrics/src/v2/models/TimeseriesQuery.ts +++ b/services/metrics/src/v2/models/TimeseriesQuery.ts @@ -1,13 +1,7 @@ import { UnparsedObject } from "@datadog/datadog-api-client"; -import { ApmDependencyStatsQuery } from "./ApmDependencyStatsQuery"; -import { ApmMetricsQuery } from "./ApmMetricsQuery"; -import { ApmResourceStatsQuery } from "./ApmResourceStatsQuery"; -import { ContainerTimeseriesQuery } from "./ContainerTimeseriesQuery"; import { EventsTimeseriesQuery } from "./EventsTimeseriesQuery"; import { MetricsTimeseriesQuery } from "./MetricsTimeseriesQuery"; -import { ProcessTimeseriesQuery } from "./ProcessTimeseriesQuery"; -import { SloQuery } from "./SloQuery"; /** * An individual timeseries query to one of the basic Datadog data sources. @@ -15,10 +9,4 @@ import { SloQuery } from "./SloQuery"; export type TimeseriesQuery = | MetricsTimeseriesQuery | EventsTimeseriesQuery - | ApmResourceStatsQuery - | ApmMetricsQuery - | ApmDependencyStatsQuery - | SloQuery - | ProcessTimeseriesQuery - | ContainerTimeseriesQuery | UnparsedObject; diff --git a/services/metrics/src/v2/models/TypingInfo.ts b/services/metrics/src/v2/models/TypingInfo.ts index 61ec136c484b..a0f7319ca642 100644 --- a/services/metrics/src/v2/models/TypingInfo.ts +++ b/services/metrics/src/v2/models/TypingInfo.ts @@ -1,11 +1,6 @@ import { ModelTypingInfo } from "@datadog/datadog-api-client"; import { APIErrorResponse } from "./APIErrorResponse"; -import { ApmDependencyStatsQuery } from "./ApmDependencyStatsQuery"; -import { ApmMetricsQuery } from "./ApmMetricsQuery"; -import { ApmResourceStatsQuery } from "./ApmResourceStatsQuery"; -import { ContainerScalarQuery } from "./ContainerScalarQuery"; -import { ContainerTimeseriesQuery } from "./ContainerTimeseriesQuery"; import { DataScalarColumn } from "./DataScalarColumn"; import { EventsCompute } from "./EventsCompute"; import { EventsGroupBy } from "./EventsGroupBy"; @@ -86,8 +81,6 @@ import { MetricsAndMetricTagConfigurationsResponse } from "./MetricsAndMetricTag import { MetricsListResponseLinks } from "./MetricsListResponseLinks"; import { MetricsScalarQuery } from "./MetricsScalarQuery"; import { MetricsTimeseriesQuery } from "./MetricsTimeseriesQuery"; -import { ProcessScalarQuery } from "./ProcessScalarQuery"; -import { ProcessTimeseriesQuery } from "./ProcessTimeseriesQuery"; import { QueryFormula } from "./QueryFormula"; import { ScalarFormulaQueryRequest } from "./ScalarFormulaQueryRequest"; import { ScalarFormulaQueryResponse } from "./ScalarFormulaQueryResponse"; @@ -96,7 +89,6 @@ import { ScalarFormulaRequestAttributes } from "./ScalarFormulaRequestAttributes import { ScalarFormulaResponseAtrributes } from "./ScalarFormulaResponseAtrributes"; import { ScalarMeta } from "./ScalarMeta"; import { ScalarResponse } from "./ScalarResponse"; -import { SloQuery } from "./SloQuery"; import { TimeseriesFormulaQueryRequest } from "./TimeseriesFormulaQueryRequest"; import { TimeseriesFormulaQueryResponse } from "./TimeseriesFormulaQueryResponse"; import { TimeseriesFormulaRequest } from "./TimeseriesFormulaRequest"; @@ -108,58 +100,6 @@ import { Unit } from "./Unit"; export const TypingInfo: ModelTypingInfo = { enumsMap: { - ApmDependencyStatName: [ - "avg_duration", - "avg_root_duration", - "avg_spans_per_trace", - "error_rate", - "pct_exec_time", - "pct_of_traces", - "total_traces_count", - ], - ApmDependencyStatsDataSource: ["apm_dependency_stats"], - ApmMetricsDataSource: ["apm_metrics"], - ApmMetricsSpanKind: [ - "consumer", - "server", - "client", - "producer", - "internal", - ], - ApmMetricsStat: [ - "error_rate", - "errors", - "errors_per_second", - "hits", - "hits_per_second", - "apdex", - "latency_avg", - "latency_max", - "latency_p50", - "latency_p75", - "latency_p90", - "latency_p95", - "latency_p99", - "latency_p999", - "latency_distribution", - "total_time", - ], - ApmResourceStatName: [ - "error_rate", - "errors", - "hits", - "latency_avg", - "latency_max", - "latency_p50", - "latency_p75", - "latency_p90", - "latency_p95", - "latency_p99", - "latency_distribution", - "total_time", - ], - ApmResourceStatsDataSource: ["apm_resource_stats"], - ContainerDataSource: ["container"], EventsAggregation: [ "count", "cardinality", @@ -173,22 +113,7 @@ export const TypingInfo: ModelTypingInfo = { "max", "avg", ], - EventsDataSource: [ - "logs", - "spans", - "network", - "rum", - "security_signals", - "profiles", - "audit", - "events", - "ci_tests", - "ci_pipelines", - "incident_analytics", - "product_analytics", - "on_call_events", - "dora", - ], + EventsDataSource: ["logs", "rum", "dora"], EventsSortType: ["alphabetical", "measure"], MetricActiveConfigurationType: ["actively_queried_configurations"], MetricBulkConfigureTagsType: ["metric_bulk_configure_tags"], @@ -229,27 +154,11 @@ export const TypingInfo: ModelTypingInfo = { "area", ], MetricsDataSource: ["metrics", "cloud_cost"], - ProcessDataSource: ["process"], QuerySortOrder: ["asc", "desc"], ScalarColumnTypeGroup: ["group"], ScalarColumnTypeNumber: ["number"], ScalarFormulaRequestType: ["scalar_request"], ScalarFormulaResponseType: ["scalar_response"], - SloDataSource: ["slo"], - SlosGroupMode: ["overall", "components"], - SlosMeasure: [ - "good_events", - "bad_events", - "slo_status", - "error_budget_remaining", - "error_budget_remaining_history", - "error_budget_burndown", - "burn_rate", - "slo_status_history", - "good_minutes", - "bad_minutes", - ], - SlosQueryType: ["metric", "time_slice", "monitor"], TimeseriesFormulaRequestType: ["timeseries_request"], TimeseriesFormulaResponseType: ["timeseries_response"], }, @@ -263,34 +172,11 @@ export const TypingInfo: ModelTypingInfo = { MetricVolumes: ["MetricDistinctVolume", "MetricIngestedIndexedVolume"], MetricsAndMetricTagConfigurations: ["Metric", "MetricTagConfiguration"], ScalarColumn: ["GroupScalarColumn", "DataScalarColumn"], - ScalarQuery: [ - "MetricsScalarQuery", - "EventsScalarQuery", - "ApmResourceStatsQuery", - "ApmMetricsQuery", - "ApmDependencyStatsQuery", - "SloQuery", - "ProcessScalarQuery", - "ContainerScalarQuery", - ], - TimeseriesQuery: [ - "MetricsTimeseriesQuery", - "EventsTimeseriesQuery", - "ApmResourceStatsQuery", - "ApmMetricsQuery", - "ApmDependencyStatsQuery", - "SloQuery", - "ProcessTimeseriesQuery", - "ContainerTimeseriesQuery", - ], + ScalarQuery: ["MetricsScalarQuery", "EventsScalarQuery"], + TimeseriesQuery: ["MetricsTimeseriesQuery", "EventsTimeseriesQuery"], }, typeMap: { APIErrorResponse: APIErrorResponse, - ApmDependencyStatsQuery: ApmDependencyStatsQuery, - ApmMetricsQuery: ApmMetricsQuery, - ApmResourceStatsQuery: ApmResourceStatsQuery, - ContainerScalarQuery: ContainerScalarQuery, - ContainerTimeseriesQuery: ContainerTimeseriesQuery, DataScalarColumn: DataScalarColumn, EventsCompute: EventsCompute, EventsGroupBy: EventsGroupBy, @@ -376,8 +262,6 @@ export const TypingInfo: ModelTypingInfo = { MetricsListResponseLinks: MetricsListResponseLinks, MetricsScalarQuery: MetricsScalarQuery, MetricsTimeseriesQuery: MetricsTimeseriesQuery, - ProcessScalarQuery: ProcessScalarQuery, - ProcessTimeseriesQuery: ProcessTimeseriesQuery, QueryFormula: QueryFormula, ScalarFormulaQueryRequest: ScalarFormulaQueryRequest, ScalarFormulaQueryResponse: ScalarFormulaQueryResponse, @@ -386,7 +270,6 @@ export const TypingInfo: ModelTypingInfo = { ScalarFormulaResponseAtrributes: ScalarFormulaResponseAtrributes, ScalarMeta: ScalarMeta, ScalarResponse: ScalarResponse, - SloQuery: SloQuery, TimeseriesFormulaQueryRequest: TimeseriesFormulaQueryRequest, TimeseriesFormulaQueryResponse: TimeseriesFormulaQueryResponse, TimeseriesFormulaRequest: TimeseriesFormulaRequest,