@comprehend/telemetry-node 0.1.3 → 0.2.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 (42) hide show
  1. package/.claude/settings.local.json +2 -1
  2. package/.idea/telemetry-node.iml +0 -1
  3. package/DEVELOPMENT.md +69 -0
  4. package/README.md +173 -0
  5. package/dist/ComprehendDevSpanProcessor.d.ts +9 -6
  6. package/dist/ComprehendDevSpanProcessor.js +146 -87
  7. package/dist/ComprehendDevSpanProcessor.test.d.ts +1 -0
  8. package/dist/ComprehendDevSpanProcessor.test.js +495 -0
  9. package/dist/ComprehendMetricsExporter.d.ts +18 -0
  10. package/dist/ComprehendMetricsExporter.js +178 -0
  11. package/dist/ComprehendMetricsExporter.test.d.ts +1 -0
  12. package/dist/ComprehendMetricsExporter.test.js +266 -0
  13. package/dist/ComprehendSDK.d.ts +18 -0
  14. package/dist/ComprehendSDK.js +56 -0
  15. package/dist/ComprehendSDK.test.d.ts +1 -0
  16. package/dist/ComprehendSDK.test.js +126 -0
  17. package/dist/WebSocketConnection.d.ts +23 -3
  18. package/dist/WebSocketConnection.js +106 -12
  19. package/dist/WebSocketConnection.test.d.ts +1 -0
  20. package/dist/WebSocketConnection.test.js +473 -0
  21. package/dist/index.d.ts +3 -1
  22. package/dist/index.js +5 -1
  23. package/dist/sql-analyzer.js +2 -11
  24. package/dist/sql-analyzer.test.js +0 -12
  25. package/dist/util.d.ts +2 -0
  26. package/dist/util.js +7 -0
  27. package/dist/wire-protocol.d.ts +168 -28
  28. package/jest.config.js +1 -0
  29. package/package.json +4 -2
  30. package/src/ComprehendDevSpanProcessor.test.ts +626 -0
  31. package/src/ComprehendDevSpanProcessor.ts +170 -105
  32. package/src/ComprehendMetricsExporter.test.ts +334 -0
  33. package/src/ComprehendMetricsExporter.ts +225 -0
  34. package/src/ComprehendSDK.test.ts +160 -0
  35. package/src/ComprehendSDK.ts +63 -0
  36. package/src/WebSocketConnection.test.ts +616 -0
  37. package/src/WebSocketConnection.ts +135 -13
  38. package/src/index.ts +3 -2
  39. package/src/util.ts +6 -0
  40. package/src/wire-protocol.ts +204 -29
  41. package/src/sql-analyzer.test.ts +0 -599
  42. package/src/sql-analyzer.ts +0 -439
@@ -1,15 +1,40 @@
1
- import { HrTime } from "@opentelemetry/api";
2
- export type ObservationInputMessage = InitMessage | NewObservedEntityMessage | NewObservedInteractionMessage | ObservationMessage;
3
- export type ObservationOutputMessage = InitAck | ObservedAck | ObservationsAck;
1
+ export type HrTime = [number, number];
2
+ export type ObservationInputMessage = InitMessage | StartProcessContextMessage | EndContextMessage | NewObservedEntityMessage | NewObservedInteractionMessage | ObservationMessage | TimeSeriesMetricsMessage | CumulativeMetricsMessage | TraceSpansMessage | DatabaseQueryMessage;
3
+ export type ObservationOutputMessage = InitAck | ContextAck | CustomMetricChange | ObservedAck | ObservationsAck | TimeSeriesMetricsAck | CumulativeMetricsAck | TraceSpansAck | DatabaseQueryAck;
4
4
  export interface InitMessage {
5
5
  event: "init";
6
- protocolVersion: 1;
6
+ protocolVersion: 2;
7
7
  token: string;
8
8
  }
9
+ export interface InitAck {
10
+ type: "ack-authorized";
11
+ customMetrics: CustomMetricSpecification[];
12
+ }
13
+ export interface StartProcessContextMessage {
14
+ event: "context-start";
15
+ seq: number;
16
+ timestamp: HrTime;
17
+ ingestionId: string;
18
+ type: "process";
19
+ serviceEntityHash: string;
20
+ resources: {
21
+ [key: string]: AttributeType;
22
+ };
23
+ }
24
+ export interface EndContextMessage {
25
+ event: "context-end";
26
+ seq: number;
27
+ timestamp: HrTime;
28
+ ingestionId: string;
29
+ }
30
+ export interface ContextAck {
31
+ type: "ack-context";
32
+ seq: number;
33
+ }
9
34
  export interface NewObservedEntityMessage {
10
35
  event: "new-entity";
11
- type: string;
12
36
  hash: string;
37
+ type: string;
13
38
  }
14
39
  export interface NewObservedServiceMessage extends NewObservedEntityMessage {
15
40
  type: "service";
@@ -36,12 +61,16 @@ export interface NewObservedHttpServiceMessage extends NewObservedEntityMessage
36
61
  host: string;
37
62
  port: number;
38
63
  }
64
+ export interface ObservedAck {
65
+ type: "ack-observed";
66
+ hash: string;
67
+ }
39
68
  export interface NewObservedInteractionMessage {
40
69
  event: "new-interaction";
41
- type: string;
42
70
  hash: string;
43
71
  from: string;
44
72
  to: string;
73
+ type: string;
45
74
  }
46
75
  export interface NewObservedHttpRequestMessage extends NewObservedInteractionMessage {
47
76
  type: "http-request";
@@ -51,28 +80,23 @@ export interface NewObservedDatabaseConnectionMessage extends NewObservedInterac
51
80
  connection?: string;
52
81
  user?: string;
53
82
  }
54
- export interface NewObservedDatabaseQueryMessage extends NewObservedInteractionMessage {
55
- type: "db-query";
56
- query: string;
57
- selects?: string[];
58
- inserts?: string[];
59
- updates?: string[];
60
- deletes?: string[];
61
- }
62
83
  export interface ObservationMessage {
63
84
  event: "observations";
64
85
  seq: number;
65
86
  observations: Array<Observation>;
66
87
  }
67
- export interface Observation {
68
- type: string;
88
+ export type Observation = HttpClientObservation | HttpServerObservation | CustomObservation;
89
+ interface BaseObservation {
69
90
  subject: string;
91
+ spanId: string;
92
+ traceId: string;
70
93
  timestamp: HrTime;
71
94
  errorMessage?: string;
72
95
  errorType?: string;
73
96
  stack?: string;
97
+ type: string;
74
98
  }
75
- export interface HttpClientObservation extends Observation {
99
+ export interface HttpClientObservation extends BaseObservation {
76
100
  type: "http-client";
77
101
  path: string;
78
102
  method: string;
@@ -82,7 +106,7 @@ export interface HttpClientObservation extends Observation {
82
106
  requestBytes?: number;
83
107
  responseBytes?: number;
84
108
  }
85
- export interface HttpServerObservation extends Observation {
109
+ export interface HttpServerObservation extends BaseObservation {
86
110
  type: "http-server";
87
111
  path: string;
88
112
  status: number;
@@ -92,19 +116,135 @@ export interface HttpServerObservation extends Observation {
92
116
  responseBytes?: number;
93
117
  userAgent?: string;
94
118
  }
95
- export interface DatabaseQueryObservation extends Observation {
96
- type: "db-query";
119
+ export type AttributeType = string | number | boolean;
120
+ export interface CustomObservation extends BaseObservation {
121
+ type: "custom";
122
+ id: string;
123
+ attributes: {
124
+ [key: string]: AttributeType;
125
+ };
126
+ }
127
+ export interface ObservationsAck {
128
+ type: "ack-observations";
129
+ seq: number;
130
+ }
131
+ export interface TimeSeriesMetricsMessage {
132
+ event: "timeseries";
133
+ seq: number;
134
+ data: TimeSeriesDataPoint[];
135
+ }
136
+ export interface TimeSeriesDataPoint {
137
+ subject: string;
138
+ type: string;
139
+ timestamp: HrTime;
140
+ value: number;
141
+ unit: string;
142
+ attributes: {
143
+ [key: string]: AttributeType;
144
+ };
145
+ }
146
+ export interface TimeSeriesMetricsAck {
147
+ type: "ack-timeseries";
148
+ seq: number;
149
+ }
150
+ export interface CumulativeMetricsMessage {
151
+ event: "cumulative";
152
+ seq: number;
153
+ data: CumulativeDataPoint[];
154
+ }
155
+ export interface CumulativeDataPoint {
156
+ subject: string;
157
+ type: string;
158
+ timestamp: HrTime;
159
+ value: number;
160
+ unit: string;
161
+ attributes: {
162
+ [key: string]: AttributeType;
163
+ };
164
+ }
165
+ export interface CumulativeMetricsAck {
166
+ type: "ack-cumulative";
167
+ seq: number;
168
+ }
169
+ export interface TraceSpansMessage {
170
+ event: "tracespans";
171
+ seq: number;
172
+ data: TraceSpan[];
173
+ }
174
+ export interface TraceSpan {
175
+ trace: string;
176
+ span: string;
177
+ parent: string;
178
+ name: string;
179
+ timestamp: HrTime;
180
+ }
181
+ export interface TraceSpansAck {
182
+ type: "ack-tracespans";
183
+ seq: number;
184
+ }
185
+ export interface DatabaseQueryMessage {
186
+ event: "db-query";
187
+ seq: number;
188
+ query: string;
189
+ from: string;
190
+ to: string;
191
+ timestamp: HrTime;
97
192
  duration: HrTime;
193
+ traceId?: string;
194
+ spanId?: string;
195
+ errorMessage?: string;
196
+ errorType?: string;
197
+ stack?: string;
98
198
  returnedRows?: number;
99
199
  }
100
- export interface InitAck {
101
- type: "ack-authorized";
200
+ export interface DatabaseQueryAck {
201
+ type: "ack-db-query";
202
+ seq: number;
102
203
  }
103
- export interface ObservedAck {
104
- type: "ack-observed";
105
- hash: string;
204
+ export interface CustomMetricChange {
205
+ type: "custom-metric-change";
206
+ customMetrics: CustomMetricSpecification[];
106
207
  }
107
- export interface ObservationsAck {
108
- type: "ack-observations";
109
- seq: number;
208
+ export type CustomMetricSpecification = CustomCumulativeMetricSpecification | CustomTimeSeriesMetricSpecification | CustomSpanObservationSpecification;
209
+ export interface CustomCumulativeMetricSpecification {
210
+ type: "cumulative";
211
+ id: string;
212
+ attributes: string[];
213
+ subject: string;
214
+ }
215
+ export interface CustomTimeSeriesMetricSpecification {
216
+ type: "timeseries";
217
+ id: string;
218
+ attributes: string[];
219
+ subject: string;
220
+ }
221
+ export interface CustomSpanObservationSpecification {
222
+ type: "span";
223
+ rule: SpanMatcherRule;
224
+ subject: string;
110
225
  }
226
+ export type SpanMatcherRule = {
227
+ kind: "type";
228
+ value: "client" | "server" | "internal";
229
+ } | {
230
+ kind: "attribute-present";
231
+ key: string;
232
+ } | {
233
+ kind: "attribute-absent";
234
+ key: string;
235
+ } | {
236
+ kind: "attribute-equals";
237
+ key: string;
238
+ value: string;
239
+ } | {
240
+ kind: "attribute-not-equals";
241
+ key: string;
242
+ value: string;
243
+ } | {
244
+ kind: "all";
245
+ rules: SpanMatcherRule[];
246
+ } | {
247
+ kind: "any";
248
+ rules: SpanMatcherRule[];
249
+ };
250
+ export {};
package/jest.config.js CHANGED
@@ -8,4 +8,5 @@ module.exports = {
8
8
  transform: {
9
9
  ...tsJestTransformCfg,
10
10
  },
11
+ testPathIgnorePatterns: ["/node_modules/", "/dist/"],
11
12
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@comprehend/telemetry-node",
3
- "version": "0.1.3",
3
+ "version": "0.2.0",
4
4
  "description": "Integration of comprehend.dev with OpenTelemetry in Node.js and similar environemnts.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -10,7 +10,7 @@
10
10
  "test": "jest"
11
11
  },
12
12
  "keywords": [],
13
- "author": "Comprehend AB",
13
+ "author": "Comprehend.dev AB",
14
14
  "license": "LicenseRef-Proprietary-Audit",
15
15
  "private": false,
16
16
  "dependencies": {
@@ -19,10 +19,12 @@
19
19
  },
20
20
  "peerDependencies": {
21
21
  "@opentelemetry/api": "^1.9.0",
22
+ "@opentelemetry/sdk-metrics": "^2.0.0",
22
23
  "@opentelemetry/sdk-trace-base": "^2.0.1"
23
24
  },
24
25
  "devDependencies": {
25
26
  "@opentelemetry/api": "^1.9.0",
27
+ "@opentelemetry/sdk-metrics": "^2.5.1",
26
28
  "@opentelemetry/sdk-trace-base": "^2.0.1",
27
29
  "@types/jest": "^29.5.14",
28
30
  "@types/node": "^22.14.1",