Skip to content

Commit

Permalink
feat(): refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
Rawven committed Sep 1, 2024
1 parent 2ec4630 commit 36fab7f
Show file tree
Hide file tree
Showing 34 changed files with 330 additions and 742 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.getClientMonitorEnabled() && !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.getClientMonitorJmxEnabled()) {
monitorContext.getCollectors().forEach(metricsCollector ->
ApolloClientJmxMBeanRegister.register(
MBEAN_NAME + metricsCollector.mBeanName(), 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.getClientMonitorEnabled()) {
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 @@ -34,12 +34,12 @@ public interface ApolloClientBootstrapArgsMonitorApi {
String getStartupParams(String key);

/**
* config service url
* config service url
*/
String getConfigServiceUrl();

/**
* access key secret
* access key secret
*/
String getAccessKeySecret();

Expand All @@ -48,11 +48,11 @@ public interface ApolloClientBootstrapArgsMonitorApi {
*/
Boolean getAutoUpdateInjectedSpringProperties();

Boolean getBootstrapEnabled();
Boolean isBootstrapEnabled();

String getBootstrapNamespaces();

Boolean getBootstrapEagerLoadEnabled();
Boolean isBootstrapEagerLoadEnabled();

Boolean getOverrideSystemProperties();

Expand All @@ -62,9 +62,9 @@ public interface ApolloClientBootstrapArgsMonitorApi {

String getConfigService();

Boolean getClientMonitorEnabled();
Boolean isClientMonitorEnabled();

Boolean getClientMonitorJmxEnabled();
Boolean isClientMonitorJmxEnabled();

String getClientMonitorExternalForm();

Expand All @@ -76,9 +76,9 @@ public interface ApolloClientBootstrapArgsMonitorApi {

String getMetaLatestFreshTime();

Boolean getPropertyNamesCacheEnable();
Boolean isPropertyNamesCacheEnable();

Boolean getPropertyOrderEnable();
Boolean isPropertyOrderEnable();

String getVersion();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public interface ApolloClientNamespaceMonitorApi {
Map<String, NamespaceMetrics> getNamespaceMetrics();

/**
* get Namespace Config.ItemsNum
* get Namespace Config.ItemsNum
*/
Integer getNamespaceItemsNum(String namespace);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
/*
* Copyright 2022 Apollo Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.ctrip.framework.apollo.monitor.internal;

import com.ctrip.framework.apollo.monitor.api.ApolloClientBootstrapArgsMonitorApi;
import com.ctrip.framework.apollo.monitor.api.ApolloClientExceptionMonitorApi;
import com.ctrip.framework.apollo.monitor.api.ApolloClientNamespaceMonitorApi;
import com.ctrip.framework.apollo.monitor.api.ApolloClientThreadPoolMonitorApi;
import com.ctrip.framework.apollo.monitor.internal.exporter.ApolloClientMetricsExporter;
import com.ctrip.framework.apollo.monitor.internal.exporter.impl.NullApolloClientMetricsExporter;
import com.ctrip.framework.apollo.monitor.internal.listener.ApolloClientMonitorEventListener;
import com.ctrip.framework.apollo.monitor.internal.listener.impl.NullClientBootstrapArgsMonitorApi;
import com.ctrip.framework.apollo.monitor.internal.listener.impl.NullClientExceptionMonitorApi;
import com.ctrip.framework.apollo.monitor.internal.listener.impl.NullClientNamespaceMonitorApi;
import com.ctrip.framework.apollo.monitor.internal.listener.impl.NullClientThreadPoolMonitorApi;
import com.google.common.collect.Lists;
import java.util.ArrayList;
import java.util.List;

/**
* @author Rawven
*/
public class ApolloClientMonitorContext {

private ApolloClientExceptionMonitorApi apolloClientExceptionMonitorApi = new NullClientExceptionMonitorApi();
private ApolloClientNamespaceMonitorApi apolloClientNamespaceMonitorApi = new NullClientNamespaceMonitorApi();
private ApolloClientBootstrapArgsMonitorApi apolloClientBootstrapArgsMonitorApi = new NullClientBootstrapArgsMonitorApi();
private ApolloClientThreadPoolMonitorApi apolloClientThreadPoolMonitorApi = new NullClientThreadPoolMonitorApi();
private ApolloClientMetricsExporter apolloClientMetricsExporter = new NullApolloClientMetricsExporter();

public void setApolloClientExceptionMonitorApi(
ApolloClientExceptionMonitorApi apolloClientExceptionMonitorApi) {
this.apolloClientExceptionMonitorApi = apolloClientExceptionMonitorApi;
}

public void setApolloClientNamespaceMonitorApi(
ApolloClientNamespaceMonitorApi apolloClientNamespaceMonitorApi) {
this.apolloClientNamespaceMonitorApi = apolloClientNamespaceMonitorApi;
}

public void setApolloClientBootstrapArgsMonitorApi(
ApolloClientBootstrapArgsMonitorApi apolloClientBootstrapArgsMonitorApi) {
this.apolloClientBootstrapArgsMonitorApi = apolloClientBootstrapArgsMonitorApi;
}

public void setApolloClientThreadPoolMonitorApi(
ApolloClientThreadPoolMonitorApi apolloClientThreadPoolMonitorApi) {
this.apolloClientThreadPoolMonitorApi = apolloClientThreadPoolMonitorApi;
}

public void setApolloClientMetricsExporter(
ApolloClientMetricsExporter apolloClientMetricsExporter) {
this.apolloClientMetricsExporter = apolloClientMetricsExporter;
}

public List<ApolloClientMonitorEventListener> getCollectors() {
return Lists.newArrayList(
(ApolloClientMonitorEventListener) apolloClientBootstrapArgsMonitorApi,
(ApolloClientMonitorEventListener) apolloClientThreadPoolMonitorApi,
(ApolloClientMonitorEventListener) apolloClientExceptionMonitorApi,
(ApolloClientMonitorEventListener) apolloClientNamespaceMonitorApi);
}

public ApolloClientExceptionMonitorApi getExceptionApi() {
return apolloClientExceptionMonitorApi;
}

public ApolloClientNamespaceMonitorApi getNamespaceApi() {
return apolloClientNamespaceMonitorApi;
}

public ApolloClientBootstrapArgsMonitorApi getBootstrapArgsApi() {
return apolloClientBootstrapArgsMonitorApi;
}

public ApolloClientThreadPoolMonitorApi getThreadPoolApi() {
return apolloClientThreadPoolMonitorApi;
}

public ApolloClientMetricsExporter getMetricsExporter() {
return apolloClientMetricsExporter;
}
}
Loading

0 comments on commit 36fab7f

Please sign in to comment.