Skip to content

Commit

Permalink
feat(): refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
Rawven committed Sep 6, 2024
1 parent 2ec4630 commit 50c5b21
Show file tree
Hide file tree
Showing 44 changed files with 646 additions and 1,080 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,13 @@

import com.ctrip.framework.apollo.build.ApolloInjector;
import com.ctrip.framework.apollo.core.utils.ClassLoaderUtil;
import com.ctrip.framework.apollo.monitor.api.ConfigMonitor;
import com.ctrip.framework.apollo.monitor.internal.DefaultConfigMonitor;
import com.ctrip.framework.apollo.monitor.internal.exporter.AbstractApolloClientMetricsExporter;
import com.ctrip.framework.apollo.monitor.internal.jmx.ApolloClientJmxMBeanRegister;
import com.ctrip.framework.apollo.monitor.internal.listener.ApolloClientMonitorEventListener;
import com.ctrip.framework.apollo.monitor.internal.listener.ApolloClientMonitorEventListenerManager;
import com.ctrip.framework.apollo.monitor.internal.ApolloClientMonitorContext;
import com.ctrip.framework.apollo.monitor.internal.listener.impl.DefaultApolloClientBootstrapArgsApi;
import com.ctrip.framework.apollo.monitor.internal.listener.impl.DefaultApolloClientExceptionApi;
import com.ctrip.framework.apollo.monitor.internal.listener.impl.DefaultApolloClientNamespaceApi;
import com.ctrip.framework.apollo.monitor.internal.listener.impl.DefaultApolloClientThreadPoolApi;
import com.ctrip.framework.apollo.monitor.internal.listener.DefaultApolloClientMonitorEventListenerManager;
import com.ctrip.framework.apollo.monitor.internal.exporter.ApolloClientMetricsExporter;
import com.ctrip.framework.apollo.monitor.internal.exporter.ApolloClientMetricsExporterFactory;
import com.ctrip.framework.apollo.monitor.internal.tracer.ApolloClientMonitorMessageProducer;
import com.ctrip.framework.apollo.monitor.internal.tracer.ApolloClientMessageProducerComposite;
Expand All @@ -41,91 +36,72 @@
import com.ctrip.framework.apollo.tracer.spi.MessageProducer;
import com.ctrip.framework.apollo.util.ConfigUtil;
import com.ctrip.framework.foundation.internals.ServiceBootstrap;
import com.google.common.collect.Lists;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* ConfigMonitorInitializer initializes the Apollo Config Monitor.
*/
public class ConfigMonitorInitializer {

private static final Logger logger = LoggerFactory.getLogger(ConfigMonitorInitializer.class);
protected static boolean hasInitialized = false;
private static ConfigUtil CONFIG_UTIL = ApolloInjector.getInstance(ConfigUtil.class);
private static ConfigUtil m_configUtil = ApolloInjector.getInstance(ConfigUtil.class);
private static ApolloClientMonitorContext monitorContext = ApolloInjector.getInstance(
ApolloClientMonitorContext.class);

public static void initialize() {
if (CONFIG_UTIL.getClientMonitorEnabled() && !hasInitialized) {
hasInitialized = true;
logger.debug("Initializing ConfigMonitor");
DefaultApolloClientMonitorEventListenerManager manager = initializeMetricsEventListenerManager();
List<ApolloClientMonitorEventListener> collectors = initializeCollectors(manager);
ApolloClientMetricsExporter metricsExporter = initializeMetricsExporter(collectors);
initializeJmxMonitoring(collectors);
initializeConfigMonitor(collectors, metricsExporter);
logger.debug("ConfigMonitor initialized successfully.");
if (m_configUtil.isClientMonitorEnabled() && !hasInitialized) {
synchronized (ConfigMonitorInitializer.class) {
if (!hasInitialized) {
doInit();
hasInitialized = true;
}
}
}
}

protected static DefaultApolloClientMonitorEventListenerManager initializeMetricsEventListenerManager() {
return (DefaultApolloClientMonitorEventListenerManager) ApolloInjector.getInstance(
ApolloClientMonitorEventListenerManager.class);
private static void doInit() {
initializeMetricsEventListener();
initializeMetricsExporter();
initializeJmxMonitoring();
hasInitialized = true;
}

protected static void initializeJmxMonitoring(List<ApolloClientMonitorEventListener> collectors) {
if (CONFIG_UTIL.getClientMonitorJmxEnabled()) {
collectors.forEach(metricsCollector ->


private static void initializeJmxMonitoring() {
if (m_configUtil.isClientMonitorJmxEnabled()) {
monitorContext.getCollectors().forEach(metricsCollector ->
ApolloClientJmxMBeanRegister.register(
MBEAN_NAME + metricsCollector.mBeanName(), metricsCollector)
MBEAN_NAME + metricsCollector.getName(), metricsCollector)
);
}
}

protected static List<ApolloClientMonitorEventListener> initializeCollectors(
DefaultApolloClientMonitorEventListenerManager manager) {

private static void initializeMetricsEventListener() {
DefaultConfigManager configManager = (DefaultConfigManager) ApolloInjector.getInstance(
ConfigManager.class);

List<ApolloClientMonitorEventListener> collectors = Lists.newArrayList(
new DefaultApolloClientExceptionApi(),
new DefaultApolloClientNamespaceApi(configManager.m_configs, configManager.m_configFiles),
new DefaultApolloClientThreadPoolApi(RemoteConfigRepository.m_executorService,
AbstractConfig.m_executorService, AbstractConfigFile.m_executorService,
AbstractApolloClientMetricsExporter.m_executorService),
new DefaultApolloClientBootstrapArgsApi(CONFIG_UTIL)
);

manager.setCollectors(collectors);
return collectors;
monitorContext.setApolloClientBootstrapArgsMonitorApi(new DefaultApolloClientBootstrapArgsApi(
m_configUtil));
monitorContext.setApolloClientExceptionMonitorApi(new DefaultApolloClientExceptionApi());
monitorContext.setApolloClientNamespaceMonitorApi(new DefaultApolloClientNamespaceApi(
configManager.m_configs, configManager.m_configFiles));
monitorContext.setApolloClientThreadPoolMonitorApi(new DefaultApolloClientThreadPoolApi(
RemoteConfigRepository.m_executorService,
AbstractConfig.m_executorService, AbstractConfigFile.m_executorService,
AbstractApolloClientMetricsExporter.m_executorService));
}

protected static ApolloClientMetricsExporter initializeMetricsExporter(
List<ApolloClientMonitorEventListener> collectors) {
private static void initializeMetricsExporter(
) {
ApolloClientMetricsExporterFactory exporterFactory = ApolloInjector.getInstance(
ApolloClientMetricsExporterFactory.class);
return exporterFactory.getMetricsReporter(collectors);
}

protected static void initializeConfigMonitor(List<ApolloClientMonitorEventListener> collectors,
ApolloClientMetricsExporter metricsExporter) {

DefaultConfigMonitor configMonitor = (DefaultConfigMonitor) ApolloInjector.getInstance(
ConfigMonitor.class);
configMonitor.init(
(DefaultApolloClientNamespaceApi) collectors.get(1),
(DefaultApolloClientThreadPoolApi) collectors.get(2),
(DefaultApolloClientExceptionApi) collectors.get(0),
(DefaultApolloClientBootstrapArgsApi) collectors.get(3),
metricsExporter
);
monitorContext.setApolloClientMetricsExporter(
exporterFactory.getMetricsReporter(monitorContext.getCollectors()));
}

public static ApolloClientMessageProducerComposite initializeMessageProducerComposite() {
List<MessageProducer> producers = ServiceBootstrap.loadAllOrdered(MessageProducer.class);

if (CONFIG_UTIL.getClientMonitorEnabled()) {
if (m_configUtil.isClientMonitorEnabled()) {
producers.add(new ApolloClientMonitorMessageProducer());
}

Expand All @@ -139,11 +115,11 @@ public static ApolloClientMessageProducerComposite initializeMessageProducerComp

return new ApolloClientMessageProducerComposite(producers);
}

// for test only
protected static void reset() {
hasInitialized = false;
CONFIG_UTIL = ApolloInjector.getInstance(ConfigUtil.class);
m_configUtil = ApolloInjector.getInstance(ConfigUtil.class);

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@
import com.ctrip.framework.apollo.monitor.api.ConfigMonitor;
import com.ctrip.framework.apollo.monitor.internal.DefaultConfigMonitor;
import com.ctrip.framework.apollo.monitor.internal.exporter.impl.DefaultApolloClientMetricsExporterFactory;
import com.ctrip.framework.apollo.monitor.internal.listener.ApolloClientMonitorEventListenerManager;
import com.ctrip.framework.apollo.monitor.internal.listener.DefaultApolloClientMonitorEventListenerManager;
import com.ctrip.framework.apollo.monitor.internal.ApolloClientMonitorContext;
import com.ctrip.framework.apollo.monitor.internal.exporter.ApolloClientMetricsExporterFactory;
import com.ctrip.framework.apollo.spi.ApolloInjectorCustomizer;
import com.ctrip.framework.apollo.spi.ConfigFactory;
Expand Down Expand Up @@ -113,8 +112,7 @@ protected void configure() {
bind(YamlParser.class).in(Singleton.class);
bind(PropertiesFactory.class).to(DefaultPropertiesFactory.class).in(Singleton.class);
bind(ConfigMonitor.class).to(DefaultConfigMonitor.class).in(Singleton.class);
bind(ApolloClientMonitorEventListenerManager.class).to(
DefaultApolloClientMonitorEventListenerManager.class).in(Singleton.class);
bind(ApolloClientMonitorContext.class).in(Singleton.class);
bind(ApolloClientMetricsExporterFactory.class).to(DefaultApolloClientMetricsExporterFactory.class).in(Singleton.class);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ public Properties getConfig() {
if (m_configCache.get() == null) {
long start = System.currentTimeMillis();
this.sync();
Tracer.logEvent(APOLLO_CLIENT_NAMESPACE_FIRST_LOAD_SPEND+m_namespace,
Tracer.logEvent(APOLLO_CLIENT_NAMESPACE_FIRST_LOAD_SPEND+":"+m_namespace,
String.valueOf(System.currentTimeMillis() - start));
}
return transformApolloConfigToProperties(m_configCache.get());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
package com.ctrip.framework.apollo.monitor.api;

import java.util.Collections;
import java.util.Map;

/**
Expand All @@ -24,65 +25,113 @@
public interface ApolloClientBootstrapArgsMonitorApi {

/**
* get bootstrap args map
* get startup params by key
*/
Map<String, String> getBootstrapArgs();
default String getStartupArg(String key) {
return getBootstrapArgs().get(key);
}

/**
* get startup params by key
* get bootstrap args map
*/
String getStartupParams(String key);
default Map<String, String> getBootstrapArgs() {
return Collections.emptyMap();
}

/**
* config service url
* config service url
*/
String getConfigServiceUrl();
default String getConfigServiceUrl() {
return "";
}

/**
* access key secret
* access key secret
*/
String getAccessKeySecret();
default String getAccessKeySecret() {
return "";
}

/**
* auto update injected spring properties
*/
Boolean getAutoUpdateInjectedSpringProperties();
default Boolean getAutoUpdateInjectedSpringProperties() {
return false;
}

Boolean getBootstrapEnabled();
default Boolean isBootstrapEnabled() {
return false;
}

String getBootstrapNamespaces();
default String getBootstrapNamespaces() {
return "";
}

Boolean getBootstrapEagerLoadEnabled();
default Boolean isBootstrapEagerLoadEnabled() {
return false;
}

Boolean getOverrideSystemProperties();
default Boolean isOverrideSystemProperties() {
return false;
}

String getCacheDir();
default String getCacheDir() {
return "";
}

String getCluster();
default String getCluster() {
return "";
}

String getConfigService();
default String getConfigService() {
return "";
}

Boolean getClientMonitorEnabled();
default Boolean isClientMonitorEnabled() {
return false;
}

Boolean getClientMonitorJmxEnabled();
default Boolean isClientMonitorJmxEnabled() {
return false;
}

String getClientMonitorExternalForm();
default String getClientMonitorExternalForm() {
return "";
}

long getClientMonitorExternalExportPeriod();
default long getClientMonitorExternalExportPeriod() {
return 0;
}

int getClientMonitorExceptionSaveSize();
default int getClientMonitorExceptionSaveSize() {
return 0;
}

String getApolloMeta();
default String getApolloMeta() {
return "";
}

String getMetaLatestFreshTime();
default String getMetaLatestFreshTime() {
return "";
}

Boolean getPropertyNamesCacheEnable();
default Boolean isPropertyNamesCacheEnable() {
return false;
}

Boolean getPropertyOrderEnable();
default Boolean isPropertyOrderEnable() {
return false;
}

String getVersion();
default String getVersion() {
return "";
}

String getEnv();
default String getEnv() {
return "";
}

String getAppId();
default String getAppId() {
return "";
}
}
Loading

0 comments on commit 50c5b21

Please sign in to comment.