瀏覽代碼

Add endpoint to retrieve subject versions from schema registry

Ildar Almakaev 4 年之前
父節點
當前提交
f1f87341d8

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

@@ -184,4 +184,8 @@ public class ClusterService {
     public Flux<String> getSchemaSubjects(String clusterName) {
         return schemaRegistryService.getAllSchemaSubjects(clusterName);
     }
+
+    public Flux<Integer> getSchemaSubjectVersions(String clusterName, String subjectName) {
+        return schemaRegistryService.getSchemaSubjectVersions(clusterName, subjectName);
+    }
 }

+ 10 - 0
kafka-ui-api/src/main/java/com/provectus/kafka/ui/cluster/service/SchemaRegistryService.java

@@ -23,4 +23,14 @@ public class SchemaRegistryService {
                 .retrieve()
                 .bodyToFlux(String.class);
     }
+
+    public Flux<Integer> getSchemaSubjectVersions(String clusterName, String subjectName) {
+        KafkaCluster kafkaCluster = clustersStorage.getClusterByName(clusterName).orElseThrow();
+        WebClient webClient = WebClient.create(kafkaCluster.getSchemaRegistry());
+        String url = "%s/%s/versions".formatted(URL_SUBJECTS, subjectName);
+        return webClient.get()
+                .uri(url)
+                .retrieve()
+                .bodyToFlux(Integer.class);
+    }
 }

+ 5 - 0
kafka-ui-api/src/main/java/com/provectus/kafka/ui/rest/MetricsRestController.java

@@ -106,6 +106,11 @@ public class MetricsRestController implements ApiClustersApi {
         return Mono.just(ResponseEntity.ok(subjects));
     }
 
+    @Override
+    public Mono<ResponseEntity<Flux<Integer>>> getSchemaSubjectVersions(String clusterName, String subjectName, ServerWebExchange exchange) {
+        return Mono.just(ResponseEntity.ok(clusterService.getSchemaSubjectVersions(clusterName, subjectName)));
+    }
+
     @Override
     public Mono<ResponseEntity<ConsumerGroupDetails>> getConsumerGroup(String clusterName, String consumerGroupId, ServerWebExchange exchange) {
         return clusterService.getConsumerGroupDetail(clusterName, consumerGroupId).map(ResponseEntity::ok);

+ 27 - 0
kafka-ui-contract/src/main/resources/swagger/kafka-ui-api.yaml

@@ -357,6 +357,33 @@ paths:
                 items:
                   type: string
 
+  /api/clusters/{clusterName}/schema/subjects/{subjectName}/versions:
+    get:
+      tags:
+        - /api/clusters
+      summary: get subject versions from schema registry
+      operationId: getSchemaSubjectVersions
+      parameters:
+        - name: clusterName
+          in: path
+          required: true
+          schema:
+            type: string
+        - name: subjectName
+          in: path
+          required: true
+          schema:
+            type: string
+      responses:
+        200:
+          description: OK
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  type: integer
+
 components:
   schemas:
     Cluster: