diff --git a/metric-module/collector-starter/src/main/java/com/navercorp/pinpoint/collector/service/PinotAgentUriStatService.java b/metric-module/collector-starter/src/main/java/com/navercorp/pinpoint/collector/service/PinotAgentUriStatService.java index c40f005a9067..46f622b0061d 100644 --- a/metric-module/collector-starter/src/main/java/com/navercorp/pinpoint/collector/service/PinotAgentUriStatService.java +++ b/metric-module/collector-starter/src/main/java/com/navercorp/pinpoint/collector/service/PinotAgentUriStatService.java @@ -23,6 +23,7 @@ import com.navercorp.pinpoint.metric.collector.MetricAppPropertySources; import com.navercorp.pinpoint.metric.collector.dao.UriStatDao; import com.navercorp.pinpoint.metric.common.model.UriStat; +import com.navercorp.pinpoint.metric.common.pinot.TenantProvider; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.ImportResource; @@ -41,8 +42,11 @@ public class PinotAgentUriStatService implements AgentUriStatService { private final int[] EMPTY_BUCKETS = new int[BUCKET_SIZE]; private final UriStatDao uriStatDao; - public PinotAgentUriStatService(UriStatDao uriStatDao) { + private final TenantProvider tenantProvider; + + public PinotAgentUriStatService(UriStatDao uriStatDao, TenantProvider tenantProvider) { this.uriStatDao = Objects.requireNonNull(uriStatDao, "uriStatDao"); + this.tenantProvider = Objects.requireNonNull(tenantProvider, "tenantProvider"); } @Override @@ -52,13 +56,14 @@ public void save(AgentUriStatBo agentUriStatBo) { final String applicationName = agentUriStatBo.getApplicationName(); final String agentId = agentUriStatBo.getAgentId(); final int version = agentUriStatBo.getBucketVersion(); + final String tenantId = tenantProvider.getTenantId(); for (EachUriStatBo eachUriStatBo : agentUriStatBo.getEachUriStatBoList()) { final String uri = eachUriStatBo.getUri(); final long timestamp = eachUriStatBo.getTimestamp(); final UriStatHistogram totalHistogram = eachUriStatBo.getTotalHistogram(); final UriStatHistogram failureHistogram = eachUriStatBo.getFailedHistogram(); - data.add(new UriStat(timestamp, serviceName, applicationName, agentId, uri, totalHistogram.getMax(), + data.add(new UriStat(timestamp, tenantId, serviceName, applicationName, agentId, uri, totalHistogram.getMax(), totalHistogram.getTotal(), getHistogramArray(totalHistogram), getHistogramArray(failureHistogram), version)); } uriStatDao.insert(data); diff --git a/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/common/model/UriStat.java b/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/common/model/UriStat.java index f83f31467501..7e18d849606c 100644 --- a/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/common/model/UriStat.java +++ b/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/common/model/UriStat.java @@ -24,6 +24,7 @@ public class UriStat { private static final long EMPTY_NUMBER = 0L; + private final String tenantId; private final String serviceName; private final String applicationName; private final String agentId; @@ -37,8 +38,9 @@ public class UriStat { private final long timestamp; private final int version; - public UriStat(long timestamp, String serviceName, String applicationName, String agentId, String uri, long maxLatencyMs, long totalTimeMs, int[] totalHistogram, int[] failureHistogram, int version) { + public UriStat(long timestamp, String tenantId, String serviceName, String applicationName, String agentId, String uri, long maxLatencyMs, long totalTimeMs, int[] totalHistogram, int[] failureHistogram, int version) { this.timestamp = timestamp; + this.tenantId = tenantId; this.serviceName = Objects.requireNonNull(serviceName, "serviceName"); this.applicationName = StringPrecondition.requireHasLength(applicationName, "applicationName"); this.agentId = StringPrecondition.requireHasLength(agentId, "agentId"); @@ -57,6 +59,7 @@ public UriStat(long timestamp, double tot0, double tot1, double tot2, double tot double fail0, double fail1, double fail2, double fail3, double fail4, double fail5, double fail6, double fail7, int version) { this.timestamp = timestamp; + this.tenantId = StringUtils.EMPTY; this.serviceName = StringUtils.EMPTY; this.applicationName = StringUtils.EMPTY; this.agentId = StringUtils.EMPTY; @@ -70,6 +73,10 @@ public UriStat(long timestamp, double tot0, double tot1, double tot2, double tot this.version = version; } + public String getTenantId() { + return tenantId; + } + public String getServiceName() { return serviceName; } @@ -199,5 +206,4 @@ public String toString() { ", timestamp=" + timestamp + '}'; } - } diff --git a/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/controller/UriStatController.java b/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/controller/UriStatController.java index 6cf00a351d2a..636ca291d175 100644 --- a/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/controller/UriStatController.java +++ b/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/controller/UriStatController.java @@ -18,6 +18,7 @@ import com.navercorp.pinpoint.common.util.StringUtils; import com.navercorp.pinpoint.metric.common.model.UriStat; +import com.navercorp.pinpoint.metric.common.pinot.TenantProvider; import com.navercorp.pinpoint.metric.web.model.UriStatSummary; import com.navercorp.pinpoint.metric.web.service.UriStatService; import com.navercorp.pinpoint.metric.web.util.Range; @@ -41,9 +42,11 @@ public class UriStatController { private final UriStatService uriStatService; private final TimeWindowSampler DEFAULT_TIME_WINDOW_SAMPLER = new TimeWindowSlotCentricSampler(30000L, 200); + private final TenantProvider tenantProvider; - public UriStatController(UriStatService uriStatService) { + public UriStatController(UriStatService uriStatService, TenantProvider tenantProvider) { this.uriStatService = Objects.requireNonNull(uriStatService); + this.tenantProvider = Objects.requireNonNull(tenantProvider, "tenantProvider"); } @GetMapping("top50") @@ -52,6 +55,7 @@ public List getUriStatSummary(@RequestParam("applicationName") S @RequestParam("from") long from, @RequestParam("to") long to) { UriStatQueryParameter.Builder builder = new UriStatQueryParameter.Builder(); + builder.setTenantId(tenantProvider.getTenantId()); builder.setApplicationName(applicationName); builder.setRange(Range.newRange(from, to)); @@ -71,6 +75,7 @@ public UriStatView getCollectedUriStat(@RequestParam("applicationName") String a @RequestParam("to") long to) { TimeWindow timeWindow = new TimeWindow(Range.newRange(from, to), DEFAULT_TIME_WINDOW_SAMPLER); UriStatQueryParameter.Builder builder = new UriStatQueryParameter.Builder(); + builder.setTenantId(tenantProvider.getTenantId()); builder.setApplicationName(applicationName); builder.setUri(uri); builder.setRange(timeWindow.getWindowRange()); diff --git a/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/util/UriStatQueryParameter.java b/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/util/UriStatQueryParameter.java index 526fe898fcb2..85076d332661 100644 --- a/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/util/UriStatQueryParameter.java +++ b/metric-module/metric/src/main/java/com/navercorp/pinpoint/metric/web/util/UriStatQueryParameter.java @@ -19,6 +19,7 @@ import java.util.concurrent.TimeUnit; public class UriStatQueryParameter extends QueryParameter { + private final String tenantId; private final String serviceName; private final String applicationName; private final String agentId; @@ -26,6 +27,7 @@ public class UriStatQueryParameter extends QueryParameter { protected UriStatQueryParameter(Builder builder) { super(builder.range, builder.timePrecision, builder.limit); + this.tenantId = builder.tenantId; this.serviceName = builder.serviceName; this.applicationName = builder.applicationName; this.agentId = builder.agentId; @@ -33,11 +35,15 @@ protected UriStatQueryParameter(Builder builder) { } public static class Builder extends QueryParameter.Builder { + private String tenantId; private String serviceName; private String applicationName; private String agentId; private String uri; + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } public void setServiceName(String serviceName) { this.serviceName = serviceName; } diff --git a/metric-module/metric/src/main/pinot/pinot-urlStat-schema.json b/metric-module/metric/src/main/pinot/pinot-urlStat-schema.json index c8f19c1c5517..e4f21185c034 100644 --- a/metric-module/metric/src/main/pinot/pinot-urlStat-schema.json +++ b/metric-module/metric/src/main/pinot/pinot-urlStat-schema.json @@ -1,6 +1,11 @@ { "schemaName": "uriStat", "dimensionFieldSpecs": [ + { + "name": "tenantId", + "dataType": "STRING", + "defaultNullValue": "" + }, { "name": "serviceName", "dataType": "STRING", diff --git a/metric-module/metric/src/main/resources/pinot-web/mapper/pinot/UriStatMapper.xml b/metric-module/metric/src/main/resources/pinot-web/mapper/pinot/UriStatMapper.xml index 0730c96065a3..62efd1d200d0 100644 --- a/metric-module/metric/src/main/resources/pinot-web/mapper/pinot/UriStatMapper.xml +++ b/metric-module/metric/src/main/resources/pinot-web/mapper/pinot/UriStatMapper.xml @@ -44,7 +44,8 @@ sum(failureCount) as failureCount, version FROM uriStat - WHERE applicationName = #{applicationName} + WHERE tenantId = #{tenantId} + AND applicationName = #{applicationName} AND "timestamp" BETWEEN #{range.from} AND #{range.to} GROUP BY uri, version ORDER BY totalCount desc @@ -60,7 +61,8 @@ sum(failureCount) as failureCount, version FROM uriStat - WHERE applicationName = #{applicationName} + WHERE tenantId = #{tenantId} + AND applicationName = #{applicationName} AND agentId = #{agentId} AND "timestamp" BETWEEN #{range.from} AND #{range.to} GROUP BY uri, version @@ -89,7 +91,8 @@ sum(fail7) as fail7, version FROM uriStat - WHERE applicationName = #{applicationName} + WHERE tenantId = #{tenantId} + AND applicationName = #{applicationName} AND uri = #{uri} AND "timestamp" BETWEEN #{range.from} AND #{range.to} GROUP BY "timestamp", version @@ -117,7 +120,8 @@ sum(fail7) as fail7, version FROM uriStat - WHERE applicationName = #{applicationName} + WHERE tenantId = #{tenantId} + AND applicationName = #{applicationName} AND agentId = #{agentId} AND uri = #{uri} AND "timestamp" BETWEEN #{range.from} AND #{range.to}