From bd0c4c7969f4da2bb9bf76002465c95a0c4c6f60 Mon Sep 17 00:00:00 2001 From: lilai Date: Fri, 15 Nov 2024 14:26:38 +0800 Subject: [PATCH] optimize code Signed-off-by: lilai --- .../plugin/config/PluginConfigManager.java | 55 +++++++++++-------- .../xds/entity/match/RegexMatchStrategy.java | 4 +- .../service/xds/handler/XdsHandler.java | 55 +++++++++++-------- .../service/xds/utils/XdsCommonUtils.java | 2 +- .../backend/service/PageTemplateService.java | 32 +++++++---- .../frontend/src/composables/translations.ts | 2 +- .../mq/grayscale/config/GrayTagItem.java | 2 +- .../grayscale/config/MqGrayscaleConfig.java | 2 +- .../RocketMqConsumerGroupAutoCheck.java | 6 +- .../utils/RocketMqGrayscaleConfigUtils.java | 2 +- .../utils/RocketMqSubscriptionDataUtils.java | 4 +- .../router/common/metric/MetricsManager.java | 16 +++--- .../xds/lb/XdsRoundRobinLoadBalancer.java | 2 +- 13 files changed, 107 insertions(+), 77 deletions(-) diff --git a/sermant-agentcore/sermant-agentcore-core/src/main/java/io/sermant/core/plugin/config/PluginConfigManager.java b/sermant-agentcore/sermant-agentcore-core/src/main/java/io/sermant/core/plugin/config/PluginConfigManager.java index 8108dcfd49..8d7ed2d66a 100644 --- a/sermant-agentcore/sermant-agentcore-core/src/main/java/io/sermant/core/plugin/config/PluginConfigManager.java +++ b/sermant-agentcore/sermant-agentcore-core/src/main/java/io/sermant/core/plugin/config/PluginConfigManager.java @@ -60,31 +60,40 @@ private PluginConfigManager() { public static void loadPluginConfigs(Plugin plugin) { File pluginConfigFile = getPluginConfigFile(plugin.getPath()); ClassLoader classLoader = plugin.getPluginClassLoader(); + for (BaseConfig config : ServiceLoader.load(PluginConfig.class, classLoader)) { - Class pluginConfigCls = config.getClass(); - String pluginConfigKey = ConfigKeyUtil.getTypeKeyWithClassloader(ConfigKeyUtil.getTypeKey(pluginConfigCls), - pluginConfigCls.getClassLoader()); - final BaseConfig retainedConfig = PLUGIN_CONFIG_MAP.get(pluginConfigKey); - if (pluginConfigFile.isFile()) { - if (retainedConfig == null) { - PLUGIN_CONFIG_MAP.put(pluginConfigKey, - ConfigManager.doLoad(pluginConfigFile, config, plugin.isDynamic())); - plugin.getConfigs().add(pluginConfigKey); - } else if (retainedConfig.getClass() == pluginConfigCls) { - LOGGER.log(Level.FINE, "Skip load config [{0}] repeatedly. ", - pluginConfigCls.getName()); - } else { - LOGGER.log(Level.WARNING, "Type key of {0} is {1}, same as {2}'s. ", - new String[]{pluginConfigCls.getName(), pluginConfigKey, - retainedConfig.getClass().getName()}); - } - continue; - } - if (PLUGIN_CONFIG_MAP.containsKey(pluginConfigKey)) { - continue; - } + processConfig(plugin, pluginConfigFile, config); + } + } + + private static void processConfig(Plugin plugin, File pluginConfigFile, BaseConfig config) { + Class pluginConfigCls = config.getClass(); + String pluginConfigKey = ConfigKeyUtil.getTypeKeyWithClassloader(ConfigKeyUtil.getTypeKey(pluginConfigCls), + pluginConfigCls.getClassLoader()); + + if (pluginConfigFile.isFile()) { + handleFileConfig(plugin, pluginConfigFile, config, pluginConfigCls, pluginConfigKey); + } else { + loadDefaultConfig(plugin, config, pluginConfigKey); + } + } + + private static void handleFileConfig(Plugin plugin, File pluginConfigFile, BaseConfig config, + Class pluginConfigCls, String pluginConfigKey) { + final BaseConfig retainedConfig = PLUGIN_CONFIG_MAP.get(pluginConfigKey); + if (retainedConfig == null) { + PLUGIN_CONFIG_MAP.put(pluginConfigKey, ConfigManager.doLoad(pluginConfigFile, config, plugin.isDynamic())); + plugin.getConfigs().add(pluginConfigKey); + } else if (retainedConfig.getClass() == pluginConfigCls) { + LOGGER.log(Level.FINE, "Skip load config [{0}] repeatedly.", pluginConfigCls.getName()); + } else { + LOGGER.log(Level.WARNING, "Type key of {0} is {1}, same as {2}'s.", + new String[]{pluginConfigCls.getName(), pluginConfigKey, retainedConfig.getClass().getName()}); + } + } - // If it cannot be loaded from file, it is the default configuration + private static void loadDefaultConfig(Plugin plugin, BaseConfig config, String pluginConfigKey) { + if (!PLUGIN_CONFIG_MAP.containsKey(pluginConfigKey)) { PLUGIN_CONFIG_MAP.put(pluginConfigKey, config); plugin.getConfigs().add(pluginConfigKey); } diff --git a/sermant-agentcore/sermant-agentcore-core/src/main/java/io/sermant/core/service/xds/entity/match/RegexMatchStrategy.java b/sermant-agentcore/sermant-agentcore-core/src/main/java/io/sermant/core/service/xds/entity/match/RegexMatchStrategy.java index 6c8893ef7f..79660206ab 100644 --- a/sermant-agentcore/sermant-agentcore-core/src/main/java/io/sermant/core/service/xds/entity/match/RegexMatchStrategy.java +++ b/sermant-agentcore/sermant-agentcore-core/src/main/java/io/sermant/core/service/xds/entity/match/RegexMatchStrategy.java @@ -27,6 +27,8 @@ * @since 2024-08-15 **/ public class RegexMatchStrategy implements MatchStrategy { + private static final Pattern DEFAULT_PATTERN = Pattern.compile(".*"); + private final Pattern regex; /** @@ -35,7 +37,7 @@ public class RegexMatchStrategy implements MatchStrategy { * @param regex regex */ public RegexMatchStrategy(String regex) { - this.regex = StringUtils.isEmpty(regex) ? Pattern.compile(".*") : Pattern.compile(regex); + this.regex = StringUtils.isEmpty(regex) ? DEFAULT_PATTERN : Pattern.compile(regex); } @Override diff --git a/sermant-agentcore/sermant-agentcore-implement/src/main/java/io/sermant/implement/service/xds/handler/XdsHandler.java b/sermant-agentcore/sermant-agentcore-implement/src/main/java/io/sermant/implement/service/xds/handler/XdsHandler.java index fb6a5fade7..73b1f6ba7e 100644 --- a/sermant-agentcore/sermant-agentcore-implement/src/main/java/io/sermant/implement/service/xds/handler/XdsHandler.java +++ b/sermant-agentcore/sermant-agentcore-implement/src/main/java/io/sermant/implement/service/xds/handler/XdsHandler.java @@ -56,7 +56,7 @@ * @since 2024-05-13 **/ public abstract class XdsHandler implements XdsServiceAction { - protected static final Logger LOGGER = LoggerFactory.getLogger(); + private static final Logger LOGGER = LoggerFactory.getLogger(); private static final int DELAY_TIME = 3000; @@ -180,40 +180,49 @@ protected StreamObserver getResponseStreamObserver(String req @Override public void onNext(DiscoveryResponse response) { handleResponse(requestKey, response); - if (countDownLatch != null) { - countDownLatch.countDown(); - } + countDown(countDownLatch); } @Override public void onError(Throwable throwable) { - if (countDownLatch != null) { - countDownLatch.countDown(); - } - initExecutor(); - executor.submit(() -> { - try { - Thread.sleep(DELAY_TIME); - } catch (InterruptedException e) { - LOGGER.log(Level.WARNING, "An error occurred in thread sleeping.", e); - } - client.updateChannel(); - subscribe(requestKey, null); - }); - LOGGER.log(Level.SEVERE, "An error occurred in Xds communication with istiod.", throwable); + countDown(countDownLatch); + handleError(throwable, requestKey); } @Override public void onCompleted() { - if (countDownLatch != null) { - countDownLatch.countDown(); - } - subscribe(requestKey, null); - LOGGER.log(Level.WARNING, "Xds stream is closed, new stream has been created for communication."); + countDown(countDownLatch); + handleCompletion(requestKey); } }; } + private void countDown(CountDownLatch countDownLatch) { + if (countDownLatch != null) { + countDownLatch.countDown(); + } + } + + private void handleError(Throwable throwable, String requestKey) { + initExecutor(); + executor.submit(() -> { + try { + Thread.sleep(DELAY_TIME); + } catch (InterruptedException e) { + LOGGER.log(Level.WARNING, "An error occurred in thread sleeping.", e); + Thread.currentThread().interrupt(); + } + client.updateChannel(); + subscribe(requestKey, null); + }); + LOGGER.log(Level.SEVERE, "An error occurred in Xds communication with istiod.", throwable); + } + + private void handleCompletion(String requestKey) { + subscribe(requestKey, null); + LOGGER.log(Level.WARNING, "Xds stream is closed, new stream has been created for communication."); + } + /** * handle response from istiod * diff --git a/sermant-agentcore/sermant-agentcore-implement/src/main/java/io/sermant/implement/service/xds/utils/XdsCommonUtils.java b/sermant-agentcore/sermant-agentcore-implement/src/main/java/io/sermant/implement/service/xds/utils/XdsCommonUtils.java index df1d9b6666..4b3129ce19 100644 --- a/sermant-agentcore/sermant-agentcore-implement/src/main/java/io/sermant/implement/service/xds/utils/XdsCommonUtils.java +++ b/sermant-agentcore/sermant-agentcore-implement/src/main/java/io/sermant/implement/service/xds/utils/XdsCommonUtils.java @@ -41,7 +41,7 @@ public class XdsCommonUtils { private XdsCommonUtils() { } - /*** + /** * get service name from cluster * * @param clusterName cluster name diff --git a/sermant-backend/src/main/java/io/sermant/backend/service/PageTemplateService.java b/sermant-backend/src/main/java/io/sermant/backend/service/PageTemplateService.java index 6679fae23e..8a4cb63a1b 100644 --- a/sermant-backend/src/main/java/io/sermant/backend/service/PageTemplateService.java +++ b/sermant-backend/src/main/java/io/sermant/backend/service/PageTemplateService.java @@ -103,20 +103,30 @@ private void init() { private void loadTemplateFile(String templatePath) { try (DirectoryStream stream = Files.newDirectoryStream(Paths.get(templatePath), "*.yml")) { for (Path entry : stream) { - if (!Files.isRegularFile(entry)) { - continue; - } - try (InputStream inputStream = Files.newInputStream(entry)) { - PageTemplateInfo pageTemplateInfo = yaml.loadAs(inputStream, PageTemplateInfo.class); - if (pageTemplateInfo == null || pageTemplateInfo.getPlugin() == null) { - LOGGER.warn("The page template file {} is missing plugin information.", entry.getFileName()); - continue; - } - pageTemplateInfoMap.put(pageTemplateInfo.getPlugin().getEnglishName(), pageTemplateInfo); - } + loadTemplateEntry(entry); } } catch (IOException e) { LOGGER.error("An error occurred while retrieving template file information", e); } } + + private void loadTemplateEntry(Path entry) { + if (!Files.isRegularFile(entry)) { + return; + } + try (InputStream inputStream = Files.newInputStream(entry)) { + PageTemplateInfo pageTemplateInfo = yaml.loadAs(inputStream, PageTemplateInfo.class); + processTemplateInfo(entry, pageTemplateInfo); + } catch (IOException e) { + LOGGER.warn("Failed to load page template from file {}", entry.getFileName(), e); + } + } + + private void processTemplateInfo(Path entry, PageTemplateInfo pageTemplateInfo) { + if (pageTemplateInfo == null || pageTemplateInfo.getPlugin() == null) { + LOGGER.warn("The page template file {} is missing plugin information.", entry.getFileName()); + return; + } + pageTemplateInfoMap.put(pageTemplateInfo.getPlugin().getEnglishName(), pageTemplateInfo); + } } diff --git a/sermant-backend/src/main/webapp/frontend/src/composables/translations.ts b/sermant-backend/src/main/webapp/frontend/src/composables/translations.ts index 22c6fda955..22ebcb7ae1 100644 --- a/sermant-backend/src/main/webapp/frontend/src/composables/translations.ts +++ b/sermant-backend/src/main/webapp/frontend/src/composables/translations.ts @@ -543,7 +543,7 @@ const i18n = createI18n({ }); export const localeLanguage = reactive({ - value: getSavedLanguage() == 'zh' ? zh : en, + value: getSavedLanguage() === 'zh' ? zh : en, language: getSavedLanguage() }); diff --git a/sermant-plugins/sermant-mq-grayscale/mq-config-common/src/main/java/io/sermant/mq/grayscale/config/GrayTagItem.java b/sermant-plugins/sermant-mq-grayscale/mq-config-common/src/main/java/io/sermant/mq/grayscale/config/GrayTagItem.java index d8fc7563b7..04e3987d18 100644 --- a/sermant-plugins/sermant-mq-grayscale/mq-config-common/src/main/java/io/sermant/mq/grayscale/config/GrayTagItem.java +++ b/sermant-plugins/sermant-mq-grayscale/mq-config-common/src/main/java/io/sermant/mq/grayscale/config/GrayTagItem.java @@ -81,7 +81,7 @@ public boolean matchPropertiesByServiceMeta(Map properties) { * @param grayscale grayscale */ public void updateTrafficTags(List grayscale) { - for (GrayTagItem item: grayscale) { + for (GrayTagItem item : grayscale) { if (StringUtils.equals(consumerGroupTag, item.getConsumerGroupTag())) { setTrafficTag(item.getTrafficTag()); return; diff --git a/sermant-plugins/sermant-mq-grayscale/mq-config-common/src/main/java/io/sermant/mq/grayscale/config/MqGrayscaleConfig.java b/sermant-plugins/sermant-mq-grayscale/mq-config-common/src/main/java/io/sermant/mq/grayscale/config/MqGrayscaleConfig.java index f2bd3dba00..99d99141ea 100644 --- a/sermant-plugins/sermant-mq-grayscale/mq-config-common/src/main/java/io/sermant/mq/grayscale/config/MqGrayscaleConfig.java +++ b/sermant-plugins/sermant-mq-grayscale/mq-config-common/src/main/java/io/sermant/mq/grayscale/config/MqGrayscaleConfig.java @@ -109,7 +109,7 @@ public Optional getMatchedGrayTagByServiceMeta(Map * @return gray tag item */ public Optional getGrayTagByGroupTag(String grayGroupTag) { - for (GrayTagItem item: grayscale) { + for (GrayTagItem item : grayscale) { if (grayGroupTag.equals(item.getConsumerGroupTag())) { return Optional.of(item); } diff --git a/sermant-plugins/sermant-mq-grayscale/mq-grayscale-rocketmq-plugin/src/main/java/io/sermant/mq/grayscale/rocketmq/service/RocketMqConsumerGroupAutoCheck.java b/sermant-plugins/sermant-mq-grayscale/mq-grayscale-rocketmq-plugin/src/main/java/io/sermant/mq/grayscale/rocketmq/service/RocketMqConsumerGroupAutoCheck.java index df2d3289bf..11f133406c 100644 --- a/sermant-plugins/sermant-mq-grayscale/mq-grayscale-rocketmq-plugin/src/main/java/io/sermant/mq/grayscale/rocketmq/service/RocketMqConsumerGroupAutoCheck.java +++ b/sermant-plugins/sermant-mq-grayscale/mq-grayscale-rocketmq-plugin/src/main/java/io/sermant/mq/grayscale/rocketmq/service/RocketMqConsumerGroupAutoCheck.java @@ -143,7 +143,7 @@ public static void findGrayConsumerGroupAndUpdateGrayTags() { continue; } Set grayTags = findGrayConsumerGroupAndGetTags(clientConfig); - LOGGER.log(Level.INFO,"[auto-check] current find gray tags: {0}.", grayTags); + LOGGER.log(Level.INFO, "[auto-check] current find gray tags: {0}.", grayTags); resetAutoCheckGrayTagItems(grayTags, clientConfig); } } @@ -163,7 +163,7 @@ private static Set findGrayConsumerGroupAndGetTags(RocketMqConsumerClien return getGrayTagsByConsumerGroup(groupList, brokerAddress, mqClientApi, clientConfig.getConsumerGroup()); } catch (MQClientException | InterruptedException | RemotingTimeoutException | RemotingSendRequestException - | RemotingConnectException | MQBrokerException e) { + | RemotingConnectException | MQBrokerException e) { LOGGER.log(Level.FINE, String.format(Locale.ENGLISH, "[auto-check] error, message: %s", e.getMessage()), e); } @@ -185,7 +185,7 @@ private static Set getGrayTagsByConsumerGroup(GroupList groupList, Strin grayTags.add(grayTag); } } catch (RemotingConnectException | RemotingSendRequestException | RemotingTimeoutException - | MQBrokerException | InterruptedException e) { + | MQBrokerException | InterruptedException e) { LOGGER.warning(String.format(Locale.ENGLISH, "[auto-check] can not find ids in group: [%s].", group)); } diff --git a/sermant-plugins/sermant-mq-grayscale/mq-grayscale-rocketmq-plugin/src/main/java/io/sermant/mq/grayscale/rocketmq/utils/RocketMqGrayscaleConfigUtils.java b/sermant-plugins/sermant-mq-grayscale/mq-grayscale-rocketmq-plugin/src/main/java/io/sermant/mq/grayscale/rocketmq/utils/RocketMqGrayscaleConfigUtils.java index 9ca51ee209..fee41bf46d 100644 --- a/sermant-plugins/sermant-mq-grayscale/mq-grayscale-rocketmq-plugin/src/main/java/io/sermant/mq/grayscale/rocketmq/utils/RocketMqGrayscaleConfigUtils.java +++ b/sermant-plugins/sermant-mq-grayscale/mq-grayscale-rocketmq-plugin/src/main/java/io/sermant/mq/grayscale/rocketmq/utils/RocketMqGrayscaleConfigUtils.java @@ -43,7 +43,7 @@ public class RocketMqGrayscaleConfigUtils { /** * serviceMeta info */ - public static final Map MICRO_SERVICE_PROPERTIES = new HashMap<>(); + private static final Map MICRO_SERVICE_PROPERTIES = new HashMap<>(); /** * consumerGroup name rule: ^[%|a-zA-Z0-9_-]+$ diff --git a/sermant-plugins/sermant-mq-grayscale/mq-grayscale-rocketmq-plugin/src/main/java/io/sermant/mq/grayscale/rocketmq/utils/RocketMqSubscriptionDataUtils.java b/sermant-plugins/sermant-mq-grayscale/mq-grayscale-rocketmq-plugin/src/main/java/io/sermant/mq/grayscale/rocketmq/utils/RocketMqSubscriptionDataUtils.java index dc5e1059e8..eddc3c3fbb 100644 --- a/sermant-plugins/sermant-mq-grayscale/mq-grayscale-rocketmq-plugin/src/main/java/io/sermant/mq/grayscale/rocketmq/utils/RocketMqSubscriptionDataUtils.java +++ b/sermant-plugins/sermant-mq-grayscale/mq-grayscale-rocketmq-plugin/src/main/java/io/sermant/mq/grayscale/rocketmq/utils/RocketMqSubscriptionDataUtils.java @@ -20,9 +20,9 @@ import io.sermant.mq.grayscale.config.ConsumeModeEnum; import io.sermant.mq.grayscale.config.GrayTagItem; import io.sermant.mq.grayscale.config.MqGrayConfigCache; +import io.sermant.mq.grayscale.config.MqGrayscaleConfig; import io.sermant.mq.grayscale.config.rocketmq.RocketMqConfigUtils; import io.sermant.mq.grayscale.rocketmq.config.RocketMqConsumerClientConfig; -import io.sermant.mq.grayscale.config.MqGrayscaleConfig; import org.apache.commons.lang3.StringUtils; import org.apache.rocketmq.client.impl.consumer.RebalanceImpl; @@ -244,7 +244,7 @@ private static String rebuildWithoutGrayTagSubData(String originSubData) { } String[] originConditions = PATTERN.split(originSubData); List refactorConditions = new ArrayList<>(); - for (String condition: originConditions) { + for (String condition : originConditions) { if (!containsGrayTags(condition) && !condition.contains("_message_tag_")) { refactorConditions.add(condition); } diff --git a/sermant-plugins/sermant-router/router-common/src/main/java/io/sermant/router/common/metric/MetricsManager.java b/sermant-plugins/sermant-router/router-common/src/main/java/io/sermant/router/common/metric/MetricsManager.java index 3024bed093..da9cfad48a 100644 --- a/sermant-plugins/sermant-router/router-common/src/main/java/io/sermant/router/common/metric/MetricsManager.java +++ b/sermant-plugins/sermant-router/router-common/src/main/java/io/sermant/router/common/metric/MetricsManager.java @@ -57,13 +57,13 @@ public class MetricsManager { static { try { metricService = ServiceManager.getService(MetricService.class); - TAG_KEY_MAP.put("service","service_meta_service"); - TAG_KEY_MAP.put("version","service_meta_version"); - TAG_KEY_MAP.put("application","service_meta_application"); - TAG_KEY_MAP.put("zone","service_meta_zone"); - TAG_KEY_MAP.put("project","service_meta_project"); - TAG_KEY_MAP.put("environment","service_meta_environment"); - TAG_KEY_MAP.put("parameters","service_meta_parameters"); + TAG_KEY_MAP.put("service", "service_meta_service"); + TAG_KEY_MAP.put("version", "service_meta_version"); + TAG_KEY_MAP.put("application", "service_meta_application"); + TAG_KEY_MAP.put("zone", "service_meta_zone"); + TAG_KEY_MAP.put("project", "service_meta_project"); + TAG_KEY_MAP.put("environment", "service_meta_environment"); + TAG_KEY_MAP.put("parameters", "service_meta_parameters"); } catch (IllegalArgumentException e) { LOGGER.log(Level.SEVERE, "Failed to load metrics service", e); } @@ -92,7 +92,7 @@ public static void addOrUpdateCounterMetricValue(String metricName, Map(); } - tagsMap.put(RouterConstant.SCOPE,"service-router"); + tagsMap.put(RouterConstant.SCOPE, "service-router"); Counter counter = COUNT_MAP.computeIfAbsent(new MetricInfo(metricName, tagsMap), metricInfo -> metricService.counter(metricName, Tags.of(tagsMap))); counter.increment(value); diff --git a/sermant-plugins/sermant-router/router-common/src/main/java/io/sermant/router/common/xds/lb/XdsRoundRobinLoadBalancer.java b/sermant-plugins/sermant-router/router-common/src/main/java/io/sermant/router/common/xds/lb/XdsRoundRobinLoadBalancer.java index 2ccbeff464..088f573429 100644 --- a/sermant-plugins/sermant-router/router-common/src/main/java/io/sermant/router/common/xds/lb/XdsRoundRobinLoadBalancer.java +++ b/sermant-plugins/sermant-router/router-common/src/main/java/io/sermant/router/common/xds/lb/XdsRoundRobinLoadBalancer.java @@ -39,7 +39,7 @@ public XdsRoundRobinLoadBalancer() { @Override public ServiceInstance selectInstance(List instances) { - synchronized (this.getClass()) { + synchronized (XdsRoundRobinLoadBalancer.class) { // safely calculate the index based on the current size of the instances list int currentIndex = index.getAndUpdate(i -> (i + 1) % instances.size());