ClusterMapper.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. package com.provectus.kafka.ui.mapper;
  2. import com.provectus.kafka.ui.config.ClustersProperties;
  3. import com.provectus.kafka.ui.model.BrokerConfigDTO;
  4. import com.provectus.kafka.ui.model.BrokerDiskUsageDTO;
  5. import com.provectus.kafka.ui.model.BrokerMetricsDTO;
  6. import com.provectus.kafka.ui.model.ClusterDTO;
  7. import com.provectus.kafka.ui.model.ClusterMetricsDTO;
  8. import com.provectus.kafka.ui.model.ClusterStatsDTO;
  9. import com.provectus.kafka.ui.model.CompatibilityCheckResponseDTO;
  10. import com.provectus.kafka.ui.model.CompatibilityLevelDTO;
  11. import com.provectus.kafka.ui.model.ConfigSourceDTO;
  12. import com.provectus.kafka.ui.model.ConfigSynonymDTO;
  13. import com.provectus.kafka.ui.model.ConnectDTO;
  14. import com.provectus.kafka.ui.model.Feature;
  15. import com.provectus.kafka.ui.model.InternalBrokerConfig;
  16. import com.provectus.kafka.ui.model.InternalBrokerDiskUsage;
  17. import com.provectus.kafka.ui.model.InternalClusterState;
  18. import com.provectus.kafka.ui.model.InternalPartition;
  19. import com.provectus.kafka.ui.model.InternalReplica;
  20. import com.provectus.kafka.ui.model.InternalSchemaRegistry;
  21. import com.provectus.kafka.ui.model.InternalTopic;
  22. import com.provectus.kafka.ui.model.InternalTopicConfig;
  23. import com.provectus.kafka.ui.model.JmxBrokerMetrics;
  24. import com.provectus.kafka.ui.model.KafkaCluster;
  25. import com.provectus.kafka.ui.model.KafkaConnectCluster;
  26. import com.provectus.kafka.ui.model.PartitionDTO;
  27. import com.provectus.kafka.ui.model.ReplicaDTO;
  28. import com.provectus.kafka.ui.model.TopicConfigDTO;
  29. import com.provectus.kafka.ui.model.TopicDTO;
  30. import com.provectus.kafka.ui.model.TopicDetailsDTO;
  31. import com.provectus.kafka.ui.model.schemaregistry.InternalCompatibilityCheck;
  32. import com.provectus.kafka.ui.model.schemaregistry.InternalCompatibilityLevel;
  33. import com.provectus.kafka.ui.util.JmxClusterUtil;
  34. import java.nio.file.Path;
  35. import java.util.Arrays;
  36. import java.util.Collections;
  37. import java.util.List;
  38. import java.util.Map;
  39. import java.util.Properties;
  40. import java.util.stream.Collectors;
  41. import org.apache.kafka.clients.admin.ConfigEntry;
  42. import org.mapstruct.Mapper;
  43. import org.mapstruct.Mapping;
  44. import org.mapstruct.Named;
  45. @Mapper(componentModel = "spring")
  46. public interface ClusterMapper {
  47. ClusterDTO toCluster(InternalClusterState clusterState);
  48. @Mapping(target = "protobufFile", source = "protobufFile", qualifiedByName = "resolvePath")
  49. @Mapping(target = "properties", source = "properties", qualifiedByName = "setProperties")
  50. @Mapping(target = "schemaRegistry", source = ".", qualifiedByName = "setSchemaRegistry")
  51. KafkaCluster toKafkaCluster(ClustersProperties.Cluster clusterProperties);
  52. ClusterStatsDTO toClusterStats(InternalClusterState clusterState);
  53. default ClusterMetricsDTO toClusterMetrics(JmxClusterUtil.JmxMetrics jmxMetrics) {
  54. return new ClusterMetricsDTO().items(jmxMetrics.getMetrics());
  55. }
  56. BrokerMetricsDTO toBrokerMetrics(JmxBrokerMetrics metrics);
  57. @Mapping(target = "isSensitive", source = "sensitive")
  58. @Mapping(target = "isReadOnly", source = "readOnly")
  59. BrokerConfigDTO toBrokerConfig(InternalBrokerConfig config);
  60. default ConfigSynonymDTO toConfigSynonym(ConfigEntry.ConfigSynonym config) {
  61. if (config == null) {
  62. return null;
  63. }
  64. ConfigSynonymDTO configSynonym = new ConfigSynonymDTO();
  65. configSynonym.setName(config.name());
  66. configSynonym.setValue(config.value());
  67. if (config.source() != null) {
  68. configSynonym.setSource(ConfigSourceDTO.valueOf(config.source().name()));
  69. }
  70. return configSynonym;
  71. }
  72. TopicDTO toTopic(InternalTopic topic);
  73. PartitionDTO toPartition(InternalPartition topic);
  74. @Named("setSchemaRegistry")
  75. default InternalSchemaRegistry setSchemaRegistry(ClustersProperties.Cluster clusterProperties) {
  76. if (clusterProperties == null
  77. || clusterProperties.getSchemaRegistry() == null) {
  78. return null;
  79. }
  80. InternalSchemaRegistry.InternalSchemaRegistryBuilder internalSchemaRegistry =
  81. InternalSchemaRegistry.builder();
  82. internalSchemaRegistry.url(
  83. clusterProperties.getSchemaRegistry() != null
  84. ? Arrays.asList(clusterProperties.getSchemaRegistry().split(","))
  85. : Collections.emptyList()
  86. );
  87. if (clusterProperties.getSchemaRegistryAuth() != null) {
  88. internalSchemaRegistry.username(clusterProperties.getSchemaRegistryAuth().getUsername());
  89. internalSchemaRegistry.password(clusterProperties.getSchemaRegistryAuth().getPassword());
  90. }
  91. return internalSchemaRegistry.build();
  92. }
  93. TopicDetailsDTO toTopicDetails(InternalTopic topic);
  94. @Mapping(target = "isReadOnly", source = "readOnly")
  95. @Mapping(target = "isSensitive", source = "sensitive")
  96. TopicConfigDTO toTopicConfig(InternalTopicConfig topic);
  97. ReplicaDTO toReplica(InternalReplica replica);
  98. ConnectDTO toKafkaConnect(KafkaConnectCluster connect);
  99. List<ClusterDTO.FeaturesEnum> toFeaturesEnum(List<Feature> features);
  100. @Mapping(target = "isCompatible", source = "compatible")
  101. CompatibilityCheckResponseDTO toCompatibilityCheckResponse(InternalCompatibilityCheck dto);
  102. @Mapping(target = "compatibility", source = "compatibilityLevel")
  103. CompatibilityLevelDTO toCompatibilityLevel(InternalCompatibilityLevel dto);
  104. default List<PartitionDTO> map(Map<Integer, InternalPartition> map) {
  105. return map.values().stream().map(this::toPartition).collect(Collectors.toList());
  106. }
  107. default BrokerDiskUsageDTO map(Integer id, InternalBrokerDiskUsage internalBrokerDiskUsage) {
  108. final BrokerDiskUsageDTO brokerDiskUsage = new BrokerDiskUsageDTO();
  109. brokerDiskUsage.setBrokerId(id);
  110. brokerDiskUsage.segmentCount((int) internalBrokerDiskUsage.getSegmentCount());
  111. brokerDiskUsage.segmentSize(internalBrokerDiskUsage.getSegmentSize());
  112. return brokerDiskUsage;
  113. }
  114. @Named("resolvePath")
  115. default Path resolvePath(String path) {
  116. if (path != null) {
  117. return Path.of(path);
  118. } else {
  119. return null;
  120. }
  121. }
  122. @Named("setProperties")
  123. default Properties setProperties(Properties properties) {
  124. Properties copy = new Properties();
  125. if (properties != null) {
  126. copy.putAll(properties);
  127. }
  128. return copy;
  129. }
  130. }