diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/ClientQuotasController.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/ClientQuotasController.java index 64f4204562..1d0ecda4a4 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/ClientQuotasController.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/controller/ClientQuotasController.java @@ -9,6 +9,7 @@ import com.provectus.kafka.ui.model.rbac.permission.ClientQuotaAction; import com.provectus.kafka.ui.service.quota.ClientQuotaRecord; import com.provectus.kafka.ui.service.quota.ClientQuotaService; import java.math.BigDecimal; +import java.util.Comparator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Optional; @@ -23,6 +24,11 @@ import reactor.core.publisher.Mono; @RequiredArgsConstructor public class ClientQuotasController extends AbstractController implements ClientQuotasApi { + private static final Comparator QUOTA_RECORDS_COMPARATOR = + Comparator.nullsLast(Comparator.comparing(ClientQuotaRecord::user)) + .thenComparing(Comparator.nullsLast(Comparator.comparing(ClientQuotaRecord::clientId))) + .thenComparing(Comparator.nullsLast(Comparator.comparing(ClientQuotaRecord::ip))); + private final ClientQuotaService clientQuotaService; @Override @@ -35,8 +41,11 @@ public class ClientQuotasController extends AbstractController implements Client .build(); Mono>> operation = - Mono.just(clientQuotaService.list(getCluster(clusterName)).map(this::mapToDto)) - .map(ResponseEntity::ok); + Mono.just( + clientQuotaService.list(getCluster(clusterName)) + .sort(QUOTA_RECORDS_COMPARATOR) + .map(this::mapToDto) + ).map(ResponseEntity::ok); return validateAccess(context) .then(operation) diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/quota/ClientQuotaRecord.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/quota/ClientQuotaRecord.java index 820ec56043..a348b2a1ea 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/quota/ClientQuotaRecord.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/quota/ClientQuotaRecord.java @@ -1,7 +1,6 @@ package com.provectus.kafka.ui.service.quota; import jakarta.annotation.Nullable; -import java.util.Comparator; import java.util.Map; import org.apache.kafka.common.quota.ClientQuotaEntity; @@ -10,11 +9,6 @@ public record ClientQuotaRecord(@Nullable String user, @Nullable String ip, Map quotas) { - static final Comparator COMPARATOR = - Comparator.comparing(r -> r.user) - .thenComparing(r -> r.clientId) - .thenComparing(r -> r.ip); - static ClientQuotaRecord create(ClientQuotaEntity entity, Map quotas) { return new ClientQuotaRecord( entity.entries().get(ClientQuotaEntity.USER), diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/quota/ClientQuotaService.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/quota/ClientQuotaService.java index 97f17c12c8..6f1b5be991 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/quota/ClientQuotaService.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/quota/ClientQuotaService.java @@ -37,12 +37,8 @@ public class ClientQuotaService { public Flux list(KafkaCluster cluster) { return adminClientService.get(cluster) .flatMap(ac -> ac.getClientQuotas(ClientQuotaFilter.all())) - .flatMapIterable(map -> - map.entrySet().stream() - .map(e -> ClientQuotaRecord.create(e.getKey(), e.getValue())) - .sorted(ClientQuotaRecord.COMPARATOR) - .toList() - ); + .flatMapIterable(Map::entrySet) + .map(e -> ClientQuotaRecord.create(e.getKey(), e.getValue())); } //returns 201 if new entity was created, 200 if existing was updated, 204 if existing was deleted