@confluentinc/mcp-confluent 1.0.6 → 1.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 (145) hide show
  1. package/README.md +608 -297
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +10 -0
  5. package/dist/cli.js.map +1 -1
  6. package/dist/confluent/client-manager.d.ts +9 -0
  7. package/dist/confluent/client-manager.d.ts.map +1 -1
  8. package/dist/confluent/client-manager.js +35 -4
  9. package/dist/confluent/client-manager.js.map +1 -1
  10. package/dist/confluent/middleware.d.ts +3 -2
  11. package/dist/confluent/middleware.d.ts.map +1 -1
  12. package/dist/confluent/middleware.js +9 -1
  13. package/dist/confluent/middleware.js.map +1 -1
  14. package/dist/confluent/node-deps.d.ts +60 -0
  15. package/dist/confluent/node-deps.d.ts.map +1 -0
  16. package/dist/confluent/node-deps.js +12 -0
  17. package/dist/confluent/node-deps.js.map +1 -0
  18. package/dist/confluent/telemetry.d.ts +18 -0
  19. package/dist/confluent/telemetry.d.ts.map +1 -0
  20. package/dist/confluent/telemetry.js +104 -0
  21. package/dist/confluent/telemetry.js.map +1 -0
  22. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts +11 -0
  23. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts.map +1 -0
  24. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.js +174 -0
  25. package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.js.map +1 -0
  26. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.d.ts +7 -141
  27. package/dist/confluent/tools/handlers/clusters/list-clusters-handler.d.ts.map +1 -1
  28. package/dist/confluent/tools/handlers/environments/list-environments-handler.d.ts +8 -164
  29. package/dist/confluent/tools/handlers/environments/list-environments-handler.d.ts.map +1 -1
  30. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts +77 -0
  31. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts.map +1 -0
  32. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js +136 -0
  33. package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js.map +1 -0
  34. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.d.ts +11 -0
  35. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.d.ts.map +1 -0
  36. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js +111 -0
  37. package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js.map +1 -0
  38. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.d.ts +11 -0
  39. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.d.ts.map +1 -0
  40. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js +110 -0
  41. package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js.map +1 -0
  42. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.d.ts +11 -0
  43. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.d.ts.map +1 -0
  44. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js +74 -0
  45. package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js.map +1 -0
  46. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.d.ts +11 -0
  47. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.d.ts.map +1 -0
  48. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js +81 -0
  49. package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js.map +1 -0
  50. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.d.ts +11 -0
  51. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.d.ts.map +1 -0
  52. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js +90 -0
  53. package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js.map +1 -0
  54. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.d.ts +11 -0
  55. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.d.ts.map +1 -0
  56. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js +131 -0
  57. package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js.map +1 -0
  58. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.d.ts +11 -0
  59. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.d.ts.map +1 -0
  60. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js +248 -0
  61. package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js.map +1 -0
  62. package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.d.ts +88 -0
  63. package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.d.ts.map +1 -0
  64. package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.js +443 -0
  65. package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.js.map +1 -0
  66. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.d.ts +11 -0
  67. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.d.ts.map +1 -0
  68. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js +398 -0
  69. package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js.map +1 -0
  70. package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts +23 -0
  71. package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts.map +1 -0
  72. package/dist/confluent/tools/handlers/flink/flink-sql-helper.js +133 -0
  73. package/dist/confluent/tools/handlers/flink/flink-sql-helper.js.map +1 -0
  74. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.d.ts +11 -0
  75. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.d.ts.map +1 -0
  76. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js +72 -0
  77. package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js.map +1 -0
  78. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.d.ts.map +1 -1
  79. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js +20 -3
  80. package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js.map +1 -1
  81. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.d.ts +6 -54
  82. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.d.ts.map +1 -1
  83. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js +1 -1
  84. package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js.map +1 -1
  85. package/dist/confluent/tools/handlers/kafka/create-topics-handler.js +1 -1
  86. package/dist/confluent/tools/handlers/kafka/create-topics-handler.js.map +1 -1
  87. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js +1 -1
  88. package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js.map +1 -1
  89. package/dist/confluent/tools/handlers/kafka/list-topics-handler.js +1 -1
  90. package/dist/confluent/tools/handlers/kafka/list-topics-handler.js.map +1 -1
  91. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js +1 -1
  92. package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js.map +1 -1
  93. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts +11 -0
  94. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts.map +1 -0
  95. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js +193 -0
  96. package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js.map +1 -0
  97. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts +11 -0
  98. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts.map +1 -0
  99. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js +224 -0
  100. package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js.map +1 -0
  101. package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts +10 -0
  102. package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts.map +1 -0
  103. package/dist/confluent/tools/handlers/schema/delete-schema-handler.js +71 -0
  104. package/dist/confluent/tools/handlers/schema/delete-schema-handler.js.map +1 -0
  105. package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts.map +1 -1
  106. package/dist/confluent/tools/handlers/schema/list-schemas-handler.js +1 -5
  107. package/dist/confluent/tools/handlers/schema/list-schemas-handler.js.map +1 -1
  108. package/dist/confluent/tools/tool-factory.d.ts.map +1 -1
  109. package/dist/confluent/tools/tool-factory.js +26 -0
  110. package/dist/confluent/tools/tool-factory.js.map +1 -1
  111. package/dist/confluent/tools/tool-name.d.ts +14 -1
  112. package/dist/confluent/tools/tool-name.d.ts.map +1 -1
  113. package/dist/confluent/tools/tool-name.js +13 -0
  114. package/dist/confluent/tools/tool-name.js.map +1 -1
  115. package/dist/env-schema.d.ts +17 -62
  116. package/dist/env-schema.d.ts.map +1 -1
  117. package/dist/env-schema.js +37 -2
  118. package/dist/env-schema.js.map +1 -1
  119. package/dist/env.d.ts +8 -1
  120. package/dist/env.d.ts.map +1 -1
  121. package/dist/index.js +67 -5
  122. package/dist/index.js.map +1 -1
  123. package/dist/logger.d.ts +2 -1
  124. package/dist/logger.d.ts.map +1 -1
  125. package/dist/logger.js +1 -1
  126. package/dist/logger.js.map +1 -1
  127. package/dist/mcp/transports/auth.d.ts +55 -0
  128. package/dist/mcp/transports/auth.d.ts.map +1 -0
  129. package/dist/mcp/transports/auth.js +127 -0
  130. package/dist/mcp/transports/auth.js.map +1 -0
  131. package/dist/mcp/transports/index.d.ts +1 -0
  132. package/dist/mcp/transports/index.d.ts.map +1 -1
  133. package/dist/mcp/transports/index.js +1 -0
  134. package/dist/mcp/transports/index.js.map +1 -1
  135. package/dist/mcp/transports/manager.d.ts +13 -1
  136. package/dist/mcp/transports/manager.d.ts.map +1 -1
  137. package/dist/mcp/transports/manager.js +20 -2
  138. package/dist/mcp/transports/manager.js.map +1 -1
  139. package/dist/mcp/transports/server.d.ts +10 -1
  140. package/dist/mcp/transports/server.d.ts.map +1 -1
  141. package/dist/mcp/transports/server.js +12 -2
  142. package/dist/mcp/transports/server.js.map +1 -1
  143. package/dist/print-md-schema.js +2 -2
  144. package/dist/print-md-schema.js.map +1 -1
  145. package/package.json +20 -9
@@ -0,0 +1,443 @@
1
+ // Long.MIN_VALUE indicates no watermark set
2
+ const LONG_MIN_VALUE = -9223372036854776000;
3
+ /**
4
+ * Query Flink statement metrics from the Confluent Cloud Telemetry API.
5
+ *
6
+ * @param clientManager - The client manager with telemetry client
7
+ * @param options - Query options
8
+ * @returns Aggregated metrics for the statement
9
+ */
10
+ export async function getStatementMetrics(clientManager, options) {
11
+ const { statementName, computePoolId, intervalMinutes = 5, includeTaskBreakdown = false, includeSplitBreakdown = false, } = options;
12
+ // Calculate time range
13
+ const now = new Date();
14
+ const startTime = new Date(now.getTime() - intervalMinutes * 60 * 1000);
15
+ // Metrics to query - these are the most diagnostic-relevant ones
16
+ const metricsToQuery = [
17
+ "io.confluent.flink/num_records_in",
18
+ "io.confluent.flink/num_records_out",
19
+ "io.confluent.flink/pending_records",
20
+ "io.confluent.flink/task/backpressure_time_ms_per_second",
21
+ "io.confluent.flink/task/busy_time_ms_per_second",
22
+ "io.confluent.flink/task/idle_time_ms_per_second",
23
+ "io.confluent.flink/current_input_watermark_milliseconds",
24
+ "io.confluent.flink/current_output_watermark_milliseconds",
25
+ "io.confluent.flink/num_late_records_in",
26
+ "io.confluent.flink/max_input_lateness_milliseconds",
27
+ "io.confluent.flink/statement_utilization/current_cfus",
28
+ "io.confluent.flink/operator/state_size_bytes",
29
+ "io.confluent.flink/statement_status",
30
+ ];
31
+ try {
32
+ const telemetryClient = clientManager.getConfluentCloudTelemetryRestClient();
33
+ const metrics = {};
34
+ // Query each metric individually (API only allows one aggregation per request)
35
+ for (const metric of metricsToQuery) {
36
+ try {
37
+ const response = (await telemetryClient.POST("/v2/metrics/{dataset}/query", {
38
+ params: { path: { dataset: "cloud" } },
39
+ body: {
40
+ aggregations: [{ metric }],
41
+ filter: {
42
+ op: "AND",
43
+ filters: [
44
+ {
45
+ field: "resource.flink_statement.name",
46
+ op: "EQ",
47
+ value: statementName,
48
+ },
49
+ {
50
+ field: "resource.compute_pool.id",
51
+ op: "EQ",
52
+ value: computePoolId,
53
+ },
54
+ ],
55
+ },
56
+ granularity: "PT1M",
57
+ intervals: [`${startTime.toISOString()}/${now.toISOString()}`],
58
+ limit: 1000,
59
+ group_by: ["metric.flink_task.id"],
60
+ format: "GROUPED",
61
+ },
62
+ }));
63
+ const data = response.data;
64
+ if (data?.data && data.data.length > 0) {
65
+ // Aggregate values across all tasks
66
+ // Use SUM for counters, MAX for backpressure (bottleneck), AVG for rates
67
+ let sumValue = 0;
68
+ let maxValue = 0;
69
+ let count = 0;
70
+ for (const item of data.data) {
71
+ const points = item.points;
72
+ const pointValue = points?.[points.length - 1]?.value;
73
+ if (pointValue !== undefined &&
74
+ pointValue > LONG_MIN_VALUE + 1000000) {
75
+ sumValue += pointValue;
76
+ maxValue = Math.max(maxValue, pointValue);
77
+ count++;
78
+ }
79
+ }
80
+ if (count > 0) {
81
+ const avgValue = sumValue / count;
82
+ // Map metric names to our interface with appropriate aggregation
83
+ if (metric.includes("num_records_in") &&
84
+ !metric.includes("from_") &&
85
+ !metric.includes("late")) {
86
+ metrics.numRecordsIn = sumValue; // SUM for counters
87
+ }
88
+ else if (metric.includes("num_records_out") &&
89
+ !metric.includes("task") &&
90
+ !metric.includes("operator")) {
91
+ metrics.numRecordsOut = sumValue;
92
+ }
93
+ else if (metric.includes("pending_records")) {
94
+ metrics.pendingRecords = sumValue;
95
+ }
96
+ else if (metric.includes("backpressure_time")) {
97
+ // Convert ms/second to percentage (1000ms = 100%)
98
+ metrics.backpressureTimeMsPerSecond = (maxValue / 1000) * 100; // MAX to find bottleneck
99
+ }
100
+ else if (metric.includes("busy_time")) {
101
+ metrics.busyTimeMsPerSecond = (avgValue / 1000) * 100; // AVG as percentage
102
+ }
103
+ else if (metric.includes("idle_time") &&
104
+ metric.includes("task")) {
105
+ metrics.idleTimeMsPerSecond = (avgValue / 1000) * 100;
106
+ }
107
+ else if (metric.includes("current_input_watermark")) {
108
+ metrics.currentInputWatermarkMs = maxValue; // MAX for watermarks
109
+ }
110
+ else if (metric.includes("current_output_watermark")) {
111
+ metrics.currentOutputWatermarkMs = maxValue;
112
+ }
113
+ else if (metric.includes("num_late_records")) {
114
+ metrics.numLateRecordsIn = sumValue;
115
+ }
116
+ else if (metric.includes("max_input_lateness")) {
117
+ metrics.maxInputLatenessMs = maxValue; // MAX for lateness
118
+ }
119
+ else if (metric.includes("current_cfus")) {
120
+ metrics.currentCfus = sumValue; // SUM for CFUs
121
+ }
122
+ else if (metric.includes("state_size_bytes")) {
123
+ metrics.stateSizeBytes = sumValue; // SUM for total state
124
+ }
125
+ }
126
+ }
127
+ }
128
+ catch {
129
+ // Continue with other metrics if one fails
130
+ }
131
+ }
132
+ // Calculate watermark lag if we have both input and output watermarks
133
+ if (metrics.currentInputWatermarkMs !== undefined &&
134
+ metrics.currentOutputWatermarkMs !== undefined) {
135
+ metrics.watermarkLagMs =
136
+ metrics.currentInputWatermarkMs - metrics.currentOutputWatermarkMs;
137
+ }
138
+ // Query per-task breakdown if requested
139
+ if (includeTaskBreakdown) {
140
+ const taskMetrics = await queryTaskMetrics(telemetryClient, {
141
+ statementName,
142
+ computePoolId,
143
+ startTime,
144
+ now,
145
+ });
146
+ if (taskMetrics.length > 0) {
147
+ metrics.byTask = taskMetrics;
148
+ }
149
+ }
150
+ // Query per-split breakdown if requested
151
+ if (includeSplitBreakdown) {
152
+ const splitMetrics = await querySplitMetrics(telemetryClient, {
153
+ statementName,
154
+ computePoolId,
155
+ startTime,
156
+ now,
157
+ });
158
+ if (splitMetrics.length > 0) {
159
+ metrics.bySplit = splitMetrics;
160
+ }
161
+ }
162
+ return { success: true, metrics };
163
+ }
164
+ catch (error) {
165
+ return {
166
+ success: false,
167
+ error: `Failed to query metrics: ${error instanceof Error ? error.message : String(error)}`,
168
+ };
169
+ }
170
+ }
171
+ /**
172
+ * Analyze metrics and return diagnostic insights.
173
+ */
174
+ export function analyzeMetrics(metrics) {
175
+ const issues = [];
176
+ // Check backpressure (high backpressure indicates downstream bottleneck)
177
+ // Values are already in percentage (0-100)
178
+ if (metrics.backpressureTimeMsPerSecond !== undefined) {
179
+ const backpressurePercent = metrics.backpressureTimeMsPerSecond;
180
+ if (backpressurePercent > 50) {
181
+ issues.push({
182
+ type: "high_backpressure",
183
+ severity: "high",
184
+ description: `High backpressure detected: ${backpressurePercent.toFixed(1)}% of time spent backpressured.`,
185
+ suggestion: "Downstream operators or sinks are slow. Consider: 1) Increasing sink parallelism, 2) Optimizing sink performance, 3) Checking for slow consumers.",
186
+ value: backpressurePercent,
187
+ });
188
+ }
189
+ else if (backpressurePercent > 20) {
190
+ issues.push({
191
+ type: "moderate_backpressure",
192
+ severity: "medium",
193
+ description: `Moderate backpressure: ${backpressurePercent.toFixed(1)}% of time spent backpressured.`,
194
+ suggestion: "Some downstream slowdown detected. Monitor for increases.",
195
+ value: backpressurePercent,
196
+ });
197
+ }
198
+ }
199
+ // Check pending records (consumer lag)
200
+ if (metrics.pendingRecords !== undefined && metrics.pendingRecords > 100000) {
201
+ issues.push({
202
+ type: "high_lag",
203
+ severity: metrics.pendingRecords > 1000000 ? "high" : "medium",
204
+ description: `High consumer lag: ${metrics.pendingRecords.toLocaleString()} pending records.`,
205
+ suggestion: "Statement is falling behind input rate. Consider: 1) Increasing parallelism, 2) Optimizing query, 3) Adding more CFUs.",
206
+ value: metrics.pendingRecords,
207
+ });
208
+ }
209
+ // Check for late data
210
+ if (metrics.numLateRecordsIn !== undefined && metrics.numLateRecordsIn > 0) {
211
+ const severity = metrics.numLateRecordsIn > 10000
212
+ ? "high"
213
+ : metrics.numLateRecordsIn > 1000
214
+ ? "medium"
215
+ : "low";
216
+ issues.push({
217
+ type: "late_data",
218
+ severity,
219
+ description: `Late records detected: ${metrics.numLateRecordsIn.toLocaleString()} records arrived after watermark.`,
220
+ suggestion: "Consider: 1) Increasing watermark delay tolerance, 2) Investigating source timestamp issues, 3) Using allowed lateness in window operations.",
221
+ value: metrics.numLateRecordsIn,
222
+ });
223
+ }
224
+ // Check max lateness
225
+ if (metrics.maxInputLatenessMs !== undefined &&
226
+ metrics.maxInputLatenessMs > 60000) {
227
+ issues.push({
228
+ type: "high_lateness",
229
+ severity: metrics.maxInputLatenessMs > 300000 ? "high" : "medium",
230
+ description: `High input lateness: max ${(metrics.maxInputLatenessMs / 1000).toFixed(1)}s behind watermark.`,
231
+ suggestion: "Some records are arriving significantly late. This may cause data loss in window operations.",
232
+ value: metrics.maxInputLatenessMs,
233
+ });
234
+ }
235
+ // Check idle time (might indicate waiting for data)
236
+ // Values are already in percentage (0-100)
237
+ if (metrics.idleTimeMsPerSecond !== undefined) {
238
+ const idlePercent = metrics.idleTimeMsPerSecond;
239
+ if (idlePercent > 90 && metrics.numRecordsIn === 0) {
240
+ issues.push({
241
+ type: "no_input_data",
242
+ severity: "medium",
243
+ description: `Statement is mostly idle (${idlePercent.toFixed(1)}%) with no input records.`,
244
+ suggestion: "Check if source topics have data. Verify topic names and connectivity.",
245
+ value: idlePercent,
246
+ });
247
+ }
248
+ }
249
+ // Check state size (large state can cause performance issues)
250
+ if (metrics.stateSizeBytes !== undefined) {
251
+ const stateSizeGB = metrics.stateSizeBytes / (1024 * 1024 * 1024);
252
+ if (stateSizeGB > 10) {
253
+ issues.push({
254
+ type: "large_state",
255
+ severity: "medium",
256
+ description: `Large state size: ${stateSizeGB.toFixed(2)} GB.`,
257
+ suggestion: "Consider: 1) Adding TTL to stateful operations, 2) Using incremental checkpoints, 3) Reviewing deduplication windows.",
258
+ value: metrics.stateSizeBytes,
259
+ });
260
+ }
261
+ }
262
+ // Build summary
263
+ const parts = [];
264
+ if (metrics.numRecordsIn !== undefined) {
265
+ parts.push(`Records in: ${metrics.numRecordsIn.toLocaleString()}`);
266
+ }
267
+ if (metrics.numRecordsOut !== undefined) {
268
+ parts.push(`Records out: ${metrics.numRecordsOut.toLocaleString()}`);
269
+ }
270
+ if (metrics.pendingRecords !== undefined) {
271
+ parts.push(`Pending: ${metrics.pendingRecords.toLocaleString()}`);
272
+ }
273
+ if (metrics.backpressureTimeMsPerSecond !== undefined) {
274
+ parts.push(`Backpressure: ${metrics.backpressureTimeMsPerSecond.toFixed(1)}%`);
275
+ }
276
+ if (metrics.busyTimeMsPerSecond !== undefined) {
277
+ parts.push(`Busy: ${metrics.busyTimeMsPerSecond.toFixed(1)}%`);
278
+ }
279
+ if (metrics.idleTimeMsPerSecond !== undefined) {
280
+ parts.push(`Idle: ${metrics.idleTimeMsPerSecond.toFixed(1)}%`);
281
+ }
282
+ if (metrics.currentCfus !== undefined) {
283
+ parts.push(`CFUs: ${metrics.currentCfus.toFixed(2)}`);
284
+ }
285
+ const summary = parts.length > 0 ? parts.join(" | ") : "No metrics data available";
286
+ return { issues, summary };
287
+ }
288
+ /**
289
+ * Query per-task metrics breakdown using GROUPED format.
290
+ */
291
+ async function queryTaskMetrics(telemetryClient, options) {
292
+ const { statementName, computePoolId, startTime, now } = options;
293
+ // Metrics to query per task
294
+ const taskMetricsToQuery = [
295
+ "io.confluent.flink/task/num_records_in",
296
+ "io.confluent.flink/task/num_records_out",
297
+ "io.confluent.flink/task/num_bytes_in",
298
+ "io.confluent.flink/task/num_bytes_out",
299
+ "io.confluent.flink/task/backpressure_time_ms_per_second",
300
+ "io.confluent.flink/task/busy_time_ms_per_second",
301
+ "io.confluent.flink/task/idle_time_ms_per_second",
302
+ "io.confluent.flink/operator/state_size_bytes",
303
+ ];
304
+ const taskMap = new Map();
305
+ for (const metric of taskMetricsToQuery) {
306
+ try {
307
+ const response = (await telemetryClient.POST("/v2/metrics/{dataset}/query", {
308
+ params: { path: { dataset: "cloud" } },
309
+ body: {
310
+ aggregations: [{ metric }],
311
+ filter: {
312
+ op: "AND",
313
+ filters: [
314
+ {
315
+ field: "resource.flink_statement.name",
316
+ op: "EQ",
317
+ value: statementName,
318
+ },
319
+ {
320
+ field: "resource.compute_pool.id",
321
+ op: "EQ",
322
+ value: computePoolId,
323
+ },
324
+ ],
325
+ },
326
+ granularity: "PT1M",
327
+ intervals: [`${startTime.toISOString()}/${now.toISOString()}`],
328
+ limit: 1000,
329
+ group_by: ["metric.flink_task.id"],
330
+ format: "GROUPED",
331
+ },
332
+ }));
333
+ const data = response.data;
334
+ if (data?.data) {
335
+ for (const item of data.data) {
336
+ const taskId = item["metric.flink_task.id"];
337
+ const value = item.points?.[item.points.length - 1]?.value;
338
+ if (!taskId || value === undefined)
339
+ continue;
340
+ if (!taskMap.has(taskId)) {
341
+ taskMap.set(taskId, { taskId });
342
+ }
343
+ const taskMetrics = taskMap.get(taskId);
344
+ if (metric.includes("num_records_in"))
345
+ taskMetrics.numRecordsIn = value;
346
+ else if (metric.includes("num_records_out"))
347
+ taskMetrics.numRecordsOut = value;
348
+ else if (metric.includes("num_bytes_in"))
349
+ taskMetrics.numBytesIn = value;
350
+ else if (metric.includes("num_bytes_out"))
351
+ taskMetrics.numBytesOut = value;
352
+ else if (metric.includes("backpressure"))
353
+ taskMetrics.backpressureTimeMsPerSecond = value;
354
+ else if (metric.includes("busy_time"))
355
+ taskMetrics.busyTimeMsPerSecond = value;
356
+ else if (metric.includes("idle_time"))
357
+ taskMetrics.idleTimeMsPerSecond = value;
358
+ else if (metric.includes("state_size"))
359
+ taskMetrics.stateSizeBytes = value;
360
+ }
361
+ }
362
+ }
363
+ catch {
364
+ // Continue with other metrics if one fails
365
+ }
366
+ }
367
+ return Array.from(taskMap.values());
368
+ }
369
+ /**
370
+ * Query per-split metrics breakdown using GROUPED format.
371
+ * Split names are human-readable (e.g., "orders-0" for topic-partition).
372
+ */
373
+ async function querySplitMetrics(telemetryClient, options) {
374
+ const { statementName, computePoolId, startTime, now } = options;
375
+ // Metrics to query per split
376
+ const splitMetricsToQuery = [
377
+ "io.confluent.flink/split/current_watermark_ms",
378
+ "io.confluent.flink/split/watermark_active_time_ms_per_second",
379
+ "io.confluent.flink/split/watermark_paused_time_ms_per_second",
380
+ "io.confluent.flink/split/watermark_idle_time_ms_per_second",
381
+ ];
382
+ const splitMap = new Map();
383
+ for (const metric of splitMetricsToQuery) {
384
+ try {
385
+ const response = (await telemetryClient.POST("/v2/metrics/{dataset}/query", {
386
+ params: { path: { dataset: "cloud" } },
387
+ body: {
388
+ aggregations: [{ metric }],
389
+ filter: {
390
+ op: "AND",
391
+ filters: [
392
+ {
393
+ field: "resource.flink_statement.name",
394
+ op: "EQ",
395
+ value: statementName,
396
+ },
397
+ {
398
+ field: "resource.compute_pool.id",
399
+ op: "EQ",
400
+ value: computePoolId,
401
+ },
402
+ ],
403
+ },
404
+ granularity: "PT1M",
405
+ intervals: [`${startTime.toISOString()}/${now.toISOString()}`],
406
+ limit: 1000,
407
+ group_by: ["metric.flink_split"],
408
+ format: "GROUPED",
409
+ },
410
+ }));
411
+ const data = response.data;
412
+ if (data?.data) {
413
+ for (const item of data.data) {
414
+ const splitName = item["metric.flink_split"];
415
+ const value = item.points?.[item.points.length - 1]?.value;
416
+ if (!splitName || value === undefined)
417
+ continue;
418
+ // Skip Long.MIN_VALUE (no watermark set)
419
+ if (metric.includes("watermark_ms") &&
420
+ value < LONG_MIN_VALUE + 1000000)
421
+ continue;
422
+ if (!splitMap.has(splitName)) {
423
+ splitMap.set(splitName, { splitName });
424
+ }
425
+ const splitMetrics = splitMap.get(splitName);
426
+ if (metric.includes("current_watermark_ms"))
427
+ splitMetrics.currentWatermarkMs = value;
428
+ else if (metric.includes("active_time"))
429
+ splitMetrics.watermarkActiveTimeMsPerSecond = value;
430
+ else if (metric.includes("paused_time"))
431
+ splitMetrics.watermarkPausedTimeMsPerSecond = value;
432
+ else if (metric.includes("idle_time"))
433
+ splitMetrics.watermarkIdleTimeMsPerSecond = value;
434
+ }
435
+ }
436
+ }
437
+ catch {
438
+ // Continue with other metrics if one fails
439
+ }
440
+ }
441
+ return Array.from(splitMap.values());
442
+ }
443
+ //# sourceMappingURL=metrics-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics-helper.js","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/diagnostics/metrics-helper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { ClientManager } from "../../../../../confluent/client-manager.js";
2
+ import { CallToolResult } from "../../../../../confluent/schema.js";
3
+ import { BaseToolHandler, ToolConfig } from "../../../../../confluent/tools/base-tools.js";
4
+ import { EnvVar } from "../../../../../env-schema.js";
5
+ export declare class QueryProfilerHandler extends BaseToolHandler {
6
+ handle(clientManager: ClientManager, toolArguments: Record<string, unknown> | undefined): Promise<CallToolResult>;
7
+ getToolConfig(): ToolConfig;
8
+ getRequiredEnvVars(): EnvVar[];
9
+ isConfluentCloudOnly(): boolean;
10
+ }
11
+ //# sourceMappingURL=query-profiler-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-profiler-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,eAAe,EACf,UAAU,EACX,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA6G5C,qBAAa,oBAAqB,SAAQ,eAAe;IACjD,MAAM,CACV,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACjD,OAAO,CAAC,cAAc,CAAC;IAsa1B,aAAa,IAAI,UAAU;IAS3B,kBAAkB,IAAI,MAAM,EAAE;IAS9B,oBAAoB,IAAI,OAAO;CAGhC"}