Skip to content

Commit 3577a3a

Browse files
authored
metrics: change get_metrics to query_metrics (#25)
* metrics: change get_metrics to query_metrics "get_metrics" called not Get metric metadata (api/v1/metrics/{metric_name}). Changed to correspond to the official API Reference. ref: https://docs.datadoghq.com/api/latest/metrics/#query-timeseries-points Signed-off-by: Koichi Shiraishi <[email protected]> * metric: fix testcase as well Signed-off-by: Koichi Shiraishi <[email protected]> --------- Signed-off-by: Koichi Shiraishi <[email protected]>
1 parent 4b120cf commit 3577a3a

File tree

3 files changed

+26
-20
lines changed

3 files changed

+26
-20
lines changed

src/tools/metrics/schema.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
import { z } from 'zod'
22

3-
export const GetMetricsZodSchema = z.object({
4-
from: z.number().describe('Start time in epoch seconds'),
5-
to: z.number().describe('End time in epoch seconds'),
3+
export const QueryMetricsZodSchema = z.object({
4+
from: z
5+
.number()
6+
.describe(
7+
'Start of the queried time period, seconds since the Unix epoch.',
8+
),
9+
to: z
10+
.number()
11+
.describe('End of the queried time period, seconds since the Unix epoch.'),
612
query: z
713
.string()
814
.describe('Datadog metrics query string. e.g. "avg:system.cpu.user{*}'),
915
})
1016

11-
export type GetMetricsArgs = z.infer<typeof GetMetricsZodSchema>
17+
export type QueryMetricsArgs = z.infer<typeof QueryMetricsZodSchema>

src/tools/metrics/tool.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
import { ExtendedTool, ToolHandlers } from '../../utils/types'
22
import { v1 } from '@datadog/datadog-api-client'
33
import { createToolSchema } from '../../utils/tool'
4-
import { GetMetricsZodSchema } from './schema'
4+
import { QueryMetricsZodSchema } from './schema'
55

6-
type MetricsToolName = 'get_metrics'
6+
type MetricsToolName = 'query_metrics'
77
type MetricsTool = ExtendedTool<MetricsToolName>
88

99
export const METRICS_TOOLS: MetricsTool[] = [
1010
createToolSchema(
11-
GetMetricsZodSchema,
12-
'get_metrics',
13-
'Get metrics data from Datadog',
11+
QueryMetricsZodSchema,
12+
'query_metrics',
13+
'Query timeseries points of metrics from Datadog',
1414
),
1515
] as const
1616

@@ -20,8 +20,8 @@ export const createMetricsToolHandlers = (
2020
apiInstance: v1.MetricsApi,
2121
): MetricsToolHandlers => {
2222
return {
23-
get_metrics: async (request) => {
24-
const { from, to, query } = GetMetricsZodSchema.parse(
23+
query_metrics: async (request) => {
24+
const { from, to, query } = QueryMetricsZodSchema.parse(
2525
request.params.arguments,
2626
)
2727

@@ -35,7 +35,7 @@ export const createMetricsToolHandlers = (
3535
content: [
3636
{
3737
type: 'text',
38-
text: `Metrics data: ${JSON.stringify({ response })}`,
38+
text: `Queried metrics data: ${JSON.stringify({ response })}`,
3939
},
4040
],
4141
}

tests/tools/metrics.test.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,11 @@ describe('Metrics Tool', () => {
8686
to: 1641095000,
8787
query: 'avg:system.cpu.user{*}',
8888
})
89-
const response = (await toolHandlers.get_metrics(
89+
const response = (await toolHandlers.query_metrics(
9090
request,
9191
)) as unknown as DatadogToolResponse
9292

93-
expect(response.content[0].text).toContain('Metrics data:')
93+
expect(response.content[0].text).toContain('Queried metrics data:')
9494
expect(response.content[0].text).toContain('system.cpu.user')
9595
expect(response.content[0].text).toContain('host:web-01')
9696
expect(response.content[0].text).toContain('host:web-02')
@@ -119,11 +119,11 @@ describe('Metrics Tool', () => {
119119
to: 1641095000,
120120
query: 'avg:non.existent.metric{*}',
121121
})
122-
const response = (await toolHandlers.get_metrics(
122+
const response = (await toolHandlers.query_metrics(
123123
request,
124124
)) as unknown as DatadogToolResponse
125125

126-
expect(response.content[0].text).toContain('Metrics data:')
126+
expect(response.content[0].text).toContain('Queried metrics data:')
127127
expect(response.content[0].text).toContain('series":[]')
128128
})()
129129

@@ -147,7 +147,7 @@ describe('Metrics Tool', () => {
147147
to: 1641095000,
148148
query: 'invalid:query:format',
149149
})
150-
const response = (await toolHandlers.get_metrics(
150+
const response = (await toolHandlers.query_metrics(
151151
request,
152152
)) as unknown as DatadogToolResponse
153153

@@ -174,7 +174,7 @@ describe('Metrics Tool', () => {
174174
to: 1641095000,
175175
query: 'avg:system.cpu.user{*}',
176176
})
177-
await expect(toolHandlers.get_metrics(request)).rejects.toThrow()
177+
await expect(toolHandlers.query_metrics(request)).rejects.toThrow()
178178
})()
179179

180180
server.close()
@@ -196,7 +196,7 @@ describe('Metrics Tool', () => {
196196
to: 1641095000,
197197
query: 'avg:system.cpu.user{*}',
198198
})
199-
await expect(toolHandlers.get_metrics(request)).rejects.toThrow(
199+
await expect(toolHandlers.query_metrics(request)).rejects.toThrow(
200200
'Rate limit exceeded',
201201
)
202202
})()
@@ -221,7 +221,7 @@ describe('Metrics Tool', () => {
221221
to: 1700000000, // Very recent date
222222
query: 'avg:system.cpu.user{*}',
223223
})
224-
await expect(toolHandlers.get_metrics(request)).rejects.toThrow(
224+
await expect(toolHandlers.query_metrics(request)).rejects.toThrow(
225225
'Time range exceeds allowed limit',
226226
)
227227
})()

0 commit comments

Comments
 (0)