diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/KafkaCluster.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/KafkaCluster.java index 8e6754eb24..a11ac419f3 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/KafkaCluster.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/KafkaCluster.java @@ -38,7 +38,7 @@ public class KafkaCluster { Exception lastKafkaException; Exception lastZookeeperException; - public TopicDetails getTopicDetails(String key) { + public TopicDetails getOrCreateTopicDetails(String key) { var topicDetails = topicDetailsMap.get(key); if(topicDetails == null) { topicDetailsMap.putIfAbsent(key, new TopicDetails()); diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/service/ClusterService.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/service/ClusterService.java index 936406527b..665f68d041 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/service/ClusterService.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/service/ClusterService.java @@ -44,7 +44,7 @@ public class ClusterService { public Mono> getTopicDetails(String clusterId, String topicName) { KafkaCluster cluster = clustersStorage.getClusterById(clusterId); if (cluster == null) return null; - return Mono.just(ResponseEntity.ok(cluster.getTopicDetails(topicName))); + return Mono.just(ResponseEntity.ok(cluster.getOrCreateTopicDetails(topicName))); } public Mono>> getTopicConfigs(String clusterId, String topicName) { diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/kafka/KafkaService.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/kafka/KafkaService.java index b69d6652d4..658cb4ea25 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/kafka/KafkaService.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/kafka/KafkaService.java @@ -134,6 +134,8 @@ public class KafkaService { kafkaCluster.getBrokersMetrics().setOnlinePartitionCount(0); kafkaCluster.getBrokersMetrics().setOfflinePartitionCount(0); kafkaCluster.getBrokersMetrics().setUnderReplicatedPartitionCount(0); + kafkaCluster.getBrokersMetrics().setInSyncReplicasCount(0); + kafkaCluster.getBrokersMetrics().setOutOfSyncReplicasCount(0); } private Topic collectTopicData(KafkaCluster kafkaCluster, TopicDescription topicDescription) { @@ -177,12 +179,17 @@ public class KafkaService { kafkaCluster.getBrokersMetrics().setOfflinePartitionCount(kafkaCluster.getBrokersMetrics().getOfflinePartitionCount() + 1); } } + kafkaCluster.getCluster().setOnlinePartitionCount(kafkaCluster.getBrokersMetrics().getOnlinePartitionCount()); kafkaCluster.getBrokersMetrics().setUnderReplicatedPartitionCount( kafkaCluster.getBrokersMetrics().getUnderReplicatedPartitionCount() + urpCount); - topic.setPartitions(partitions); + kafkaCluster.getBrokersMetrics().setInSyncReplicasCount( + kafkaCluster.getBrokersMetrics().getInSyncReplicasCount() + inSyncReplicasCount); + kafkaCluster.getBrokersMetrics().setOutOfSyncReplicasCount( + kafkaCluster.getBrokersMetrics().getOutOfSyncReplicasCount() + (replicasCount - inSyncReplicasCount)); - TopicDetails topicDetails = kafkaCluster.getTopicDetails(topicDescription.name()); + topic.setPartitions(partitions); + TopicDetails topicDetails = kafkaCluster.getOrCreateTopicDetails(topicDescription.name()); topicDetails.setReplicas(replicasCount); topicDetails.setPartitionCount(topicDescription.partitions().size()); topicDetails.setInSyncReplicas(inSyncReplicasCount); diff --git a/kafka-ui-contract/src/main/resources/swagger/kafka-ui-api.yaml b/kafka-ui-contract/src/main/resources/swagger/kafka-ui-api.yaml index 774ec47434..c432ced2f7 100644 --- a/kafka-ui-contract/src/main/resources/swagger/kafka-ui-api.yaml +++ b/kafka-ui-contract/src/main/resources/swagger/kafka-ui-api.yaml @@ -206,10 +206,6 @@ components: BrokersMetrics: type: object properties: - clusterId: - type: string - bytesInPerSec: - type: integer brokerCount: type: integer zooKeeperStatus: @@ -218,29 +214,15 @@ components: type: integer uncleanLeaderElectionCount: type: integer - networkPoolUsage: - type: number - requestPoolUsage: - type: number onlinePartitionCount: type: integer underReplicatedPartitionCount: type: integer offlinePartitionCount: type: integer - diskUsage: - $ref: '#/components/schemas/DiskUsage' - diskUsageDistribution: - type: string - required: - - id - - DiskUsage: - type: object - properties: - brokerId: + inSyncReplicasCount: type: integer - segmentSize: + outOfSyncReplicasCount: type: integer Topic: