ClusterMapper.java 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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.masking.DataMasking;
  37. import com.provectus.kafka.ui.service.metrics.RawMetric;
  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. if (clusterProperties.getSchemaRegistrySsl() != null) {
  106. internalSchemaRegistry.keystoreLocation(clusterProperties.getSchemaRegistrySsl().getKeystoreLocation());
  107. internalSchemaRegistry.keystorePassword(clusterProperties.getSchemaRegistrySsl().getKeystorePassword());
  108. internalSchemaRegistry.truststoreLocation(clusterProperties.getSchemaRegistrySsl().getTruststoreLocation());
  109. internalSchemaRegistry.truststorePassword(clusterProperties.getSchemaRegistrySsl().getTruststorePassword());
  110. }
  111. return internalSchemaRegistry.build();
  112. }
  113. @Named("setKsqldbServer")
  114. default InternalKsqlServer setKsqldbServer(ClustersProperties.Cluster clusterProperties) {
  115. if (clusterProperties == null
  116. || clusterProperties.getKsqldbServer() == null) {
  117. return null;
  118. }
  119. InternalKsqlServer.InternalKsqlServerBuilder internalKsqlServerBuilder =
  120. InternalKsqlServer.builder().url(clusterProperties.getKsqldbServer());
  121. if (clusterProperties.getKsqldbServerAuth() != null) {
  122. internalKsqlServerBuilder.username(clusterProperties.getKsqldbServerAuth().getUsername());
  123. internalKsqlServerBuilder.password(clusterProperties.getKsqldbServerAuth().getPassword());
  124. }
  125. return internalKsqlServerBuilder.build();
  126. }
  127. TopicDetailsDTO toTopicDetails(InternalTopic topic);
  128. @Mapping(target = "isReadOnly", source = "readOnly")
  129. @Mapping(target = "isSensitive", source = "sensitive")
  130. TopicConfigDTO toTopicConfig(InternalTopicConfig topic);
  131. ReplicaDTO toReplica(InternalReplica replica);
  132. ConnectDTO toKafkaConnect(KafkaConnectCluster connect);
  133. List<ClusterDTO.FeaturesEnum> toFeaturesEnum(List<Feature> features);
  134. @Mapping(target = "isCompatible", source = "compatible")
  135. CompatibilityCheckResponseDTO toCompatibilityCheckResponse(InternalCompatibilityCheck dto);
  136. @Mapping(target = "compatibility", source = "compatibilityLevel")
  137. CompatibilityLevelDTO toCompatibilityLevelDto(InternalCompatibilityLevel dto);
  138. default List<PartitionDTO> map(Map<Integer, InternalPartition> map) {
  139. return map.values().stream().map(this::toPartition).collect(Collectors.toList());
  140. }
  141. default BrokerDiskUsageDTO map(Integer id, InternalBrokerDiskUsage internalBrokerDiskUsage) {
  142. final BrokerDiskUsageDTO brokerDiskUsage = new BrokerDiskUsageDTO();
  143. brokerDiskUsage.setBrokerId(id);
  144. brokerDiskUsage.segmentCount((int) internalBrokerDiskUsage.getSegmentCount());
  145. brokerDiskUsage.segmentSize(internalBrokerDiskUsage.getSegmentSize());
  146. return brokerDiskUsage;
  147. }
  148. default DataMasking map(List<ClustersProperties.Masking> maskingProperties) {
  149. return DataMasking.create(maskingProperties);
  150. }
  151. @Named("setProperties")
  152. default Properties setProperties(Properties properties) {
  153. Properties copy = new Properties();
  154. if (properties != null) {
  155. copy.putAll(properties);
  156. }
  157. return copy;
  158. }
  159. }