feat(kafka): support Kafka MQ admin client
This commit is contained in:
1 parent
3e7cf30ce5
commit
7cec4892bf
43 files changed
+4281
-186
No files matched your search
@@ -1589,18 +1589,36 @@ export const useConnectionStore = defineStore("connection", () => {
|
||||
await ensureConnected(connectionId);
|
||||
if (useCachedChildren(node, options)) return;
|
||||
|
||||
const tenants = await withMetadataLoadTimeout(connectionId, api.mqListTenants(connectionId), "message queue tenants");
|
||||
const tenantNames = sortSidebarNames(tenants.map((tenant) => tenant.name).filter((name) => !!name.trim()));
|
||||
setChildren(
|
||||
node,
|
||||
tenantNames.map((tenant) => ({
|
||||
id: schemaCacheKey(connectionId, "mq-tenant", tenant),
|
||||
label: tenant,
|
||||
type: "mq-tenant" as const,
|
||||
connectionId,
|
||||
mqTenant: tenant,
|
||||
})),
|
||||
);
|
||||
const config = getConfig(connectionId);
|
||||
const isKafka = config?.driver_profile === "kafka";
|
||||
|
||||
if (isKafka) {
|
||||
// Kafka has no tenant/namespace concept. Create a synthetic child
|
||||
// that opens the MQ admin console directly when clicked.
|
||||
setChildren(node, [
|
||||
{
|
||||
id: schemaCacheKey(connectionId, "mq-tenant", "_kafka"),
|
||||
label: "Topics",
|
||||
type: "mq-tenant" as const,
|
||||
connectionId,
|
||||
mqTenant: "_kafka",
|
||||
mqInitialTab: "topics",
|
||||
},
|
||||
]);
|
||||
} else {
|
||||
const tenants = await withMetadataLoadTimeout(connectionId, api.mqListTenants(connectionId), "message queue tenants");
|
||||
const tenantNames = sortSidebarNames(tenants.map((tenant) => tenant.name).filter((name) => !!name.trim()));
|
||||
setChildren(
|
||||
node,
|
||||
tenantNames.map((tenant) => ({
|
||||
id: schemaCacheKey(connectionId, "mq-tenant", tenant),
|
||||
label: tenant,
|
||||
type: "mq-tenant" as const,
|
||||
connectionId,
|
||||
mqTenant: tenant,
|
||||
})),
|
||||
);
|
||||
}
|
||||
node.isExpanded = true;
|
||||
} catch (e) {
|
||||
recordMetadataLoadError(connectionId, e);
|
||||
|
||||
@@ -684,10 +684,11 @@ export const useQueryStore = defineStore("query", () => {
|
||||
return id;
|
||||
}
|
||||
|
||||
function openMqAdmin(connectionId: string, target?: { tenant?: string }) {
|
||||
function openMqAdmin(connectionId: string, target?: { tenant?: string; initialTab?: QueryTab["mqInitialTab"] }) {
|
||||
const existing = tabs.value.find((tab) => tab.mode === "mq" && tab.connectionId === connectionId);
|
||||
if (existing) {
|
||||
if (target?.tenant) existing.mqTenant = target.tenant;
|
||||
if (target?.initialTab) existing.mqInitialTab = target.initialTab;
|
||||
activeTabId.value = existing.id;
|
||||
return existing.id;
|
||||
}
|
||||
@@ -705,6 +706,7 @@ export const useQueryStore = defineStore("query", () => {
|
||||
isExplaining: false,
|
||||
mode: "mq",
|
||||
mqTenant: target?.tenant,
|
||||
mqInitialTab: target?.initialTab,
|
||||
};
|
||||
tabs.value.push(tab);
|
||||
activeTabId.value = id;
|
||||
@@ -910,6 +912,7 @@ export const useQueryStore = defineStore("query", () => {
|
||||
explainExecutionId: undefined,
|
||||
mode: original.mode,
|
||||
mqTenant: original.mqTenant,
|
||||
mqInitialTab: original.mqInitialTab,
|
||||
nacosNamespace: original.nacosNamespace,
|
||||
nacosNamespaceName: original.nacosNamespaceName,
|
||||
structureTableName: original.structureTableName,
|
||||
|
||||
Reference in new issue
Block a user