diff --git a/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/global/std/ResponseTimeDistributionSpanListener.java b/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/global/std/ResponseTimeDistributionSpanListener.java index ea14849fba8f44ca104cac55ca7185416c26ecc6..e467d524469c55c8a7c7793699db7a894d246b72 100644 --- a/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/global/std/ResponseTimeDistributionSpanListener.java +++ b/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/global/std/ResponseTimeDistributionSpanListener.java @@ -73,15 +73,16 @@ public class ResponseTimeDistributionSpanListener implements FirstSpanListener { } int getStep(int duration) { - int countOfResponseTimeSteps = configService.getResponseTimeStep() * configService.getCountOfResponseTimeSteps(); int responseTimeStep = configService.getResponseTimeStep(); + int countOfResponseTimeSteps = configService.getCountOfResponseTimeSteps(); + int totalTimeOfResponseTimeSteps = configService.getTotalTimeOfResponseTimeSteps(); - if (duration > countOfResponseTimeSteps) { - return countOfResponseTimeSteps / responseTimeStep; + if (duration > totalTimeOfResponseTimeSteps) { + return countOfResponseTimeSteps; } else if (duration <= responseTimeStep) { return 0; } else { - return (int)Math.ceil((double)duration / (double)responseTimeStep) - 1; + return (int) Math.ceil((double) duration / (double) responseTimeStep) - 1; } } diff --git a/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/test/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/global/std/ResponseTimeDistributionSpanListenerTestCase.java b/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/test/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/global/std/ResponseTimeDistributionSpanListenerTestCase.java index 3a16c575314dbd9e942d59b9056fd6bb55bfafc4..8a8ddbff688b3e53754544700fda30af30c8e6ed 100644 --- a/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/test/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/global/std/ResponseTimeDistributionSpanListenerTestCase.java +++ b/apm-collector/apm-collector-analysis/analysis-metric/metric-provider/src/test/java/org/apache/skywalking/apm/collector/analysis/metric/provider/worker/global/std/ResponseTimeDistributionSpanListenerTestCase.java @@ -42,6 +42,7 @@ public class ResponseTimeDistributionSpanListenerTestCase { IResponseTimeDistributionConfigService service = Mockito.mock(IResponseTimeDistributionConfigService.class); Mockito.when(service.getResponseTimeStep()).thenReturn(50); Mockito.when(service.getCountOfResponseTimeSteps()).thenReturn(40); + Mockito.when(service.getTotalTimeOfResponseTimeSteps()).thenReturn(2050); ModuleDefine module = Mockito.mock(ModuleDefine.class); Whitebox.setInternalState(module, "loadedProviders", loadedProviders); diff --git a/apm-collector/apm-collector-configuration/collector-configuration-define/src/main/java/org/apache/skywalking/apm/collector/configuration/service/IResponseTimeDistributionConfigService.java b/apm-collector/apm-collector-configuration/collector-configuration-define/src/main/java/org/apache/skywalking/apm/collector/configuration/service/IResponseTimeDistributionConfigService.java index 7cec4c441287983967676475790de2abfa104426..5a6d25e8c6dcda04141e1a9838e49ecb28525fbe 100644 --- a/apm-collector/apm-collector-configuration/collector-configuration-define/src/main/java/org/apache/skywalking/apm/collector/configuration/service/IResponseTimeDistributionConfigService.java +++ b/apm-collector/apm-collector-configuration/collector-configuration-define/src/main/java/org/apache/skywalking/apm/collector/configuration/service/IResponseTimeDistributionConfigService.java @@ -28,4 +28,12 @@ public interface IResponseTimeDistributionConfigService extends Service { int getResponseTimeStep(); int getCountOfResponseTimeSteps(); + + /** + * Equals to getResponseTimeStep() * getCountOfResponseTimeSteps() ,just for economizes computing resources + * + * @return + */ + int getTotalTimeOfResponseTimeSteps(); + } diff --git a/apm-collector/apm-collector-configuration/collector-configuration-provider/src/main/java/org/apache/skywalking/apm/collector/configuration/service/ResponseTimeDistributionConfigService.java b/apm-collector/apm-collector-configuration/collector-configuration-provider/src/main/java/org/apache/skywalking/apm/collector/configuration/service/ResponseTimeDistributionConfigService.java index cc50be2d85fe70ebd16d2767e39f73a99400e995..87ed2a2c3bb2e6318757ae5ed02523aa63bdb9ea 100644 --- a/apm-collector/apm-collector-configuration/collector-configuration-provider/src/main/java/org/apache/skywalking/apm/collector/configuration/service/ResponseTimeDistributionConfigService.java +++ b/apm-collector/apm-collector-configuration/collector-configuration-provider/src/main/java/org/apache/skywalking/apm/collector/configuration/service/ResponseTimeDistributionConfigService.java @@ -25,10 +25,12 @@ public class ResponseTimeDistributionConfigService implements IResponseTimeDistr private final int responseTimeStep; private final int countOfResponseTimeSteps; + private final int totalTimeOfResponseTimeSteps; public ResponseTimeDistributionConfigService(int responseTimeStep, int countOfResponseTimeSteps) { this.responseTimeStep = responseTimeStep; this.countOfResponseTimeSteps = countOfResponseTimeSteps + 1; + this.totalTimeOfResponseTimeSteps = this.responseTimeStep * this.countOfResponseTimeSteps; } @Override public int getResponseTimeStep() { @@ -38,4 +40,9 @@ public class ResponseTimeDistributionConfigService implements IResponseTimeDistr @Override public int getCountOfResponseTimeSteps() { return countOfResponseTimeSteps; } + + @Override + public int getTotalTimeOfResponseTimeSteps() { + return totalTimeOfResponseTimeSteps; + } }