KCL: metricsFactory to NullMetricsFactory if metrics level is NONE

* GH-241: Support changing metrics-level for `KclMessageDrivenChannelAdapter`

* Add test that `metricsLevel` is set correctly

* Modify test body and add author

* Add reference to instance variable

* Set `metricsFactory` to `NullMetricsFactory` if metrics level is `NONE`
This commit is contained in:
Minkyu Moon (Manggo)
2024-04-08 22:43:44 +09:00
committed by GitHub
parent 428ea43c2e
commit 6703813786
2 changed files with 18 additions and 2 deletions

View File

@@ -52,6 +52,7 @@ import software.amazon.kinesis.lifecycle.events.ShardEndedInput;
import software.amazon.kinesis.lifecycle.events.ShutdownRequestedInput;
import software.amazon.kinesis.metrics.MetricsConfig;
import software.amazon.kinesis.metrics.MetricsLevel;
import software.amazon.kinesis.metrics.NullMetricsFactory;
import software.amazon.kinesis.processor.FormerStreamsLeasesDeletionStrategy;
import software.amazon.kinesis.processor.MultiStreamTracker;
import software.amazon.kinesis.processor.RecordProcessorCheckpointer;
@@ -338,6 +339,9 @@ public class KclMessageDrivenChannelAdapter extends MessageProducerSupport
MetricsConfig metricsConfig = this.config.metricsConfig();
metricsConfig.metricsLevel(this.metricsLevel);
if (MetricsLevel.NONE.equals(this.metricsLevel)) {
metricsConfig.metricsFactory(new NullMetricsFactory());
}
this.scheduler =
new Scheduler(

View File

@@ -28,7 +28,9 @@ import software.amazon.awssdk.services.kinesis.KinesisAsyncClient;
import software.amazon.awssdk.services.kinesis.model.Consumer;
import software.amazon.kinesis.common.InitialPositionInStream;
import software.amazon.kinesis.common.InitialPositionInStreamExtended;
import software.amazon.kinesis.metrics.MetricsFactory;
import software.amazon.kinesis.metrics.MetricsLevel;
import software.amazon.kinesis.metrics.NullMetricsFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
@@ -123,15 +125,25 @@ public class KclMessageDrivenChannelAdapterTests implements LocalstackContainerT
}
@Test
public void metricsLevelOfMetricsFactoryShouldBeSetToMetricsLevelOfAdapter() {
public void metricsLevelOfMetricsConfigShouldBeSetToMetricsLevelOfAdapter() {
MetricsLevel metricsLevel = TestUtils.getPropertyValue(
this.kclMessageDrivenChannelAdapter,
"scheduler.metricsFactory.metricsLevel",
"scheduler.metricsConfig.metricsLevel",
MetricsLevel.class
);
assertThat(metricsLevel).isEqualTo(MetricsLevel.NONE);
}
@Test
public void metricsFactoryOfSchedulerShouldBeSetNullMetricsFactoryIfMetricsLevelIsNone() {
MetricsFactory metricsFactory = TestUtils.getPropertyValue(
this.kclMessageDrivenChannelAdapter,
"scheduler.metricsFactory",
MetricsFactory.class
);
assertThat(metricsFactory).isInstanceOf(NullMetricsFactory.class);
}
@Configuration
@EnableIntegration
public static class TestConfiguration {