/kafka-manager-core/src/main/java/com/xiaojukeji/kafka/manager/service/utils/MetricsConvertUtils.java

https://github.com/didi/kafka-manager · Java · 203 lines · 181 code · 15 blank · 7 comment · 25 complexity · 1dc030f64c84e6b0d8fbd8b1babd05fa MD5 · raw file

  1. package com.xiaojukeji.kafka.manager.service.utils;
  2. import com.alibaba.fastjson.JSON;
  3. import com.xiaojukeji.kafka.manager.common.entity.dto.op.reassign.ReassignTopicDTO;
  4. import com.xiaojukeji.kafka.manager.common.entity.metrics.BaseMetrics;
  5. import com.xiaojukeji.kafka.manager.common.entity.metrics.BrokerMetrics;
  6. import com.xiaojukeji.kafka.manager.common.entity.metrics.ClusterMetrics;
  7. import com.xiaojukeji.kafka.manager.common.entity.metrics.TopicMetrics;
  8. import com.xiaojukeji.kafka.manager.common.entity.pojo.ReassignTaskDO;
  9. import com.xiaojukeji.kafka.manager.common.utils.ListUtils;
  10. import com.xiaojukeji.kafka.manager.common.utils.ValidateUtils;
  11. import com.xiaojukeji.kafka.manager.common.entity.pojo.BrokerMetricsDO;
  12. import com.xiaojukeji.kafka.manager.common.entity.pojo.ClusterMetricsDO;
  13. import com.xiaojukeji.kafka.manager.common.entity.pojo.TopicMetricsDO;
  14. import com.xiaojukeji.kafka.manager.common.zookeeper.znode.brokers.TopicMetadata;
  15. import java.util.ArrayList;
  16. import java.util.Date;
  17. import java.util.List;
  18. /**
  19. * @author zengqiao
  20. * @date 20/6/17
  21. */
  22. public class MetricsConvertUtils {
  23. public static List<ClusterMetrics> convert2ClusterMetricsList(List<ClusterMetricsDO> doList) {
  24. if (ValidateUtils.isEmptyList(doList)) {
  25. return new ArrayList<>();
  26. }
  27. List<ClusterMetrics> metricsList = new ArrayList<>();
  28. for (ClusterMetricsDO metricsDO: doList) {
  29. metricsList.add(convert2ClusterMetrics(metricsDO));
  30. }
  31. return metricsList;
  32. }
  33. public static ClusterMetrics convert2ClusterMetrics(ClusterMetricsDO metricsDO) {
  34. if (ValidateUtils.isNull(metricsDO)) {
  35. return null;
  36. }
  37. ClusterMetrics metrics = new ClusterMetrics(metricsDO.getClusterId());
  38. metrics.setMetricsMap(JSON.parseObject(metricsDO.getMetrics()));
  39. return metrics;
  40. }
  41. public static List<BrokerMetrics> convert2BrokerMetricsList(List<BrokerMetricsDO> doList) {
  42. if (ValidateUtils.isEmptyList(doList)) {
  43. return new ArrayList<>();
  44. }
  45. List<BrokerMetrics> metricsList = new ArrayList<>();
  46. for (BrokerMetricsDO metricsDO: doList) {
  47. metricsList.add(convert2BrokerMetrics(metricsDO));
  48. }
  49. return metricsList;
  50. }
  51. public static BrokerMetrics convert2BrokerMetrics(BrokerMetricsDO metricsDO) {
  52. if (ValidateUtils.isNull(metricsDO)) {
  53. return null;
  54. }
  55. BrokerMetrics metrics = new BrokerMetrics(metricsDO.getClusterId(), metricsDO.getBrokerId());
  56. metrics.setMetricsMap(JSON.parseObject(metricsDO.getMetrics()));
  57. return metrics;
  58. }
  59. public static List<TopicMetrics> convert2TopicMetricsList(List<TopicMetricsDO> doList) {
  60. if (ValidateUtils.isEmptyList(doList)) {
  61. return new ArrayList<>();
  62. }
  63. List<TopicMetrics> metricsList = new ArrayList<>();
  64. for (TopicMetricsDO metricsDO: doList) {
  65. metricsList.add(convert2TopicMetrics(metricsDO));
  66. }
  67. return metricsList;
  68. }
  69. public static TopicMetrics convert2TopicMetrics(TopicMetricsDO metricsDO) {
  70. if (ValidateUtils.isNull(metricsDO)) {
  71. return null;
  72. }
  73. TopicMetrics metrics = new TopicMetrics(
  74. metricsDO.getAppId(),
  75. metricsDO.getClusterId(),
  76. metricsDO.getTopicName()
  77. );
  78. metrics.setMetricsMap(JSON.parseObject(metricsDO.getMetrics()));
  79. return metrics;
  80. }
  81. public static List<TopicMetricsDO> convertAndUpdateCreateTime2TopicMetricsDOList(
  82. Long timestamp,
  83. List<TopicMetrics> metricsList) {
  84. if (ValidateUtils.isEmptyList(metricsList)) {
  85. return new ArrayList<>();
  86. }
  87. List<TopicMetricsDO> doList = new ArrayList<>();
  88. for (TopicMetrics elem: metricsList) {
  89. elem.updateCreateTime(timestamp);
  90. if (elem.getMetricsMap().size() == 1) {
  91. // 没有指标数据, 直接过滤掉
  92. continue;
  93. }
  94. TopicMetricsDO metricsDO = new TopicMetricsDO();
  95. metricsDO.setAppId(elem.getAppId());
  96. metricsDO.setClusterId(elem.getClusterId());
  97. metricsDO.setTopicName(elem.getTopicName());
  98. metricsDO.setMetrics(JSON.toJSONString(elem.getMetricsMap()));
  99. doList.add(metricsDO);
  100. }
  101. return doList;
  102. }
  103. public static List<BrokerMetricsDO> convertAndUpdateCreateTime2BrokerMetricsDOList(
  104. Long timestamp,
  105. List<BrokerMetrics> metricsList) {
  106. if (ValidateUtils.isEmptyList(metricsList)) {
  107. return new ArrayList<>();
  108. }
  109. List<BrokerMetricsDO> doList = new ArrayList<>();
  110. for (BrokerMetrics elem: metricsList) {
  111. elem.updateCreateTime(timestamp);
  112. if (elem.getMetricsMap().size() == 1) {
  113. // 没有指标数据, 直接过滤掉
  114. continue;
  115. }
  116. BrokerMetricsDO metricsDO = new BrokerMetricsDO();
  117. metricsDO.setClusterId(elem.getClusterId());
  118. metricsDO.setBrokerId(elem.getBrokerId());
  119. metricsDO.setMetrics(JSON.toJSONString(elem.getMetricsMap()));
  120. doList.add(metricsDO);
  121. }
  122. return doList;
  123. }
  124. public static List<ClusterMetricsDO> convertAndUpdateCreateTime2ClusterMetricsDOList(
  125. Long timestamp,
  126. List<ClusterMetrics> metricsList) {
  127. if (ValidateUtils.isEmptyList(metricsList)) {
  128. return new ArrayList<>();
  129. }
  130. List<ClusterMetricsDO> doList = new ArrayList<>();
  131. for (ClusterMetrics elem: metricsList) {
  132. elem.updateCreateTime(timestamp);
  133. if (elem.getMetricsMap().size() == 1) {
  134. // 没有指标数据, 直接过滤掉
  135. continue;
  136. }
  137. ClusterMetricsDO metricsDO = new ClusterMetricsDO();
  138. metricsDO.setClusterId(elem.getClusterId());
  139. metricsDO.setMetrics(JSON.toJSONString(elem.getMetricsMap()));
  140. doList.add(metricsDO);
  141. }
  142. return doList;
  143. }
  144. public static BaseMetrics merge2BaseMetricsByAdd(List<? extends BaseMetrics> metricsList) {
  145. if (ValidateUtils.isEmptyList(metricsList)) {
  146. return new BaseMetrics();
  147. }
  148. BaseMetrics metrics = new BaseMetrics();
  149. for (BaseMetrics elem: metricsList) {
  150. metrics.mergeByAdd(elem);
  151. }
  152. return metrics;
  153. }
  154. public static BaseMetrics merge2BaseMetricsByMax(List<? extends BaseMetrics> metricsList) {
  155. if (ValidateUtils.isEmptyList(metricsList)) {
  156. return new BaseMetrics();
  157. }
  158. BaseMetrics metrics = new BaseMetrics();
  159. for (BaseMetrics elem: metricsList) {
  160. metrics.mergeByMax(elem);
  161. }
  162. return metrics;
  163. }
  164. public static ReassignTaskDO convert2ReassignTaskDO(Long taskId,
  165. Long clusterId,
  166. TopicMetadata topicMetadata,
  167. ReassignTopicDTO dto,
  168. String reassignmentJson,
  169. String operator) {
  170. ReassignTaskDO reassignTaskDO = new ReassignTaskDO();
  171. reassignTaskDO.setTaskId(taskId);
  172. reassignTaskDO.setClusterId(clusterId);
  173. reassignTaskDO.setTopicName(topicMetadata.getTopic());
  174. reassignTaskDO.setPartitions(ListUtils.intList2String(dto.getPartitionIdList()));
  175. reassignTaskDO.setReassignmentJson(reassignmentJson);
  176. reassignTaskDO.setRealThrottle(dto.getThrottle());
  177. reassignTaskDO.setMinThrottle(dto.getMinThrottle());
  178. reassignTaskDO.setMaxThrottle(dto.getMaxThrottle());
  179. reassignTaskDO.setBeginTime(new Date(dto.getBeginTime()));
  180. reassignTaskDO.setSrcBrokers(ListUtils.intList2String(new ArrayList<>(topicMetadata.getBrokerIdSet())));
  181. reassignTaskDO.setDestBrokers(ListUtils.intList2String(dto.getBrokerIdList()));
  182. reassignTaskDO.setOriginalRetentionTime(dto.getOriginalRetentionTime());
  183. reassignTaskDO.setReassignRetentionTime(dto.getReassignRetentionTime());
  184. reassignTaskDO.setDescription(dto.getDescription());
  185. reassignTaskDO.setOperator(operator);
  186. return reassignTaskDO;
  187. }
  188. }