@confluentinc/mcp-confluent 1.1.0 → 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.
- package/README.md +507 -342
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +10 -0
- package/dist/cli.js.map +1 -1
- package/dist/confluent/client-manager.d.ts +9 -0
- package/dist/confluent/client-manager.d.ts.map +1 -1
- package/dist/confluent/client-manager.js +35 -4
- package/dist/confluent/client-manager.js.map +1 -1
- package/dist/confluent/middleware.d.ts +3 -2
- package/dist/confluent/middleware.d.ts.map +1 -1
- package/dist/confluent/middleware.js +9 -2
- package/dist/confluent/middleware.js.map +1 -1
- package/dist/confluent/node-deps.d.ts +60 -0
- package/dist/confluent/node-deps.d.ts.map +1 -0
- package/dist/confluent/node-deps.js +12 -0
- package/dist/confluent/node-deps.js.map +1 -0
- package/dist/confluent/telemetry.d.ts +18 -0
- package/dist/confluent/telemetry.d.ts.map +1 -0
- package/dist/confluent/telemetry.js +104 -0
- package/dist/confluent/telemetry.js.map +1 -0
- package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.js +174 -0
- package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts +77 -0
- package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js +136 -0
- package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js +111 -0
- package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js +110 -0
- package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js +74 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js +81 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js +90 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js +131 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js +248 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.d.ts +88 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.js +443 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js +398 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts +23 -0
- package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/flink-sql-helper.js +133 -0
- package/dist/confluent/tools/handlers/flink/flink-sql-helper.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js +72 -0
- package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js +20 -3
- package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js +1 -1
- package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/create-topics-handler.js +1 -1
- package/dist/confluent/tools/handlers/kafka/create-topics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js +1 -1
- package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/list-topics-handler.js +1 -1
- package/dist/confluent/tools/handlers/kafka/list-topics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js +1 -1
- package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js +193 -0
- package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js +224 -0
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts +10 -0
- package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/schema/delete-schema-handler.js +71 -0
- package/dist/confluent/tools/handlers/schema/delete-schema-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/schema/list-schemas-handler.js +1 -5
- package/dist/confluent/tools/handlers/schema/list-schemas-handler.js.map +1 -1
- package/dist/confluent/tools/tool-factory.d.ts.map +1 -1
- package/dist/confluent/tools/tool-factory.js +26 -0
- package/dist/confluent/tools/tool-factory.js.map +1 -1
- package/dist/confluent/tools/tool-name.d.ts +14 -1
- package/dist/confluent/tools/tool-name.d.ts.map +1 -1
- package/dist/confluent/tools/tool-name.js +13 -0
- package/dist/confluent/tools/tool-name.js.map +1 -1
- package/dist/env-schema.d.ts +7 -0
- package/dist/env-schema.d.ts.map +1 -1
- package/dist/env-schema.js +37 -2
- package/dist/env-schema.js.map +1 -1
- package/dist/env.d.ts +7 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/index.js +67 -5
- package/dist/index.js.map +1 -1
- package/dist/mcp/transports/auth.d.ts +55 -0
- package/dist/mcp/transports/auth.d.ts.map +1 -0
- package/dist/mcp/transports/auth.js +127 -0
- package/dist/mcp/transports/auth.js.map +1 -0
- package/dist/mcp/transports/index.d.ts +1 -0
- package/dist/mcp/transports/index.d.ts.map +1 -1
- package/dist/mcp/transports/index.js +1 -0
- package/dist/mcp/transports/index.js.map +1 -1
- package/dist/mcp/transports/manager.d.ts +13 -1
- package/dist/mcp/transports/manager.d.ts.map +1 -1
- package/dist/mcp/transports/manager.js +20 -2
- package/dist/mcp/transports/manager.js.map +1 -1
- package/dist/mcp/transports/server.d.ts +10 -1
- package/dist/mcp/transports/server.d.ts.map +1 -1
- package/dist/mcp/transports/server.js +12 -2
- package/dist/mcp/transports/server.js.map +1 -1
- package/package.json +14 -6
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { getEnsuredParam } from "../../../../../confluent/helpers.js";
|
|
2
|
+
import { BaseToolHandler, } from "../../../../../confluent/tools/base-tools.js";
|
|
3
|
+
import { resolveCatalogName, resolveDatabaseName, getSchemaMapping, resolveToSchemaName, } from "../../../../../confluent/tools/handlers/flink/catalog/catalog-resolver.js";
|
|
4
|
+
import { executeFlinkSql } from "../../../../../confluent/tools/handlers/flink/flink-sql-helper.js";
|
|
5
|
+
import { ToolName } from "../../../../../confluent/tools/tool-name.js";
|
|
6
|
+
import env from "../../../../../env.js";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
const getTableInfoArguments = z.object({
|
|
9
|
+
baseUrl: z
|
|
10
|
+
.string()
|
|
11
|
+
.describe("The base URL of the Flink REST API.")
|
|
12
|
+
.url()
|
|
13
|
+
.default(() => env.FLINK_REST_ENDPOINT ?? "")
|
|
14
|
+
.optional(),
|
|
15
|
+
organizationId: z
|
|
16
|
+
.string()
|
|
17
|
+
.trim()
|
|
18
|
+
.optional()
|
|
19
|
+
.describe("The unique identifier for the organization."),
|
|
20
|
+
environmentId: z
|
|
21
|
+
.string()
|
|
22
|
+
.trim()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe("The unique identifier for the environment."),
|
|
25
|
+
computePoolId: z
|
|
26
|
+
.string()
|
|
27
|
+
.trim()
|
|
28
|
+
.optional()
|
|
29
|
+
.describe("The id associated with the compute pool in context."),
|
|
30
|
+
catalogName: z
|
|
31
|
+
.string()
|
|
32
|
+
.trim()
|
|
33
|
+
.optional()
|
|
34
|
+
.describe("The Flink catalog name (environment ID, e.g., env-xxxxx). Omit to use defaults."),
|
|
35
|
+
databaseName: z
|
|
36
|
+
.string()
|
|
37
|
+
.trim()
|
|
38
|
+
.optional()
|
|
39
|
+
.describe("The database/schema name. Can be cluster ID (lkc-xxxxx) or friendly name. Optional."),
|
|
40
|
+
tableName: z
|
|
41
|
+
.string()
|
|
42
|
+
.trim()
|
|
43
|
+
.nonempty()
|
|
44
|
+
.describe("The name of the table to get info for."),
|
|
45
|
+
});
|
|
46
|
+
export class GetTableInfoHandler extends BaseToolHandler {
|
|
47
|
+
async handle(clientManager, toolArguments) {
|
|
48
|
+
const { organizationId, environmentId, computePoolId, catalogName, databaseName, tableName, baseUrl, } = getTableInfoArguments.parse(toolArguments);
|
|
49
|
+
const organization_id = getEnsuredParam("FLINK_ORG_ID", "Organization ID is required", organizationId);
|
|
50
|
+
const environment_id = getEnsuredParam("FLINK_ENV_ID", "Environment ID is required", environmentId);
|
|
51
|
+
const compute_pool_id = getEnsuredParam("FLINK_COMPUTE_POOL_ID", "Compute Pool ID is required", computePoolId);
|
|
52
|
+
// Smart resolution: only accept env-* format, otherwise fall back to FLINK_ENV_ID
|
|
53
|
+
const catalog_name = resolveCatalogName(catalogName);
|
|
54
|
+
if (!catalog_name) {
|
|
55
|
+
return this.createResponse("Catalog name could not be resolved. Set FLINK_ENV_ID or provide a valid environment ID (env-xxxxx).", true);
|
|
56
|
+
}
|
|
57
|
+
// Database name is optional - if provided, resolve it to friendly SCHEMA_NAME
|
|
58
|
+
const database_input = resolveDatabaseName(databaseName);
|
|
59
|
+
if (baseUrl !== undefined && baseUrl !== "") {
|
|
60
|
+
clientManager.setConfluentCloudFlinkEndpoint(baseUrl);
|
|
61
|
+
}
|
|
62
|
+
// If a database was specified, resolve cluster ID to friendly name
|
|
63
|
+
let schema_name;
|
|
64
|
+
if (database_input) {
|
|
65
|
+
const mappings = await getSchemaMapping(clientManager, catalog_name, {
|
|
66
|
+
organizationId: organization_id,
|
|
67
|
+
environmentId: environment_id,
|
|
68
|
+
computePoolId: compute_pool_id,
|
|
69
|
+
});
|
|
70
|
+
schema_name = resolveToSchemaName(database_input, mappings);
|
|
71
|
+
}
|
|
72
|
+
// Query INFORMATION_SCHEMA.TABLES for table metadata including watermarks
|
|
73
|
+
// Must fully qualify with catalog and use backticks per Confluent Cloud requirements
|
|
74
|
+
// If schema_name is provided, filter by it; otherwise search all databases for the table
|
|
75
|
+
const schemaFilter = schema_name
|
|
76
|
+
? ` AND \`TABLE_SCHEMA\` = '${schema_name}'`
|
|
77
|
+
: "";
|
|
78
|
+
const sql = `SELECT \`TABLE_CATALOG\`, \`TABLE_SCHEMA\`, \`TABLE_NAME\`, \`TABLE_TYPE\`, \`IS_DISTRIBUTED\`, \`DISTRIBUTION_ALGORITHM\`, \`DISTRIBUTION_BUCKETS\`, \`IS_WATERMARKED\`, \`WATERMARK_COLUMN\`, \`WATERMARK_EXPRESSION\`, \`WATERMARK_IS_HIDDEN\`, \`COMMENT\` FROM \`${catalog_name}\`.\`INFORMATION_SCHEMA\`.\`TABLES\` WHERE \`TABLE_NAME\` = '${tableName}'${schemaFilter}`;
|
|
79
|
+
const result = await executeFlinkSql(clientManager, sql, {
|
|
80
|
+
organizationId: organization_id,
|
|
81
|
+
environmentId: environment_id,
|
|
82
|
+
computePoolId: compute_pool_id,
|
|
83
|
+
});
|
|
84
|
+
if (!result.success) {
|
|
85
|
+
return this.createResponse(`Failed to get table info: ${result.error}`, true);
|
|
86
|
+
}
|
|
87
|
+
const tables = result.data ?? [];
|
|
88
|
+
if (tables.length === 0) {
|
|
89
|
+
const scope = schema_name
|
|
90
|
+
? `'${catalog_name}.${schema_name}.${tableName}'`
|
|
91
|
+
: `'${tableName}' in catalog '${catalog_name}'`;
|
|
92
|
+
return this.createResponse(`Table ${scope} not found.`, true);
|
|
93
|
+
}
|
|
94
|
+
return this.createResponse(`Table info for '${tableName}':\n${JSON.stringify(tables[0], null, 2)}`);
|
|
95
|
+
}
|
|
96
|
+
getToolConfig() {
|
|
97
|
+
return {
|
|
98
|
+
name: ToolName.GET_FLINK_TABLE_INFO,
|
|
99
|
+
description: "Get table metadata via INFORMATION_SCHEMA.TABLES. Returns watermark configuration, distribution info, and table type.",
|
|
100
|
+
inputSchema: getTableInfoArguments.shape,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
getRequiredEnvVars() {
|
|
104
|
+
return ["FLINK_API_KEY", "FLINK_API_SECRET"];
|
|
105
|
+
}
|
|
106
|
+
isConfluentCloudOnly() {
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=get-table-info-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-table-info-handler.js","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/get-table-info-handler.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 ListCatalogsHandler 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=list-catalogs-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-catalogs-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/list-catalogs-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;AAI5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA0B5C,qBAAa,mBAAoB,SAAQ,eAAe;IAChD,MAAM,CACV,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACjD,OAAO,CAAC,cAAc,CAAC;IA2D1B,aAAa,IAAI,UAAU;IAS3B,kBAAkB,IAAI,MAAM,EAAE;IAI9B,oBAAoB,IAAI,OAAO;CAGhC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { getEnsuredParam } from "../../../../../confluent/helpers.js";
|
|
2
|
+
import { BaseToolHandler, } from "../../../../../confluent/tools/base-tools.js";
|
|
3
|
+
import { resolveCatalogName } from "../../../../../confluent/tools/handlers/flink/catalog/catalog-resolver.js";
|
|
4
|
+
import { executeFlinkSql } from "../../../../../confluent/tools/handlers/flink/flink-sql-helper.js";
|
|
5
|
+
import { ToolName } from "../../../../../confluent/tools/tool-name.js";
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
const listCatalogsArguments = z.object({
|
|
8
|
+
baseUrl: z
|
|
9
|
+
.string()
|
|
10
|
+
.describe("The base URL of the Flink REST API.")
|
|
11
|
+
.url()
|
|
12
|
+
.optional(),
|
|
13
|
+
organizationId: z
|
|
14
|
+
.string()
|
|
15
|
+
.trim()
|
|
16
|
+
.optional()
|
|
17
|
+
.describe("The unique identifier for the organization."),
|
|
18
|
+
environmentId: z
|
|
19
|
+
.string()
|
|
20
|
+
.trim()
|
|
21
|
+
.optional()
|
|
22
|
+
.describe("The unique identifier for the environment."),
|
|
23
|
+
computePoolId: z
|
|
24
|
+
.string()
|
|
25
|
+
.trim()
|
|
26
|
+
.optional()
|
|
27
|
+
.describe("The id associated with the compute pool in context."),
|
|
28
|
+
});
|
|
29
|
+
export class ListCatalogsHandler extends BaseToolHandler {
|
|
30
|
+
async handle(clientManager, toolArguments) {
|
|
31
|
+
const { organizationId, environmentId, computePoolId, baseUrl } = listCatalogsArguments.parse(toolArguments);
|
|
32
|
+
const organization_id = getEnsuredParam("FLINK_ORG_ID", "Organization ID is required", organizationId);
|
|
33
|
+
const environment_id = getEnsuredParam("FLINK_ENV_ID", "Environment ID is required", environmentId);
|
|
34
|
+
const compute_pool_id = getEnsuredParam("FLINK_COMPUTE_POOL_ID", "Compute Pool ID is required", computePoolId);
|
|
35
|
+
// Smart resolution: use FLINK_ENV_ID as the catalog name
|
|
36
|
+
const catalog_name = resolveCatalogName();
|
|
37
|
+
if (!catalog_name) {
|
|
38
|
+
return this.createResponse("Catalog name could not be resolved. Set FLINK_ENV_ID.", true);
|
|
39
|
+
}
|
|
40
|
+
if (baseUrl !== undefined && baseUrl !== "") {
|
|
41
|
+
clientManager.setConfluentCloudFlinkEndpoint(baseUrl);
|
|
42
|
+
}
|
|
43
|
+
// Query INFORMATION_SCHEMA.CATALOGS for all available catalogs
|
|
44
|
+
// Must fully qualify with catalog and use backticks per Confluent Cloud requirements
|
|
45
|
+
const sql = `SELECT \`CATALOG_NAME\` FROM \`${catalog_name}\`.\`INFORMATION_SCHEMA\`.\`CATALOGS\``;
|
|
46
|
+
const result = await executeFlinkSql(clientManager, sql, {
|
|
47
|
+
organizationId: organization_id,
|
|
48
|
+
environmentId: environment_id,
|
|
49
|
+
computePoolId: compute_pool_id,
|
|
50
|
+
});
|
|
51
|
+
if (!result.success) {
|
|
52
|
+
return this.createResponse(`Failed to list catalogs: ${result.error}`, true);
|
|
53
|
+
}
|
|
54
|
+
const catalogs = result.data ?? [];
|
|
55
|
+
if (catalogs.length === 0) {
|
|
56
|
+
return this.createResponse("No catalogs found.");
|
|
57
|
+
}
|
|
58
|
+
return this.createResponse(`Catalogs:\n${JSON.stringify(catalogs, null, 2)}`);
|
|
59
|
+
}
|
|
60
|
+
getToolConfig() {
|
|
61
|
+
return {
|
|
62
|
+
name: ToolName.LIST_FLINK_CATALOGS,
|
|
63
|
+
description: "List all catalogs available in the Flink environment via INFORMATION_SCHEMA.CATALOGS.",
|
|
64
|
+
inputSchema: listCatalogsArguments.shape,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
getRequiredEnvVars() {
|
|
68
|
+
return ["FLINK_API_KEY", "FLINK_API_SECRET"];
|
|
69
|
+
}
|
|
70
|
+
isConfluentCloudOnly() {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=list-catalogs-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-catalogs-handler.js","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/list-catalogs-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EACL,eAAe,GAEhB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AACrG,OAAO,EAAE,eAAe,EAAE,MAAM,yDAAyD,CAAC;AAC1F,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAE7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,CAAC,qCAAqC,CAAC;SAC/C,GAAG,EAAE;SACL,QAAQ,EAAE;IACb,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,6CAA6C,CAAC;IAC1D,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,4CAA4C,CAAC;IACzD,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,qDAAqD,CAAC;CACnE,CAAC,CAAC;AAEH,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IACtD,KAAK,CAAC,MAAM,CACV,aAA4B,EAC5B,aAAkD;QAElD,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,GAC7D,qBAAqB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAE7C,MAAM,eAAe,GAAG,eAAe,CACrC,cAAc,EACd,6BAA6B,EAC7B,cAAc,CACf,CAAC;QACF,MAAM,cAAc,GAAG,eAAe,CACpC,cAAc,EACd,4BAA4B,EAC5B,aAAa,CACd,CAAC;QACF,MAAM,eAAe,GAAG,eAAe,CACrC,uBAAuB,EACvB,6BAA6B,EAC7B,aAAa,CACd,CAAC;QACF,yDAAyD;QACzD,MAAM,YAAY,GAAG,kBAAkB,EAAE,CAAC;QAC1C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,cAAc,CACxB,uDAAuD,EACvD,IAAI,CACL,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YAC5C,aAAa,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC;QACxD,CAAC;QAED,+DAA+D;QAC/D,qFAAqF;QACrF,MAAM,GAAG,GAAG,kCAAkC,YAAY,wCAAwC,CAAC;QAEnG,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,aAAa,EAAE,GAAG,EAAE;YACvD,cAAc,EAAE,eAAe;YAC/B,aAAa,EAAE,cAAc;YAC7B,aAAa,EAAE,eAAe;SAC/B,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,cAAc,CACxB,4BAA4B,MAAM,CAAC,KAAK,EAAE,EAC1C,IAAI,CACL,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACnC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CACxB,cAAc,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAClD,CAAC;IACJ,CAAC;IAED,aAAa;QACX,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,mBAAmB;YAClC,WAAW,EACT,uFAAuF;YACzF,WAAW,EAAE,qBAAqB,CAAC,KAAK;SACzC,CAAC;IACJ,CAAC;IAED,kBAAkB;QAChB,OAAO,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;IAC/C,CAAC;IAED,oBAAoB;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -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 ListDatabasesHandler 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=list-databases-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-databases-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/list-databases-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;AAI5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAmC5C,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;IAgE1B,aAAa,IAAI,UAAU;IAS3B,kBAAkB,IAAI,MAAM,EAAE;IAI9B,oBAAoB,IAAI,OAAO;CAGhC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { getEnsuredParam } from "../../../../../confluent/helpers.js";
|
|
2
|
+
import { BaseToolHandler, } from "../../../../../confluent/tools/base-tools.js";
|
|
3
|
+
import { resolveCatalogName } from "../../../../../confluent/tools/handlers/flink/catalog/catalog-resolver.js";
|
|
4
|
+
import { executeFlinkSql } from "../../../../../confluent/tools/handlers/flink/flink-sql-helper.js";
|
|
5
|
+
import { ToolName } from "../../../../../confluent/tools/tool-name.js";
|
|
6
|
+
import env from "../../../../../env.js";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
const listDatabasesArguments = z.object({
|
|
9
|
+
baseUrl: z
|
|
10
|
+
.string()
|
|
11
|
+
.describe("The base URL of the Flink REST API.")
|
|
12
|
+
.url()
|
|
13
|
+
.default(() => env.FLINK_REST_ENDPOINT ?? "")
|
|
14
|
+
.optional(),
|
|
15
|
+
organizationId: z
|
|
16
|
+
.string()
|
|
17
|
+
.trim()
|
|
18
|
+
.optional()
|
|
19
|
+
.describe("The unique identifier for the organization."),
|
|
20
|
+
environmentId: z
|
|
21
|
+
.string()
|
|
22
|
+
.trim()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe("The unique identifier for the environment."),
|
|
25
|
+
computePoolId: z
|
|
26
|
+
.string()
|
|
27
|
+
.trim()
|
|
28
|
+
.optional()
|
|
29
|
+
.describe("The id associated with the compute pool in context."),
|
|
30
|
+
catalogName: z
|
|
31
|
+
.string()
|
|
32
|
+
.trim()
|
|
33
|
+
.optional()
|
|
34
|
+
.describe("The Flink catalog name (environment ID, e.g., env-xxxxx). Omit to use defaults."),
|
|
35
|
+
});
|
|
36
|
+
export class ListDatabasesHandler extends BaseToolHandler {
|
|
37
|
+
async handle(clientManager, toolArguments) {
|
|
38
|
+
const { organizationId, environmentId, computePoolId, catalogName, baseUrl, } = listDatabasesArguments.parse(toolArguments);
|
|
39
|
+
const organization_id = getEnsuredParam("FLINK_ORG_ID", "Organization ID is required", organizationId);
|
|
40
|
+
const environment_id = getEnsuredParam("FLINK_ENV_ID", "Environment ID is required", environmentId);
|
|
41
|
+
const compute_pool_id = getEnsuredParam("FLINK_COMPUTE_POOL_ID", "Compute Pool ID is required", computePoolId);
|
|
42
|
+
// Smart resolution: only accept env-* format, otherwise fall back to FLINK_ENV_ID
|
|
43
|
+
const catalog_name = resolveCatalogName(catalogName);
|
|
44
|
+
if (!catalog_name) {
|
|
45
|
+
return this.createResponse("Catalog name could not be resolved. Set FLINK_ENV_ID or provide a valid environment ID (env-xxxxx).", true);
|
|
46
|
+
}
|
|
47
|
+
if (baseUrl !== undefined && baseUrl !== "") {
|
|
48
|
+
clientManager.setConfluentCloudFlinkEndpoint(baseUrl);
|
|
49
|
+
}
|
|
50
|
+
// Build SQL query for INFORMATION_SCHEMA.SCHEMATA
|
|
51
|
+
// Must fully qualify with catalog and use backticks per Confluent Cloud requirements
|
|
52
|
+
const sql = `SELECT \`SCHEMA_ID\`, \`SCHEMA_NAME\` FROM \`${catalog_name}\`.\`INFORMATION_SCHEMA\`.\`SCHEMATA\` WHERE \`SCHEMA_NAME\` <> 'INFORMATION_SCHEMA'`;
|
|
53
|
+
const result = await executeFlinkSql(clientManager, sql, {
|
|
54
|
+
organizationId: organization_id,
|
|
55
|
+
environmentId: environment_id,
|
|
56
|
+
computePoolId: compute_pool_id,
|
|
57
|
+
});
|
|
58
|
+
if (!result.success) {
|
|
59
|
+
return this.createResponse(`Failed to list databases: ${result.error}`, true);
|
|
60
|
+
}
|
|
61
|
+
const databases = result.data ?? [];
|
|
62
|
+
if (databases.length === 0) {
|
|
63
|
+
return this.createResponse("No databases found.");
|
|
64
|
+
}
|
|
65
|
+
return this.createResponse(`Databases:\n${JSON.stringify(databases, null, 2)}`);
|
|
66
|
+
}
|
|
67
|
+
getToolConfig() {
|
|
68
|
+
return {
|
|
69
|
+
name: ToolName.LIST_FLINK_DATABASES,
|
|
70
|
+
description: "List all databases (schemas) in a Flink catalog via INFORMATION_SCHEMA.SCHEMATA. Returns catalog and database names.",
|
|
71
|
+
inputSchema: listDatabasesArguments.shape,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
getRequiredEnvVars() {
|
|
75
|
+
return ["FLINK_API_KEY", "FLINK_API_SECRET"];
|
|
76
|
+
}
|
|
77
|
+
isConfluentCloudOnly() {
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=list-databases-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-databases-handler.js","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/list-databases-handler.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 ListTablesHandler 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=list-tables-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-tables-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/list-tables-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;AAI5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA0C5C,qBAAa,iBAAkB,SAAQ,eAAe;IAC9C,MAAM,CACV,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACjD,OAAO,CAAC,cAAc,CAAC;IAuE1B,aAAa,IAAI,UAAU;IAS3B,kBAAkB,IAAI,MAAM,EAAE;IAI9B,oBAAoB,IAAI,OAAO;CAGhC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { getEnsuredParam } from "../../../../../confluent/helpers.js";
|
|
2
|
+
import { BaseToolHandler, } from "../../../../../confluent/tools/base-tools.js";
|
|
3
|
+
import { resolveCatalogName } from "../../../../../confluent/tools/handlers/flink/catalog/catalog-resolver.js";
|
|
4
|
+
import { executeFlinkSql } from "../../../../../confluent/tools/handlers/flink/flink-sql-helper.js";
|
|
5
|
+
import { ToolName } from "../../../../../confluent/tools/tool-name.js";
|
|
6
|
+
import env from "../../../../../env.js";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
const listTablesArguments = z.object({
|
|
9
|
+
baseUrl: z
|
|
10
|
+
.string()
|
|
11
|
+
.describe("The base URL of the Flink REST API.")
|
|
12
|
+
.url()
|
|
13
|
+
.default(() => env.FLINK_REST_ENDPOINT ?? "")
|
|
14
|
+
.optional(),
|
|
15
|
+
organizationId: z
|
|
16
|
+
.string()
|
|
17
|
+
.trim()
|
|
18
|
+
.optional()
|
|
19
|
+
.describe("The unique identifier for the organization."),
|
|
20
|
+
environmentId: z
|
|
21
|
+
.string()
|
|
22
|
+
.trim()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe("The unique identifier for the environment."),
|
|
25
|
+
computePoolId: z
|
|
26
|
+
.string()
|
|
27
|
+
.trim()
|
|
28
|
+
.optional()
|
|
29
|
+
.describe("The id associated with the compute pool in context."),
|
|
30
|
+
catalogName: z
|
|
31
|
+
.string()
|
|
32
|
+
.trim()
|
|
33
|
+
.optional()
|
|
34
|
+
.describe("The Flink catalog name (environment ID, e.g., env-xxxxx). Omit to use defaults."),
|
|
35
|
+
databaseName: z
|
|
36
|
+
.string()
|
|
37
|
+
.trim()
|
|
38
|
+
.optional()
|
|
39
|
+
.describe("The database/schema name (Kafka cluster ID, e.g., lkc-xxxxx). Omit to list all tables across the catalog."),
|
|
40
|
+
});
|
|
41
|
+
export class ListTablesHandler extends BaseToolHandler {
|
|
42
|
+
async handle(clientManager, toolArguments) {
|
|
43
|
+
const { organizationId, environmentId, computePoolId, catalogName, databaseName, baseUrl, } = listTablesArguments.parse(toolArguments);
|
|
44
|
+
const organization_id = getEnsuredParam("FLINK_ORG_ID", "Organization ID is required", organizationId);
|
|
45
|
+
const environment_id = getEnsuredParam("FLINK_ENV_ID", "Environment ID is required", environmentId);
|
|
46
|
+
const compute_pool_id = getEnsuredParam("FLINK_COMPUTE_POOL_ID", "Compute Pool ID is required", computePoolId);
|
|
47
|
+
// Smart resolution: only accept env-* format, otherwise fall back to FLINK_ENV_ID
|
|
48
|
+
const catalog_name = resolveCatalogName(catalogName);
|
|
49
|
+
if (!catalog_name) {
|
|
50
|
+
return this.createResponse("Catalog name could not be resolved. Set FLINK_ENV_ID or provide a valid environment ID (env-xxxxx).", true);
|
|
51
|
+
}
|
|
52
|
+
// Note: databaseName parameter is currently unused - we fetch all tables and let the client filter
|
|
53
|
+
// This is because TABLE_SCHEMA may contain friendly names, not cluster IDs
|
|
54
|
+
void databaseName;
|
|
55
|
+
if (baseUrl !== undefined && baseUrl !== "") {
|
|
56
|
+
clientManager.setConfluentCloudFlinkEndpoint(baseUrl);
|
|
57
|
+
}
|
|
58
|
+
// Query INFORMATION_SCHEMA.TABLES for all tables
|
|
59
|
+
// Must fully qualify with catalog and use backticks per Confluent Cloud requirements
|
|
60
|
+
// Return all tables (excluding INFORMATION_SCHEMA) - client can filter by TABLE_SCHEMA as needed
|
|
61
|
+
const sql = `SELECT \`TABLE_CATALOG\`, \`TABLE_SCHEMA\`, \`TABLE_NAME\`, \`TABLE_TYPE\` FROM \`${catalog_name}\`.\`INFORMATION_SCHEMA\`.\`TABLES\` WHERE \`TABLE_SCHEMA\` <> 'INFORMATION_SCHEMA'`;
|
|
62
|
+
const result = await executeFlinkSql(clientManager, sql, {
|
|
63
|
+
organizationId: organization_id,
|
|
64
|
+
environmentId: environment_id,
|
|
65
|
+
computePoolId: compute_pool_id,
|
|
66
|
+
});
|
|
67
|
+
if (!result.success) {
|
|
68
|
+
return this.createResponse(`Failed to list tables: ${result.error}`, true);
|
|
69
|
+
}
|
|
70
|
+
const tables = result.data ?? [];
|
|
71
|
+
if (tables.length === 0) {
|
|
72
|
+
return this.createResponse(`No tables found in catalog '${catalog_name}'.`);
|
|
73
|
+
}
|
|
74
|
+
return this.createResponse(`Tables in catalog '${catalog_name}':\n${JSON.stringify(tables, null, 2)}`);
|
|
75
|
+
}
|
|
76
|
+
getToolConfig() {
|
|
77
|
+
return {
|
|
78
|
+
name: ToolName.LIST_FLINK_TABLES,
|
|
79
|
+
description: "List all tables in a Flink database via INFORMATION_SCHEMA.TABLES. Returns table names and types.",
|
|
80
|
+
inputSchema: listTablesArguments.shape,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
getRequiredEnvVars() {
|
|
84
|
+
return ["FLINK_API_KEY", "FLINK_API_SECRET"];
|
|
85
|
+
}
|
|
86
|
+
isConfluentCloudOnly() {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=list-tables-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-tables-handler.js","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/list-tables-handler.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 CheckHealthHandler 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=check-health-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-health-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/diagnostics/check-health-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;AA+C5C,qBAAa,kBAAmB,SAAQ,eAAe;IAC/C,MAAM,CACV,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACjD,OAAO,CAAC,cAAc,CAAC;IAyH1B,aAAa,IAAI,UAAU;IAS3B,kBAAkB,IAAI,MAAM,EAAE;IAI9B,oBAAoB,IAAI,OAAO;CAGhC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { getEnsuredParam } from "../../../../../confluent/helpers.js";
|
|
2
|
+
import { BaseToolHandler, } from "../../../../../confluent/tools/base-tools.js";
|
|
3
|
+
import { ToolName } from "../../../../../confluent/tools/tool-name.js";
|
|
4
|
+
import env from "../../../../../env.js";
|
|
5
|
+
import { wrapAsPathBasedClient } from "openapi-fetch";
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
const checkHealthArguments = z.object({
|
|
8
|
+
baseUrl: z
|
|
9
|
+
.string()
|
|
10
|
+
.describe("The base URL of the Flink REST API.")
|
|
11
|
+
.url()
|
|
12
|
+
.default(() => env.FLINK_REST_ENDPOINT ?? "")
|
|
13
|
+
.optional(),
|
|
14
|
+
organizationId: z
|
|
15
|
+
.string()
|
|
16
|
+
.trim()
|
|
17
|
+
.optional()
|
|
18
|
+
.describe("The unique identifier for the organization."),
|
|
19
|
+
environmentId: z
|
|
20
|
+
.string()
|
|
21
|
+
.trim()
|
|
22
|
+
.optional()
|
|
23
|
+
.describe("The unique identifier for the environment."),
|
|
24
|
+
statementName: z
|
|
25
|
+
.string()
|
|
26
|
+
.regex(new RegExp("[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*"))
|
|
27
|
+
.nonempty()
|
|
28
|
+
.max(100)
|
|
29
|
+
.describe("The name of the Flink SQL statement to check health for."),
|
|
30
|
+
});
|
|
31
|
+
export class CheckHealthHandler extends BaseToolHandler {
|
|
32
|
+
async handle(clientManager, toolArguments) {
|
|
33
|
+
const { statementName, environmentId, organizationId, baseUrl } = checkHealthArguments.parse(toolArguments);
|
|
34
|
+
const organization_id = getEnsuredParam("FLINK_ORG_ID", "Organization ID is required", organizationId);
|
|
35
|
+
const environment_id = getEnsuredParam("FLINK_ENV_ID", "Environment ID is required", environmentId);
|
|
36
|
+
if (baseUrl !== undefined && baseUrl !== "") {
|
|
37
|
+
clientManager.setConfluentCloudFlinkEndpoint(baseUrl);
|
|
38
|
+
}
|
|
39
|
+
const pathBasedClient = wrapAsPathBasedClient(clientManager.getConfluentCloudFlinkRestClient());
|
|
40
|
+
// Get statement status
|
|
41
|
+
const { data: statementData, error: statusError } = await pathBasedClient["/sql/v1/organizations/{organization_id}/environments/{environment_id}/statements/{statement_name}"].GET({
|
|
42
|
+
params: {
|
|
43
|
+
path: {
|
|
44
|
+
organization_id: organization_id,
|
|
45
|
+
environment_id: environment_id,
|
|
46
|
+
statement_name: statementName,
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
if (statusError) {
|
|
51
|
+
return this.createResponse(`Failed to get statement status: ${JSON.stringify(statusError)}`, true);
|
|
52
|
+
}
|
|
53
|
+
// Get exceptions
|
|
54
|
+
const { data: exceptionsData } = await pathBasedClient["/sql/v1/organizations/{organization_id}/environments/{environment_id}/statements/{statement_name}/exceptions"].GET({
|
|
55
|
+
params: {
|
|
56
|
+
path: {
|
|
57
|
+
organization_id: organization_id,
|
|
58
|
+
environment_id: environment_id,
|
|
59
|
+
statement_name: statementName,
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
const phase = statementData?.status?.phase || "UNKNOWN";
|
|
64
|
+
const exceptions = exceptionsData?.data || [];
|
|
65
|
+
const latestException = exceptions[0];
|
|
66
|
+
// Determine health status
|
|
67
|
+
const health = {
|
|
68
|
+
status: "unknown",
|
|
69
|
+
phase,
|
|
70
|
+
message: "",
|
|
71
|
+
details: {
|
|
72
|
+
hasExceptions: exceptions.length > 0,
|
|
73
|
+
exceptionCount: exceptions.length,
|
|
74
|
+
latestException: latestException?.message,
|
|
75
|
+
statementSql: statementData?.spec?.statement,
|
|
76
|
+
computePoolId: statementData?.spec?.compute_pool_id,
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
switch (phase) {
|
|
80
|
+
case "RUNNING":
|
|
81
|
+
if (exceptions.length > 0) {
|
|
82
|
+
health.status = "warning";
|
|
83
|
+
health.message = `Statement is running but has ${exceptions.length} recent exception(s). Latest: ${latestException?.message}`;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
health.status = "healthy";
|
|
87
|
+
health.message =
|
|
88
|
+
"Statement is running normally with no recent exceptions.";
|
|
89
|
+
}
|
|
90
|
+
break;
|
|
91
|
+
case "COMPLETED":
|
|
92
|
+
health.status = "healthy";
|
|
93
|
+
health.message = "Statement completed successfully.";
|
|
94
|
+
break;
|
|
95
|
+
case "FAILED":
|
|
96
|
+
health.status = "critical";
|
|
97
|
+
health.message = `Statement failed. ${statementData?.status?.detail || latestException?.message || "Check exceptions for details."}`;
|
|
98
|
+
break;
|
|
99
|
+
case "FAILING":
|
|
100
|
+
health.status = "critical";
|
|
101
|
+
health.message = `Statement is failing. ${latestException?.message || "Check exceptions for details."}`;
|
|
102
|
+
break;
|
|
103
|
+
case "STOPPED":
|
|
104
|
+
health.status = "warning";
|
|
105
|
+
health.message = "Statement has been stopped.";
|
|
106
|
+
break;
|
|
107
|
+
case "PENDING":
|
|
108
|
+
health.status = "warning";
|
|
109
|
+
health.message = "Statement is pending execution.";
|
|
110
|
+
break;
|
|
111
|
+
default:
|
|
112
|
+
health.status = "unknown";
|
|
113
|
+
health.message = `Statement is in ${phase} state.`;
|
|
114
|
+
}
|
|
115
|
+
return this.createResponse(`Health check for '${statementName}':\n${JSON.stringify(health, null, 2)}`);
|
|
116
|
+
}
|
|
117
|
+
getToolConfig() {
|
|
118
|
+
return {
|
|
119
|
+
name: ToolName.CHECK_FLINK_STATEMENT_HEALTH,
|
|
120
|
+
description: "Perform an aggregate health check for a Flink SQL statement. Returns status (healthy/warning/critical), current phase, recent exceptions, and diagnostic details.",
|
|
121
|
+
inputSchema: checkHealthArguments.shape,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
getRequiredEnvVars() {
|
|
125
|
+
return ["FLINK_API_KEY", "FLINK_API_SECRET"];
|
|
126
|
+
}
|
|
127
|
+
isConfluentCloudOnly() {
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=check-health-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-health-handler.js","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/diagnostics/check-health-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EACL,eAAe,GAEhB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAE7D,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,CAAC,qCAAqC,CAAC;SAC/C,GAAG,EAAE;SACL,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC;SAC5C,QAAQ,EAAE;IACb,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,6CAA6C,CAAC;IAC1D,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,4CAA4C,CAAC;IACzD,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,KAAK,CACJ,IAAI,MAAM,CACR,kEAAkE,CACnE,CACF;SACA,QAAQ,EAAE;SACV,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,CAAC,0DAA0D,CAAC;CACxE,CAAC,CAAC;AAeH,MAAM,OAAO,kBAAmB,SAAQ,eAAe;IACrD,KAAK,CAAC,MAAM,CACV,aAA4B,EAC5B,aAAkD;QAElD,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,GAC7D,oBAAoB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAE5C,MAAM,eAAe,GAAG,eAAe,CACrC,cAAc,EACd,6BAA6B,EAC7B,cAAc,CACf,CAAC;QACF,MAAM,cAAc,GAAG,eAAe,CACpC,cAAc,EACd,4BAA4B,EAC5B,aAAa,CACd,CAAC;QAEF,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YAC5C,aAAa,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,eAAe,GAAG,qBAAqB,CAC3C,aAAa,CAAC,gCAAgC,EAAE,CACjD,CAAC;QAEF,uBAAuB;QACvB,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,eAAe,CACvE,mGAAmG,CACpG,CAAC,GAAG,CAAC;YACJ,MAAM,EAAE;gBACN,IAAI,EAAE;oBACJ,eAAe,EAAE,eAAe;oBAChC,cAAc,EAAE,cAAc;oBAC9B,cAAc,EAAE,aAAa;iBAC9B;aACF;SACF,CAAC,CAAC;QAEH,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,cAAc,CACxB,mCAAmC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,EAChE,IAAI,CACL,CAAC;QACJ,CAAC;QAED,iBAAiB;QACjB,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,MAAM,eAAe,CACpD,8GAA8G,CAC/G,CAAC,GAAG,CAAC;YACJ,MAAM,EAAE;gBACN,IAAI,EAAE;oBACJ,eAAe,EAAE,eAAe;oBAChC,cAAc,EAAE,cAAc;oBAC9B,cAAc,EAAE,aAAa;iBAC9B;aACF;SACF,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,aAAa,EAAE,MAAM,EAAE,KAAK,IAAI,SAAS,CAAC;QACxD,MAAM,UAAU,GAAG,cAAc,EAAE,IAAI,IAAI,EAAE,CAAC;QAC9C,MAAM,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAEtC,0BAA0B;QAC1B,MAAM,MAAM,GAAiB;YAC3B,MAAM,EAAE,SAAS;YACjB,KAAK;YACL,OAAO,EAAE,EAAE;YACX,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC;gBACpC,cAAc,EAAE,UAAU,CAAC,MAAM;gBACjC,eAAe,EAAE,eAAe,EAAE,OAAO;gBACzC,YAAY,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS;gBAC5C,aAAa,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe;aACpD;SACF,CAAC;QAEF,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,SAAS;gBACZ,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1B,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;oBAC1B,MAAM,CAAC,OAAO,GAAG,gCAAgC,UAAU,CAAC,MAAM,iCAAiC,eAAe,EAAE,OAAO,EAAE,CAAC;gBAChI,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;oBAC1B,MAAM,CAAC,OAAO;wBACZ,0DAA0D,CAAC;gBAC/D,CAAC;gBACD,MAAM;YAER,KAAK,WAAW;gBACd,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;gBAC1B,MAAM,CAAC,OAAO,GAAG,mCAAmC,CAAC;gBACrD,MAAM;YAER,KAAK,QAAQ;gBACX,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;gBAC3B,MAAM,CAAC,OAAO,GAAG,qBAAqB,aAAa,EAAE,MAAM,EAAE,MAAM,IAAI,eAAe,EAAE,OAAO,IAAI,+BAA+B,EAAE,CAAC;gBACrI,MAAM;YAER,KAAK,SAAS;gBACZ,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;gBAC3B,MAAM,CAAC,OAAO,GAAG,yBAAyB,eAAe,EAAE,OAAO,IAAI,+BAA+B,EAAE,CAAC;gBACxG,MAAM;YAER,KAAK,SAAS;gBACZ,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;gBAC1B,MAAM,CAAC,OAAO,GAAG,6BAA6B,CAAC;gBAC/C,MAAM;YAER,KAAK,SAAS;gBACZ,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;gBAC1B,MAAM,CAAC,OAAO,GAAG,iCAAiC,CAAC;gBACnD,MAAM;YAER;gBACE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;gBAC1B,MAAM,CAAC,OAAO,GAAG,mBAAmB,KAAK,SAAS,CAAC;QACvD,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CACxB,qBAAqB,aAAa,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAC3E,CAAC;IACJ,CAAC;IAED,aAAa;QACX,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,4BAA4B;YAC3C,WAAW,EACT,mKAAmK;YACrK,WAAW,EAAE,oBAAoB,CAAC,KAAK;SACxC,CAAC;IACJ,CAAC;IAED,kBAAkB;QAChB,OAAO,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;IAC/C,CAAC;IAED,oBAAoB;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -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 DetectIssuesHandler 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=detect-issues-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-issues-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/diagnostics/detect-issues-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;AAM5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAoD5C,qBAAa,mBAAoB,SAAQ,eAAe;IAChD,MAAM,CACV,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACjD,OAAO,CAAC,cAAc,CAAC;IAyQ1B,aAAa,IAAI,UAAU;IAS3B,kBAAkB,IAAI,MAAM,EAAE;IAI9B,oBAAoB,IAAI,OAAO;CAGhC"}
|