InternalClusterState.java 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package com.provectus.kafka.ui.model;
  2. import com.google.common.base.Throwables;
  3. import com.provectus.kafka.ui.service.MetricsCache;
  4. import java.math.BigDecimal;
  5. import java.util.List;
  6. import java.util.Optional;
  7. import java.util.stream.Collectors;
  8. import lombok.Data;
  9. @Data
  10. public class InternalClusterState {
  11. private String name;
  12. private ServerStatusDTO status;
  13. private MetricsCollectionErrorDTO lastError;
  14. private Integer topicCount;
  15. private Integer brokerCount;
  16. private Integer activeControllers;
  17. private Integer onlinePartitionCount;
  18. private Integer offlinePartitionCount;
  19. private Integer inSyncReplicasCount;
  20. private Integer outOfSyncReplicasCount;
  21. private Integer underReplicatedPartitionCount;
  22. private List<BrokerDiskUsageDTO> diskUsage;
  23. private String version;
  24. private List<Feature> features;
  25. private BigDecimal bytesInPerSec;
  26. private BigDecimal bytesOutPerSec;
  27. private Boolean readOnly;
  28. public InternalClusterState(KafkaCluster cluster, MetricsCache.Metrics metrics) {
  29. name = cluster.getName();
  30. status = metrics.getStatus();
  31. lastError = Optional.ofNullable(metrics.getLastKafkaException())
  32. .map(e -> new MetricsCollectionErrorDTO()
  33. .message(e.getMessage())
  34. .stackTrace(Throwables.getStackTraceAsString(e)))
  35. .orElse(null);
  36. topicCount = metrics.getTopicDescriptions().size();
  37. brokerCount = metrics.getClusterDescription().getNodes().size();
  38. activeControllers = metrics.getClusterDescription().getController() != null ? 1 : 0;
  39. version = metrics.getVersion();
  40. if (metrics.getLogDirInfo() != null) {
  41. diskUsage = metrics.getLogDirInfo().getBrokerStats().entrySet().stream()
  42. .map(e -> new BrokerDiskUsageDTO()
  43. .brokerId(e.getKey())
  44. .segmentSize(e.getValue().getSegmentSize())
  45. .segmentCount(e.getValue().getSegmentsCount()))
  46. .collect(Collectors.toList());
  47. }
  48. features = metrics.getFeatures();
  49. bytesInPerSec = metrics.getJmxMetrics().getBytesInPerSec().values().stream()
  50. .reduce(BigDecimal.ZERO, BigDecimal::add);
  51. bytesOutPerSec = metrics.getJmxMetrics().getBytesOutPerSec().values().stream()
  52. .reduce(BigDecimal.ZERO, BigDecimal::add);
  53. var partitionsStats = new PartitionsStats(metrics.getTopicDescriptions().values());
  54. onlinePartitionCount = partitionsStats.getOnlinePartitionCount();
  55. offlinePartitionCount = partitionsStats.getOfflinePartitionCount();
  56. inSyncReplicasCount = partitionsStats.getInSyncReplicasCount();
  57. outOfSyncReplicasCount = partitionsStats.getOutOfSyncReplicasCount();
  58. underReplicatedPartitionCount = partitionsStats.getUnderReplicatedPartitionCount();
  59. readOnly = cluster.isReadOnly();
  60. }
  61. }