ClusterMapper.java 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  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.FailoverUrlList;
  15. import com.provectus.kafka.ui.model.Feature;
  16. import com.provectus.kafka.ui.model.InternalBrokerConfig;
  17. import com.provectus.kafka.ui.model.InternalBrokerDiskUsage;
  18. import com.provectus.kafka.ui.model.InternalClusterState;
  19. import com.provectus.kafka.ui.model.InternalKsqlServer;
  20. import com.provectus.kafka.ui.model.InternalPartition;
  21. import com.provectus.kafka.ui.model.InternalReplica;
  22. import com.provectus.kafka.ui.model.InternalSchemaRegistry;
  23. import com.provectus.kafka.ui.model.InternalTopic;
  24. import com.provectus.kafka.ui.model.InternalTopicConfig;
  25. import com.provectus.kafka.ui.model.KafkaCluster;
  26. import com.provectus.kafka.ui.model.KafkaConnectCluster;
  27. import com.provectus.kafka.ui.model.MetricDTO;
  28. import com.provectus.kafka.ui.model.Metrics;
  29. import com.provectus.kafka.ui.model.PartitionDTO;
  30. import com.provectus.kafka.ui.model.ReplicaDTO;
  31. import com.provectus.kafka.ui.model.TopicConfigDTO;
  32. import com.provectus.kafka.ui.model.TopicDTO;
  33. import com.provectus.kafka.ui.model.TopicDetailsDTO;
  34. import com.provectus.kafka.ui.model.schemaregistry.InternalCompatibilityCheck;
  35. import com.provectus.kafka.ui.model.schemaregistry.InternalCompatibilityLevel;
  36. import com.provectus.kafka.ui.service.metrics.RawMetric;
  37. import java.nio.file.Path;
  38. import java.util.Arrays;
  39. import java.util.Collections;
  40. import java.util.List;
  41. import java.util.Map;
  42. import java.util.Properties;
  43. import java.util.stream.Collectors;
  44. import org.apache.kafka.clients.admin.ConfigEntry;
  45. import org.mapstruct.Mapper;
  46. import org.mapstruct.Mapping;
  47. import org.mapstruct.Named;
  48. @Mapper(componentModel = "spring")
  49. public interface ClusterMapper {
  50. ClusterDTO toCluster(InternalClusterState clusterState);
  51. @Mapping(target = "properties", source = "properties", qualifiedByName = "setProperties")
  52. @Mapping(target = "schemaRegistry", source = ".", qualifiedByName = "setSchemaRegistry")
  53. @Mapping(target = "ksqldbServer", source = ".", qualifiedByName = "setKsqldbServer")
  54. @Mapping(target = "metricsConfig", source = "metrics")
  55. KafkaCluster toKafkaCluster(ClustersProperties.Cluster clusterProperties);
  56. ClusterStatsDTO toClusterStats(InternalClusterState clusterState);
  57. default ClusterMetricsDTO toClusterMetrics(Metrics metrics) {
  58. return new ClusterMetricsDTO()
  59. .items(metrics.getSummarizedMetrics().map(this::convert).collect(Collectors.toList()));
  60. }
  61. private MetricDTO convert(RawMetric rawMetric) {
  62. return new MetricDTO()
  63. .name(rawMetric.name())
  64. .labels(rawMetric.labels())
  65. .value(rawMetric.value());
  66. }
  67. default BrokerMetricsDTO toBrokerMetrics(List<RawMetric> metrics) {
  68. return new BrokerMetricsDTO()
  69. .metrics(metrics.stream().map(this::convert).collect(Collectors.toList()));
  70. }
  71. @Mapping(target = "isSensitive", source = "sensitive")
  72. @Mapping(target = "isReadOnly", source = "readOnly")
  73. BrokerConfigDTO toBrokerConfig(InternalBrokerConfig config);
  74. default ConfigSynonymDTO toConfigSynonym(ConfigEntry.ConfigSynonym config) {
  75. if (config == null) {
  76. return null;
  77. }
  78. ConfigSynonymDTO configSynonym = new ConfigSynonymDTO();
  79. configSynonym.setName(config.name());
  80. configSynonym.setValue(config.value());
  81. if (config.source() != null) {
  82. configSynonym.setSource(ConfigSourceDTO.valueOf(config.source().name()));
  83. }
  84. return configSynonym;
  85. }
  86. TopicDTO toTopic(InternalTopic topic);
  87. PartitionDTO toPartition(InternalPartition topic);
  88. @Named("setSchemaRegistry")
  89. default InternalSchemaRegistry setSchemaRegistry(ClustersProperties.Cluster clusterProperties) {
  90. if (clusterProperties == null
  91. || clusterProperties.getSchemaRegistry() == null) {
  92. return null;
  93. }
  94. InternalSchemaRegistry.InternalSchemaRegistryBuilder internalSchemaRegistry =
  95. InternalSchemaRegistry.builder();
  96. internalSchemaRegistry.url(
  97. clusterProperties.getSchemaRegistry() != null
  98. ? new FailoverUrlList(Arrays.asList(clusterProperties.getSchemaRegistry().split(",")))
  99. : new FailoverUrlList(Collections.emptyList())
  100. );
  101. if (clusterProperties.getSchemaRegistryAuth() != null) {
  102. internalSchemaRegistry.username(clusterProperties.getSchemaRegistryAuth().getUsername());
  103. internalSchemaRegistry.password(clusterProperties.getSchemaRegistryAuth().getPassword());
  104. }
  105. return internalSchemaRegistry.build();
  106. }
  107. @Named("setKsqldbServer")
  108. default InternalKsqlServer setKsqldbServer(ClustersProperties.Cluster clusterProperties) {
  109. if (clusterProperties == null
  110. || clusterProperties.getKsqldbServer() == null) {
  111. return null;
  112. }
  113. InternalKsqlServer.InternalKsqlServerBuilder internalKsqlServerBuilder =
  114. InternalKsqlServer.builder().url(clusterProperties.getKsqldbServer());
  115. if (clusterProperties.getKsqldbServerAuth() != null) {
  116. internalKsqlServerBuilder.username(clusterProperties.getKsqldbServerAuth().getUsername());
  117. internalKsqlServerBuilder.password(clusterProperties.getKsqldbServerAuth().getPassword());
  118. }
  119. return internalKsqlServerBuilder.build();
  120. }
  121. TopicDetailsDTO toTopicDetails(InternalTopic topic);
  122. @Mapping(target = "isReadOnly", source = "readOnly")
  123. @Mapping(target = "isSensitive", source = "sensitive")
  124. TopicConfigDTO toTopicConfig(InternalTopicConfig topic);
  125. ReplicaDTO toReplica(InternalReplica replica);
  126. ConnectDTO toKafkaConnect(KafkaConnectCluster connect);
  127. List<ClusterDTO.FeaturesEnum> toFeaturesEnum(List<Feature> features);
  128. @Mapping(target = "isCompatible", source = "compatible")
  129. CompatibilityCheckResponseDTO toCompatibilityCheckResponse(InternalCompatibilityCheck dto);
  130. @Mapping(target = "compatibility", source = "compatibilityLevel")
  131. CompatibilityLevelDTO toCompatibilityLevelDto(InternalCompatibilityLevel dto);
  132. default List<PartitionDTO> map(Map<Integer, InternalPartition> map) {
  133. return map.values().stream().map(this::toPartition).collect(Collectors.toList());
  134. }
  135. default BrokerDiskUsageDTO map(Integer id, InternalBrokerDiskUsage internalBrokerDiskUsage) {
  136. final BrokerDiskUsageDTO brokerDiskUsage = new BrokerDiskUsageDTO();
  137. brokerDiskUsage.setBrokerId(id);
  138. brokerDiskUsage.segmentCount((int) internalBrokerDiskUsage.getSegmentCount());
  139. brokerDiskUsage.segmentSize(internalBrokerDiskUsage.getSegmentSize());
  140. return brokerDiskUsage;
  141. }
  142. @Named("setProperties")
  143. default Properties setProperties(Properties properties) {
  144. Properties copy = new Properties();
  145. if (properties != null) {
  146. copy.putAll(properties);
  147. }
  148. return copy;
  149. }
  150. }