+
@@ -607,7 +628,7 @@ function TopologyFlow({ kafka, onEditResource }: TopologyProps) {
([nodePoolData, podSetData, podData]: [
{ items?: KafkaNodePool[] },
{ items?: StrimziPodSet[] },
- { items?: Pod[] }
+ { items?: Pod[] },
]) => {
if (nodePoolData?.items) {
const pools = nodePoolData.items.filter(
@@ -631,7 +652,7 @@ function TopologyFlow({ kafka, onEditResource }: TopologyProps) {
setLoading(false);
}
)
- .catch((err) => {
+ .catch(err => {
console.error('Failed to fetch Kafka topology data:', err);
setLoading(false);
});
@@ -647,14 +668,30 @@ function TopologyFlow({ kafka, onEditResource }: TopologyProps) {
// PHASE 1: Calculate ALL pod dimensions first (based on real data)
// This ensures cluster/namespace dimensions are accurate
- let allPoolDimensions: Array<{ poolName: string; podDimensions: PodDimensions[]; dimensions: NodePoolDimensions }> = [];
- let kraftLegacyDimensions: { podDimensions: PodDimensions[]; groupWidth: number; groupHeight: number } | null = null;
- let zkDimensions: { podDimensions: PodDimensions[]; groupWidth: number; groupHeight: number } | null = null;
- let zkBrokerDimensions: { podDimensions: PodDimensions[]; groupWidth: number; groupHeight: number } | null = null;
+ let allPoolDimensions: Array<{
+ poolName: string;
+ podDimensions: PodDimensions[];
+ dimensions: NodePoolDimensions;
+ }> = [];
+ let kraftLegacyDimensions: {
+ podDimensions: PodDimensions[];
+ groupWidth: number;
+ groupHeight: number;
+ } | null = null;
+ let zkDimensions: {
+ podDimensions: PodDimensions[];
+ groupWidth: number;
+ groupHeight: number;
+ } | null = null;
+ let zkBrokerDimensions: {
+ podDimensions: PodDimensions[];
+ groupWidth: number;
+ groupHeight: number;
+ } | null = null;
if (nodePools.length > 0) {
// Calculate dimensions for all NodePools
- allPoolDimensions = nodePools.map((pool) => {
+ allPoolDimensions = nodePools.map(pool => {
const poolName = pool.metadata.name;
const roles = pool.spec.roles || [];
const replicas = pool.spec.replicas;
@@ -663,7 +700,7 @@ function TopologyFlow({ kafka, onEditResource }: TopologyProps) {
const isBroker = roles.includes('broker');
const isDual = isController && isBroker;
- const podDimensions = nodeIds.map((nodeId) => {
+ const podDimensions = nodeIds.map(nodeId => {
const podName = `${clusterName}-${poolName}-${nodeId}`;
const pod = pods.find(p => p.metadata?.name === podName);
return calculatePodDimensions({
@@ -678,7 +715,7 @@ function TopologyFlow({ kafka, onEditResource }: TopologyProps) {
return {
poolName,
podDimensions,
- dimensions: calculateNodePoolDimensions(podDimensions)
+ dimensions: calculateNodePoolDimensions(podDimensions),
};
});
} else if (isKRaft) {
@@ -782,12 +819,26 @@ function TopologyFlow({ kafka, onEditResource }: TopologyProps) {
totalPoolHeight += dimensions.poolHeight + LAYOUT.GROUP_SPACING;
});
- clusterWidth = Math.max(maxPoolWidth + LAYOUT.CLUSTER_HORIZONTAL_MARGIN, LAYOUT.CLUSTER_MIN_WIDTH);
- clusterHeight = LAYOUT.CLUSTER_LABEL_HEIGHT + LAYOUT.CLUSTER_VERTICAL_MARGIN_START + totalPoolHeight + LAYOUT.CLUSTER_VERTICAL_MARGIN_END;
+ clusterWidth = Math.max(
+ maxPoolWidth + LAYOUT.CLUSTER_HORIZONTAL_MARGIN,
+ LAYOUT.CLUSTER_MIN_WIDTH
+ );
+ clusterHeight =
+ LAYOUT.CLUSTER_LABEL_HEIGHT +
+ LAYOUT.CLUSTER_VERTICAL_MARGIN_START +
+ totalPoolHeight +
+ LAYOUT.CLUSTER_VERTICAL_MARGIN_END;
} else if (isKRaft && kraftLegacyDimensions) {
// KRaft legacy
- clusterWidth = Math.max(kraftLegacyDimensions.groupWidth + LAYOUT.CLUSTER_HORIZONTAL_MARGIN, LAYOUT.CLUSTER_MIN_WIDTH);
- clusterHeight = LAYOUT.CLUSTER_LABEL_HEIGHT + LAYOUT.CLUSTER_VERTICAL_MARGIN_LEGACY + kraftLegacyDimensions.groupHeight + LAYOUT.CLUSTER_VERTICAL_MARGIN_END;
+ clusterWidth = Math.max(
+ kraftLegacyDimensions.groupWidth + LAYOUT.CLUSTER_HORIZONTAL_MARGIN,
+ LAYOUT.CLUSTER_MIN_WIDTH
+ );
+ clusterHeight =
+ LAYOUT.CLUSTER_LABEL_HEIGHT +
+ LAYOUT.CLUSTER_VERTICAL_MARGIN_LEGACY +
+ kraftLegacyDimensions.groupHeight +
+ LAYOUT.CLUSTER_VERTICAL_MARGIN_END;
} else {
// ZooKeeper mode - use pre-calculated dimensions
const zkGroupWidth = zkDimensions?.groupWidth || 0;
@@ -796,7 +847,10 @@ function TopologyFlow({ kafka, onEditResource }: TopologyProps) {
const brokerGroupHeight = zkBrokerDimensions?.groupHeight || 0;
maxPodSetWidth = Math.max(zkGroupWidth, brokerGroupWidth);
- clusterWidth = Math.max(maxPodSetWidth + LAYOUT.CLUSTER_HORIZONTAL_MARGIN, LAYOUT.CLUSTER_MIN_WIDTH);
+ clusterWidth = Math.max(
+ maxPodSetWidth + LAYOUT.CLUSTER_HORIZONTAL_MARGIN,
+ LAYOUT.CLUSTER_MIN_WIDTH
+ );
clusterHeight =
LAYOUT.CLUSTER_LABEL_HEIGHT +
LAYOUT.CLUSTER_VERTICAL_MARGIN_START +
@@ -807,7 +861,8 @@ function TopologyFlow({ kafka, onEditResource }: TopologyProps) {
// Namespace dimensions
const namespaceWidth = clusterWidth + LAYOUT.NAMESPACE_PADDING * 2;
- const namespaceHeight = clusterHeight + LAYOUT.NAMESPACE_PADDING * 2 + LAYOUT.NAMESPACE_LABEL_HEIGHT + 10;
+ const namespaceHeight =
+ clusterHeight + LAYOUT.NAMESPACE_PADDING * 2 + LAYOUT.NAMESPACE_LABEL_HEIGHT + 10;
// Namespace node (root)
generatedNodes.push({
@@ -833,8 +888,19 @@ function TopologyFlow({ kafka, onEditResource }: TopologyProps) {
data: {
label: (
-
-
+
+
-
-
),
- editInfo: onEditResource ? {
- resourceUrl: `/apis/kafka.strimzi.io/${kafkaVersion}/namespaces/${namespace}/kafkas/${clusterName}`,
- resourceName: clusterName,
- resourceKind: 'Kafka',
- } : undefined,
+ editInfo: onEditResource
+ ? {
+ resourceUrl: `/apis/kafka.strimzi.io/${kafkaVersion}/namespaces/${namespace}/kafkas/${clusterName}`,
+ resourceName: clusterName,
+ resourceKind: 'Kafka',
+ }
+ : undefined,
},
style: {
background: 'transparent',
@@ -1060,11 +1145,13 @@ function TopologyFlow({ kafka, onEditResource }: TopologyProps) {
theme,
resourceType: 'KafkaNodePool',
replicaInfo: `Replicas: ${replicas}`,
- editInfo: onEditResource ? {
- resourceUrl: `/apis/kafka.strimzi.io/${kafkaVersion}/namespaces/${namespace}/kafkanodepools/${poolName}`,
- resourceName: poolName,
- resourceKind: 'KafkaNodePool',
- } : undefined,
+ editInfo: onEditResource
+ ? {
+ resourceUrl: `/apis/kafka.strimzi.io/${kafkaVersion}/namespaces/${namespace}/kafkanodepools/${poolName}`,
+ resourceName: poolName,
+ resourceKind: 'KafkaNodePool',
+ }
+ : undefined,
})
);
@@ -1102,11 +1189,13 @@ function TopologyFlow({ kafka, onEditResource }: TopologyProps) {
theme,
resourceType: 'StrimziPodSet',
replicaInfo: `Ready Pods: ${readyPodsCount}/${nodeIds.length}`,
- editInfo: onEditResource ? {
- resourceUrl: `/apis/core.strimzi.io/${coreVersion}/namespaces/${namespace}/strimzipodsets/${podSet.metadata.name}`,
- resourceName: podSet.metadata.name,
- resourceKind: 'StrimziPodSet',
- } : undefined,
+ editInfo: onEditResource
+ ? {
+ resourceUrl: `/apis/core.strimzi.io/${coreVersion}/namespaces/${namespace}/strimzipodsets/${podSet.metadata.name}`,
+ resourceName: podSet.metadata.name,
+ resourceKind: 'StrimziPodSet',
+ }
+ : undefined,
})
);
@@ -1185,11 +1274,13 @@ function TopologyFlow({ kafka, onEditResource }: TopologyProps) {
theme,
resourceType: 'StrimziPodSet',
replicaInfo: `Ready Pods: ${readyPodsCount}/${brokerCount}`,
- editInfo: onEditResource ? {
- resourceUrl: `/apis/core.strimzi.io/${coreVersion}/namespaces/${namespace}/strimzipodsets/${kafkaPodSet.metadata.name}`,
- resourceName: kafkaPodSet.metadata.name,
- resourceKind: 'StrimziPodSet',
- } : undefined,
+ editInfo: onEditResource
+ ? {
+ resourceUrl: `/apis/core.strimzi.io/${coreVersion}/namespaces/${namespace}/strimzipodsets/${kafkaPodSet.metadata.name}`,
+ resourceName: kafkaPodSet.metadata.name,
+ resourceKind: 'StrimziPodSet',
+ }
+ : undefined,
})
);
@@ -1270,11 +1361,13 @@ function TopologyFlow({ kafka, onEditResource }: TopologyProps) {
theme,
resourceType: 'StrimziPodSet',
replicaInfo: `Ready Pods: ${zkReadyPodsCount}/${zkCount}`,
- editInfo: onEditResource ? {
- resourceUrl: `/apis/core.strimzi.io/${coreVersion}/namespaces/${namespace}/strimzipodsets/${zkPodSet.metadata.name}`,
- resourceName: zkPodSet.metadata.name,
- resourceKind: 'StrimziPodSet',
- } : undefined,
+ editInfo: onEditResource
+ ? {
+ resourceUrl: `/apis/core.strimzi.io/${coreVersion}/namespaces/${namespace}/strimzipodsets/${zkPodSet.metadata.name}`,
+ resourceName: zkPodSet.metadata.name,
+ resourceKind: 'StrimziPodSet',
+ }
+ : undefined,
})
);
@@ -1311,7 +1404,8 @@ function TopologyFlow({ kafka, onEditResource }: TopologyProps) {
// Kafka StrimziPodSet (below ZK)
if (kafkaPodSet && zkBrokerDimensions) {
// Use pre-calculated dimensions
- const { podDimensions: brokerPodDimensions, groupHeight: brokerGroupHeight } = zkBrokerDimensions;
+ const { podDimensions: brokerPodDimensions, groupHeight: brokerGroupHeight } =
+ zkBrokerDimensions;
const brokerGroupX = (clusterWidth - maxPodSetWidth) / 2;
generatedNodes.push({
@@ -1347,11 +1441,13 @@ function TopologyFlow({ kafka, onEditResource }: TopologyProps) {
theme,
resourceType: 'StrimziPodSet',
replicaInfo: `Ready Pods: ${kafkaReadyPodsCount}/${brokerCount}`,
- editInfo: onEditResource ? {
- resourceUrl: `/apis/core.strimzi.io/${coreVersion}/namespaces/${namespace}/strimzipodsets/${kafkaPodSet.metadata.name}`,
- resourceName: kafkaPodSet.metadata.name,
- resourceKind: 'StrimziPodSet',
- } : undefined,
+ editInfo: onEditResource
+ ? {
+ resourceUrl: `/apis/core.strimzi.io/${coreVersion}/namespaces/${namespace}/strimzipodsets/${kafkaPodSet.metadata.name}`,
+ resourceName: kafkaPodSet.metadata.name,
+ resourceKind: 'StrimziPodSet',
+ }
+ : undefined,
})
);
diff --git a/strimzi/src/components/KafkaConnectList.tsx b/strimzi/src/components/KafkaConnectList.tsx
index 6443026f6..a6c85313f 100644
--- a/strimzi/src/components/KafkaConnectList.tsx
+++ b/strimzi/src/components/KafkaConnectList.tsx
@@ -70,6 +70,10 @@ export function KafkaConnectList() {
];
return (
-
+
);
}
diff --git a/strimzi/src/components/KafkaConnectorList.stories.tsx b/strimzi/src/components/KafkaConnectorList.stories.tsx
index 9fda6ac92..084faae85 100644
--- a/strimzi/src/components/KafkaConnectorList.stories.tsx
+++ b/strimzi/src/components/KafkaConnectorList.stories.tsx
@@ -7,10 +7,7 @@ import {
SimpleTable,
} from '@kinvolk/headlamp-plugin/lib/components/common';
import { Meta, StoryObj } from '@storybook/react';
-import type {
- KafkaConnectorInterface,
- KafkaConnectorState,
-} from '../resources/kafkaConnector';
+import type { KafkaConnectorInterface, KafkaConnectorState } from '../resources/kafkaConnector';
import { getConnectorDesiredState } from '../crds-helpers';
import { mockKafkaConnectors } from '../storybookMocks/strimziMocks';
@@ -120,8 +117,7 @@ export function PureKafkaConnectorList({ items, onTogglePause }: PureKafkaConnec
},
{
label: 'Runtime state',
- getter: row =>
- row.status?.connectorStatus?.connector?.state?.toLowerCase() ?? '-',
+ getter: row => row.status?.connectorStatus?.connector?.state?.toLowerCase() ?? '-',
},
{ label: 'Status', getter: statusChip },
{ label: 'Actions', getter: action },
diff --git a/strimzi/src/components/KafkaConnectorList.tsx b/strimzi/src/components/KafkaConnectorList.tsx
index 617b9b3a5..5457bbf6c 100644
--- a/strimzi/src/components/KafkaConnectorList.tsx
+++ b/strimzi/src/components/KafkaConnectorList.tsx
@@ -149,9 +149,7 @@ export function KafkaConnectorList() {
size="small"
variant="contained"
color="primary"
- onClick={() =>
- setPendingState({ connector: item.jsonData, targetState: 'running' })
- }
+ onClick={() => setPendingState({ connector: item.jsonData, targetState: 'running' })}
>
Resume
@@ -163,9 +161,7 @@ export function KafkaConnectorList() {
size="small"
variant="contained"
color="warning"
- onClick={() =>
- setPendingState({ connector: item.jsonData, targetState: 'paused' })
- }
+ onClick={() => setPendingState({ connector: item.jsonData, targetState: 'paused' })}
>
Pause
@@ -176,9 +172,7 @@ export function KafkaConnectorList() {
size="small"
variant="contained"
color="primary"
- onClick={() =>
- setPendingState({ connector: item.jsonData, targetState: 'running' })
- }
+ onClick={() => setPendingState({ connector: item.jsonData, targetState: 'running' })}
>
Start
@@ -190,7 +184,11 @@ export function KafkaConnectorList() {
return (
<>
-
+
diff --git a/strimzi/src/components/KafkaUserCreateFormModal.tsx b/strimzi/src/components/KafkaUserCreateFormModal.tsx
index bbaa0691d..eacde8028 100644
--- a/strimzi/src/components/KafkaUserCreateFormModal.tsx
+++ b/strimzi/src/components/KafkaUserCreateFormModal.tsx
@@ -166,7 +166,16 @@ export function KafkaUserCreateFormModal({
-
+
-
+
-
+
-
+
-
+