Pārlūkot izejas kodu

PR review fixes, minor improvements

iliax 2 gadi atpakaļ
vecāks
revīzija
12efde11e5

+ 68 - 1
documentation/compose/jmx-exporter/kafka-broker.yml

@@ -1,2 +1,69 @@
+lowercaseOutputName: true
 rules:
-  - pattern: ".*"
+  # Special cases and very specific rules
+  - pattern: kafka.server<type=(.+), name=(.+), clientId=(.+), topic=(.+), partition=(.*)><>Value
+    name: kafka_server_$1_$2
+    type: GAUGE
+    labels:
+      clientId: '$3'
+      topic: '$4'
+      partition: '$5'
+  - pattern: kafka.server<type=(.+), name=(.+), clientId=(.+), brokerHost=(.+), brokerPort=(.+)><>Value
+    name: kafka_server_$1_$2
+    type: GAUGE
+    labels:
+      clientId: '$3'
+      broker: '$4:$5'
+
+  - pattern: kafka.server<type=KafkaRequestHandlerPool, name=RequestHandlerAvgIdlePercent><>OneMinuteRate
+    name: kafka_server_kafkarequesthandlerpool_requesthandleravgidlepercent_total
+    type: GAUGE
+
+  - pattern: kafka.server<type=socket-server-metrics, clientSoftwareName=(.+), clientSoftwareVersion=(.+), listener=(.+), networkProcessor=(.+)><>connections
+    name: kafka_server_socketservermetrics_connections
+    type: GAUGE
+    labels:
+      client_software_name: '$1'
+      client_software_version: '$2'
+      listener: '$3'
+      network_processor: '$4'
+
+  - pattern: 'kafka.server<type=socket-server-metrics, listener=(.+), networkProcessor=(.+)><>(.+):'
+    name: kafka_server_socketservermetrics_$3
+    type: GAUGE
+    labels:
+      listener: '$1'
+      network_processor: '$2'
+
+  # Count and Value
+  - pattern: kafka.(.*)<type=(.+), name=(.+), (.+)=(.+), (.+)=(.+)><>(Count|Value)
+    name: kafka_$1_$2_$3
+    labels:
+      '$4': '$5'
+      '$6': '$7'
+  - pattern: kafka.(.*)<type=(.+), name=(.+), (.+)=(.+)><>(Count|Value)
+    name: kafka_$1_$2_$3
+    labels:
+      '$4': '$5'
+  - pattern: kafka.(.*)<type=(.+), name=(.+)><>(Count|Value)
+    name: kafka_$1_$2_$3
+
+  # Percentile
+  - pattern: kafka.(.*)<type=(.+), name=(.+), (.+)=(.*), (.+)=(.+)><>(\d+)thPercentile
+    name: kafka_$1_$2_$3
+    type: GAUGE
+    labels:
+      '$4': '$5'
+      '$6': '$7'
+      quantile: '0.$8'
+  - pattern: kafka.(.*)<type=(.+), name=(.+), (.+)=(.*)><>(\d+)thPercentile
+    name: kafka_$1_$2_$3
+    type: GAUGE
+    labels:
+      '$4': '$5'
+      quantile: '0.$6'
+  - pattern: kafka.(.*)<type=(.+), name=(.+)><>(\d+)thPercentile
+    name: kafka_$1_$2_$3
+    type: GAUGE
+    labels:
+      quantile: '0.$4'

+ 15 - 1
documentation/compose/kafka-ui-arm64.yaml

@@ -16,10 +16,24 @@ services:
       KAFKA_CLUSTERS_0_NAME: local
       KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka0:29092
       KAFKA_CLUSTERS_0_METRICS_PORT: 9997
-      KAFKA_CLUSTERS_0_SCHEMAREGISTRY: http://schema-registry0:8085
+      KAFKA_CLUSTERS_0_METRICS_TYPE: JMX
+      KAFKA_CLUSTERS_0_SCHEMAREGISTRY: http://schema-registry0:8085 #/contexts/.snowcones
       KAFKA_CLUSTERS_0_KAFKACONNECT_0_NAME: first
       KAFKA_CLUSTERS_0_KAFKACONNECT_0_ADDRESS: http://kafka-connect0:8083
+      KAFKA_CLUSTERS_0_KAFKACONNECT_1_NAME: second
+      KAFKA_CLUSTERS_0_KAFKACONNECT_1_ADDRESS: http://kafka-connect0:8083
       DYNAMIC_CONFIG_ENABLED: 'true'  # not necessary, added for tests
+      KAFKA_CLUSTERS_0_AUDIT_TOPICAUDITENABLED: 'true'
+      KAFKA_CLUSTERS_0_AUDIT_CONSOLEAUDITENABLED: 'true'
+      JAVA_OPTS: "-Xms156m -Xmx156m"
+
+      kafka.clusters.0.serde.0.name: SchemaRegistry (ctx 1)
+      kafka.clusters.0.serde.0.className: com.provectus.kafka.ui.serdes.builtin.sr.SchemaRegistrySerde
+      kafka.clusters.0.serde.0.properties.url: http://schema-registry0:8085/contexts/.myctx1
+
+      kafka.clusters.0.serde.1.name: SchemaRegistry (cxt 2)
+      kafka.clusters.0.serde.1.className: com.provectus.kafka.ui.serdes.builtin.sr.SchemaRegistrySerde
+      kafka.clusters.0.serde.1.properties.url: http://schema-registry0:8085/contexts/.myctx2
 
   kafka0:
     image: confluentinc/cp-kafka:7.2.1.arm64

+ 5 - 5
kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/AclsController.java

@@ -35,7 +35,7 @@ public class AclsController extends AbstractController implements AclsApi {
     AccessContext context = AccessContext.builder()
         .cluster(clusterName)
         .aclActions(AclAction.EDIT)
-        .auditOperation("createAcl")
+        .operationName("createAcl")
         .build();
 
     return accessControlService.validateAccess(context)
@@ -52,7 +52,7 @@ public class AclsController extends AbstractController implements AclsApi {
     AccessContext context = AccessContext.builder()
         .cluster(clusterName)
         .aclActions(AclAction.EDIT)
-        .auditOperation("deleteAcl")
+        .operationName("deleteAcl")
         .build();
 
     return accessControlService.validateAccess(context)
@@ -72,7 +72,7 @@ public class AclsController extends AbstractController implements AclsApi {
     AccessContext context = AccessContext.builder()
         .cluster(clusterName)
         .aclActions(AclAction.VIEW)
-        .auditOperation("listAcls")
+        .operationName("listAcls")
         .build();
 
     var resourceType = Optional.ofNullable(resourceTypeDto)
@@ -98,7 +98,7 @@ public class AclsController extends AbstractController implements AclsApi {
     AccessContext context = AccessContext.builder()
         .cluster(clusterName)
         .aclActions(AclAction.VIEW)
-        .auditOperation("getAclAsCsv")
+        .operationName("getAclAsCsv")
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -114,7 +114,7 @@ public class AclsController extends AbstractController implements AclsApi {
     AccessContext context = AccessContext.builder()
         .cluster(clusterName)
         .aclActions(AclAction.EDIT)
-        .auditOperation("syncAclsCsv")
+        .operationName("syncAclsCsv")
         .build();
 
     return accessControlService.validateAccess(context)

+ 4 - 4
kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/ApplicationConfigController.java

@@ -67,7 +67,7 @@ public class ApplicationConfigController implements ApplicationConfigApi {
   public Mono<ResponseEntity<ApplicationConfigDTO>> getCurrentConfig(ServerWebExchange exchange) {
     var context = AccessContext.builder()
         .applicationConfigActions(VIEW)
-        .auditOperation("getCurrentConfig")
+        .operationName("getCurrentConfig")
         .build();
     return accessControlService.validateAccess(context)
         .then(Mono.fromSupplier(() -> ResponseEntity.ok(
@@ -82,7 +82,7 @@ public class ApplicationConfigController implements ApplicationConfigApi {
                                                       ServerWebExchange exchange) {
     var context =  AccessContext.builder()
         .applicationConfigActions(EDIT)
-        .auditOperation("restartWithConfig")
+        .operationName("restartWithConfig")
         .build();
     return accessControlService.validateAccess(context)
         .then(restartRequestDto)
@@ -99,7 +99,7 @@ public class ApplicationConfigController implements ApplicationConfigApi {
                                                                            ServerWebExchange exchange) {
     var context = AccessContext.builder()
         .applicationConfigActions(EDIT)
-        .auditOperation("uploadConfigRelatedFile")
+        .operationName("uploadConfigRelatedFile")
         .build();
     return accessControlService.validateAccess(context)
         .then(fileFlux.single())
@@ -115,7 +115,7 @@ public class ApplicationConfigController implements ApplicationConfigApi {
                                                                              ServerWebExchange exchange) {
     var context = AccessContext.builder()
         .applicationConfigActions(EDIT)
-        .auditOperation("validateConfig")
+        .operationName("validateConfig")
         .build();
     return accessControlService.validateAccess(context)
         .then(configDto)

+ 13 - 11
kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/BrokersController.java

@@ -39,7 +39,7 @@ public class BrokersController extends AbstractController implements BrokersApi
                                                           ServerWebExchange exchange) {
     var context = AccessContext.builder()
         .cluster(clusterName)
-        .auditOperation("getBrokers")
+        .operationName("getBrokers")
         .build();
 
     var job = brokerService.getBrokers(getCluster(clusterName)).map(clusterMapper::toBrokerDto);
@@ -53,7 +53,8 @@ public class BrokersController extends AbstractController implements BrokersApi
                                                                   ServerWebExchange exchange) {
     var context = AccessContext.builder()
         .cluster(clusterName)
-        .auditOperation("getBrokersMetrics")
+        .operationName("getBrokersMetrics")
+        .operationParams(Map.of("id", id))
         .build();
 
     return accessControlService.validateAccess(context)
@@ -70,17 +71,18 @@ public class BrokersController extends AbstractController implements BrokersApi
   public Mono<ResponseEntity<Flux<BrokersLogdirsDTO>>> getAllBrokersLogdirs(String clusterName,
                                                                             @Nullable List<Integer> brokers,
                                                                             ServerWebExchange exchange) {
+
+    List<Integer> brokerIds = brokers == null ? List.of() : brokers;
+
     var context = AccessContext.builder()
         .cluster(clusterName)
-        .auditOperation("getAllBrokersLogdirs")
-        .operationParams(Map.of("brokerIds", brokers == null ? List.of() : brokers))
+        .operationName("getAllBrokersLogdirs")
+        .operationParams(Map.of("brokerIds", brokerIds))
         .build();
+
     return accessControlService.validateAccess(context)
         .thenReturn(ResponseEntity.ok(
-            brokerService.getAllBrokersLogdirs(
-                getCluster(clusterName),
-                brokers == null ? List.of() : brokers
-            )))
+            brokerService.getAllBrokersLogdirs(getCluster(clusterName), brokerIds)))
         .doOnEach(sig -> auditService.audit(context, sig));
   }
 
@@ -91,7 +93,7 @@ public class BrokersController extends AbstractController implements BrokersApi
     var context = AccessContext.builder()
         .cluster(clusterName)
         .clusterConfigActions(ClusterConfigAction.VIEW)
-        .auditOperation("getBrokerConfig")
+        .operationName("getBrokerConfig")
         .operationParams(Map.of("brokerId", id))
         .build();
 
@@ -110,7 +112,7 @@ public class BrokersController extends AbstractController implements BrokersApi
     var context = AccessContext.builder()
         .cluster(clusterName)
         .clusterConfigActions(ClusterConfigAction.VIEW, ClusterConfigAction.EDIT)
-        .auditOperation("updateBrokerTopicPartitionLogDir")
+        .operationName("updateBrokerTopicPartitionLogDir")
         .operationParams(Map.of("brokerId", id))
         .build();
 
@@ -130,7 +132,7 @@ public class BrokersController extends AbstractController implements BrokersApi
     var context = AccessContext.builder()
         .cluster(clusterName)
         .clusterConfigActions(ClusterConfigAction.VIEW, ClusterConfigAction.EDIT)
-        .auditOperation("updateBrokerConfigByName")
+        .operationName("updateBrokerConfigByName")
         .operationParams(Map.of("brokerId", id))
         .build();
 

+ 3 - 3
kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/ClustersController.java

@@ -37,7 +37,7 @@ public class ClustersController extends AbstractController implements ClustersAp
                                                                    ServerWebExchange exchange) {
     AccessContext context = AccessContext.builder()
         .cluster(clusterName)
-        .auditOperation("getClusterMetrics")
+        .operationName("getClusterMetrics")
         .build();
 
     return accessControlService.validateAccess(context)
@@ -54,7 +54,7 @@ public class ClustersController extends AbstractController implements ClustersAp
                                                                ServerWebExchange exchange) {
     AccessContext context = AccessContext.builder()
         .cluster(clusterName)
-        .auditOperation("getClusterStats")
+        .operationName("getClusterStats")
         .build();
 
     return accessControlService.validateAccess(context)
@@ -72,7 +72,7 @@ public class ClustersController extends AbstractController implements ClustersAp
 
     AccessContext context = AccessContext.builder()
         .cluster(clusterName)
-        .auditOperation("updateClusterInfo")
+        .operationName("updateClusterInfo")
         .build();
 
     return accessControlService.validateAccess(context)

+ 5 - 5
kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/ConsumerGroupsController.java

@@ -56,7 +56,7 @@ public class ConsumerGroupsController extends AbstractController implements Cons
         .cluster(clusterName)
         .consumerGroup(id)
         .consumerGroupActions(DELETE)
-        .auditOperation("deleteConsumerGroup")
+        .operationName("deleteConsumerGroup")
         .build();
 
     return accessControlService.validateAccess(context)
@@ -73,7 +73,7 @@ public class ConsumerGroupsController extends AbstractController implements Cons
         .cluster(clusterName)
         .consumerGroup(consumerGroupId)
         .consumerGroupActions(VIEW)
-        .auditOperation("getConsumerGroup")
+        .operationName("getConsumerGroup")
         .build();
 
     return accessControlService.validateAccess(context)
@@ -91,7 +91,7 @@ public class ConsumerGroupsController extends AbstractController implements Cons
         .cluster(clusterName)
         .topic(topicName)
         .topicActions(TopicAction.VIEW)
-        .auditOperation("getTopicConsumerGroups")
+        .operationName("getTopicConsumerGroups")
         .build();
 
     Mono<ResponseEntity<Flux<ConsumerGroupDTO>>> job =
@@ -122,7 +122,7 @@ public class ConsumerGroupsController extends AbstractController implements Cons
     var context = AccessContext.builder()
         .cluster(clusterName)
         // consumer group access validation is within the service
-        .auditOperation("getConsumerGroupsPage")
+        .operationName("getConsumerGroupsPage")
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -150,7 +150,7 @@ public class ConsumerGroupsController extends AbstractController implements Cons
           .topic(reset.getTopic())
           .topicActions(TopicAction.VIEW)
           .consumerGroupActions(RESET_OFFSETS)
-          .auditOperation("resetConsumerGroupOffsets")
+          .operationName("resetConsumerGroupOffsets")
           .build();
 
       Supplier<Mono<Void>> mono = () -> {

+ 16 - 11
kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/KafkaConnectController.java

@@ -61,7 +61,7 @@ public class KafkaConnectController extends AbstractController implements KafkaC
         .cluster(clusterName)
         .connect(connectName)
         .connectActions(ConnectAction.VIEW)
-        .auditOperation("getConnectors")
+        .operationName("getConnectors")
         .build();
 
     return accessControlService.validateAccess(context)
@@ -78,7 +78,7 @@ public class KafkaConnectController extends AbstractController implements KafkaC
         .cluster(clusterName)
         .connect(connectName)
         .connectActions(ConnectAction.VIEW, ConnectAction.CREATE)
-        .auditOperation("createConnector")
+        .operationName("createConnector")
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -97,7 +97,7 @@ public class KafkaConnectController extends AbstractController implements KafkaC
         .connect(connectName)
         .connectActions(ConnectAction.VIEW)
         .connector(connectorName)
-        .auditOperation("getConnector")
+        .operationName("getConnector")
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -115,7 +115,8 @@ public class KafkaConnectController extends AbstractController implements KafkaC
         .cluster(clusterName)
         .connect(connectName)
         .connectActions(ConnectAction.VIEW, ConnectAction.EDIT)
-        .auditOperation("deleteConnector")
+        .operationName("deleteConnector")
+        .operationParams(Map.of( "connectorName", connectName))
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -136,7 +137,7 @@ public class KafkaConnectController extends AbstractController implements KafkaC
     var context = AccessContext.builder()
         .cluster(clusterName)
         .connectActions(ConnectAction.VIEW, ConnectAction.EDIT)
-        .auditOperation("getAllConnectors")
+        .operationName("getAllConnectors")
         .build();
 
     var comparator = sortOrder == null || sortOrder.equals(SortOrderDTO.ASC)
@@ -162,7 +163,7 @@ public class KafkaConnectController extends AbstractController implements KafkaC
         .cluster(clusterName)
         .connect(connectName)
         .connectActions(ConnectAction.VIEW)
-        .auditOperation("getConnectorConfig")
+        .operationName("getConnectorConfig")
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -182,7 +183,8 @@ public class KafkaConnectController extends AbstractController implements KafkaC
         .cluster(clusterName)
         .connect(connectName)
         .connectActions(ConnectAction.VIEW, ConnectAction.EDIT)
-        .auditOperation("setConnectorConfig")
+        .operationName("setConnectorConfig")
+        .operationParams(Map.of("connectorName", connectorName))
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -208,7 +210,8 @@ public class KafkaConnectController extends AbstractController implements KafkaC
         .cluster(clusterName)
         .connect(connectName)
         .connectActions(connectActions)
-        .auditOperation("updateConnectorState")
+        .operationName("updateConnectorState")
+        .operationParams(Map.of("connectorName", connectorName))
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -227,7 +230,8 @@ public class KafkaConnectController extends AbstractController implements KafkaC
         .cluster(clusterName)
         .connect(connectName)
         .connectActions(ConnectAction.VIEW)
-        .auditOperation("getConnectorTasks")
+        .operationName("getConnectorTasks")
+        .operationParams(Map.of("connectorName", connectorName))
         .build();
 
     return accessControlService.validateAccess(context).thenReturn(
@@ -246,7 +250,8 @@ public class KafkaConnectController extends AbstractController implements KafkaC
         .cluster(clusterName)
         .connect(connectName)
         .connectActions(ConnectAction.VIEW, ConnectAction.RESTART)
-        .auditOperation("restartConnectorTask")
+        .operationName("restartConnectorTask")
+        .operationParams(Map.of("connectorName", connectorName))
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -264,7 +269,7 @@ public class KafkaConnectController extends AbstractController implements KafkaC
         .cluster(clusterName)
         .connect(connectName)
         .connectActions(ConnectAction.VIEW)
-        .auditOperation("getConnectorPlugins")
+        .operationName("getConnectorPlugins")
         .build();
 
     return accessControlService.validateAccess(context).then(

+ 4 - 4
kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/KsqlController.java

@@ -41,7 +41,7 @@ public class KsqlController extends AbstractController implements KsqlApi {
               var context = AccessContext.builder()
                   .cluster(clusterName)
                   .ksqlActions(KsqlAction.EXECUTE)
-                  .auditOperation("executeKsql")
+                  .operationName("executeKsql")
                   .operationParams(command)
                   .build();
               return accessControlService.validateAccess(context).thenReturn(
@@ -63,7 +63,7 @@ public class KsqlController extends AbstractController implements KsqlApi {
     var context = AccessContext.builder()
         .cluster(clusterName)
         .ksqlActions(KsqlAction.EXECUTE)
-        .auditOperation("openKsqlResponsePipe")
+        .operationName("openKsqlResponsePipe")
         .build();
 
     return accessControlService.validateAccess(context).thenReturn(
@@ -83,7 +83,7 @@ public class KsqlController extends AbstractController implements KsqlApi {
     var context = AccessContext.builder()
         .cluster(clusterName)
         .ksqlActions(KsqlAction.EXECUTE)
-        .auditOperation("listStreams")
+        .operationName("listStreams")
         .build();
 
     return accessControlService.validateAccess(context)
@@ -97,7 +97,7 @@ public class KsqlController extends AbstractController implements KsqlApi {
     var context = AccessContext.builder()
         .cluster(clusterName)
         .ksqlActions(KsqlAction.EXECUTE)
-        .auditOperation("listTables")
+        .operationName("listTables")
         .build();
 
     return accessControlService.validateAccess(context)

+ 3 - 3
kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/MessagesController.java

@@ -86,7 +86,7 @@ public class MessagesController extends AbstractController implements MessagesAp
         .cluster(clusterName)
         .topic(topicName)
         .topicActions(MESSAGES_READ)
-        .auditOperation("getTopicMessages");
+        .operationName("getTopicMessages");
 
     if (auditService.isAuditTopic(getCluster(clusterName), topicName)) {
       contextBuilder.auditActions(AuditAction.VIEW);
@@ -124,7 +124,7 @@ public class MessagesController extends AbstractController implements MessagesAp
         .cluster(clusterName)
         .topic(topicName)
         .topicActions(MESSAGES_PRODUCE)
-        .auditOperation("sendTopicMessages")
+        .operationName("sendTopicMessages")
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -171,7 +171,7 @@ public class MessagesController extends AbstractController implements MessagesAp
         .cluster(clusterName)
         .topic(topicName)
         .topicActions(TopicAction.VIEW)
-        .auditOperation("getSerdes")
+        .operationName("getSerdes")
         .build();
 
     TopicSerdeSuggestionDTO dto = new TopicSerdeSuggestionDTO()

+ 11 - 11
kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/SchemasController.java

@@ -58,7 +58,7 @@ public class SchemasController extends AbstractController implements SchemasApi
         .cluster(clusterName)
         .schema(subject)
         .schemaActions(SchemaAction.VIEW)
-        .auditOperation("checkSchemaCompatibility")
+        .operationName("checkSchemaCompatibility")
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -80,7 +80,7 @@ public class SchemasController extends AbstractController implements SchemasApi
     var context = AccessContext.builder()
         .cluster(clusterName)
         .schemaActions(SchemaAction.CREATE)
-        .auditOperation("createNewSchema")
+        .operationName("createNewSchema")
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -102,7 +102,7 @@ public class SchemasController extends AbstractController implements SchemasApi
         .cluster(clusterName)
         .schema(subject)
         .schemaActions(SchemaAction.DELETE)
-        .auditOperation("deleteLatestSchema")
+        .operationName("deleteLatestSchema")
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -119,7 +119,7 @@ public class SchemasController extends AbstractController implements SchemasApi
         .cluster(clusterName)
         .schema(subject)
         .schemaActions(SchemaAction.DELETE)
-        .auditOperation("deleteSchema")
+        .operationName("deleteSchema")
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -136,7 +136,7 @@ public class SchemasController extends AbstractController implements SchemasApi
         .cluster(clusterName)
         .schema(subjectName)
         .schemaActions(SchemaAction.DELETE)
-        .auditOperation("deleteSchemaByVersion")
+        .operationName("deleteSchemaByVersion")
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -153,7 +153,7 @@ public class SchemasController extends AbstractController implements SchemasApi
         .cluster(clusterName)
         .schema(subjectName)
         .schemaActions(SchemaAction.VIEW)
-        .auditOperation("getAllVersionsBySubject")
+        .operationName("getAllVersionsBySubject")
         .build();
 
     Flux<SchemaSubjectDTO> schemas =
@@ -182,7 +182,7 @@ public class SchemasController extends AbstractController implements SchemasApi
         .cluster(clusterName)
         .schema(subject)
         .schemaActions(SchemaAction.VIEW)
-        .auditOperation("getLatestSchema")
+        .operationName("getLatestSchema")
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -199,7 +199,7 @@ public class SchemasController extends AbstractController implements SchemasApi
         .cluster(clusterName)
         .schema(subject)
         .schemaActions(SchemaAction.VIEW)
-        .auditOperation("getSchemaByVersion")
+        .operationName("getSchemaByVersion")
         .operationParams(Map.of("subject", subject, "version", version))
         .build();
 
@@ -219,7 +219,7 @@ public class SchemasController extends AbstractController implements SchemasApi
                                                                     ServerWebExchange serverWebExchange) {
     var context = AccessContext.builder()
         .cluster(clusterName)
-        .auditOperation("getSchemas")
+        .operationName("getSchemas")
         .build();
 
     return schemaRegistryService
@@ -254,7 +254,7 @@ public class SchemasController extends AbstractController implements SchemasApi
     var context = AccessContext.builder()
         .cluster(clusterName)
         .schemaActions(SchemaAction.MODIFY_GLOBAL_COMPATIBILITY)
-        .auditOperation("updateGlobalSchemaCompatibilityLevel")
+        .operationName("updateGlobalSchemaCompatibilityLevel")
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -276,7 +276,7 @@ public class SchemasController extends AbstractController implements SchemasApi
     var context = AccessContext.builder()
         .cluster(clusterName)
         .schemaActions(SchemaAction.EDIT)
-        .auditOperation("updateSchemaCompatibilityLevel")
+        .operationName("updateSchemaCompatibilityLevel")
         .operationParams(Map.of("subject", subject))
         .build();
 

+ 12 - 12
kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/TopicsController.java

@@ -63,7 +63,7 @@ public class TopicsController extends AbstractController implements TopicsApi {
       var context = AccessContext.builder()
           .cluster(clusterName)
           .topicActions(CREATE)
-          .auditOperation("createTopic")
+          .operationName("createTopic")
           .operationParams(topicCreation)
           .build();
 
@@ -83,7 +83,7 @@ public class TopicsController extends AbstractController implements TopicsApi {
         .cluster(clusterName)
         .topic(topicName)
         .topicActions(VIEW, CREATE, DELETE)
-        .auditOperation("recreateTopic")
+        .operationName("recreateTopic")
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -101,7 +101,7 @@ public class TopicsController extends AbstractController implements TopicsApi {
         .cluster(clusterName)
         .topic(topicName)
         .topicActions(VIEW, CREATE)
-        .auditOperation("cloneTopic")
+        .operationName("cloneTopic")
         .operationParams(Map.of("newTopicName", newTopicName))
         .build();
 
@@ -120,7 +120,7 @@ public class TopicsController extends AbstractController implements TopicsApi {
         .cluster(clusterName)
         .topic(topicName)
         .topicActions(DELETE)
-        .auditOperation("deleteTopic")
+        .operationName("deleteTopic")
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -137,7 +137,7 @@ public class TopicsController extends AbstractController implements TopicsApi {
         .cluster(clusterName)
         .topic(topicName)
         .topicActions(VIEW)
-        .auditOperation("getTopicConfigs")
+        .operationName("getTopicConfigs")
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -159,7 +159,7 @@ public class TopicsController extends AbstractController implements TopicsApi {
         .cluster(clusterName)
         .topic(topicName)
         .topicActions(VIEW)
-        .auditOperation("getTopicDetails")
+        .operationName("getTopicDetails")
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -181,7 +181,7 @@ public class TopicsController extends AbstractController implements TopicsApi {
 
     AccessContext context = AccessContext.builder()
         .cluster(clusterName)
-        .auditOperation("getTopics")
+        .operationName("getTopics")
         .build();
 
     return topicsService.getTopicsForPagination(getCluster(clusterName))
@@ -225,7 +225,7 @@ public class TopicsController extends AbstractController implements TopicsApi {
         .cluster(clusterName)
         .topic(topicName)
         .topicActions(VIEW, EDIT)
-        .auditOperation("updateTopic")
+        .operationName("updateTopic")
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -265,7 +265,7 @@ public class TopicsController extends AbstractController implements TopicsApi {
         .cluster(clusterName)
         .topic(topicName)
         .topicActions(VIEW, EDIT)
-        .auditOperation("changeReplicationFactor")
+        .operationName("changeReplicationFactor")
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -283,7 +283,7 @@ public class TopicsController extends AbstractController implements TopicsApi {
         .cluster(clusterName)
         .topic(topicName)
         .topicActions(MESSAGES_READ)
-        .auditOperation("analyzeTopic")
+        .operationName("analyzeTopic")
         .build();
 
     return accessControlService.validateAccess(context).then(
@@ -300,7 +300,7 @@ public class TopicsController extends AbstractController implements TopicsApi {
         .cluster(clusterName)
         .topic(topicName)
         .topicActions(MESSAGES_READ)
-        .auditOperation("cancelTopicAnalysis")
+        .operationName("cancelTopicAnalysis")
         .build();
 
     return accessControlService.validateAccess(context)
@@ -319,7 +319,7 @@ public class TopicsController extends AbstractController implements TopicsApi {
         .cluster(clusterName)
         .topic(topicName)
         .topicActions(MESSAGES_READ)
-        .auditOperation("getTopicAnalysis")
+        .operationName("getTopicAnalysis")
         .build();
 
     return accessControlService.validateAccess(context)

+ 1 - 1
kafka-ui-api/src/main/java/com/provectus/kafka/ui/model/rbac/AccessContext.java

@@ -158,7 +158,7 @@ public class AccessContext {
       return this;
     }
 
-    public AccessContextBuilder auditOperation(String operationName) {
+    public AccessContextBuilder operationName(String operationName) {
       this.operationName = operationName;
       return this;
     }

+ 10 - 0
kafka-ui-api/src/main/resources/logback-spring.xml

@@ -7,8 +7,18 @@
         </encoder>
     </appender>
 
+    <appender name="AUDIT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>%black(%d{ISO8601}) %yellow(%c{1}): %msg%n%throwable</pattern>
+        </encoder>
+    </appender>
+
     <root level="info">
         <appender-ref ref="STDOUT"/>
     </root>
 
+    <logger name="audit" level="INFO">
+        <appender-ref ref="AUDIT"/>
+    </logger>
+
 </configuration>