observability-toolkit 1.3.0 → 1.5.0

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.
Files changed (102) hide show
  1. package/README.md +52 -3
  2. package/dist/backends/index.d.ts +108 -1
  3. package/dist/backends/index.d.ts.map +1 -1
  4. package/dist/backends/local-jsonl-boolean-search.test.d.ts +2 -0
  5. package/dist/backends/local-jsonl-boolean-search.test.d.ts.map +1 -0
  6. package/dist/backends/local-jsonl-boolean-search.test.js +154 -0
  7. package/dist/backends/local-jsonl-boolean-search.test.js.map +1 -0
  8. package/dist/backends/local-jsonl.d.ts +73 -2
  9. package/dist/backends/local-jsonl.d.ts.map +1 -1
  10. package/dist/backends/local-jsonl.js +768 -103
  11. package/dist/backends/local-jsonl.js.map +1 -1
  12. package/dist/backends/local-jsonl.test.js +3326 -271
  13. package/dist/backends/local-jsonl.test.js.map +1 -1
  14. package/dist/backends/signoz-api.d.ts +13 -1
  15. package/dist/backends/signoz-api.d.ts.map +1 -1
  16. package/dist/backends/signoz-api.integration.test.d.ts +8 -0
  17. package/dist/backends/signoz-api.integration.test.d.ts.map +1 -0
  18. package/dist/backends/signoz-api.integration.test.js +137 -0
  19. package/dist/backends/signoz-api.integration.test.js.map +1 -0
  20. package/dist/backends/signoz-api.js +384 -42
  21. package/dist/backends/signoz-api.js.map +1 -1
  22. package/dist/backends/signoz-api.test.js +821 -325
  23. package/dist/backends/signoz-api.test.js.map +1 -1
  24. package/dist/lib/cache.d.ts +20 -0
  25. package/dist/lib/cache.d.ts.map +1 -0
  26. package/dist/lib/cache.js +63 -0
  27. package/dist/lib/cache.js.map +1 -0
  28. package/dist/lib/constants.d.ts +27 -0
  29. package/dist/lib/constants.d.ts.map +1 -1
  30. package/dist/lib/constants.js +70 -0
  31. package/dist/lib/constants.js.map +1 -1
  32. package/dist/lib/constants.test.js +183 -1
  33. package/dist/lib/constants.test.js.map +1 -1
  34. package/dist/lib/file-utils.d.ts +53 -1
  35. package/dist/lib/file-utils.d.ts.map +1 -1
  36. package/dist/lib/file-utils.js +142 -3
  37. package/dist/lib/file-utils.js.map +1 -1
  38. package/dist/lib/file-utils.test.js +228 -1
  39. package/dist/lib/file-utils.test.js.map +1 -1
  40. package/dist/lib/indexer.d.ts +78 -0
  41. package/dist/lib/indexer.d.ts.map +1 -0
  42. package/dist/lib/indexer.js +277 -0
  43. package/dist/lib/indexer.js.map +1 -0
  44. package/dist/lib/indexer.test.d.ts +2 -0
  45. package/dist/lib/indexer.test.d.ts.map +1 -0
  46. package/dist/lib/indexer.test.js +392 -0
  47. package/dist/lib/indexer.test.js.map +1 -0
  48. package/dist/lib/otlp-export.d.ts +178 -0
  49. package/dist/lib/otlp-export.d.ts.map +1 -0
  50. package/dist/lib/otlp-export.js +382 -0
  51. package/dist/lib/otlp-export.js.map +1 -0
  52. package/dist/server.js +48 -65
  53. package/dist/server.js.map +1 -1
  54. package/dist/server.test.d.ts +5 -0
  55. package/dist/server.test.d.ts.map +1 -0
  56. package/dist/server.test.js +547 -0
  57. package/dist/server.test.js.map +1 -0
  58. package/dist/tools/context-stats.test.js +126 -0
  59. package/dist/tools/context-stats.test.js.map +1 -1
  60. package/dist/tools/get-trace-url.d.ts.map +1 -1
  61. package/dist/tools/get-trace-url.js +5 -1
  62. package/dist/tools/get-trace-url.js.map +1 -1
  63. package/dist/tools/get-trace-url.test.js +12 -6
  64. package/dist/tools/get-trace-url.test.js.map +1 -1
  65. package/dist/tools/health-check.d.ts +9 -2
  66. package/dist/tools/health-check.d.ts.map +1 -1
  67. package/dist/tools/health-check.js +66 -27
  68. package/dist/tools/health-check.js.map +1 -1
  69. package/dist/tools/health-check.test.js +89 -96
  70. package/dist/tools/health-check.test.js.map +1 -1
  71. package/dist/tools/query-llm-events.d.ts +2 -2
  72. package/dist/tools/query-llm-events.js +3 -3
  73. package/dist/tools/query-llm-events.js.map +1 -1
  74. package/dist/tools/query-logs.d.ts +12 -10
  75. package/dist/tools/query-logs.d.ts.map +1 -1
  76. package/dist/tools/query-logs.js +5 -5
  77. package/dist/tools/query-logs.js.map +1 -1
  78. package/dist/tools/query-logs.test.js +22 -2
  79. package/dist/tools/query-logs.test.js.map +1 -1
  80. package/dist/tools/query-metrics.d.ts +12 -14
  81. package/dist/tools/query-metrics.d.ts.map +1 -1
  82. package/dist/tools/query-metrics.js +11 -13
  83. package/dist/tools/query-metrics.js.map +1 -1
  84. package/dist/tools/query-metrics.test.js +134 -96
  85. package/dist/tools/query-metrics.test.js.map +1 -1
  86. package/dist/tools/query-traces.d.ts +16 -17
  87. package/dist/tools/query-traces.d.ts.map +1 -1
  88. package/dist/tools/query-traces.js +11 -14
  89. package/dist/tools/query-traces.js.map +1 -1
  90. package/dist/tools/query-traces.test.js +144 -48
  91. package/dist/tools/query-traces.test.js.map +1 -1
  92. package/dist/tools/setup-claudeignore.d.ts +36 -10
  93. package/dist/tools/setup-claudeignore.d.ts.map +1 -1
  94. package/dist/tools/setup-claudeignore.js +193 -33
  95. package/dist/tools/setup-claudeignore.js.map +1 -1
  96. package/dist/tools/setup-claudeignore.test.js +286 -41
  97. package/dist/tools/setup-claudeignore.test.js.map +1 -1
  98. package/dist/tools/signoz.integration.test.d.ts +8 -0
  99. package/dist/tools/signoz.integration.test.d.ts.map +1 -0
  100. package/dist/tools/signoz.integration.test.js +141 -0
  101. package/dist/tools/signoz.integration.test.js.map +1 -0
  102. package/package.json +6 -3
@@ -0,0 +1,392 @@
1
+ import { describe, it, beforeEach, afterEach } from 'node:test';
2
+ import * as assert from 'node:assert';
3
+ import * as fs from 'fs';
4
+ import * as path from 'path';
5
+ import * as os from 'os';
6
+ import { buildIndex, readIndex, isIndexStale, getIndexPath, queryIndex, readLinesByNumber, buildAndWriteIndex, getOrBuildIndex, } from './indexer.js';
7
+ function createTempDir() {
8
+ return fs.mkdtempSync(path.join(os.tmpdir(), 'indexer-test-'));
9
+ }
10
+ function removeTempDir(dir) {
11
+ try {
12
+ fs.rmSync(dir, { recursive: true, force: true });
13
+ }
14
+ catch {
15
+ // Ignore cleanup errors
16
+ }
17
+ }
18
+ function writeJsonlFile(filePath, data) {
19
+ const content = data.map(item => JSON.stringify(item)).join('\n');
20
+ fs.writeFileSync(filePath, content, 'utf-8');
21
+ }
22
+ describe('Indexer', () => {
23
+ let tempDir;
24
+ beforeEach(() => {
25
+ tempDir = createTempDir();
26
+ });
27
+ afterEach(() => {
28
+ removeTempDir(tempDir);
29
+ });
30
+ describe('getIndexPath', () => {
31
+ it('should append .idx to the file path', () => {
32
+ assert.strictEqual(getIndexPath('/path/to/file.jsonl'), '/path/to/file.jsonl.idx');
33
+ });
34
+ });
35
+ describe('buildIndex for traces', () => {
36
+ it('should build an index with correct metadata', async () => {
37
+ const filePath = path.join(tempDir, 'traces.jsonl');
38
+ const mockSpans = [
39
+ {
40
+ traceId: 'trace1',
41
+ spanId: 'span1',
42
+ name: 'test-operation',
43
+ startTime: [1700000000, 0],
44
+ resource: { serviceName: 'test-service' },
45
+ },
46
+ {
47
+ traceId: 'trace2',
48
+ spanId: 'span2',
49
+ name: 'another-op',
50
+ startTime: [1700000001, 500000000],
51
+ resource: { serviceName: 'other-service' },
52
+ },
53
+ ];
54
+ writeJsonlFile(filePath, mockSpans);
55
+ const index = await buildIndex(filePath, 'traces');
56
+ assert.strictEqual(index.version, 1);
57
+ assert.strictEqual(index.sourceFile, filePath);
58
+ assert.ok(index.sourceMtime > 0);
59
+ assert.strictEqual(index.entries.length, 2);
60
+ });
61
+ it('should extract trace fields correctly', async () => {
62
+ const filePath = path.join(tempDir, 'traces.jsonl');
63
+ const mockSpans = [
64
+ {
65
+ traceId: 'trace1',
66
+ spanId: 'span1',
67
+ name: 'test-operation',
68
+ startTime: [1700000000, 500000000], // 500ms
69
+ resource: { serviceName: 'test-service' },
70
+ },
71
+ ];
72
+ writeJsonlFile(filePath, mockSpans);
73
+ const index = await buildIndex(filePath, 'traces');
74
+ assert.strictEqual(index.entries.length, 1);
75
+ const entry = index.entries[0];
76
+ assert.strictEqual(entry.lineNumber, 1);
77
+ assert.strictEqual(entry.traceId, 'trace1');
78
+ assert.strictEqual(entry.spanName, 'test-operation');
79
+ assert.strictEqual(entry.serviceName, 'test-service');
80
+ assert.strictEqual(entry.timestamp, 1700000000500); // ms
81
+ });
82
+ it('should skip malformed lines but track line numbers', async () => {
83
+ const filePath = path.join(tempDir, 'traces.jsonl');
84
+ const content = [
85
+ JSON.stringify({ traceId: 'trace1', spanId: 'span1', name: 'op1', startTime: [1700000000, 0] }),
86
+ 'not valid json',
87
+ JSON.stringify({ traceId: 'trace3', spanId: 'span3', name: 'op3', startTime: [1700000002, 0] }),
88
+ ].join('\n');
89
+ fs.writeFileSync(filePath, content, 'utf-8');
90
+ const index = await buildIndex(filePath, 'traces');
91
+ assert.strictEqual(index.entries.length, 2);
92
+ assert.strictEqual(index.entries[0].lineNumber, 1);
93
+ assert.strictEqual(index.entries[1].lineNumber, 3);
94
+ });
95
+ });
96
+ describe('buildIndex for logs', () => {
97
+ it('should extract log fields correctly', async () => {
98
+ const filePath = path.join(tempDir, 'logs.jsonl');
99
+ const mockLogs = [
100
+ {
101
+ timestamp: '2024-01-15T10:00:00.000Z',
102
+ severityText: 'ERROR',
103
+ body: 'Something went wrong',
104
+ traceId: 'trace1',
105
+ resource: { serviceName: 'log-service' },
106
+ },
107
+ ];
108
+ writeJsonlFile(filePath, mockLogs);
109
+ const index = await buildIndex(filePath, 'logs');
110
+ assert.strictEqual(index.entries.length, 1);
111
+ const entry = index.entries[0];
112
+ assert.strictEqual(entry.severity, 'ERROR');
113
+ assert.strictEqual(entry.traceId, 'trace1');
114
+ assert.strictEqual(entry.serviceName, 'log-service');
115
+ });
116
+ it('should handle timestamp as array', async () => {
117
+ const filePath = path.join(tempDir, 'logs.jsonl');
118
+ const mockLogs = [
119
+ {
120
+ timestamp: [1700000000, 500000000],
121
+ severity: 'INFO',
122
+ body: 'Test message',
123
+ },
124
+ ];
125
+ writeJsonlFile(filePath, mockLogs);
126
+ const index = await buildIndex(filePath, 'logs');
127
+ assert.strictEqual(index.entries.length, 1);
128
+ assert.strictEqual(index.entries[0].timestamp, 1700000000500);
129
+ });
130
+ });
131
+ describe('buildIndex for metrics', () => {
132
+ it('should extract metric fields correctly', async () => {
133
+ const filePath = path.join(tempDir, 'metrics.jsonl');
134
+ const mockMetrics = [
135
+ {
136
+ timestamp: '2024-01-15T10:00:00.000Z',
137
+ name: 'http.request.duration',
138
+ value: 100,
139
+ resource: { serviceName: 'metric-service' },
140
+ },
141
+ ];
142
+ writeJsonlFile(filePath, mockMetrics);
143
+ const index = await buildIndex(filePath, 'metrics');
144
+ assert.strictEqual(index.entries.length, 1);
145
+ const entry = index.entries[0];
146
+ assert.strictEqual(entry.metricName, 'http.request.duration');
147
+ assert.strictEqual(entry.serviceName, 'metric-service');
148
+ });
149
+ });
150
+ describe('buildIndex for llm-events', () => {
151
+ it('should extract llm event fields correctly', async () => {
152
+ const filePath = path.join(tempDir, 'llm-events.jsonl');
153
+ const mockEvents = [
154
+ {
155
+ timestamp: '2024-01-15T10:00:00.000Z',
156
+ name: 'gen_ai.chat.completion',
157
+ attributes: { model: 'claude-3' },
158
+ },
159
+ ];
160
+ writeJsonlFile(filePath, mockEvents);
161
+ const index = await buildIndex(filePath, 'llm-events');
162
+ assert.strictEqual(index.entries.length, 1);
163
+ const entry = index.entries[0];
164
+ assert.strictEqual(entry.spanName, 'gen_ai.chat.completion');
165
+ });
166
+ });
167
+ describe('readIndex', () => {
168
+ it('should return null for non-existent file', () => {
169
+ const result = readIndex('/non/existent/path.idx');
170
+ assert.strictEqual(result, null);
171
+ });
172
+ it('should read valid index file', async () => {
173
+ const jsonlPath = path.join(tempDir, 'traces.jsonl');
174
+ const idxPath = getIndexPath(jsonlPath);
175
+ const mockSpans = [{ traceId: 'trace1', spanId: 'span1', name: 'op1', startTime: [1700000000, 0] }];
176
+ writeJsonlFile(jsonlPath, mockSpans);
177
+ await buildAndWriteIndex(jsonlPath, 'traces');
178
+ const index = readIndex(idxPath);
179
+ assert.ok(index !== null);
180
+ assert.strictEqual(index.version, 1);
181
+ assert.strictEqual(index.entries.length, 1);
182
+ });
183
+ it('should return null for invalid version', () => {
184
+ const idxPath = path.join(tempDir, 'test.idx');
185
+ const invalidIndex = { version: 2, sourceFile: 'test', sourceMtime: 0, entries: [] };
186
+ fs.writeFileSync(idxPath, JSON.stringify(invalidIndex), 'utf-8');
187
+ const result = readIndex(idxPath);
188
+ assert.strictEqual(result, null);
189
+ });
190
+ it('should return null for malformed JSON', () => {
191
+ const idxPath = path.join(tempDir, 'test.idx');
192
+ fs.writeFileSync(idxPath, 'not valid json', 'utf-8');
193
+ const result = readIndex(idxPath);
194
+ assert.strictEqual(result, null);
195
+ });
196
+ });
197
+ describe('isIndexStale', () => {
198
+ it('should return false for fresh index', async () => {
199
+ const jsonlPath = path.join(tempDir, 'traces.jsonl');
200
+ const mockSpans = [{ traceId: 'trace1', spanId: 'span1', name: 'op1', startTime: [1700000000, 0] }];
201
+ writeJsonlFile(jsonlPath, mockSpans);
202
+ const index = await buildIndex(jsonlPath, 'traces');
203
+ const stale = isIndexStale(index, jsonlPath);
204
+ assert.strictEqual(stale, false);
205
+ });
206
+ it('should return true when source file is modified', async () => {
207
+ const jsonlPath = path.join(tempDir, 'traces.jsonl');
208
+ const mockSpans = [{ traceId: 'trace1', spanId: 'span1', name: 'op1', startTime: [1700000000, 0] }];
209
+ writeJsonlFile(jsonlPath, mockSpans);
210
+ const index = await buildIndex(jsonlPath, 'traces');
211
+ // Wait a bit and modify the file
212
+ await new Promise(resolve => setTimeout(resolve, 10));
213
+ fs.appendFileSync(jsonlPath, '\n' + JSON.stringify({ traceId: 'trace2', spanId: 'span2', name: 'op2', startTime: [1700000001, 0] }));
214
+ const stale = isIndexStale(index, jsonlPath);
215
+ assert.strictEqual(stale, true);
216
+ });
217
+ it('should return true when source file does not exist', () => {
218
+ const fakeIndex = {
219
+ version: 1,
220
+ sourceFile: '/non/existent/file.jsonl',
221
+ sourceMtime: 12345,
222
+ entries: [],
223
+ };
224
+ const stale = isIndexStale(fakeIndex, '/non/existent/file.jsonl');
225
+ assert.strictEqual(stale, true);
226
+ });
227
+ });
228
+ describe('queryIndex', () => {
229
+ it('should return null when no indexable filters', () => {
230
+ const index = {
231
+ version: 1,
232
+ sourceFile: 'test.jsonl',
233
+ sourceMtime: 0,
234
+ entries: [{ lineNumber: 1, timestamp: 0 }],
235
+ };
236
+ const result = queryIndex(index, {});
237
+ assert.strictEqual(result, null);
238
+ });
239
+ it('should filter by traceId', () => {
240
+ const index = {
241
+ version: 1,
242
+ sourceFile: 'test.jsonl',
243
+ sourceMtime: 0,
244
+ entries: [
245
+ { lineNumber: 1, timestamp: 0, traceId: 'trace1' },
246
+ { lineNumber: 2, timestamp: 0, traceId: 'trace2' },
247
+ { lineNumber: 3, timestamp: 0, traceId: 'trace1' },
248
+ ],
249
+ };
250
+ const result = queryIndex(index, { traceId: 'trace1' });
251
+ assert.deepStrictEqual(result, [1, 3]);
252
+ });
253
+ it('should filter by spanName with substring match', () => {
254
+ const index = {
255
+ version: 1,
256
+ sourceFile: 'test.jsonl',
257
+ sourceMtime: 0,
258
+ entries: [
259
+ { lineNumber: 1, timestamp: 0, spanName: 'user-create' },
260
+ { lineNumber: 2, timestamp: 0, spanName: 'user-update' },
261
+ { lineNumber: 3, timestamp: 0, spanName: 'db-query' },
262
+ ],
263
+ };
264
+ const result = queryIndex(index, { spanName: 'user' });
265
+ assert.deepStrictEqual(result, [1, 2]);
266
+ });
267
+ it('should filter by severity case-insensitively', () => {
268
+ const index = {
269
+ version: 1,
270
+ sourceFile: 'test.jsonl',
271
+ sourceMtime: 0,
272
+ entries: [
273
+ { lineNumber: 1, timestamp: 0, severity: 'ERROR' },
274
+ { lineNumber: 2, timestamp: 0, severity: 'error' },
275
+ { lineNumber: 3, timestamp: 0, severity: 'INFO' },
276
+ ],
277
+ };
278
+ const result = queryIndex(index, { severity: 'error' });
279
+ assert.deepStrictEqual(result, [1, 2]);
280
+ });
281
+ it('should filter by metricName with substring match', () => {
282
+ const index = {
283
+ version: 1,
284
+ sourceFile: 'test.jsonl',
285
+ sourceMtime: 0,
286
+ entries: [
287
+ { lineNumber: 1, timestamp: 0, metricName: 'http.request.duration' },
288
+ { lineNumber: 2, timestamp: 0, metricName: 'http.response.size' },
289
+ { lineNumber: 3, timestamp: 0, metricName: 'db.query.count' },
290
+ ],
291
+ };
292
+ const result = queryIndex(index, { metricName: 'http' });
293
+ assert.deepStrictEqual(result, [1, 2]);
294
+ });
295
+ it('should apply multiple filters with AND logic', () => {
296
+ const index = {
297
+ version: 1,
298
+ sourceFile: 'test.jsonl',
299
+ sourceMtime: 0,
300
+ entries: [
301
+ { lineNumber: 1, timestamp: 0, traceId: 'trace1', severity: 'ERROR' },
302
+ { lineNumber: 2, timestamp: 0, traceId: 'trace1', severity: 'INFO' },
303
+ { lineNumber: 3, timestamp: 0, traceId: 'trace2', severity: 'ERROR' },
304
+ ],
305
+ };
306
+ const result = queryIndex(index, { traceId: 'trace1', severity: 'ERROR' });
307
+ assert.deepStrictEqual(result, [1]);
308
+ });
309
+ });
310
+ describe('readLinesByNumber', () => {
311
+ it('should read specific lines from file', async () => {
312
+ const filePath = path.join(tempDir, 'test.jsonl');
313
+ const data = [
314
+ { id: 1, name: 'first' },
315
+ { id: 2, name: 'second' },
316
+ { id: 3, name: 'third' },
317
+ { id: 4, name: 'fourth' },
318
+ ];
319
+ writeJsonlFile(filePath, data);
320
+ const results = await readLinesByNumber(filePath, [2, 4]);
321
+ assert.strictEqual(results.length, 2);
322
+ assert.strictEqual(results[0].id, 2);
323
+ assert.strictEqual(results[1].id, 4);
324
+ });
325
+ it('should return empty array for empty line list', async () => {
326
+ const filePath = path.join(tempDir, 'test.jsonl');
327
+ writeJsonlFile(filePath, [{ id: 1 }]);
328
+ const results = await readLinesByNumber(filePath, []);
329
+ assert.strictEqual(results.length, 0);
330
+ });
331
+ it('should maintain order based on line numbers', async () => {
332
+ const filePath = path.join(tempDir, 'test.jsonl');
333
+ const data = [
334
+ { id: 1 },
335
+ { id: 2 },
336
+ { id: 3 },
337
+ ];
338
+ writeJsonlFile(filePath, data);
339
+ // Request lines out of order
340
+ const results = await readLinesByNumber(filePath, [3, 1, 2]);
341
+ // Should be sorted by line number
342
+ assert.strictEqual(results.length, 3);
343
+ assert.strictEqual(results[0].id, 1);
344
+ assert.strictEqual(results[1].id, 2);
345
+ assert.strictEqual(results[2].id, 3);
346
+ });
347
+ });
348
+ describe('getOrBuildIndex', () => {
349
+ it('should build index for file without existing index', async () => {
350
+ const jsonlPath = path.join(tempDir, 'traces.jsonl');
351
+ const mockSpans = [{ traceId: 'trace1', spanId: 'span1', name: 'op1', startTime: [1700000000, 0] }];
352
+ writeJsonlFile(jsonlPath, mockSpans);
353
+ const index = await getOrBuildIndex(jsonlPath, 'traces');
354
+ assert.ok(index !== null);
355
+ assert.strictEqual(index.entries.length, 1);
356
+ // Should have written the index file
357
+ assert.ok(fs.existsSync(getIndexPath(jsonlPath)));
358
+ });
359
+ it('should return cached index when not stale', async () => {
360
+ const jsonlPath = path.join(tempDir, 'traces.jsonl');
361
+ const mockSpans = [{ traceId: 'trace1', spanId: 'span1', name: 'op1', startTime: [1700000000, 0] }];
362
+ writeJsonlFile(jsonlPath, mockSpans);
363
+ // Build and write index
364
+ const index1 = await getOrBuildIndex(jsonlPath, 'traces');
365
+ // Get again - should return from disk (not stale)
366
+ const index2 = await getOrBuildIndex(jsonlPath, 'traces');
367
+ // Compare key properties (JSON round-trip strips undefined values)
368
+ assert.strictEqual(index1.version, index2.version);
369
+ assert.strictEqual(index1.sourceFile, index2.sourceFile);
370
+ assert.strictEqual(index1.sourceMtime, index2.sourceMtime);
371
+ assert.strictEqual(index1.entries.length, index2.entries.length);
372
+ assert.strictEqual(index1.entries[0].traceId, index2.entries[0].traceId);
373
+ });
374
+ it('should rebuild index when stale', async () => {
375
+ const jsonlPath = path.join(tempDir, 'traces.jsonl');
376
+ const mockSpans = [{ traceId: 'trace1', spanId: 'span1', name: 'op1', startTime: [1700000000, 0] }];
377
+ writeJsonlFile(jsonlPath, mockSpans);
378
+ const index1 = await getOrBuildIndex(jsonlPath, 'traces');
379
+ assert.strictEqual(index1.entries.length, 1);
380
+ // Modify file
381
+ await new Promise(resolve => setTimeout(resolve, 10));
382
+ fs.appendFileSync(jsonlPath, '\n' + JSON.stringify({ traceId: 'trace2', spanId: 'span2', name: 'op2', startTime: [1700000001, 0] }));
383
+ const index2 = await getOrBuildIndex(jsonlPath, 'traces');
384
+ assert.strictEqual(index2.entries.length, 2);
385
+ });
386
+ it('should return null for non-existent file', async () => {
387
+ const result = await getOrBuildIndex('/non/existent/file.jsonl', 'traces');
388
+ assert.strictEqual(result, null);
389
+ });
390
+ });
391
+ });
392
+ //# sourceMappingURL=indexer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexer.test.js","sourceRoot":"","sources":["../../src/lib/indexer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * OTLP JSON export format converters
3
+ *
4
+ * Converts internal telemetry data structures to OTLP-compatible JSON format
5
+ * for export to external observability systems.
6
+ *
7
+ * @see https://opentelemetry.io/docs/specs/otlp/
8
+ */
9
+ import { TraceSpan, LogRecord, MetricDataPoint } from '../backends/index.js';
10
+ export interface OTLPAttributeValue {
11
+ stringValue?: string;
12
+ intValue?: string;
13
+ doubleValue?: number;
14
+ boolValue?: boolean;
15
+ arrayValue?: {
16
+ values: OTLPAttributeValue[];
17
+ };
18
+ kvlistValue?: {
19
+ values: OTLPKeyValue[];
20
+ };
21
+ }
22
+ export interface OTLPKeyValue {
23
+ key: string;
24
+ value: OTLPAttributeValue;
25
+ }
26
+ export interface OTLPResource {
27
+ attributes: OTLPKeyValue[];
28
+ }
29
+ export interface OTLPInstrumentationScope {
30
+ name: string;
31
+ version?: string;
32
+ }
33
+ export interface OTLPSpanLink {
34
+ traceId: string;
35
+ spanId: string;
36
+ attributes?: OTLPKeyValue[];
37
+ }
38
+ export interface OTLPSpanEvent {
39
+ name: string;
40
+ timeUnixNano: string;
41
+ attributes?: OTLPKeyValue[];
42
+ }
43
+ export interface OTLPSpan {
44
+ traceId: string;
45
+ spanId: string;
46
+ parentSpanId?: string;
47
+ name: string;
48
+ kind: number;
49
+ startTimeUnixNano: string;
50
+ endTimeUnixNano?: string;
51
+ status?: {
52
+ code: number;
53
+ message?: string;
54
+ };
55
+ attributes?: OTLPKeyValue[];
56
+ events?: OTLPSpanEvent[];
57
+ links?: OTLPSpanLink[];
58
+ }
59
+ export interface OTLPScopeSpans {
60
+ scope?: OTLPInstrumentationScope;
61
+ spans: OTLPSpan[];
62
+ }
63
+ export interface OTLPResourceSpans {
64
+ resource: OTLPResource;
65
+ scopeSpans: OTLPScopeSpans[];
66
+ }
67
+ export interface OTLPTraceExport {
68
+ resourceSpans: OTLPResourceSpans[];
69
+ }
70
+ export interface OTLPLogRecord {
71
+ timeUnixNano: string;
72
+ observedTimeUnixNano: string;
73
+ severityNumber?: number;
74
+ severityText?: string;
75
+ body?: {
76
+ stringValue: string;
77
+ };
78
+ traceId?: string;
79
+ spanId?: string;
80
+ attributes?: OTLPKeyValue[];
81
+ }
82
+ export interface OTLPScopeLogs {
83
+ scope?: OTLPInstrumentationScope;
84
+ logRecords: OTLPLogRecord[];
85
+ }
86
+ export interface OTLPResourceLogs {
87
+ resource: OTLPResource;
88
+ scopeLogs: OTLPScopeLogs[];
89
+ }
90
+ export interface OTLPLogExport {
91
+ resourceLogs: OTLPResourceLogs[];
92
+ }
93
+ export interface OTLPNumberDataPoint {
94
+ timeUnixNano: string;
95
+ startTimeUnixNano?: string;
96
+ asDouble?: number;
97
+ asInt?: string;
98
+ attributes?: OTLPKeyValue[];
99
+ exemplars?: OTLPExemplar[];
100
+ }
101
+ export interface OTLPHistogramBucket {
102
+ count: string;
103
+ explicitBounds?: number;
104
+ }
105
+ export interface OTLPHistogramDataPoint {
106
+ timeUnixNano: string;
107
+ startTimeUnixNano?: string;
108
+ count: string;
109
+ sum?: number;
110
+ bucketCounts: string[];
111
+ explicitBounds: number[];
112
+ attributes?: OTLPKeyValue[];
113
+ exemplars?: OTLPExemplar[];
114
+ }
115
+ export interface OTLPExemplar {
116
+ timeUnixNano: string;
117
+ asDouble?: number;
118
+ traceId?: string;
119
+ spanId?: string;
120
+ filteredAttributes?: OTLPKeyValue[];
121
+ }
122
+ export interface OTLPGauge {
123
+ dataPoints: OTLPNumberDataPoint[];
124
+ }
125
+ export interface OTLPSum {
126
+ dataPoints: OTLPNumberDataPoint[];
127
+ aggregationTemporality: number;
128
+ isMonotonic: boolean;
129
+ }
130
+ export interface OTLPHistogram {
131
+ dataPoints: OTLPHistogramDataPoint[];
132
+ aggregationTemporality: number;
133
+ }
134
+ export interface OTLPMetric {
135
+ name: string;
136
+ unit?: string;
137
+ gauge?: OTLPGauge;
138
+ sum?: OTLPSum;
139
+ histogram?: OTLPHistogram;
140
+ }
141
+ export interface OTLPScopeMetrics {
142
+ scope?: OTLPInstrumentationScope;
143
+ metrics: OTLPMetric[];
144
+ }
145
+ export interface OTLPResourceMetrics {
146
+ resource: OTLPResource;
147
+ scopeMetrics: OTLPScopeMetrics[];
148
+ }
149
+ export interface OTLPMetricExport {
150
+ resourceMetrics: OTLPResourceMetrics[];
151
+ }
152
+ /**
153
+ * Convert a JavaScript value to OTLP attribute value format
154
+ */
155
+ export declare function toOTLPAttributeValue(value: unknown): OTLPAttributeValue;
156
+ /**
157
+ * Convert attributes record to OTLP key-value array
158
+ */
159
+ export declare function toOTLPAttributes(attrs: Record<string, unknown> | undefined): OTLPKeyValue[];
160
+ /**
161
+ * Convert internal spans to OTLP trace export format
162
+ *
163
+ * Groups spans by service.name resource attribute, then by instrumentation scope.
164
+ */
165
+ export declare function convertToOTLPTraces(spans: TraceSpan[]): OTLPTraceExport;
166
+ /**
167
+ * Convert internal logs to OTLP log export format
168
+ *
169
+ * Groups logs by service.name resource attribute, then by instrumentation scope.
170
+ */
171
+ export declare function convertToOTLPLogs(logs: LogRecord[]): OTLPLogExport;
172
+ /**
173
+ * Convert internal metrics to OTLP metric export format
174
+ *
175
+ * Groups metrics by service.name resource attribute, then by metric name.
176
+ */
177
+ export declare function convertToOTLPMetrics(metrics: MetricDataPoint[]): OTLPMetricExport;
178
+ //# sourceMappingURL=otlp-export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otlp-export.d.ts","sourceRoot":"","sources":["../../src/lib/otlp-export.ts"],"names":[],"mappings":"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"}