Przeglądaj źródła

topics details endpoint start commit //
dependencies and versions fix

Zhenya Taran 5 lat temu
rodzic
commit
46073c8dc0

+ 9 - 18
kafka-ui-api/pom.xml

@@ -11,21 +11,12 @@
 
     <artifactId>kafka-ui-api</artifactId>
 
-    <properties>
-        <org.mapstruct.version>1.3.1.Final</org.mapstruct.version>
-        <org.projectlombok.version>1.18.10</org.projectlombok.version>
-        <java.version>13</java.version>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <node.version>v12.13.1</node.version>
-        <git.revision>latest</git.revision>
-    </properties>
-
     <dependencyManagement>
         <dependencies>
             <dependency>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-dependencies</artifactId>
-                <version>2.2.4.RELEASE</version>
+                <version>${spring-boot.version}</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
@@ -46,17 +37,17 @@
         <dependency>
             <groupId>com.provectus</groupId>
             <artifactId>kafka-ui-contract</artifactId>
-            <version>0.0.1-SNAPSHOT</version>
+            <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.kafka</groupId>
             <artifactId>kafka-clients</artifactId>
-            <version>2.4.0</version>
+            <version>${kafka-clients.version}</version>
         </dependency>
         <dependency>
             <groupId>com.101tec</groupId>
             <artifactId>zkclient</artifactId>
-            <version>0.2</version>
+            <version>${zkclient.version}</version>
         </dependency>
         <dependency>
             <groupId>org.projectlombok</groupId>
@@ -91,7 +82,7 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <version>2.2.4.RELEASE</version>
+                <version>${spring-boot.version}</version>
                 <executions>
                     <execution>
                         <goals>
@@ -103,7 +94,7 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.5.1</version>
+                <version>${maven-compiler-plugin.version}</version>
                 <configuration>
                     <source>13</source>
                     <target>13</target>
@@ -121,7 +112,7 @@
                         <path>
                             <groupId>org.springframework.boot</groupId>
                             <artifactId>spring-boot-configuration-processor</artifactId>
-                            <version>2.2.4.RELEASE</version>
+                            <version>${spring-boot.version}</version>
                         </path>
                     </annotationProcessorPaths>
                 </configuration>
@@ -157,7 +148,7 @@
                     <plugin>
                         <groupId>com.github.eirslett</groupId>
                         <artifactId>frontend-maven-plugin</artifactId>
-                        <version>1.8.0</version>
+                        <version>${frontend-maven-plugin.version}</version>
                         <configuration>
                             <workingDirectory>../kafka-ui-react-app</workingDirectory>
                         </configuration>
@@ -186,7 +177,7 @@
                     <plugin>
                         <groupId>com.spotify</groupId>
                         <artifactId>dockerfile-maven-plugin</artifactId>
-                        <version>1.4.10</version>
+                        <version>${dockerfile-maven-plugin.version}</version>
                         <configuration>
                             <skipPush>true</skipPush>
                         </configuration>

+ 2 - 0
kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/model/KafkaCluster.java

@@ -2,6 +2,7 @@ package com.provectus.kafka.ui.cluster.model;
 
 import com.provectus.kafka.ui.model.ClusterStatus;
 import com.provectus.kafka.ui.model.Topic;
+import com.provectus.kafka.ui.model.TopicDetails;
 import lombok.AccessLevel;
 import lombok.Data;
 import lombok.experimental.FieldDefaults;
@@ -25,6 +26,7 @@ public class KafkaCluster {
 
     Map<String, String> metricsMap = new ConcurrentHashMap<>();
     List<Topic> topics = new ArrayList<>();
+    List<TopicDetails> topicDetails = new ArrayList<>();
 
     public void putMetric(String metricKey, String metricValue) {
         metricsMap.put(metricKey, metricValue);

+ 5 - 0
kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/service/ClusterService.java

@@ -7,6 +7,7 @@ import com.provectus.kafka.ui.cluster.model.MetricsConstants;
 import com.provectus.kafka.ui.model.BrokerMetrics;
 import com.provectus.kafka.ui.model.Cluster;
 import com.provectus.kafka.ui.model.Topic;
+import com.provectus.kafka.ui.model.TopicDetails;
 import lombok.RequiredArgsConstructor;
 import org.mapstruct.factory.Mappers;
 import org.springframework.http.ResponseEntity;
@@ -95,4 +96,8 @@ public class ClusterService {
             return null;
         }
     }
+
+    public Mono<ResponseEntity<TopicDetails>> getTopicDetails(String clusterId, String topicName) {
+        return null;
+    }
 }

+ 6 - 1
kafka-ui-api/src/main/java/com/provectus/kafka/ui/kafka/KafkaService.java

@@ -34,6 +34,11 @@ public class KafkaService {
 
         loadMetrics(kafkaCluster, adminClient);
         loadTopics(kafkaCluster, adminClient);
+        loadTopicsDetails(kafkaCluster, adminClient);
+    }
+
+    private void loadTopicsDetails(KafkaCluster kafkaCluster, AdminClient adminClient) {
+
     }
 
     @SneakyThrows
@@ -60,9 +65,9 @@ public class KafkaService {
                 partitionDto.setPartition(partition.partition());
                 List<Replica> replicas = new ArrayList<>();
                 for (Node replicaNode : partition.replicas()) {
-                    //TODO: brokerId
                     var replica = new Replica();
                     replica.setBroker(replicaNode.id());
+                    replica.setLeader(partition.leader() != null && partition.leader().id() == replicaNode.id());
                     replica.setInSync(partition.isr().contains(replicaNode));
                     replicas.add(replica);
                 }

+ 18 - 15
kafka-ui-api/src/main/java/com/provectus/kafka/ui/rest/MetricsRestController.java

@@ -5,6 +5,7 @@ import com.provectus.kafka.ui.cluster.service.ClusterService;
 import com.provectus.kafka.ui.model.BrokerMetrics;
 import com.provectus.kafka.ui.model.Cluster;
 import com.provectus.kafka.ui.model.Topic;
+import com.provectus.kafka.ui.model.TopicDetails;
 import lombok.RequiredArgsConstructor;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
@@ -24,15 +25,29 @@ public class MetricsRestController implements ClustersApi {
         //TODO: currently isn't displayed on UI, to do later
     }
 
+    @Override
+    @GetMapping
+    public Mono<ResponseEntity<Flux<Cluster>>> getClusters(ServerWebExchange exchange) {
+        return clusterService.getClusters();
+    }
+
+    @Override
+    @GetMapping("/{clusterId}/metrics/broker")
+    public Mono<ResponseEntity<BrokerMetrics>> getBrokersMetrics(@PathVariable String clusterId, ServerWebExchange exchange) {
+        return clusterService.getBrokerMetrics(clusterId);
+    }
+
     @Override
     @GetMapping("/{clusterId}/topics")
     public Mono<ResponseEntity<Flux<Topic>>> getTopics(@PathVariable String clusterId, ServerWebExchange exchange) {
         return clusterService.getTopics(clusterId);
     }
 
-    @GetMapping("/{clusterId}/topics/{topicId}")
-    public void getTopic(@PathVariable("clusterId") String clusterId,
-                         @PathVariable("topicId") String topicId) {
+    @Override
+    @GetMapping("/{clusterId}/topics/{topicName}")
+    public Mono<ResponseEntity<TopicDetails>> getTopicDetails(@PathVariable("clusterId") String clusterId,
+                                                              @PathVariable("topicName") String topicName, ServerWebExchange exchange) {
+        return clusterService.getTopicDetails(clusterId, topicName);
     }
 
     @PostMapping("/{clusterId}/topics")
@@ -44,16 +59,4 @@ public class MetricsRestController implements ClustersApi {
     public void putTopic(@PathVariable("clusterId") String clusterId,
                          @PathVariable("topicId") String topicId) {
     }
-
-    @Override
-    @GetMapping("/{clusterId}/metrics/broker")
-    public Mono<ResponseEntity<BrokerMetrics>> getBrokersMetrics(@PathVariable String clusterId, ServerWebExchange exchange) {
-        return clusterService.getBrokerMetrics(clusterId);
-    }
-
-    @Override
-    @GetMapping
-    public Mono<ResponseEntity<Flux<Cluster>>> getClusters(ServerWebExchange exchange) {
-        return clusterService.getClusters();
-    }
 }

+ 3 - 66
kafka-ui-contract/pom.xml

@@ -22,14 +22,7 @@
         </dependency>
     </dependencies>
 
-
-    <properties>
-        <maven.compiler.source>13</maven.compiler.source>
-        <maven.compiler.target>13</maven.compiler.target>
-    </properties>
-
     <profiles>
-
         <!--        SPRING WebFlux API          -->
         <profile>
             <id>generate-spring-webflux-api</id>
@@ -41,73 +34,17 @@
                 <dependency>
                     <groupId>org.springframework.boot</groupId>
                     <artifactId>spring-boot-starter-webflux</artifactId>
-                    <version>2.2.1.RELEASE</version>
-                </dependency>
-
-                <dependency>
-                    <groupId>org.springframework.boot</groupId>
-                    <artifactId>spring-boot-starter-validation</artifactId>
-                    <version>2.2.1.RELEASE</version>
-                </dependency>
-                <dependency>
-                    <groupId>org.openapitools</groupId>
-                    <artifactId>jackson-databind-nullable</artifactId>
-                    <version>0.2.0</version>
+                    <version>${spring-boot.version}</version>
                 </dependency>
                 <dependency>
                     <groupId>io.springfox</groupId>
                     <artifactId>springfox-swagger2</artifactId>
-                    <version>2.9.2</version>
-                </dependency>
-
-                <dependency>
-                    <groupId>com.fasterxml.jackson.core</groupId>
-                    <artifactId>jackson-databind</artifactId>
-                    <version>2.10.0</version>
-                </dependency>
-                <dependency>
-                    <groupId>com.fasterxml.jackson.dataformat</groupId>
-                    <artifactId>jackson-dataformat-yaml</artifactId>
-                    <version>2.10.0</version>
-                </dependency>
-                <dependency>
-                    <groupId>com.fasterxml.jackson.datatype</groupId>
-                    <artifactId>jackson-datatype-jsr310</artifactId>
-                    <version>2.10.0</version>
+                    <version>${springfox-swagger2.version}</version>
                 </dependency>
                 <dependency>
                     <groupId>org.openapitools</groupId>
                     <artifactId>jackson-databind-nullable</artifactId>
-                    <version>0.2.1</version>
-                </dependency>
-                <dependency>
-                    <groupId>com.google.code.findbugs</groupId>
-                    <artifactId>jsr305</artifactId>
-                    <version>3.0.2</version>
-                </dependency>
-
-                <dependency>
-                    <groupId>com.google.code.gson</groupId>
-                    <artifactId>gson</artifactId>
-                    <version>2.8.5</version>
-                </dependency>
-                <!-- https://mvnrepository.com/artifact/io.rest-assured/rest-assured -->
-                <dependency>
-                    <groupId>io.rest-assured</groupId>
-                    <artifactId>rest-assured</artifactId>
-                    <version>4.1.2</version>
-                </dependency>
-                <!-- https://mvnrepository.com/artifact/io.gsonfire/gson-fire -->
-                <dependency>
-                    <groupId>io.gsonfire</groupId>
-                    <artifactId>gson-fire</artifactId>
-                    <version>1.8.3</version>
-                </dependency>
-                <!-- https://mvnrepository.com/artifact/com.squareup.okio/okio -->
-                <dependency>
-                    <groupId>com.squareup.okio</groupId>
-                    <artifactId>okio</artifactId>
-                    <version>2.4.3</version>
+                    <version>${jackson-databind-nullable.version}</version>
                 </dependency>
             </dependencies>
 

+ 44 - 2
kafka-ui-contract/src/main/resources/swagger/kafka-ui-api.yaml

@@ -39,7 +39,6 @@ paths:
       parameters:
         - name: clusterId
           in: path
-          description: clusterId
           required: true
           schema:
             type: string
@@ -60,7 +59,6 @@ paths:
       parameters:
         - name: clusterId
           in: path
-          description: clusterId
           required: true
           schema:
             type: string
@@ -74,6 +72,31 @@ paths:
                 items:
                   $ref: '#/components/schemas/Topic'
 
+  /clusters/{clusterId}/topics/{topicName}:
+    get:
+      tags:
+        - /clusters
+      summary: getTopicDetails
+      operationId: getTopicDetails
+      parameters:
+        - name: clusterId
+          in: path
+          required: true
+          schema:
+            type: string
+        - name: topicName
+          in: path
+          required: true
+          schema:
+            type: string
+      responses:
+        200:
+          description: OK
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/TopicDetails'
+
 components:
   schemas:
     Cluster:
@@ -184,3 +207,22 @@ components:
         inSync:
           type: boolean
 
+    TopicDetails:
+      type: object
+      properties:
+        partitionCount:
+          type: int
+        replicationFactor:
+          type: int
+        replicas:
+          type: int
+        inSyncReplicas:
+          type: int
+        bytesInPerSec:
+          type: int
+        segmentSize:
+          type: int
+        segmentCount:
+          type: int
+        underReplicatedPartitions:
+          type: int

+ 19 - 0
pom.xml

@@ -8,6 +8,25 @@
 		<module>kafka-ui-api</module>
 	</modules>
 
+	<properties>
+		<maven.compiler.source>13</maven.compiler.source>
+		<maven.compiler.target>13</maven.compiler.target>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+
+		<spring-boot.version>2.2.4.RELEASE</spring-boot.version>
+		<jackson-databind-nullable.version>0.2.1</jackson-databind-nullable.version>
+		<springfox-swagger2.version>2.9.2</springfox-swagger2.version>
+		<org.mapstruct.version>1.3.1.Final</org.mapstruct.version>
+		<org.projectlombok.version>1.18.10</org.projectlombok.version>
+		<git.revision>latest</git.revision>
+		<zkclient.version>0.2</zkclient.version>
+		<kafka-clients.version>2.4.0</kafka-clients.version>
+		<node.version>v12.13.1</node.version>
+		<dockerfile-maven-plugin.version>1.4.10</dockerfile-maven-plugin.version>
+		<frontend-maven-plugin.version>1.8.0</frontend-maven-plugin.version>
+		<maven-compiler-plugin.version>3.5.1</maven-compiler-plugin.version>
+	</properties>
+
 	<groupId>com.provectus</groupId>
 	<artifactId>kafka-ui</artifactId>
 	<version>0.0.1-SNAPSHOT</version>