observability-toolkit 1.8.0 → 1.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +81 -3
- package/dist/backends/index.d.ts +119 -0
- package/dist/backends/index.d.ts.map +1 -1
- package/dist/backends/index.js +57 -0
- package/dist/backends/index.js.map +1 -1
- package/dist/backends/index.test.d.ts +5 -0
- package/dist/backends/index.test.d.ts.map +1 -0
- package/dist/backends/index.test.js +156 -0
- package/dist/backends/index.test.js.map +1 -0
- package/dist/backends/local-jsonl-boolean-search.test.js +8 -27
- package/dist/backends/local-jsonl-boolean-search.test.js.map +1 -1
- package/dist/backends/local-jsonl-logs.test.d.ts +2 -0
- package/dist/backends/local-jsonl-logs.test.d.ts.map +1 -0
- package/dist/backends/local-jsonl-logs.test.js +603 -0
- package/dist/backends/local-jsonl-logs.test.js.map +1 -0
- package/dist/backends/local-jsonl-traces.test.d.ts +2 -0
- package/dist/backends/local-jsonl-traces.test.d.ts.map +1 -0
- package/dist/backends/local-jsonl-traces.test.js +1723 -0
- package/dist/backends/local-jsonl-traces.test.js.map +1 -0
- package/dist/backends/local-jsonl.d.ts +4 -1
- package/dist/backends/local-jsonl.d.ts.map +1 -1
- package/dist/backends/local-jsonl.js +185 -1
- package/dist/backends/local-jsonl.js.map +1 -1
- package/dist/backends/local-jsonl.test.js +723 -46
- package/dist/backends/local-jsonl.test.js.map +1 -1
- package/dist/backends/signoz-api.d.ts +32 -0
- package/dist/backends/signoz-api.d.ts.map +1 -1
- package/dist/backends/signoz-api.js +231 -33
- package/dist/backends/signoz-api.js.map +1 -1
- package/dist/backends/signoz-api.test.js +410 -63
- package/dist/backends/signoz-api.test.js.map +1 -1
- package/dist/lib/constants.d.ts +59 -0
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +252 -6
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/constants.test.js +357 -21
- package/dist/lib/constants.test.js.map +1 -1
- package/dist/lib/edge-cases.test.d.ts +11 -0
- package/dist/lib/edge-cases.test.d.ts.map +1 -0
- package/dist/lib/edge-cases.test.js +634 -0
- package/dist/lib/edge-cases.test.js.map +1 -0
- package/dist/lib/error-sanitizer.d.ts +57 -0
- package/dist/lib/error-sanitizer.d.ts.map +1 -0
- package/dist/lib/error-sanitizer.js +207 -0
- package/dist/lib/error-sanitizer.js.map +1 -0
- package/dist/lib/error-sanitizer.test.d.ts +8 -0
- package/dist/lib/error-sanitizer.test.d.ts.map +1 -0
- package/dist/lib/error-sanitizer.test.js +369 -0
- package/dist/lib/error-sanitizer.test.js.map +1 -0
- package/dist/lib/file-utils.d.ts +134 -0
- package/dist/lib/file-utils.d.ts.map +1 -1
- package/dist/lib/file-utils.js +395 -9
- package/dist/lib/file-utils.js.map +1 -1
- package/dist/lib/file-utils.test.js +444 -3
- package/dist/lib/file-utils.test.js.map +1 -1
- package/dist/lib/indexer.d.ts +9 -1
- package/dist/lib/indexer.d.ts.map +1 -1
- package/dist/lib/indexer.js +51 -2
- package/dist/lib/indexer.js.map +1 -1
- package/dist/lib/indexer.test.js +138 -20
- package/dist/lib/indexer.test.js.map +1 -1
- package/dist/lib/input-validator.d.ts +103 -0
- package/dist/lib/input-validator.d.ts.map +1 -0
- package/dist/lib/input-validator.js +250 -0
- package/dist/lib/input-validator.js.map +1 -0
- package/dist/lib/input-validator.test.d.ts +2 -0
- package/dist/lib/input-validator.test.d.ts.map +1 -0
- package/dist/lib/input-validator.test.js +287 -0
- package/dist/lib/input-validator.test.js.map +1 -0
- package/dist/lib/query-sanitizer.d.ts +143 -0
- package/dist/lib/query-sanitizer.d.ts.map +1 -0
- package/dist/lib/query-sanitizer.js +261 -0
- package/dist/lib/query-sanitizer.js.map +1 -0
- package/dist/lib/query-sanitizer.test.d.ts +5 -0
- package/dist/lib/query-sanitizer.test.d.ts.map +1 -0
- package/dist/lib/query-sanitizer.test.js +400 -0
- package/dist/lib/query-sanitizer.test.js.map +1 -0
- package/dist/lib/server-utils.d.ts +80 -0
- package/dist/lib/server-utils.d.ts.map +1 -0
- package/dist/lib/server-utils.js +141 -0
- package/dist/lib/server-utils.js.map +1 -0
- package/dist/lib/shared-schemas.d.ts +59 -0
- package/dist/lib/shared-schemas.d.ts.map +1 -0
- package/dist/lib/shared-schemas.js +58 -0
- package/dist/lib/shared-schemas.js.map +1 -0
- package/dist/lib/shared-schemas.test.d.ts +5 -0
- package/dist/lib/shared-schemas.test.d.ts.map +1 -0
- package/dist/lib/shared-schemas.test.js +106 -0
- package/dist/lib/shared-schemas.test.js.map +1 -0
- package/dist/lib/toon-encoder.d.ts +21 -0
- package/dist/lib/toon-encoder.d.ts.map +1 -0
- package/dist/lib/toon-encoder.js +46 -0
- package/dist/lib/toon-encoder.js.map +1 -0
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +155 -81
- package/dist/server.js.map +1 -1
- package/dist/server.test.js +363 -0
- package/dist/server.test.js.map +1 -1
- package/dist/test-helpers/env-utils.d.ts +65 -0
- package/dist/test-helpers/env-utils.d.ts.map +1 -0
- package/dist/test-helpers/env-utils.js +94 -0
- package/dist/test-helpers/env-utils.js.map +1 -0
- package/dist/test-helpers/file-utils.d.ts +93 -0
- package/dist/test-helpers/file-utils.d.ts.map +1 -0
- package/dist/test-helpers/file-utils.js +206 -0
- package/dist/test-helpers/file-utils.js.map +1 -0
- package/dist/test-helpers/index.d.ts +10 -0
- package/dist/test-helpers/index.d.ts.map +1 -0
- package/dist/test-helpers/index.js +28 -0
- package/dist/test-helpers/index.js.map +1 -0
- package/dist/test-helpers/mock-backends.d.ts +139 -0
- package/dist/test-helpers/mock-backends.d.ts.map +1 -0
- package/dist/test-helpers/mock-backends.js +227 -0
- package/dist/test-helpers/mock-backends.js.map +1 -0
- package/dist/test-helpers/mock-backends.test.d.ts +5 -0
- package/dist/test-helpers/mock-backends.test.d.ts.map +1 -0
- package/dist/test-helpers/mock-backends.test.js +368 -0
- package/dist/test-helpers/mock-backends.test.js.map +1 -0
- package/dist/test-helpers/schema-validators.d.ts +32 -0
- package/dist/test-helpers/schema-validators.d.ts.map +1 -0
- package/dist/test-helpers/schema-validators.js +125 -0
- package/dist/test-helpers/schema-validators.js.map +1 -0
- package/dist/test-helpers/test-data-builders.d.ts +223 -0
- package/dist/test-helpers/test-data-builders.d.ts.map +1 -0
- package/dist/test-helpers/test-data-builders.js +288 -0
- package/dist/test-helpers/test-data-builders.js.map +1 -0
- package/dist/test-helpers/test-data-builders.test.d.ts +2 -0
- package/dist/test-helpers/test-data-builders.test.d.ts.map +1 -0
- package/dist/test-helpers/test-data-builders.test.js +306 -0
- package/dist/test-helpers/test-data-builders.test.js.map +1 -0
- package/dist/test-helpers/tool-validators.d.ts +28 -0
- package/dist/test-helpers/tool-validators.d.ts.map +1 -0
- package/dist/test-helpers/tool-validators.js +56 -0
- package/dist/test-helpers/tool-validators.js.map +1 -0
- package/dist/tools/context-stats.d.ts +1 -0
- package/dist/tools/context-stats.d.ts.map +1 -1
- package/dist/tools/context-stats.js +9 -5
- package/dist/tools/context-stats.js.map +1 -1
- package/dist/tools/context-stats.test.js +24 -10
- package/dist/tools/context-stats.test.js.map +1 -1
- package/dist/tools/get-trace-url.js +2 -2
- package/dist/tools/get-trace-url.js.map +1 -1
- package/dist/tools/health-check.js +2 -2
- package/dist/tools/health-check.js.map +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/query-evaluations.d.ts +186 -0
- package/dist/tools/query-evaluations.d.ts.map +1 -0
- package/dist/tools/query-evaluations.js +351 -0
- package/dist/tools/query-evaluations.js.map +1 -0
- package/dist/tools/query-evaluations.test.d.ts +5 -0
- package/dist/tools/query-evaluations.test.d.ts.map +1 -0
- package/dist/tools/query-evaluations.test.js +733 -0
- package/dist/tools/query-evaluations.test.js.map +1 -0
- package/dist/tools/query-llm-events.d.ts +24 -18
- package/dist/tools/query-llm-events.d.ts.map +1 -1
- package/dist/tools/query-llm-events.js +103 -60
- package/dist/tools/query-llm-events.js.map +1 -1
- package/dist/tools/query-llm-events.test.js +271 -9
- package/dist/tools/query-llm-events.test.js.map +1 -1
- package/dist/tools/query-logs.d.ts +28 -20
- package/dist/tools/query-logs.d.ts.map +1 -1
- package/dist/tools/query-logs.js +85 -61
- package/dist/tools/query-logs.js.map +1 -1
- package/dist/tools/query-logs.test.js +74 -145
- package/dist/tools/query-logs.test.js.map +1 -1
- package/dist/tools/query-metrics.d.ts +20 -20
- package/dist/tools/query-metrics.d.ts.map +1 -1
- package/dist/tools/query-metrics.js +109 -61
- package/dist/tools/query-metrics.js.map +1 -1
- package/dist/tools/query-metrics.test.js +26 -61
- package/dist/tools/query-metrics.test.js.map +1 -1
- package/dist/tools/query-traces.d.ts +24 -22
- package/dist/tools/query-traces.d.ts.map +1 -1
- package/dist/tools/query-traces.js +95 -70
- package/dist/tools/query-traces.js.map +1 -1
- package/dist/tools/query-traces.test.js +294 -90
- package/dist/tools/query-traces.test.js.map +1 -1
- package/dist/tools/setup-claudeignore.js +7 -7
- package/dist/tools/setup-claudeignore.js.map +1 -1
- package/dist/tools/setup-claudeignore.test.js +4 -25
- package/dist/tools/setup-claudeignore.test.js.map +1 -1
- package/package.json +3 -4
package/dist/tools/query-logs.js
CHANGED
|
@@ -4,49 +4,87 @@
|
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { MultiDirectoryBackend } from '../backends/local-jsonl.js';
|
|
6
6
|
import { SigNozApiBackend } from '../backends/signoz-api.js';
|
|
7
|
-
import { SIGNOZ_URL, SIGNOZ_API_KEY } from '../lib/constants.js';
|
|
7
|
+
import { SIGNOZ_URL, SIGNOZ_API_KEY, MAX_RESULTS_IN_MEMORY } from '../lib/constants.js';
|
|
8
|
+
import { enforceMemoryLimit } from '../lib/file-utils.js';
|
|
9
|
+
import { validateLimit, validateDateRange, validateRegexPattern, InputValidationError, } from '../lib/input-validator.js';
|
|
10
|
+
import { backendSchema, sessionSchema, traceIdSchema, dateRangeSchema, paginationSchema, } from '../lib/shared-schemas.js';
|
|
8
11
|
export const queryLogsSchema = z.object({
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
severity: z.string().optional().describe('
|
|
12
|
-
search: z.string().optional().describe('Search text
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
limit: z.number().max(1000).default(50).describe('Maximum number of results'),
|
|
12
|
+
...backendSchema,
|
|
13
|
+
...sessionSchema,
|
|
14
|
+
severity: z.string().optional().describe('Severity (ERROR/WARN/INFO/DEBUG)'),
|
|
15
|
+
search: z.string().optional().describe('Search text'),
|
|
16
|
+
...traceIdSchema,
|
|
17
|
+
...dateRangeSchema,
|
|
18
|
+
...paginationSchema,
|
|
17
19
|
});
|
|
18
20
|
export async function queryLogs(rawInput, options) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
startDate
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
21
|
+
try {
|
|
22
|
+
const input = queryLogsSchema.parse(rawInput);
|
|
23
|
+
// Validate inputs
|
|
24
|
+
const validatedLimit = validateLimit(input.limit);
|
|
25
|
+
// Validate date range if provided
|
|
26
|
+
if (input.startDate || input.endDate) {
|
|
27
|
+
validateDateRange(input.startDate, input.endDate);
|
|
28
|
+
}
|
|
29
|
+
// Validate search as regex pattern if provided
|
|
30
|
+
if (input.search) {
|
|
31
|
+
validateRegexPattern(input.search);
|
|
32
|
+
}
|
|
33
|
+
const queryOptions = {
|
|
34
|
+
severity: input.severity,
|
|
35
|
+
search: input.search,
|
|
36
|
+
traceId: input.traceId,
|
|
37
|
+
startDate: input.startDate,
|
|
38
|
+
endDate: input.endDate,
|
|
39
|
+
limit: validatedLimit,
|
|
40
|
+
};
|
|
41
|
+
// Helper to filter logs by sessionId (checks attributes['session.id'])
|
|
42
|
+
const filterBySessionId = (logs) => {
|
|
43
|
+
if (!input.sessionId)
|
|
44
|
+
return logs;
|
|
45
|
+
return logs.filter(l => l.attributes?.['session.id'] === input.sessionId);
|
|
46
|
+
};
|
|
47
|
+
const hasSigNozConfig = options?._hasSigNozConfig ?? !!(SIGNOZ_URL && SIGNOZ_API_KEY);
|
|
48
|
+
const backend = input.backend === 'auto'
|
|
49
|
+
? (hasSigNozConfig ? 'signoz' : 'local')
|
|
50
|
+
: input.backend;
|
|
51
|
+
if (backend === 'local' || input.backend === 'auto') {
|
|
52
|
+
const local = options?.localBackend ?? new MultiDirectoryBackend();
|
|
53
|
+
const rawLogs = await local.queryLogs(queryOptions);
|
|
54
|
+
const filteredLogs = filterBySessionId(rawLogs);
|
|
55
|
+
// Enforce memory limit
|
|
56
|
+
const { results: logs, truncated, originalCount } = enforceMemoryLimit(filteredLogs, MAX_RESULTS_IN_MEMORY);
|
|
57
|
+
if (logs.length > 0 || backend === 'local') {
|
|
58
|
+
// Group by severity for summary
|
|
59
|
+
const bySeverity = new Map();
|
|
60
|
+
for (const log of logs) {
|
|
61
|
+
bySeverity.set(log.severity, (bySeverity.get(log.severity) || 0) + 1);
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
backend: 'local',
|
|
65
|
+
count: logs.length,
|
|
66
|
+
...(truncated && { truncated: true, originalCount }),
|
|
67
|
+
bySeverity: Object.fromEntries(bySeverity),
|
|
68
|
+
logs: logs.map(l => ({
|
|
69
|
+
timestamp: l.timestamp,
|
|
70
|
+
severity: l.severity,
|
|
71
|
+
body: l.body.length > 500 ? l.body.slice(0, 500) + '...' : l.body,
|
|
72
|
+
traceId: l.traceId,
|
|
73
|
+
attributes: l.attributes,
|
|
74
|
+
})),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if ((backend === 'signoz' && (hasSigNozConfig || options?.signozBackend)) || (input.backend === 'auto' && hasSigNozConfig)) {
|
|
79
|
+
const signoz = options?.signozBackend ?? new SigNozApiBackend();
|
|
80
|
+
const rawLogs = await signoz.queryLogs(queryOptions);
|
|
81
|
+
const logs = filterBySessionId(rawLogs);
|
|
44
82
|
const bySeverity = new Map();
|
|
45
83
|
for (const log of logs) {
|
|
46
84
|
bySeverity.set(log.severity, (bySeverity.get(log.severity) || 0) + 1);
|
|
47
85
|
}
|
|
48
86
|
return {
|
|
49
|
-
backend: '
|
|
87
|
+
backend: 'signoz',
|
|
50
88
|
count: logs.length,
|
|
51
89
|
bySeverity: Object.fromEntries(bySeverity),
|
|
52
90
|
logs: logs.map(l => ({
|
|
@@ -58,38 +96,24 @@ export async function queryLogs(rawInput, options) {
|
|
|
58
96
|
})),
|
|
59
97
|
};
|
|
60
98
|
}
|
|
61
|
-
}
|
|
62
|
-
if ((backend === 'signoz' && (hasSigNozConfig || options?.signozBackend)) || (input.backend === 'auto' && hasSigNozConfig)) {
|
|
63
|
-
const signoz = options?.signozBackend ?? new SigNozApiBackend();
|
|
64
|
-
const rawLogs = await signoz.queryLogs(queryOptions);
|
|
65
|
-
const logs = filterBySessionId(rawLogs);
|
|
66
|
-
const bySeverity = new Map();
|
|
67
|
-
for (const log of logs) {
|
|
68
|
-
bySeverity.set(log.severity, (bySeverity.get(log.severity) || 0) + 1);
|
|
69
|
-
}
|
|
70
99
|
return {
|
|
71
|
-
backend: '
|
|
72
|
-
count:
|
|
73
|
-
bySeverity:
|
|
74
|
-
logs:
|
|
75
|
-
|
|
76
|
-
severity: l.severity,
|
|
77
|
-
body: l.body.length > 500 ? l.body.slice(0, 500) + '...' : l.body,
|
|
78
|
-
traceId: l.traceId,
|
|
79
|
-
attributes: l.attributes,
|
|
80
|
-
})),
|
|
100
|
+
backend: 'none',
|
|
101
|
+
count: 0,
|
|
102
|
+
bySeverity: {},
|
|
103
|
+
logs: [],
|
|
104
|
+
error: 'No backend available',
|
|
81
105
|
};
|
|
82
106
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
error
|
|
88
|
-
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
if (error instanceof InputValidationError) {
|
|
109
|
+
throw new Error(`Validation error (${error.field}): ${error.message}`);
|
|
110
|
+
}
|
|
111
|
+
throw error;
|
|
112
|
+
}
|
|
89
113
|
}
|
|
90
114
|
export const queryLogsTool = {
|
|
91
115
|
name: 'obs_query_logs',
|
|
92
|
-
description: 'Query logs from local JSONL
|
|
116
|
+
description: 'Query logs from local JSONL or SigNoz. Filter by severity/search/trace/date.',
|
|
93
117
|
inputSchema: queryLogsSchema,
|
|
94
118
|
handler: queryLogs,
|
|
95
119
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-logs.js","sourceRoot":"","sources":["../../src/tools/query-logs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"query-logs.js","sourceRoot":"","sources":["../../src/tools/query-logs.ts"],"names":[],"mappings":"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"}
|