From 471745fff31601b881470fad095b4f84d3d085b4 Mon Sep 17 00:00:00 2001 From: Ashwin Bharambe Date: Tue, 6 May 2025 17:10:52 -0700 Subject: [PATCH] get_metrics -> query_metrics --- docs/_static/llama-stack-spec.html | 378 +++++++++--------- docs/_static/llama-stack-spec.yaml | 264 ++++++------ llama_stack/apis/telemetry/telemetry.py | 6 +- .../telemetry/meta_reference/telemetry.py | 14 +- 4 files changed, 331 insertions(+), 331 deletions(-) diff --git a/docs/_static/llama-stack-spec.html b/docs/_static/llama-stack-spec.html index 09c241b2c..8e586c573 100644 --- a/docs/_static/llama-stack-spec.html +++ b/docs/_static/llama-stack-spec.html @@ -1251,58 +1251,6 @@ ] } }, - "/v1/telemetry/metrics/{metric_name}": { - "post": { - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetMetricsResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest400" - }, - "429": { - "$ref": "#/components/responses/TooManyRequests429" - }, - "500": { - "$ref": "#/components/responses/InternalServerError500" - }, - "default": { - "$ref": "#/components/responses/DefaultError" - } - }, - "tags": [ - "Telemetry" - ], - "description": "", - "parameters": [ - { - "name": "metric_name", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetMetricsRequest" - } - } - }, - "required": true - } - } - }, "/v1/models/{model_id}": { "get": { "responses": { @@ -3490,6 +3438,58 @@ } } }, + "/v1/telemetry/metrics/{metric_name}": { + "post": { + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueryMetricsResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest400" + }, + "429": { + "$ref": "#/components/responses/TooManyRequests429" + }, + "500": { + "$ref": "#/components/responses/InternalServerError500" + }, + "default": { + "$ref": "#/components/responses/DefaultError" + } + }, + "tags": [ + "Telemetry" + ], + "description": "", + "parameters": [ + { + "name": "metric_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueryMetricsRequest" + } + } + }, + "required": true + } + } + }, "/v1/telemetry/spans": { "post": { "responses": { @@ -7611,143 +7611,6 @@ "title": "FileResponse", "description": "Response representing a file entry." }, - "GetMetricsRequest": { - "type": "object", - "properties": { - "start_time": { - "type": "integer" - }, - "end_time": { - "type": "integer" - }, - "granularity": { - "type": "string" - }, - "query_type": { - "type": "string", - "enum": [ - "range", - "instant" - ], - "title": "MetricQueryType" - }, - "label_matchers": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "operator": { - "type": "string", - "enum": [ - "=", - "!=", - "=~", - "!~" - ], - "title": "MetricLabelOperator", - "default": "=" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value", - "operator" - ], - "title": "MetricLabelMatcher" - } - } - }, - "additionalProperties": false, - "required": [ - "start_time", - "query_type" - ], - "title": "GetMetricsRequest" - }, - "MetricDataPoint": { - "type": "object", - "properties": { - "timestamp": { - "type": "integer" - }, - "value": { - "type": "number" - } - }, - "additionalProperties": false, - "required": [ - "timestamp", - "value" - ], - "title": "MetricDataPoint" - }, - "MetricLabel": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ], - "title": "MetricLabel" - }, - "MetricSeries": { - "type": "object", - "properties": { - "metric": { - "type": "string" - }, - "labels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MetricLabel" - } - }, - "values": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MetricDataPoint" - } - } - }, - "additionalProperties": false, - "required": [ - "metric", - "labels", - "values" - ], - "title": "MetricSeries" - }, - "GetMetricsResponse": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MetricSeries" - } - } - }, - "additionalProperties": false, - "required": [ - "data" - ], - "title": "GetMetricsResponse" - }, "Model": { "type": "object", "properties": { @@ -11249,6 +11112,143 @@ ], "title": "QueryChunksResponse" }, + "QueryMetricsRequest": { + "type": "object", + "properties": { + "start_time": { + "type": "integer" + }, + "end_time": { + "type": "integer" + }, + "granularity": { + "type": "string" + }, + "query_type": { + "type": "string", + "enum": [ + "range", + "instant" + ], + "title": "MetricQueryType" + }, + "label_matchers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + }, + "operator": { + "type": "string", + "enum": [ + "=", + "!=", + "=~", + "!~" + ], + "title": "MetricLabelOperator", + "default": "=" + } + }, + "additionalProperties": false, + "required": [ + "name", + "value", + "operator" + ], + "title": "MetricLabelMatcher" + } + } + }, + "additionalProperties": false, + "required": [ + "start_time", + "query_type" + ], + "title": "QueryMetricsRequest" + }, + "MetricDataPoint": { + "type": "object", + "properties": { + "timestamp": { + "type": "integer" + }, + "value": { + "type": "number" + } + }, + "additionalProperties": false, + "required": [ + "timestamp", + "value" + ], + "title": "MetricDataPoint" + }, + "MetricLabel": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "name", + "value" + ], + "title": "MetricLabel" + }, + "MetricSeries": { + "type": "object", + "properties": { + "metric": { + "type": "string" + }, + "labels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MetricLabel" + } + }, + "values": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MetricDataPoint" + } + } + }, + "additionalProperties": false, + "required": [ + "metric", + "labels", + "values" + ], + "title": "MetricSeries" + }, + "QueryMetricsResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MetricSeries" + } + } + }, + "additionalProperties": false, + "required": [ + "data" + ], + "title": "QueryMetricsResponse" + }, "QueryCondition": { "type": "object", "properties": { diff --git a/docs/_static/llama-stack-spec.yaml b/docs/_static/llama-stack-spec.yaml index ad51dc40a..6900316e2 100644 --- a/docs/_static/llama-stack-spec.yaml +++ b/docs/_static/llama-stack-spec.yaml @@ -857,40 +857,6 @@ paths: required: true schema: type: string - /v1/telemetry/metrics/{metric_name}: - post: - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/GetMetricsResponse' - '400': - $ref: '#/components/responses/BadRequest400' - '429': - $ref: >- - #/components/responses/TooManyRequests429 - '500': - $ref: >- - #/components/responses/InternalServerError500 - default: - $ref: '#/components/responses/DefaultError' - tags: - - Telemetry - description: '' - parameters: - - name: metric_name - in: path - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/GetMetricsRequest' - required: true /v1/models/{model_id}: get: responses: @@ -2405,6 +2371,40 @@ paths: schema: $ref: '#/components/schemas/QueryChunksRequest' required: true + /v1/telemetry/metrics/{metric_name}: + post: + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/QueryMetricsResponse' + '400': + $ref: '#/components/responses/BadRequest400' + '429': + $ref: >- + #/components/responses/TooManyRequests429 + '500': + $ref: >- + #/components/responses/InternalServerError500 + default: + $ref: '#/components/responses/DefaultError' + tags: + - Telemetry + description: '' + parameters: + - name: metric_name + in: path + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/QueryMetricsRequest' + required: true /v1/telemetry/spans: post: responses: @@ -5307,104 +5307,6 @@ components: - created_at title: FileResponse description: Response representing a file entry. - GetMetricsRequest: - type: object - properties: - start_time: - type: integer - end_time: - type: integer - granularity: - type: string - query_type: - type: string - enum: - - range - - instant - title: MetricQueryType - label_matchers: - type: array - items: - type: object - properties: - name: - type: string - value: - type: string - operator: - type: string - enum: - - '=' - - '!=' - - =~ - - '!~' - title: MetricLabelOperator - default: '=' - additionalProperties: false - required: - - name - - value - - operator - title: MetricLabelMatcher - additionalProperties: false - required: - - start_time - - query_type - title: GetMetricsRequest - MetricDataPoint: - type: object - properties: - timestamp: - type: integer - value: - type: number - additionalProperties: false - required: - - timestamp - - value - title: MetricDataPoint - MetricLabel: - type: object - properties: - name: - type: string - value: - type: string - additionalProperties: false - required: - - name - - value - title: MetricLabel - MetricSeries: - type: object - properties: - metric: - type: string - labels: - type: array - items: - $ref: '#/components/schemas/MetricLabel' - values: - type: array - items: - $ref: '#/components/schemas/MetricDataPoint' - additionalProperties: false - required: - - metric - - labels - - values - title: MetricSeries - GetMetricsResponse: - type: object - properties: - data: - type: array - items: - $ref: '#/components/schemas/MetricSeries' - additionalProperties: false - required: - - data - title: GetMetricsResponse Model: type: object properties: @@ -7711,6 +7613,104 @@ components: - chunks - scores title: QueryChunksResponse + QueryMetricsRequest: + type: object + properties: + start_time: + type: integer + end_time: + type: integer + granularity: + type: string + query_type: + type: string + enum: + - range + - instant + title: MetricQueryType + label_matchers: + type: array + items: + type: object + properties: + name: + type: string + value: + type: string + operator: + type: string + enum: + - '=' + - '!=' + - =~ + - '!~' + title: MetricLabelOperator + default: '=' + additionalProperties: false + required: + - name + - value + - operator + title: MetricLabelMatcher + additionalProperties: false + required: + - start_time + - query_type + title: QueryMetricsRequest + MetricDataPoint: + type: object + properties: + timestamp: + type: integer + value: + type: number + additionalProperties: false + required: + - timestamp + - value + title: MetricDataPoint + MetricLabel: + type: object + properties: + name: + type: string + value: + type: string + additionalProperties: false + required: + - name + - value + title: MetricLabel + MetricSeries: + type: object + properties: + metric: + type: string + labels: + type: array + items: + $ref: '#/components/schemas/MetricLabel' + values: + type: array + items: + $ref: '#/components/schemas/MetricDataPoint' + additionalProperties: false + required: + - metric + - labels + - values + title: MetricSeries + QueryMetricsResponse: + type: object + properties: + data: + type: array + items: + $ref: '#/components/schemas/MetricSeries' + additionalProperties: false + required: + - data + title: QueryMetricsResponse QueryCondition: type: object properties: diff --git a/llama_stack/apis/telemetry/telemetry.py b/llama_stack/apis/telemetry/telemetry.py index 35cb4875b..337609b6e 100644 --- a/llama_stack/apis/telemetry/telemetry.py +++ b/llama_stack/apis/telemetry/telemetry.py @@ -240,7 +240,7 @@ class MetricSeries(BaseModel): values: list[MetricDataPoint] -class GetMetricsResponse(BaseModel): +class QueryMetricsResponse(BaseModel): data: list[MetricSeries] @@ -290,7 +290,7 @@ class Telemetry(Protocol): ) -> None: ... @webmethod(route="/telemetry/metrics/{metric_name}", method="POST") - async def get_metrics( + async def query_metrics( self, metric_name: str, start_time: int, @@ -298,4 +298,4 @@ class Telemetry(Protocol): granularity: str | None = "1d", query_type: MetricQueryType = MetricQueryType.RANGE, label_matchers: list[MetricLabelMatcher] | None = None, - ) -> GetMetricsResponse: ... + ) -> QueryMetricsResponse: ... diff --git a/llama_stack/providers/inline/telemetry/meta_reference/telemetry.py b/llama_stack/providers/inline/telemetry/meta_reference/telemetry.py index 1e7f9a40e..1b660e3fb 100644 --- a/llama_stack/providers/inline/telemetry/meta_reference/telemetry.py +++ b/llama_stack/providers/inline/telemetry/meta_reference/telemetry.py @@ -19,11 +19,11 @@ from opentelemetry.semconv.resource import ResourceAttributes from llama_stack.apis.telemetry import ( Event, - GetMetricsResponse, MetricEvent, MetricLabelMatcher, MetricQueryType, QueryCondition, + QueryMetricsResponse, QuerySpanTreeResponse, QueryTracesResponse, Span, @@ -126,16 +126,16 @@ class TelemetryAdapter(TelemetryDatasetMixin, Telemetry): else: raise ValueError(f"Unknown event type: {event}") - async def get_metrics( + async def query_metrics( self, metric_name: str, start_time: int, - end_time: Optional[int] = None, - step: Optional[str] = "1d", + end_time: int | None = None, + step: str | None = "1d", query_type: MetricQueryType = MetricQueryType.RANGE, - label_matchers: Optional[List[MetricLabelMatcher]] = None, - ) -> GetMetricsResponse: - pass + label_matchers: list[MetricLabelMatcher] | None = None, + ) -> QueryMetricsResponse: + raise NotImplementedError("Querying metrics is not implemented") def _log_unstructured(self, event: UnstructuredLogEvent, ttl_seconds: int) -> None: with self._lock: