diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/ResponseTimeDataCollector.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/ResponseTimeDataCollector.java index 4debe12acd2d..c1a068b8176a 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/ResponseTimeDataCollector.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/ResponseTimeDataCollector.java @@ -19,13 +19,12 @@ import com.navercorp.pinpoint.common.timeseries.time.Range; import com.navercorp.pinpoint.common.timeseries.window.TimeWindow; import com.navercorp.pinpoint.web.alarm.DataCollectorCategory; +import com.navercorp.pinpoint.web.applicationmap.dao.ApplicationResponse; import com.navercorp.pinpoint.web.applicationmap.dao.MapResponseDao; import com.navercorp.pinpoint.web.applicationmap.histogram.TimeHistogram; import com.navercorp.pinpoint.web.vo.Application; -import com.navercorp.pinpoint.web.vo.ResponseTime; import java.util.Collection; -import java.util.List; import java.util.Objects; import java.util.concurrent.atomic.AtomicBoolean; @@ -67,11 +66,10 @@ public void collect() { Range range = Range.between(timeSlotEndTime - slotInterval, timeSlotEndTime); TimeWindow timeWindow = new TimeWindow(range); - List responseTimes = responseDao.selectResponseTime(application, timeWindow); - for (ResponseTime responseTime : responseTimes) { - sum(responseTime.getAgentResponseHistogramList()); - } + ApplicationResponse applicationResponse = responseDao.selectApplicationResponse(application, timeWindow); + sum(applicationResponse.getApplicationHistograms()); + setSlowRate(); setErrorRate(); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/histogram/datasource/MapApplicationResponseNodeHistogramDataSource.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/histogram/datasource/MapApplicationResponseNodeHistogramDataSource.java index 13d972563da4..f7b25cb5d359 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/histogram/datasource/MapApplicationResponseNodeHistogramDataSource.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/histogram/datasource/MapApplicationResponseNodeHistogramDataSource.java @@ -18,8 +18,8 @@ import com.navercorp.pinpoint.common.timeseries.time.Range; import com.navercorp.pinpoint.common.timeseries.window.TimeWindow; +import com.navercorp.pinpoint.web.applicationmap.dao.ApplicationResponse; import com.navercorp.pinpoint.web.applicationmap.dao.MapResponseDao; -import com.navercorp.pinpoint.web.applicationmap.histogram.ApplicationHistogram; import com.navercorp.pinpoint.web.applicationmap.histogram.ApplicationTimeHistogram; import com.navercorp.pinpoint.web.applicationmap.histogram.ApplicationTimeHistogramBuilder; import com.navercorp.pinpoint.web.applicationmap.histogram.Histogram; @@ -45,9 +45,9 @@ public MapApplicationResponseNodeHistogramDataSource(MapResponseDao mapResponseD @Override public NodeHistogram createNodeHistogram(Application application, TimeWindow timeWindow) { - ApplicationHistogram applicationHistogram = mapResponseDao.selectApplicationResponseTime(application, timeWindow); + ApplicationResponse applicationResponse = mapResponseDao.selectApplicationResponse(application, timeWindow); - ApplicationTimeHistogram applicationTimeHistogram = buildApplicationTimeHistogram(application, timeWindow, applicationHistogram); + ApplicationTimeHistogram applicationTimeHistogram = buildApplicationTimeHistogram(application, timeWindow, applicationResponse); Range windowRange = timeWindow.getWindowRange(); NodeHistogram.Builder builder = NodeHistogram.newBuilder(application, windowRange); @@ -56,13 +56,13 @@ public NodeHistogram createNodeHistogram(Application application, TimeWindow tim Histogram appHistogram = getHistogram(application, applicationTimeHistogram); builder.setApplicationHistogram(appHistogram); - Map agentMap = getAgentIdMap(application, applicationHistogram.getAgentIds()); + Map agentMap = getAgentIdMap(application, applicationResponse.getAgentIds()); builder.setAgentHistogramMap(agentMap); return builder.build(); } - private ApplicationTimeHistogram buildApplicationTimeHistogram(Application application, TimeWindow timeWindow, ApplicationHistogram applicationHistogram) { - List histogram = applicationHistogram.getApplicationHistograms(); + private ApplicationTimeHistogram buildApplicationTimeHistogram(Application application, TimeWindow timeWindow, ApplicationResponse applicationResponse) { + List histogram = applicationResponse.getApplicationHistograms(); ApplicationTimeHistogramBuilder builder = new ApplicationTimeHistogramBuilder(application, timeWindow); return builder.buildFromTimeHistogram(histogram); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/config/MapHbaseConfiguration.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/config/MapHbaseConfiguration.java index 2be1b8d1a2d1..16ea7f15ba43 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/config/MapHbaseConfiguration.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/config/MapHbaseConfiguration.java @@ -31,6 +31,7 @@ import com.navercorp.pinpoint.common.hbase.util.ScanMetricReporter; import com.navercorp.pinpoint.common.server.executor.ExecutorCustomizer; import com.navercorp.pinpoint.common.server.executor.ExecutorProperties; +import com.navercorp.pinpoint.web.applicationmap.dao.ApplicationResponse; import com.navercorp.pinpoint.web.applicationmap.dao.MapInLinkDao; import com.navercorp.pinpoint.web.applicationmap.dao.MapOutLinkDao; import com.navercorp.pinpoint.web.applicationmap.dao.MapResponseDao; @@ -40,7 +41,6 @@ import com.navercorp.pinpoint.web.applicationmap.dao.hbase.MapScanFactory; import com.navercorp.pinpoint.web.applicationmap.dao.mapper.ResultExtractorFactory; import com.navercorp.pinpoint.web.applicationmap.dao.mapper.RowMapperFactory; -import com.navercorp.pinpoint.web.applicationmap.histogram.ApplicationHistogram; import com.navercorp.pinpoint.web.applicationmap.rawdata.LinkDataMap; import com.navercorp.pinpoint.web.vo.RangeFactory; import com.navercorp.pinpoint.web.vo.ResponseTime; @@ -138,7 +138,7 @@ public MapResponseDao mapResponseDao(@Qualifier("mapHbaseTemplate") @Qualifier("responseTimeResultExtractor") ResultExtractorFactory> resultExtractFactory, @Qualifier("applicationResponseTimeResultExtractor") - ResultExtractorFactory applicationHistogramResultExtractor, + ResultExtractorFactory applicationHistogramResultExtractor, MapScanFactory mapScanFactory, @Qualifier("mapSelfRowKeyDistributor") RowKeyDistributorByHashPrefix rowKeyDistributor) { diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/config/MapMapperConfiguration.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/config/MapMapperConfiguration.java index 155093c1d8f1..e448c7b0f34e 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/config/MapMapperConfiguration.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/config/MapMapperConfiguration.java @@ -2,6 +2,7 @@ import com.navercorp.pinpoint.loader.service.ServiceTypeRegistryService; +import com.navercorp.pinpoint.web.applicationmap.dao.ApplicationResponse; import com.navercorp.pinpoint.web.applicationmap.dao.mapper.ApplicationResponseTimeResultExtractor; import com.navercorp.pinpoint.web.applicationmap.dao.mapper.InLinkMapper; import com.navercorp.pinpoint.web.applicationmap.dao.mapper.LinkFilter; @@ -10,7 +11,6 @@ import com.navercorp.pinpoint.web.applicationmap.dao.mapper.ResponseTimeResultExtractor; import com.navercorp.pinpoint.web.applicationmap.dao.mapper.ResultExtractorFactory; import com.navercorp.pinpoint.web.applicationmap.dao.mapper.RowMapperFactory; -import com.navercorp.pinpoint.web.applicationmap.histogram.ApplicationHistogram; import com.navercorp.pinpoint.web.applicationmap.rawdata.LinkDataMap; import com.navercorp.pinpoint.web.component.ApplicationFactory; import com.navercorp.pinpoint.web.vo.ResponseTime; @@ -54,8 +54,8 @@ public ResultExtractorFactory> responseTimeResultExtractor(Se } @Bean - public ResultExtractorFactory applicationResponseTimeResultExtractor(ServiceTypeRegistryService registry, - @Qualifier("mapSelfRowKeyDistributor") + public ResultExtractorFactory applicationResponseTimeResultExtractor(ServiceTypeRegistryService registry, + @Qualifier("mapSelfRowKeyDistributor") RowKeyDistributorByHashPrefix rowKeyDistributor) { return (windowFunction) -> new ApplicationResponseTimeResultExtractor(registry, rowKeyDistributor, windowFunction); } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/ApplicationHistogram.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/ApplicationResponse.java similarity index 65% rename from web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/ApplicationHistogram.java rename to web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/ApplicationResponse.java index 28c3fe6f6629..b9e4b69ee169 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/ApplicationHistogram.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/ApplicationResponse.java @@ -14,9 +14,12 @@ * limitations under the License. */ -package com.navercorp.pinpoint.web.applicationmap.histogram; +package com.navercorp.pinpoint.web.applicationmap.dao; import com.navercorp.pinpoint.common.trace.ServiceType; +import com.navercorp.pinpoint.web.applicationmap.histogram.Histogram; +import com.navercorp.pinpoint.web.applicationmap.histogram.TimeHistogram; +import com.navercorp.pinpoint.web.vo.Application; import java.util.ArrayList; import java.util.Comparator; @@ -30,32 +33,24 @@ /** * @author emeroad */ -public class ApplicationHistogram { +public class ApplicationResponse { // rowKey - private final String applicationName; - private final ServiceType applicationServiceType; + private final Application application; // agentId is the key private final List histograms; private final Set agentIdMap; - ApplicationHistogram(String applicationName, - ServiceType applicationServiceType, - List histograms, - Set agentIdMap) { - this.applicationName = Objects.requireNonNull(applicationName, "applicationName"); - this.applicationServiceType = Objects.requireNonNull(applicationServiceType, "applicationServiceType"); + ApplicationResponse(Application application, + List histograms, + Set agentIdMap) { + this.application = Objects.requireNonNull(application, "application"); this.histograms = Objects.requireNonNull(histograms, "histograms"); this.agentIdMap = Objects.requireNonNull(agentIdMap, "agentIdMap"); } - - public String getApplicationName() { - return applicationName; - } - - public int getApplicationServiceType() { - return applicationServiceType.getCode(); + public Application getApplication() { + return application; } public Set getAgentIds() { @@ -67,18 +62,23 @@ public List getApplicationHistograms() { return histograms; } + public Histogram getApplicationTotalHistogram() { + Histogram histogram = new Histogram(application.getServiceType()); + histogram.addAll(histograms); + return histogram; + } + @Override public String toString() { return "ApplicationHistogram{" + - "applicationName='" + applicationName + '\'' + - ", applicationServiceType=" + applicationServiceType + + "application='" + application + '\'' + ", histograms=" + histograms + ", agentIdMap=" + agentIdMap + '}'; } - public static Builder newBuilder(String applicationName, ServiceType applicationServiceType) { - return new Builder(applicationName, applicationServiceType); + public static Builder newBuilder(Application application) { + return new Builder(application); } public static class Builder { @@ -87,22 +87,24 @@ public static class Builder { // agentId is the key private final Set agentIdMap; - private final String applicationName; - private final ServiceType applicationServiceType; + private final Application application; - Builder(String applicationName, ServiceType applicationServiceType) { - this.applicationName = Objects.requireNonNull(applicationName, "applicationName"); - this.applicationServiceType = Objects.requireNonNull(applicationServiceType, "applicationServiceType"); + Builder(Application application) { + this.application = Objects.requireNonNull(application, "application"); this.histogramMap = new HashMap<>(); this.agentIdMap = new HashSet<>(); } + public Application getApplication() { + return application; + } + public String getApplicationName() { - return applicationName; + return application.getName(); } public ServiceType getApplicationServiceType() { - return applicationServiceType; + return application.getServiceType(); } public void addResponseTime(String agentId, long timeStamp, short slotNumber, long count) { @@ -112,7 +114,7 @@ public void addResponseTime(String agentId, long timeStamp, short slotNumber, lo } private TimeHistogram getTimeHistogram(long timeStamp) { - return this.histogramMap.computeIfAbsent(timeStamp, k -> new TimeHistogram(applicationServiceType, timeStamp)); + return this.histogramMap.computeIfAbsent(timeStamp, k -> new TimeHistogram(application.getServiceType(), timeStamp)); } @@ -134,10 +136,10 @@ public void addResponseTime(String agentId, long timestamp, int elapsedTime, boo histogram.addCallCountByElapsedTime(elapsedTime, error); } - public ApplicationHistogram build() { + public ApplicationResponse build() { List list = new ArrayList<>(this.histogramMap.values()); list.sort(Comparator.comparing(TimeHistogram::getTimeStamp)); - return new ApplicationHistogram(applicationName, applicationServiceType, list, this.agentIdMap); + return new ApplicationResponse(application, list, this.agentIdMap); } } } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/MapResponseDao.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/MapResponseDao.java index 235196e72c23..7c6dfdeebe2b 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/MapResponseDao.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/MapResponseDao.java @@ -17,11 +17,12 @@ package com.navercorp.pinpoint.web.applicationmap.dao; import com.navercorp.pinpoint.common.timeseries.window.TimeWindow; -import com.navercorp.pinpoint.web.applicationmap.histogram.ApplicationHistogram; +import com.navercorp.pinpoint.web.applicationmap.histogram.TimeHistogram; import com.navercorp.pinpoint.web.vo.Application; import com.navercorp.pinpoint.web.vo.ResponseTime; import java.util.List; +import java.util.Map; /** * @@ -32,7 +33,16 @@ public interface MapResponseDao { List selectResponseTime(Application application, TimeWindow timeWindow); - default ApplicationHistogram selectApplicationResponseTime(Application application, TimeWindow timeWindow) { - return null; + default ApplicationResponse selectApplicationResponse(Application application, TimeWindow timeWindow) { + List responseTimes = selectResponseTime(application, timeWindow); + ApplicationResponse.Builder builder = ApplicationResponse.newBuilder(application); + for (ResponseTime responseTime : responseTimes) { + for (Map.Entry entry : responseTime.getAgentHistogram()) { + String agentId = entry.getKey(); + TimeHistogram timeHistogram = entry.getValue(); + builder.addResponseTime(agentId, timeHistogram.getTimeStamp(), timeHistogram); + } + } + return builder.build(); } } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/hbase/HbaseMapResponseTimeDao.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/hbase/HbaseMapResponseTimeDao.java index 3262c0633d5d..2182cf80b309 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/hbase/HbaseMapResponseTimeDao.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/hbase/HbaseMapResponseTimeDao.java @@ -23,9 +23,9 @@ import com.navercorp.pinpoint.common.hbase.TableNameProvider; import com.navercorp.pinpoint.common.timeseries.time.Range; import com.navercorp.pinpoint.common.timeseries.window.TimeWindow; +import com.navercorp.pinpoint.web.applicationmap.dao.ApplicationResponse; import com.navercorp.pinpoint.web.applicationmap.dao.MapResponseDao; import com.navercorp.pinpoint.web.applicationmap.dao.mapper.ResultExtractorFactory; -import com.navercorp.pinpoint.web.applicationmap.histogram.ApplicationHistogram; import com.navercorp.pinpoint.web.vo.Application; import com.navercorp.pinpoint.web.vo.ResponseTime; import com.sematext.hbase.wd.RowKeyDistributorByHashPrefix; @@ -59,12 +59,12 @@ public class HbaseMapResponseTimeDao implements MapResponseDao { private final MapScanFactory scanFactory; private final RowKeyDistributorByHashPrefix rowKeyDistributor; - private final ResultExtractorFactory applicationHistogramResultExtractor; + private final ResultExtractorFactory applicationHistogramResultExtractor; public HbaseMapResponseTimeDao(HbaseOperations hbaseOperations, TableNameProvider tableNameProvider, ResultExtractorFactory> resultExtractMapperFactory, - ResultExtractorFactory applicationHistogramResultExtractor, + ResultExtractorFactory applicationHistogramResultExtractor, MapScanFactory scanFactory, RowKeyDistributorByHashPrefix rowKeyDistributor) { this.hbaseOperations = Objects.requireNonNull(hbaseOperations, "hbaseOperations"); @@ -101,7 +101,7 @@ public List selectResponseTime(Application application, TimeWindow } @Override - public ApplicationHistogram selectApplicationResponseTime(Application application, TimeWindow timeWindow) { + public ApplicationResponse selectApplicationResponse(Application application, TimeWindow timeWindow) { Objects.requireNonNull(application, "application"); if (logger.isDebugEnabled()) { @@ -111,13 +111,13 @@ public ApplicationHistogram selectApplicationResponseTime(Application applicatio Range windowRange = timeWindow.getWindowRange(); Scan scan = scanFactory.createScan("MapSelfScan", application, windowRange, DESCRIPTOR.getName()); - ResultsExtractor mapper = applicationHistogramResultExtractor.newMapper(timeWindow); + ResultsExtractor mapper = applicationHistogramResultExtractor.newMapper(timeWindow); TableName mapStatisticsSelfTableName = tableNameProvider.getTableName(DESCRIPTOR.getTable()); - ApplicationHistogram histogram = hbaseOperations.findParallel(mapStatisticsSelfTableName, scan, rowKeyDistributor, + ApplicationResponse histogram = hbaseOperations.findParallel(mapStatisticsSelfTableName, scan, rowKeyDistributor, mapper, MAP_STATISTICS_SELF_VER2_NUM_PARTITIONS); if (histogram == null) { - return ApplicationHistogram.newBuilder(application.getName(), application.getServiceType()).build(); + return ApplicationResponse.newBuilder(application).build(); } return histogram; } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/ApplicationResponseTimeResultExtractor.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/ApplicationResponseTimeResultExtractor.java index fa3e781a61b6..484dd6b2228d 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/ApplicationResponseTimeResultExtractor.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/ApplicationResponseTimeResultExtractor.java @@ -26,7 +26,8 @@ import com.navercorp.pinpoint.common.util.BytesUtils; import com.navercorp.pinpoint.common.util.TimeUtils; import com.navercorp.pinpoint.loader.service.ServiceTypeRegistryService; -import com.navercorp.pinpoint.web.applicationmap.histogram.ApplicationHistogram; +import com.navercorp.pinpoint.web.applicationmap.dao.ApplicationResponse; +import com.navercorp.pinpoint.web.vo.Application; import com.sematext.hbase.wd.RowKeyDistributorByHashPrefix; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellUtil; @@ -42,7 +43,7 @@ /** * @author emeroad */ -public class ApplicationResponseTimeResultExtractor implements ResultsExtractor { +public class ApplicationResponseTimeResultExtractor implements ResultsExtractor { private final Logger logger = LogManager.getLogger(this.getClass()); @@ -61,8 +62,8 @@ public ApplicationResponseTimeResultExtractor(ServiceTypeRegistryService registr this.timeWindowFunction = Objects.requireNonNull(timeWindowFunction, "timeWindowFunction"); } - public ApplicationHistogram extractData(ResultScanner results) throws Exception { - ApplicationHistogram.Builder builder = null; + public ApplicationResponse extractData(ResultScanner results) throws Exception { + ApplicationResponse.Builder builder = null; for (Result result : results) { builder = this.mapRow(builder, result); } @@ -73,22 +74,24 @@ public ApplicationHistogram extractData(ResultScanner results) throws Exception } - private ApplicationHistogram.Builder mapRow(ApplicationHistogram.Builder builder, Result result) { + private ApplicationResponse.Builder mapRow(ApplicationResponse.Builder builder, Result result) { if (result.isEmpty()) { return null; } - final byte[] rowKey = getOriginalKey(result.getRow()); Record record = createResponseTimeBuilder(rowKey); + if (builder == null) { - builder = ApplicationHistogram.newBuilder(record.applicationName(), record.serviceType()); + Application application = new Application(record.applicationName(), record.serviceType()); + builder = ApplicationResponse.newBuilder(application); } else { - if (!builder.getApplicationName().equals(record.applicationName())) { - throw new IllegalArgumentException("applicationName must match"); + Application builderApp = builder.getApplication(); + if (!builderApp.getName().equals(record.applicationName())) { + throw new IllegalStateException("applicationName must match"); } - if (!builder.getApplicationServiceType().equals(record.serviceType())) { - throw new IllegalArgumentException("serviceType must match"); + if (!builderApp.getServiceType().equals(record.serviceType())) { + throw new IllegalStateException("serviceType must match"); } } for (Cell cell : result.rawCells()) { @@ -104,7 +107,7 @@ private ApplicationHistogram.Builder mapRow(ApplicationHistogram.Builder builder return builder; } - void recordColumn(ApplicationHistogram.Builder responseTimeBuilder, long timestamp, Cell cell) { + void recordColumn(ApplicationResponse.Builder responseTimeBuilder, long timestamp, Cell cell) { final byte[] qArray = cell.getQualifierArray(); final int qOffset = cell.getQualifierOffset(); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/service/ApdexScoreServiceImpl.java b/web/src/main/java/com/navercorp/pinpoint/web/service/ApdexScoreServiceImpl.java index 738438e16b27..2d37bbe91b31 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/service/ApdexScoreServiceImpl.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/service/ApdexScoreServiceImpl.java @@ -2,12 +2,12 @@ import com.navercorp.pinpoint.common.timeseries.window.TimeWindow; import com.navercorp.pinpoint.common.trace.ServiceType; +import com.navercorp.pinpoint.web.applicationmap.dao.ApplicationResponse; import com.navercorp.pinpoint.web.applicationmap.dao.MapResponseDao; import com.navercorp.pinpoint.web.applicationmap.histogram.AgentTimeHistogram; import com.navercorp.pinpoint.web.applicationmap.histogram.AgentTimeHistogramBuilder; import com.navercorp.pinpoint.web.applicationmap.histogram.ApdexScore; import com.navercorp.pinpoint.web.applicationmap.histogram.Histogram; -import com.navercorp.pinpoint.web.applicationmap.histogram.TimeHistogram; import com.navercorp.pinpoint.web.vo.Application; import com.navercorp.pinpoint.web.vo.ResponseTime; import com.navercorp.pinpoint.web.vo.stat.SampledApdexScore; @@ -19,7 +19,6 @@ import org.apache.logging.log4j.Logger; import org.springframework.stereotype.Service; -import java.util.Collection; import java.util.List; import java.util.Objects; @@ -38,8 +37,8 @@ public ApdexScore selectApdexScoreData(Application application, TimeWindow timeW ServiceType applicationServiceType = application.getServiceType(); if (applicationServiceType.isWas()) { - List responseTimeList = mapResponseDao.selectResponseTime(application, timeWindow); - Histogram applicationHistogram = createApplicationHistogram(responseTimeList, applicationServiceType); + ApplicationResponse response = mapResponseDao.selectApplicationResponse(application, timeWindow); + Histogram applicationHistogram = response.getApplicationTotalHistogram(); return ApdexScore.newApdexScore(applicationHistogram); } else { @@ -63,15 +62,6 @@ public ApdexScore selectApdexScoreData(Application application, String agentId, } } - private Histogram createApplicationHistogram(List responseHistogram, ServiceType applicationServiceType) { - final Histogram applicationHistogram = new Histogram(applicationServiceType); - for (ResponseTime responseTime : responseHistogram) { - final Collection histogramList = responseTime.getAgentResponseHistogramList(); - applicationHistogram.addAll(histogramList); - } - return applicationHistogram; - } - private Histogram createAgentHistogram(List responseHistogram, String agentId, ServiceType applicationServiceType) { final Histogram agentHistogram = new Histogram(applicationServiceType); for (ResponseTime responseTime : responseHistogram) { diff --git a/web/src/test/java/com/navercorp/pinpoint/web/service/ApdexScoreServiceImplTest.java b/web/src/test/java/com/navercorp/pinpoint/web/service/ApdexScoreServiceImplTest.java index b3a0495d6fff..39ee6ba79008 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/service/ApdexScoreServiceImplTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/service/ApdexScoreServiceImplTest.java @@ -5,6 +5,7 @@ import com.navercorp.pinpoint.common.timeseries.window.TimeWindow; import com.navercorp.pinpoint.common.trace.HistogramSchema; import com.navercorp.pinpoint.common.trace.ServiceType; +import com.navercorp.pinpoint.web.applicationmap.dao.ApplicationResponse; import com.navercorp.pinpoint.web.applicationmap.dao.MapResponseDao; import com.navercorp.pinpoint.web.applicationmap.histogram.ApdexScore; import com.navercorp.pinpoint.web.applicationmap.histogram.Histogram; @@ -50,6 +51,18 @@ public void mockResponseDao() { when(mapResponseDao.selectResponseTime(ArgumentMatchers.any(), ArgumentMatchers.any())).thenReturn(Collections.emptyList()); when(mapResponseDao.selectResponseTime(ArgumentMatchers.eq(testApplication), ArgumentMatchers.any())).thenReturn(responseTimeList); + ApplicationResponse.Builder emptyBuilder = ApplicationResponse.newBuilder(testApplication); + ApplicationResponse empty = emptyBuilder.build(); + when(mapResponseDao.selectApplicationResponse(ArgumentMatchers.any(), ArgumentMatchers.any())).thenReturn(empty); + + ApplicationResponse.Builder builder = ApplicationResponse.newBuilder(testApplication); + for (ResponseTime responseTime : responseTimeList) { + Histogram histogram = responseTime.getApplicationResponseHistogram(); + builder.addResponseTime(responseTime.getApplicationName(), responseTime.getTimeStamp(), histogram); + } + + when(mapResponseDao.selectApplicationResponse(ArgumentMatchers.eq(testApplication), ArgumentMatchers.any())).thenReturn(builder.build()); + apdexScoreService = new ApdexScoreServiceImpl(mapResponseDao); }