INT-4392: Polishing

JIRA: https://jira.spring.io/browse/INT-4392

Avoid the need for reflection on the `MicrometerMetricsCaptor`.
 - move facade interfaces to a sub-package.
Remove deprecated `MicrometerMetricsFactory.
This commit is contained in:
Gary Russell
2018-03-13 18:29:49 -04:00
committed by Artem Bilan
parent a4eb4ec9b1
commit 7f20dd1b2a
16 changed files with 30 additions and 220 deletions

View File

@@ -36,12 +36,12 @@ import org.springframework.integration.support.management.ConfigurableMetricsAwa
import org.springframework.integration.support.management.DefaultMessageChannelMetrics;
import org.springframework.integration.support.management.IntegrationManagedResource;
import org.springframework.integration.support.management.MessageChannelMetrics;
import org.springframework.integration.support.management.MetricsCaptor;
import org.springframework.integration.support.management.MetricsContext;
import org.springframework.integration.support.management.SampleFacade;
import org.springframework.integration.support.management.Statistics;
import org.springframework.integration.support.management.TimerFacade;
import org.springframework.integration.support.management.TrackableComponent;
import org.springframework.integration.support.management.metrics.MetricsCaptor;
import org.springframework.integration.support.management.metrics.SampleFacade;
import org.springframework.integration.support.management.metrics.TimerFacade;
import org.springframework.integration.support.utils.IntegrationUtils;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageChannel;

View File

@@ -20,8 +20,8 @@ import java.util.ArrayDeque;
import java.util.Deque;
import java.util.List;
import org.springframework.integration.support.management.CounterFacade;
import org.springframework.integration.support.management.PollableChannelManagement;
import org.springframework.integration.support.management.metrics.CounterFacade;
import org.springframework.messaging.Message;
import org.springframework.messaging.PollableChannel;
import org.springframework.messaging.support.ChannelInterceptor;

View File

@@ -28,9 +28,9 @@ import org.springframework.integration.support.management.ConfigurableMetricsAwa
import org.springframework.integration.support.management.DefaultMessageChannelMetrics;
import org.springframework.integration.support.management.IntegrationManagedResource;
import org.springframework.integration.support.management.MessageChannelMetrics;
import org.springframework.integration.support.management.MetricsCaptor;
import org.springframework.integration.support.management.Statistics;
import org.springframework.integration.support.management.TimerFacade;
import org.springframework.integration.support.management.metrics.MetricsCaptor;
import org.springframework.integration.support.management.metrics.TimerFacade;
import org.springframework.messaging.Message;
import org.springframework.messaging.PollableChannel;
import org.springframework.util.Assert;

View File

@@ -26,10 +26,10 @@ import org.springframework.expression.Expression;
import org.springframework.integration.core.MessageSource;
import org.springframework.integration.support.AbstractIntegrationMessageBuilder;
import org.springframework.integration.support.context.NamedComponent;
import org.springframework.integration.support.management.CounterFacade;
import org.springframework.integration.support.management.IntegrationManagedResource;
import org.springframework.integration.support.management.MessageSourceMetrics;
import org.springframework.integration.support.management.MetricsCaptor;
import org.springframework.integration.support.management.metrics.CounterFacade;
import org.springframework.integration.support.management.metrics.MetricsCaptor;
import org.springframework.integration.util.AbstractExpressionEvaluator;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessagingException;

View File

@@ -27,12 +27,12 @@ import org.springframework.integration.support.management.ConfigurableMetricsAwa
import org.springframework.integration.support.management.DefaultMessageHandlerMetrics;
import org.springframework.integration.support.management.IntegrationManagedResource;
import org.springframework.integration.support.management.MessageHandlerMetrics;
import org.springframework.integration.support.management.MetricsCaptor;
import org.springframework.integration.support.management.MetricsContext;
import org.springframework.integration.support.management.SampleFacade;
import org.springframework.integration.support.management.Statistics;
import org.springframework.integration.support.management.TimerFacade;
import org.springframework.integration.support.management.TrackableComponent;
import org.springframework.integration.support.management.metrics.MetricsCaptor;
import org.springframework.integration.support.management.metrics.SampleFacade;
import org.springframework.integration.support.management.metrics.TimerFacade;
import org.springframework.integration.support.utils.IntegrationUtils;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageHandler;

View File

@@ -16,6 +16,7 @@
package org.springframework.integration.support.management;
import org.springframework.integration.support.management.metrics.MetricsCaptor;
import org.springframework.jmx.export.annotation.ManagedAttribute;
import org.springframework.jmx.export.annotation.ManagedOperation;

View File

@@ -16,7 +16,6 @@
package org.springframework.integration.support.management;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
@@ -33,6 +32,8 @@ import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.integration.core.MessageSource;
import org.springframework.integration.support.management.IntegrationManagement.ManagementOverrides;
import org.springframework.integration.support.management.metrics.MetricsCaptor;
import org.springframework.integration.support.management.micrometer.MicrometerMetricsCaptor;
import org.springframework.integration.support.utils.PatternMatchUtils;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.MessageHandler;
@@ -215,17 +216,7 @@ public class IntegrationManagementConfigurer implements SmartInitializingSinglet
ClassLoader classLoader = IntegrationManagementConfigurer.class.getClassLoader();
if (ClassUtils.isPresent("io.micrometer.core.instrument.MeterRegistry",
classLoader)) {
try {
// Use reflection to avoid a package tangle with ...management.micrometer
Class<?> captor = ClassUtils.forName(
"org.springframework.integration.support.management.micrometer.MicrometerMetricsCaptor",
classLoader);
Method method = captor.getDeclaredMethod("loadCaptor", ApplicationContext.class);
this.metricsCaptor = (MetricsCaptor) method.invoke(null, this.applicationContext);
}
catch (Exception e) {
// no op
}
this.metricsCaptor = MicrometerMetricsCaptor.loadCaptor(this.applicationContext);
}
if (this.metricsCaptor != null) {
injectCaptor();

View File

@@ -16,6 +16,7 @@
package org.springframework.integration.support.management;
import org.springframework.integration.support.management.metrics.CounterFacade;
import org.springframework.jmx.export.annotation.ManagedMetric;
import org.springframework.jmx.support.MetricType;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.integration.support.management;
package org.springframework.integration.support.management.metrics;
/**
* @author Gary Russell

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.integration.support.management;
package org.springframework.integration.support.management.metrics;
/**
* @author Gary Russell

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.integration.support.management;
package org.springframework.integration.support.management.metrics;
import java.util.function.ToDoubleFunction;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.integration.support.management;
package org.springframework.integration.support.management.metrics;
/**
* @author Gary Russell

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.integration.support.management;
package org.springframework.integration.support.management.metrics;
import java.util.concurrent.TimeUnit;

View File

@@ -0,0 +1,4 @@
/**
* Provides interfaces related to 5.0 metrics.
*/
package org.springframework.integration.support.management.metrics;

View File

@@ -22,11 +22,11 @@ import java.util.function.ToDoubleFunction;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.integration.support.management.CounterFacade;
import org.springframework.integration.support.management.GaugeFacade;
import org.springframework.integration.support.management.MetricsCaptor;
import org.springframework.integration.support.management.SampleFacade;
import org.springframework.integration.support.management.TimerFacade;
import org.springframework.integration.support.management.metrics.CounterFacade;
import org.springframework.integration.support.management.metrics.GaugeFacade;
import org.springframework.integration.support.management.metrics.MetricsCaptor;
import org.springframework.integration.support.management.metrics.SampleFacade;
import org.springframework.integration.support.management.metrics.TimerFacade;
import org.springframework.util.Assert;
import io.micrometer.core.instrument.Counter;

View File

@@ -1,187 +0,0 @@
/*
* Copyright 2018 the original author or 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 org.springframework.integration.support.management.micrometer;
import java.util.function.Function;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.SmartInitializingSingleton;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.integration.support.management.AbstractMessageChannelMetrics;
import org.springframework.integration.support.management.AbstractMessageHandlerMetrics;
import org.springframework.integration.support.management.DefaultMessageChannelMetrics;
import org.springframework.integration.support.management.DefaultMessageHandlerMetrics;
import org.springframework.integration.support.management.MessageSourceMetrics;
import org.springframework.integration.support.management.MessageSourceMetricsConfigurer;
import org.springframework.integration.support.management.MetricsCaptor;
import org.springframework.integration.support.management.MetricsFactory;
import org.springframework.util.Assert;
/**
* Micrometer implementation of a {@link MetricsFactory}. Configures the resulting
* channel, and handler metrics to use Micrometer metrics instead of the legacy Spring
* Integration metrics. Also implements {@link MessageSourceMetricsConfigurer}, which is
* used to inject a counter into all message source beans that implement
* {@link MessageSourceMetrics}.
*
* @author Gary Russell
*
* @since 5.0.2
*
* @deprecated - micrometer metrics are now in-built.
*
* @see org.springframework.integration.support.management.IntegrationManagementConfigurer
*/
@Deprecated
public class MicrometerMetricsFactory implements MetricsFactory, MessageSourceMetricsConfigurer,
ApplicationContextAware, SmartInitializingSingleton {
/**
* Construct an instance with the provided {@link MetricsCaptor}.
* @param captor the registry.
*/
public MicrometerMetricsFactory(MetricsCaptor captor) {
Assert.notNull(captor, "'meterRegistry' cannot be null");
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
}
@Override
public void afterSingletonsInstantiated() {
}
/**
* Provide a function to generate a timer name for the bean name.
* Default: "beanName.timer".
* @param timerNameProvider the timerNameProvider to set
*/
public void setTimerNameProvider(Function<String, String> timerNameProvider) {
Assert.notNull(timerNameProvider, "'timerNameProvider' cannot be null");
}
/**
* Provide a function to generate a counter name for the bean name.
* Default: "beanName.counter".
* @param counterNameProvider the counterNameProvider to set
*/
public void setCounterNameProvider(Function<String, String> counterNameProvider) {
Assert.notNull(counterNameProvider, "'counterNameProvider' cannot be null");
}
/**
* Provide a function to generate an error counter name for the bean name.
* Default: "beanName.errorCounter".
* @param errorCounterNameProvider the counterNameProvider to set
*/
public void setErrorCounterNameProvider(Function<String, String> errorCounterNameProvider) {
Assert.notNull(errorCounterNameProvider, "'errorCounterNameProvider' cannot be null");
}
/**
* Provide a function to generate a receive counter name for the bean name.
* Default: "beanName.counter".
* @param counterNameProvider the counterNameProvider to set
*/
public void setReceiveCounterNameProvider(Function<String, String> counterNameProvider) {
Assert.notNull(counterNameProvider, "'counterNameProvider' cannot be null");
}
/**
* Provide a function to generate a receive error counter name for the bean name.
* Default: "beanName.errorCounter".
* @param errorCounterNameProvider the counterNameProvider to set
*/
public void setReceiveErrorCounterNameProvider(Function<String, String> errorCounterNameProvider) {
Assert.notNull(errorCounterNameProvider, "'errorCounterNameProvider' cannot be null");
}
/**
* Provide a function to generate timer tags for the bean name.
* Default: no tags.
* @param timerTagProvider the timerTagProvider to set
*/
public void setTimerTagProvider(Function<String, String[]> timerTagProvider) {
Assert.notNull(timerTagProvider, "'timerTagProvider' cannot be null");
}
/**
* Provide a function to generate counter tags for the bean name.
* Default: no tags.
* @param counterTagProvider the counterTagProvider to set
*/
public void setCounterTagProvider(Function<String, String[]> counterTagProvider) {
Assert.notNull(counterTagProvider, "'counterTagProvider' cannot be null");
}
/**
* Provide a function to generate error counter tags for the bean name.
* Default: no tags.
* @param counterTagProvider the counterTagProvider to set
*/
public void setErrorCounterTagProvider(Function<String, String[]> counterTagProvider) {
Assert.notNull(counterTagProvider, "'counterTagProvider' cannot be null");
}
/**
* Provide a function to generate receive counter tags for the bean name.
* Default: no tags.
* @param counterTagProvider the counterTagProvider to set
*/
public void setReceiveCounterTagProvider(Function<String, String[]> counterTagProvider) {
Assert.notNull(counterTagProvider, "'counterTagProvider' cannot be null");
}
/**
* Provide a function to generate receive error counter tags for the bean name.
* Default: no tags.
* @param counterTagProvider the counterTagProvider to set
*/
public void setReceiveErrorCounterTagProvider(Function<String, String[]> counterTagProvider) {
Assert.notNull(counterTagProvider, "'counterTagProvider' cannot be null");
}
/**
* Provide a function to generate tags for component (channels, handlers, sources) gauges.
* Default: no tags.
* @param componentCountTagProvider the componentCountTagProvider to set
*/
public void setComponentCountTagProvider(Function<String, String[]> componentCountTagProvider) {
}
@Override
public AbstractMessageChannelMetrics createChannelMetrics(String name) {
return new DefaultMessageChannelMetrics(name);
}
@Override
public AbstractMessageChannelMetrics createPollableChannelMetrics(String name) {
return new DefaultMessageChannelMetrics(name);
}
@Override
public AbstractMessageHandlerMetrics createHandlerMetrics(String name) {
return new DefaultMessageHandlerMetrics(name);
}
@Override
public void configure(MessageSourceMetrics metrics, String name) {
}
}