flow-debugger 1.9.7 → 1.9.9

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 (78) hide show
  1. package/ENHANCED_OBSERVABILITY.md +835 -0
  2. package/IMPLEMENTATION_SUMMARY.md +466 -0
  3. package/README.md +147 -8
  4. package/bin/cli.js +1 -1
  5. package/dist/cjs/core/Alerting.js +310 -0
  6. package/dist/cjs/core/Alerting.js.map +1 -0
  7. package/dist/cjs/core/AnomalyDetection.js +223 -0
  8. package/dist/cjs/core/AnomalyDetection.js.map +1 -0
  9. package/dist/cjs/core/DependencyGraph.js +251 -0
  10. package/dist/cjs/core/DependencyGraph.js.map +1 -0
  11. package/dist/cjs/core/DistributedTracing.js +245 -0
  12. package/dist/cjs/core/DistributedTracing.js.map +1 -0
  13. package/dist/cjs/core/ErrorClustering.js +257 -0
  14. package/dist/cjs/core/ErrorClustering.js.map +1 -0
  15. package/dist/cjs/core/LogCorrelation.js +242 -0
  16. package/dist/cjs/core/LogCorrelation.js.map +1 -0
  17. package/dist/cjs/core/Metrics.js +301 -0
  18. package/dist/cjs/core/Metrics.js.map +1 -0
  19. package/dist/cjs/core/RootCause.js +107 -9
  20. package/dist/cjs/core/RootCause.js.map +1 -1
  21. package/dist/cjs/core/TrendAnalysis.js +254 -0
  22. package/dist/cjs/core/TrendAnalysis.js.map +1 -0
  23. package/dist/cjs/core/types.js +14 -0
  24. package/dist/cjs/core/types.js.map +1 -1
  25. package/dist/cjs/index.js +27 -1
  26. package/dist/cjs/index.js.map +1 -1
  27. package/dist/cjs/middleware/express.js +105 -4
  28. package/dist/cjs/middleware/express.js.map +1 -1
  29. package/dist/esm/core/Alerting.js +305 -0
  30. package/dist/esm/core/Alerting.js.map +1 -0
  31. package/dist/esm/core/AnomalyDetection.js +218 -0
  32. package/dist/esm/core/AnomalyDetection.js.map +1 -0
  33. package/dist/esm/core/DependencyGraph.js +246 -0
  34. package/dist/esm/core/DependencyGraph.js.map +1 -0
  35. package/dist/esm/core/DistributedTracing.js +240 -0
  36. package/dist/esm/core/DistributedTracing.js.map +1 -0
  37. package/dist/esm/core/ErrorClustering.js +252 -0
  38. package/dist/esm/core/ErrorClustering.js.map +1 -0
  39. package/dist/esm/core/LogCorrelation.js +236 -0
  40. package/dist/esm/core/LogCorrelation.js.map +1 -0
  41. package/dist/esm/core/Metrics.js +297 -0
  42. package/dist/esm/core/Metrics.js.map +1 -0
  43. package/dist/esm/core/RootCause.js +107 -9
  44. package/dist/esm/core/RootCause.js.map +1 -1
  45. package/dist/esm/core/TrendAnalysis.js +250 -0
  46. package/dist/esm/core/TrendAnalysis.js.map +1 -0
  47. package/dist/esm/core/types.js +14 -0
  48. package/dist/esm/core/types.js.map +1 -1
  49. package/dist/esm/index.js +10 -0
  50. package/dist/esm/index.js.map +1 -1
  51. package/dist/esm/middleware/express.js +105 -4
  52. package/dist/esm/middleware/express.js.map +1 -1
  53. package/dist/types/core/Alerting.d.ts +82 -0
  54. package/dist/types/core/Alerting.d.ts.map +1 -0
  55. package/dist/types/core/AnomalyDetection.d.ts +93 -0
  56. package/dist/types/core/AnomalyDetection.d.ts.map +1 -0
  57. package/dist/types/core/DependencyGraph.d.ts +65 -0
  58. package/dist/types/core/DependencyGraph.d.ts.map +1 -0
  59. package/dist/types/core/DistributedTracing.d.ts +92 -0
  60. package/dist/types/core/DistributedTracing.d.ts.map +1 -0
  61. package/dist/types/core/ErrorClustering.d.ts +70 -0
  62. package/dist/types/core/ErrorClustering.d.ts.map +1 -0
  63. package/dist/types/core/LogCorrelation.d.ts +73 -0
  64. package/dist/types/core/LogCorrelation.d.ts.map +1 -0
  65. package/dist/types/core/Metrics.d.ts +73 -0
  66. package/dist/types/core/Metrics.d.ts.map +1 -0
  67. package/dist/types/core/RootCause.d.ts +9 -5
  68. package/dist/types/core/RootCause.d.ts.map +1 -1
  69. package/dist/types/core/TrendAnalysis.d.ts +63 -0
  70. package/dist/types/core/TrendAnalysis.d.ts.map +1 -0
  71. package/dist/types/core/types.d.ts +200 -0
  72. package/dist/types/core/types.d.ts.map +1 -1
  73. package/dist/types/index.d.ts +9 -1
  74. package/dist/types/index.d.ts.map +1 -1
  75. package/dist/types/middleware/express.d.ts +12 -0
  76. package/dist/types/middleware/express.d.ts.map +1 -1
  77. package/package.json +3 -3
  78. package/test-results.json +1 -0
@@ -0,0 +1,246 @@
1
+ // ─────────────────────────────────────────────────────────────
2
+ // flow-debugger — Dependency Graph System
3
+ // Maps service dependencies and their health
4
+ // ─────────────────────────────────────────────────────────────
5
+ /**
6
+ * Dependency Graph Manager - Tracks service dependencies and relationships
7
+ */
8
+ export class DependencyGraphManager {
9
+ constructor() {
10
+ this.nodes = new Map();
11
+ this.edges = new Map();
12
+ this.lastUpdated = new Date();
13
+ }
14
+ /**
15
+ * Process a trace and update dependency graph
16
+ */
17
+ processTrace(trace) {
18
+ // Create/update endpoint node
19
+ const endpointId = `${trace.method}:${trace.endpoint}`;
20
+ this.updateNode(endpointId, trace.endpoint, 'internal', {
21
+ avgLatency: trace.totalDuration,
22
+ errorRate: trace.classification === 'ERROR' || trace.classification === 'CRITICAL' ? 1 : 0,
23
+ requestCount: 1,
24
+ });
25
+ // Process each step
26
+ trace.steps.forEach(step => {
27
+ if (step.service !== 'internal') {
28
+ const serviceId = step.service;
29
+ this.updateNode(serviceId, this.getServiceName(step.service), step.service, {
30
+ avgLatency: step.duration,
31
+ errorRate: step.status === 'error' || step.status === 'timeout' ? 1 : 0,
32
+ requestCount: 1,
33
+ });
34
+ // Create/update edge from endpoint to service
35
+ this.updateEdge(endpointId, serviceId, {
36
+ callCount: 1,
37
+ avgLatency: step.duration,
38
+ errorCount: step.status === 'error' || step.status === 'timeout' ? 1 : 0,
39
+ });
40
+ }
41
+ });
42
+ this.lastUpdated = new Date();
43
+ }
44
+ /**
45
+ * Get the complete dependency graph
46
+ */
47
+ getGraph() {
48
+ return {
49
+ nodes: Array.from(this.nodes.values()),
50
+ edges: this.getAllEdges(),
51
+ updatedAt: this.lastUpdated,
52
+ };
53
+ }
54
+ /**
55
+ * Get node by ID
56
+ */
57
+ getNode(id) {
58
+ return this.nodes.get(id);
59
+ }
60
+ /**
61
+ * Get all nodes
62
+ */
63
+ getNodes() {
64
+ return Array.from(this.nodes.values());
65
+ }
66
+ /**
67
+ * Get edges for a node
68
+ */
69
+ getEdges(nodeId) {
70
+ const nodeEdges = this.edges.get(nodeId);
71
+ if (!nodeEdges)
72
+ return [];
73
+ return Array.from(nodeEdges.values());
74
+ }
75
+ /**
76
+ * Get all edges
77
+ */
78
+ getAllEdges() {
79
+ const allEdges = [];
80
+ this.edges.forEach((targetMap, sourceId) => {
81
+ targetMap.forEach(edge => {
82
+ allEdges.push({ ...edge, from: sourceId });
83
+ });
84
+ });
85
+ return allEdges;
86
+ }
87
+ /**
88
+ * Get critical path (highest latency chain)
89
+ */
90
+ getCriticalPath() {
91
+ const edges = this.getAllEdges();
92
+ if (edges.length === 0)
93
+ return null;
94
+ // Find root nodes (no incoming edges)
95
+ const targets = new Set(edges.map(e => e.to));
96
+ const roots = Array.from(this.nodes.keys()).filter(id => !targets.has(id));
97
+ if (roots.length === 0)
98
+ return null;
99
+ // DFS to find longest path
100
+ let maxPath = [];
101
+ let maxLatency = 0;
102
+ const dfs = (nodeId, path, latency) => {
103
+ path.push(nodeId);
104
+ latency += this.nodes.get(nodeId)?.avgLatency || 0;
105
+ const outgoing = this.getEdges(nodeId);
106
+ if (outgoing.length === 0) {
107
+ if (latency > maxLatency) {
108
+ maxLatency = latency;
109
+ maxPath = [...path];
110
+ }
111
+ }
112
+ else {
113
+ outgoing.forEach(edge => {
114
+ dfs(edge.to, path, latency + edge.avgLatency);
115
+ });
116
+ }
117
+ path.pop();
118
+ };
119
+ roots.forEach(root => dfs(root, [], 0));
120
+ return maxPath.length > 0 ? { path: maxPath, totalLatency: maxLatency } : null;
121
+ }
122
+ /**
123
+ * Get unhealthy dependencies
124
+ */
125
+ getUnhealthyDependencies() {
126
+ return Array.from(this.nodes.values()).filter(n => n.status !== 'healthy');
127
+ }
128
+ /**
129
+ * Get top slow dependencies
130
+ */
131
+ getTopSlowDependencies(limit = 10) {
132
+ return Array.from(this.nodes.values())
133
+ .sort((a, b) => b.avgLatency - a.avgLatency)
134
+ .slice(0, limit);
135
+ }
136
+ /**
137
+ * Get top error-prone dependencies
138
+ */
139
+ getTopErrorProneDependencies(limit = 10) {
140
+ return Array.from(this.nodes.values())
141
+ .filter(n => n.requestCount > 0)
142
+ .sort((a, b) => b.errorRate - a.errorRate)
143
+ .slice(0, limit);
144
+ }
145
+ /**
146
+ * Clear graph
147
+ */
148
+ clear() {
149
+ this.nodes.clear();
150
+ this.edges.clear();
151
+ }
152
+ updateNode(id, name, type, delta) {
153
+ const existing = this.nodes.get(id);
154
+ if (!existing) {
155
+ this.nodes.set(id, {
156
+ id,
157
+ name,
158
+ type,
159
+ status: 'healthy',
160
+ avgLatency: delta.avgLatency,
161
+ errorRate: delta.errorRate / delta.requestCount,
162
+ requestCount: delta.requestCount,
163
+ });
164
+ }
165
+ else {
166
+ // Exponential moving average
167
+ const alpha = 0.3;
168
+ existing.avgLatency = existing.avgLatency * (1 - alpha) + delta.avgLatency * alpha;
169
+ existing.requestCount += delta.requestCount;
170
+ const totalErrors = existing.errorRate * (existing.requestCount - delta.requestCount) + delta.errorRate;
171
+ existing.errorRate = totalErrors / existing.requestCount;
172
+ // Update status based on error rate
173
+ existing.status = this.calculateStatus(existing.errorRate);
174
+ }
175
+ }
176
+ updateEdge(from, to, delta) {
177
+ if (!this.edges.has(from)) {
178
+ this.edges.set(from, new Map());
179
+ }
180
+ const targetMap = this.edges.get(from);
181
+ const existing = targetMap.get(to);
182
+ if (!existing) {
183
+ targetMap.set(to, {
184
+ from,
185
+ to,
186
+ callCount: delta.callCount,
187
+ avgLatency: delta.avgLatency,
188
+ errorCount: delta.errorCount,
189
+ });
190
+ }
191
+ else {
192
+ // Exponential moving average
193
+ const alpha = 0.3;
194
+ existing.callCount += delta.callCount;
195
+ existing.avgLatency = existing.avgLatency * (1 - alpha) + delta.avgLatency * alpha;
196
+ existing.errorCount += delta.errorCount;
197
+ }
198
+ }
199
+ calculateStatus(errorRate) {
200
+ if (errorRate >= 0.5)
201
+ return 'down';
202
+ if (errorRate >= 0.1)
203
+ return 'degraded';
204
+ return 'healthy';
205
+ }
206
+ getServiceName(service) {
207
+ const names = {
208
+ mongo: 'MongoDB',
209
+ mysql: 'MySQL',
210
+ postgres: 'PostgreSQL',
211
+ redis: 'Redis',
212
+ axios: 'HTTP Client',
213
+ fetch: 'Fetch API',
214
+ stripe: 'Stripe',
215
+ razorpay: 'Razorpay',
216
+ sendgrid: 'SendGrid',
217
+ twilio: 'Twilio',
218
+ external: 'External API',
219
+ internal: 'Internal',
220
+ unknown: 'Unknown',
221
+ };
222
+ return names[service] || service;
223
+ }
224
+ }
225
+ /**
226
+ * Visualize dependency graph as ASCII (for console)
227
+ */
228
+ export function visualizeDependencyGraph(graph) {
229
+ const lines = [];
230
+ lines.push('┌─ Dependency Graph ────────────────────────────┐');
231
+ graph.nodes.forEach(node => {
232
+ const statusIcon = node.status === 'healthy' ? '✔' : node.status === 'degraded' ? '⚠' : '✖';
233
+ lines.push(`│ ${statusIcon} ${node.name.padEnd(20)} ${node.avgLatency.toFixed(0)}ms ${(node.errorRate * 100).toFixed(1)}% errors`);
234
+ // Show outgoing edges
235
+ const edges = graph.edges.filter(e => e.from === node.id);
236
+ edges.forEach(edge => {
237
+ const targetNode = graph.nodes.find(n => n.id === edge.to);
238
+ if (targetNode) {
239
+ lines.push(`│ └─→ ${targetNode.name} (${edge.callCount} calls)`);
240
+ }
241
+ });
242
+ });
243
+ lines.push('└─────────────────────────────────────────────────┘');
244
+ return lines.join('\n');
245
+ }
246
+ //# sourceMappingURL=DependencyGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DependencyGraph.js","sourceRoot":"","sources":["../../../src/core/DependencyGraph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,240 @@
1
+ // ─────────────────────────────────────────────────────────────
2
+ // flow-debugger — Distributed Tracing (W3C Trace Context)
3
+ // Enables multi-service tracing with standard propagation
4
+ // ─────────────────────────────────────────────────────────────
5
+ /**
6
+ * W3C Trace Context implementation
7
+ * Format: traceparent: 00-{traceId}-{spanId}-{traceFlags}
8
+ * https://www.w3.org/TR/trace-context/
9
+ */
10
+ export class DistributedTracer {
11
+ /**
12
+ * Generate a 128-bit trace ID (32 hex chars)
13
+ */
14
+ static generateTraceId() {
15
+ const high = this.randomHex(16);
16
+ const low = this.randomHex(16);
17
+ return high + low;
18
+ }
19
+ /**
20
+ * Generate a 64-bit span ID (16 hex chars)
21
+ */
22
+ static generateSpanId() {
23
+ return this.randomHex(16);
24
+ }
25
+ static randomHex(length) {
26
+ const bytes = new Uint8Array(length / 2);
27
+ crypto.getRandomValues(bytes);
28
+ return Array.from(bytes)
29
+ .map(b => b.toString(16).padStart(2, '0'))
30
+ .join('');
31
+ }
32
+ /**
33
+ * Create traceparent header from context
34
+ */
35
+ static createTraceparent(context) {
36
+ const traceFlags = context.sampled ? this.TRACE_FLAG_SAMPLED : this.TRACE_FLAG_NOT_SAMPLED;
37
+ return `${this.TRACEPARENT_VERSION}-${context.traceId}-${context.spanId}-${traceFlags}`;
38
+ }
39
+ /**
40
+ * Parse traceparent header into context
41
+ */
42
+ static parseTraceparent(traceparent) {
43
+ try {
44
+ const parts = traceparent.split('-');
45
+ if (parts.length !== 4)
46
+ return null;
47
+ const [version, traceId, spanId, traceFlags] = parts;
48
+ if (version !== '00')
49
+ return null;
50
+ return {
51
+ traceId,
52
+ spanId,
53
+ parentSpanId: undefined,
54
+ sampled: traceFlags === '01',
55
+ };
56
+ }
57
+ catch {
58
+ return null;
59
+ }
60
+ }
61
+ /**
62
+ * Create tracestate header for vendor-specific data
63
+ */
64
+ static createTracestate(vendorData) {
65
+ return Object.entries(vendorData)
66
+ .map(([key, value]) => `${key}=${value}`)
67
+ .join(',');
68
+ }
69
+ /**
70
+ * Parse tracestate header
71
+ */
72
+ static parseTracestate(tracestate) {
73
+ try {
74
+ return tracestate.split(',').reduce((acc, pair) => {
75
+ const [key, value] = pair.split('=');
76
+ if (key && value) {
77
+ acc[key.trim()] = value.trim();
78
+ }
79
+ return acc;
80
+ }, {});
81
+ }
82
+ catch {
83
+ return {};
84
+ }
85
+ }
86
+ /**
87
+ * Extract context from incoming headers
88
+ */
89
+ static extractContext(headers) {
90
+ const traceparent = headers['traceparent'] || headers['Traceparent'] || headers['TRACEPARENT'];
91
+ if (!traceparent || typeof traceparent !== 'string')
92
+ return null;
93
+ const context = this.parseTraceparent(traceparent);
94
+ if (!context)
95
+ return null;
96
+ // Extract tracestate if present
97
+ const tracestate = headers['tracestate'] || headers['Tracestate'] || headers['TRACESTATE'];
98
+ if (tracestate && typeof tracestate === 'string') {
99
+ context.tracestate = this.parseTracestate(tracestate);
100
+ }
101
+ return context;
102
+ }
103
+ /**
104
+ * Inject context into outgoing headers
105
+ */
106
+ static injectContext(context, headers) {
107
+ headers['traceparent'] = this.createTraceparent(context);
108
+ if (context.tracestate && Object.keys(context.tracestate).length > 0) {
109
+ headers['tracestate'] = this.createTracestate(context.tracestate);
110
+ }
111
+ }
112
+ /**
113
+ * Create a new span context for child operations
114
+ */
115
+ static createChildContext(parent) {
116
+ return {
117
+ traceId: parent.traceId,
118
+ spanId: this.generateSpanId(),
119
+ parentSpanId: parent.spanId,
120
+ sampled: parent.sampled,
121
+ tracestate: parent.tracestate ? { ...parent.tracestate } : undefined,
122
+ };
123
+ }
124
+ /**
125
+ * Create a root context for new traces
126
+ */
127
+ static createRootContext(sampled = true) {
128
+ return {
129
+ traceId: this.generateTraceId(),
130
+ spanId: this.generateSpanId(),
131
+ parentSpanId: undefined,
132
+ sampled,
133
+ };
134
+ }
135
+ }
136
+ DistributedTracer.TRACEPARENT_VERSION = '00';
137
+ DistributedTracer.TRACE_FLAG_SAMPLED = '01';
138
+ DistributedTracer.TRACE_FLAG_NOT_SAMPLED = '00';
139
+ /**
140
+ * Span manager for nested span tracking
141
+ */
142
+ export class SpanManager {
143
+ constructor() {
144
+ this.spans = new Map();
145
+ }
146
+ /**
147
+ * Start a new span
148
+ */
149
+ startSpan(name, context, parentSpanId) {
150
+ const span = {
151
+ id: context.spanId,
152
+ traceId: context.traceId,
153
+ parentSpanId: parentSpanId || context.parentSpanId,
154
+ name,
155
+ startTime: performance.now(),
156
+ endTime: undefined,
157
+ duration: undefined,
158
+ status: 'pending',
159
+ attributes: {},
160
+ events: [],
161
+ context,
162
+ };
163
+ this.spans.set(span.id, span);
164
+ if (!this.rootSpanId && !parentSpanId) {
165
+ this.rootSpanId = span.id;
166
+ }
167
+ return span;
168
+ }
169
+ /**
170
+ * End a span
171
+ */
172
+ endSpan(spanId, status = 'success') {
173
+ const span = this.spans.get(spanId);
174
+ if (!span)
175
+ return null;
176
+ span.endTime = performance.now();
177
+ span.duration = span.endTime - span.startTime;
178
+ span.status = status;
179
+ return span;
180
+ }
181
+ /**
182
+ * Add attribute to a span
183
+ */
184
+ setAttribute(spanId, key, value) {
185
+ const span = this.spans.get(spanId);
186
+ if (span) {
187
+ span.attributes[key] = value;
188
+ }
189
+ }
190
+ /**
191
+ * Add event to a span
192
+ */
193
+ addEvent(spanId, name, attributes) {
194
+ const span = this.spans.get(spanId);
195
+ if (span) {
196
+ span.events.push({
197
+ name,
198
+ timestamp: performance.now(),
199
+ attributes,
200
+ });
201
+ }
202
+ }
203
+ /**
204
+ * Get span by ID
205
+ */
206
+ getSpan(spanId) {
207
+ return this.spans.get(spanId);
208
+ }
209
+ /**
210
+ * Get all spans in this trace
211
+ */
212
+ getAllSpans() {
213
+ return Array.from(this.spans.values());
214
+ }
215
+ /**
216
+ * Get span hierarchy (tree structure)
217
+ */
218
+ getSpanTree() {
219
+ const spans = this.getAllSpans();
220
+ const rootSpans = spans.filter(s => !s.parentSpanId);
221
+ const spanMap = new Map(spans.map(s => [s.id, { ...s, children: [] }]));
222
+ spans.forEach(span => {
223
+ if (span.parentSpanId) {
224
+ const parent = spanMap.get(span.parentSpanId);
225
+ if (parent) {
226
+ parent.children.push(spanMap.get(span.id));
227
+ }
228
+ }
229
+ });
230
+ return rootSpans.map(s => spanMap.get(s.id));
231
+ }
232
+ /**
233
+ * Clear all spans
234
+ */
235
+ clear() {
236
+ this.spans.clear();
237
+ this.rootSpanId = undefined;
238
+ }
239
+ }
240
+ //# sourceMappingURL=DistributedTracing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DistributedTracing.js","sourceRoot":"","sources":["../../../src/core/DistributedTracing.ts"],"names":[],"mappings":"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"}