diff --git a/agent-module/bootstraps/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/AgentIdResolver.java b/agent-module/bootstraps/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/AgentIdResolver.java index 4f0635f9549f0..c3f70c37a5816 100644 --- a/agent-module/bootstraps/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/AgentIdResolver.java +++ b/agent-module/bootstraps/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/AgentIdResolver.java @@ -16,8 +16,10 @@ package com.navercorp.pinpoint.bootstrap; +import com.navercorp.pinpoint.common.PinpointConstants; import com.navercorp.pinpoint.common.util.AgentUuidUtils; import com.navercorp.pinpoint.common.util.StringUtils; +import com.navercorp.pinpoint.common.util.UuidUtils; import java.util.List; import java.util.Objects; @@ -46,6 +48,7 @@ public class AgentIdResolver { private final List agentPropertyList; private final IdValidator idValidator = new IdValidator(); + private final IdValidator applicationNameValidator = new IdValidator(PinpointConstants.APPLICATION_NAME_MAX_LEN); public AgentIdResolver(List agentPropertyList) { this.agentPropertyList = Objects.requireNonNull(agentPropertyList, "agentPropertyList"); @@ -74,7 +77,7 @@ public AgentIds resolve() { } private String newRandomAgentId() { - UUID agentUUID = UUID.randomUUID(); + UUID agentUUID = UuidUtils.createV4(); return AgentUuidUtils.encode(agentUUID); } @@ -112,7 +115,7 @@ private String getApplicationName() { if (StringUtils.isEmpty(applicationName)) { continue; } - if (idValidator.validateApplicationName(agentProperty.getType(), applicationName)) { + if (applicationNameValidator.validateApplicationName(agentProperty.getType(), applicationName)) { logger.info(agentProperty.getType() + " " + agentProperty.getApplicationNameKey() + "=" + applicationName); source = applicationName; } diff --git a/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/AgentInformationProvider.java b/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/AgentInformationProvider.java index c0e539626b8e0..f551384b94518 100644 --- a/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/AgentInformationProvider.java +++ b/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/AgentInformationProvider.java @@ -19,6 +19,7 @@ import com.google.inject.Inject; import com.google.inject.Provider; import com.navercorp.pinpoint.bootstrap.util.NetworkUtils; +import com.navercorp.pinpoint.common.PinpointConstants; import com.navercorp.pinpoint.common.Version; import com.navercorp.pinpoint.common.trace.ServiceType; import com.navercorp.pinpoint.common.util.IdValidateUtils; @@ -54,8 +55,8 @@ public AgentInformationProvider(@AgentId String agentId, @AgentName String agent Objects.requireNonNull(agentId, "agentId"); Objects.requireNonNull(applicationName, "applicationName"); - this.agentId = checkId("agentId", agentId); - this.applicationName = checkId("applicationName", applicationName); + this.agentId = checkId("agentId", agentId, PinpointConstants.AGENT_ID_MAX_LEN); + this.applicationName = checkId("applicationName", applicationName, PinpointConstants.APPLICATION_NAME_MAX_LEN); this.agentName = agentName; this.isContainer = isContainer; this.agentStartTime = agentStartTime; @@ -68,7 +69,6 @@ public AgentInformation get() { } public AgentInformation createAgentInformation() { - final String machineName = NetworkUtils.getHostName(); final String hostIp = NetworkUtils.getRepresentationHostIp(); @@ -77,10 +77,11 @@ public AgentInformation createAgentInformation() { return new DefaultAgentInformation(agentId, agentName, applicationName, isContainer, agentStartTime, pid, machineName, hostIp, serverType, jvmVersion, Version.VERSION); } - private String checkId(String keyName,String id) { - if (!IdValidateUtils.validateId(id)) { + private String checkId(String keyName, String id, int maxLen) { + if (!IdValidateUtils.validateId(id, maxLen)) { throw new IllegalArgumentException("invalid " + keyName + "=" + id); } return id; } + } diff --git a/batch-alarmsender/src/main/java/com/navercorp/pinpoint/batch/alarm/sender/AlarmMailTemplate.java b/batch-alarmsender/src/main/java/com/navercorp/pinpoint/batch/alarm/sender/AlarmMailTemplate.java index 6fd7fac43d3bf..2599721fd035d 100644 --- a/batch-alarmsender/src/main/java/com/navercorp/pinpoint/batch/alarm/sender/AlarmMailTemplate.java +++ b/batch-alarmsender/src/main/java/com/navercorp/pinpoint/batch/alarm/sender/AlarmMailTemplate.java @@ -48,7 +48,7 @@ public AlarmMailTemplate(AlarmCheckerInterface checker, String pinpointUrl, Stri public String createSubject() { RuleInterface rule = checker.getRule(); - return String.format("[PINPOINT-%s] %s Alarm for %s Service. #%d", batchEnv, rule.getCheckerName(), rule.getApplicationId(), sequenceCount); + return String.format("[PINPOINT-%s] %s Alarm for %s Service. #%d", batchEnv, rule.getCheckerName(), rule.getApplicationName(), sequenceCount); } public String getCurrentTime() { @@ -58,21 +58,18 @@ public String getCurrentTime() { public String createBody() { RuleInterface rule = checker.getRule(); - return newBody(createSubject(), rule.getCheckerName(), rule.getApplicationId(), rule.getServiceType(), getCurrentTime()); + return newBody(createSubject(), rule.getCheckerName(), rule.getApplicationName(), rule.getServiceType(), getCurrentTime()); } private String newBody(String subject, String rule, String applicationId, String serviceType, String currentTime) { - StringBuilder body = new StringBuilder(); - body.append("").append(subject).append(""); - body.append(LINE_FEED); - body.append(LINE_FEED); - body.append(String.format("Rule : %s", rule)); - body.append(LINE_FEED); - body.append(checker.getEmailMessage(pinpointUrl, applicationId, serviceType, currentTime)); - body.append(String.format(LINK_FORMAT, pinpointUrl)); - body.append(LINE_FEED); - body.append(String.format(SCATTER_CHART_LINK_FORMAT, pinpointUrl, applicationId, serviceType, currentTime, applicationId)); - - return body.toString(); + return "" + subject + "" + + LINE_FEED + + LINE_FEED + + String.format("Rule : %s", rule) + + LINE_FEED + + checker.getEmailMessage(pinpointUrl, applicationId, serviceType, currentTime) + + String.format(LINK_FORMAT, pinpointUrl) + + LINE_FEED + + String.format(SCATTER_CHART_LINK_FORMAT, pinpointUrl, applicationId, serviceType, currentTime, applicationId); } } diff --git a/batch-alarmsender/src/main/java/com/navercorp/pinpoint/batch/alarm/vo/sender/payload/WebhookPayload.java b/batch-alarmsender/src/main/java/com/navercorp/pinpoint/batch/alarm/vo/sender/payload/WebhookPayload.java index b3a35941b9114..f2998012b84bd 100644 --- a/batch-alarmsender/src/main/java/com/navercorp/pinpoint/batch/alarm/vo/sender/payload/WebhookPayload.java +++ b/batch-alarmsender/src/main/java/com/navercorp/pinpoint/batch/alarm/vo/sender/payload/WebhookPayload.java @@ -18,7 +18,6 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.navercorp.pinpoint.batch.alarm.checker.AlarmCheckerInterface; -import com.navercorp.pinpoint.batch.alarm.checker.PinotAlarmCheckerInterface; /** * @author Jongjin.Bae @@ -28,7 +27,7 @@ public class WebhookPayload { private final String pinpointUrl; private final String batchEnv; - private final String applicationId; + private final String applicationName; private final String serviceType; private final String checkerName; private final String checkerType; @@ -43,7 +42,7 @@ public WebhookPayload(String pinpointUrl, String batchEnv, AlarmCheckerInterface this.pinpointUrl = pinpointUrl; this.batchEnv = batchEnv; - this.applicationId = checker.getRule().getApplicationId(); + this.applicationName = checker.getRule().getApplicationName(); this.serviceType = checker.getRule().getServiceType(); this.checkerName = checker.getRule().getCheckerName(); this.checkerType = checker.getCheckerType(); @@ -63,8 +62,8 @@ public String getBatchEnv() { return batchEnv; } - public String getApplicationId() { - return applicationId; + public String getApplicationName() { + return applicationName; } public String getServiceType() { @@ -108,7 +107,7 @@ public String toString() { return "WebhookPayload{" + "pinpointUrl='" + pinpointUrl + '\'' + ", batchEnv='" + batchEnv + '\'' + - ", applicationId='" + applicationId + '\'' + + ", applicationId='" + applicationName + '\'' + ", serviceType='" + serviceType + '\'' + ", checkerName='" + checkerName + '\'' + ", checkerType='" + checkerType + '\'' + diff --git a/batch-alarmsender/src/main/java/com/navercorp/pinpoint/batch/alarm/vo/sender/payload/WebhookPayloadSerializer.java b/batch-alarmsender/src/main/java/com/navercorp/pinpoint/batch/alarm/vo/sender/payload/WebhookPayloadSerializer.java index c30b3af8747f0..0ffcda8cd09a3 100644 --- a/batch-alarmsender/src/main/java/com/navercorp/pinpoint/batch/alarm/vo/sender/payload/WebhookPayloadSerializer.java +++ b/batch-alarmsender/src/main/java/com/navercorp/pinpoint/batch/alarm/vo/sender/payload/WebhookPayloadSerializer.java @@ -29,30 +29,30 @@ public class WebhookPayloadSerializer extends JsonSerializer { @Override - public void serialize(WebhookPayload webhookPayload, JsonGenerator jgen, SerializerProvider serializers) throws IOException { - jgen.writeStartObject(); + public void serialize(WebhookPayload webhookPayload, JsonGenerator gen, SerializerProvider serializers) throws IOException { + gen.writeStartObject(); - jgen.writeStringField("pinpointUrl", webhookPayload.getPinpointUrl()); - jgen.writeStringField("batchEnv", webhookPayload.getBatchEnv()); - jgen.writeStringField("applicationId", webhookPayload.getApplicationId()); - jgen.writeStringField("serviceType", webhookPayload.getServiceType()); - jgen.writeObjectField("userGroup", webhookPayload.getUserGroup()); + gen.writeStringField("pinpointUrl", webhookPayload.getPinpointUrl()); + gen.writeStringField("batchEnv", webhookPayload.getBatchEnv()); + gen.writeStringField("applicationId", webhookPayload.getApplicationName()); + gen.writeStringField("serviceType", webhookPayload.getServiceType()); + gen.writeObjectField("userGroup", webhookPayload.getUserGroup()); - writeChecker(webhookPayload, jgen); + writeChecker(webhookPayload, gen); - jgen.writeStringField("unit", webhookPayload.getUnit()); + gen.writeStringField("unit", webhookPayload.getUnit()); Number threshold = webhookPayload.getThreshold(); if (threshold instanceof Integer integer) { - jgen.writeNumberField("threshold", integer); + gen.writeNumberField("threshold", integer); } else if (threshold instanceof BigDecimal bigDecimal){ - jgen.writeNumberField("threshold", bigDecimal); + gen.writeNumberField("threshold", bigDecimal); } else { throw new IOException("threshold type should be either Integer or BigDecimal"); } - jgen.writeStringField("notes", webhookPayload.getNotes()); - jgen.writeNumberField("sequenceCount", webhookPayload.getSequenceCount()); + gen.writeStringField("notes", webhookPayload.getNotes()); + gen.writeNumberField("sequenceCount", webhookPayload.getSequenceCount()); - jgen.writeEndObject(); + gen.writeEndObject(); } private void writeChecker(WebhookPayload webhookPayload, JsonGenerator jgen) throws IOException { diff --git a/batch-alarmsender/src/main/java/com/navercorp/pinpoint/web/vo/RuleInterface.java b/batch-alarmsender/src/main/java/com/navercorp/pinpoint/web/vo/RuleInterface.java index 8d4a87f1d1c28..e803d5565370a 100644 --- a/batch-alarmsender/src/main/java/com/navercorp/pinpoint/web/vo/RuleInterface.java +++ b/batch-alarmsender/src/main/java/com/navercorp/pinpoint/web/vo/RuleInterface.java @@ -2,7 +2,7 @@ public interface RuleInterface { String getCheckerName(); - String getApplicationId(); + String getApplicationName(); String getServiceType(); Number getThreshold(); String getNotes(); diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/AlarmProcessor.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/AlarmProcessor.java index 4d2ef3f77800f..004f8d68c87ba 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/AlarmProcessor.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/AlarmProcessor.java @@ -25,9 +25,9 @@ import com.navercorp.pinpoint.web.alarm.CheckerCategory; import com.navercorp.pinpoint.web.alarm.DataCollectorCategory; import com.navercorp.pinpoint.web.alarm.vo.Rule; -import com.navercorp.pinpoint.web.dao.ApplicationIndexDao; import com.navercorp.pinpoint.web.service.AgentInfoService; import com.navercorp.pinpoint.web.service.AlarmService; +import com.navercorp.pinpoint.web.service.ApplicationService; import com.navercorp.pinpoint.web.vo.Application; import jakarta.annotation.Nonnull; import org.springframework.batch.item.ItemProcessor; @@ -37,6 +37,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.UUID; import java.util.concurrent.TimeUnit; import java.util.function.Supplier; @@ -51,7 +52,7 @@ public class AlarmProcessor implements ItemProcessor> getAlarmCheckers(Application application) { - List rules = alarmService.selectRuleByApplicationId(application.getName()); + List rules = alarmService.selectRuleByApplicationId(application.name()); long now = System.currentTimeMillis(); Supplier> agentIds = getAgentIdsSupplier(application, now); @@ -102,11 +103,11 @@ private List> getAlarmCheckers(Application application) { private Supplier> getAgentIdsSupplier(Application application, long now) { Range range = Range.between(now - activeDuration, now); - return Suppliers.memoize(() -> fetchActiveAgents(application.getName(), range)); + return Suppliers.memoize(() -> fetchActiveAgents(application.id(), range)); } - private List fetchActiveAgents(String applicationId, Range activeRange) { - return applicationIndexDao.selectAgentIds(applicationId) + private List fetchActiveAgents(UUID applicationId, Range activeRange) { + return this.applicationService.getAgents(applicationId) .stream() .filter(id -> agentInfoService.isActiveAgent(id, activeRange)) .toList(); diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/AlarmReader.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/AlarmReader.java index 990fcba5b56ac..eb1002b62e08f 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/AlarmReader.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/AlarmReader.java @@ -16,15 +16,15 @@ package com.navercorp.pinpoint.batch.alarm; -import com.navercorp.pinpoint.web.dao.ApplicationIndexDao; import com.navercorp.pinpoint.web.service.AlarmService; +import com.navercorp.pinpoint.web.service.ApplicationService; import com.navercorp.pinpoint.web.vo.Application; +import jakarta.annotation.Nonnull; import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.StepExecution; import org.springframework.batch.core.StepExecutionListener; import org.springframework.batch.item.ItemReader; -import jakarta.annotation.Nonnull; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -36,13 +36,13 @@ */ public class AlarmReader implements ItemReader, StepExecutionListener { - private final ApplicationIndexDao applicationIndexDao; + private final ApplicationService applicationService; private final AlarmService alarmService; private Queue applicationQueue; - public AlarmReader(ApplicationIndexDao applicationIndexDao, AlarmService alarmService) { - this.applicationIndexDao = Objects.requireNonNull(applicationIndexDao, "applicationIndexDao"); + public AlarmReader(ApplicationService applicationService, AlarmService alarmService) { + this.applicationService = Objects.requireNonNull(applicationService, "applicationService"); this.alarmService = Objects.requireNonNull(alarmService, "alarmService"); } @@ -56,12 +56,12 @@ public void beforeStep(@Nonnull StepExecution stepExecution) { } private List fetchApplications() { - List applications = applicationIndexDao.selectAllApplicationNames(); + List applications = this.applicationService.getApplications(); List validApplicationIds = alarmService.selectApplicationId(); List validApplications = new ArrayList<>(applications.size()); for (Application application: applications) { - if (validApplicationIds.contains(application.getName())) { + if (validApplicationIds.contains(application.name())) { validApplications.add(application); } } diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/checker/AlarmChecker.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/checker/AlarmChecker.java index fce56abf9b3b9..f12ac693b28da 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/checker/AlarmChecker.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/checker/AlarmChecker.java @@ -85,12 +85,12 @@ public String getUnit() { public void check() { dataCollector.collect(); detected = decideResult(getDetectedValue()); - logger.info("{} result is {} for application ({}). value is {}. (threshold : {}).", this.getClass().getSimpleName(), detected, rule.getApplicationId(), getDetectedValue(), rule.getThreshold()); + logger.info("{} result is {} for application ({}). value is {}. (threshold : {}).", this.getClass().getSimpleName(), detected, rule.getApplicationName(), getDetectedValue(), rule.getThreshold()); } public List getSmsMessage() { List messages = new ArrayList<>(); - messages.add(String.format("[PINPOINT Alarm - %s] %s is %s%s (Threshold : %s%s)", rule.getApplicationId(), rule.getCheckerName(), getDetectedValue(), unit, rule.getThreshold(), unit)); + messages.add(String.format("[PINPOINT Alarm - %s] %s is %s%s (Threshold : %s%s)", rule.getApplicationName(), rule.getCheckerName(), getDetectedValue(), unit, rule.getThreshold(), unit)); return messages; } diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/checker/ErrorCountToCalleeChecker.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/checker/ErrorCountToCalleeChecker.java index 86c9ca95dad4f..76bbffde5997a 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/checker/ErrorCountToCalleeChecker.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/checker/ErrorCountToCalleeChecker.java @@ -37,7 +37,8 @@ protected Long getDetectedValue() { @Override public String getEmailMessage(String pinpointUrl, String applicationId, String serviceType, String currentTime) { - return String.format("%s value is %s%s during the past 5 mins.(Threshold : %s%s) %s For From '%s' To '%s'.
", rule.getCheckerName(), getDetectedValue(), unit, rule.getThreshold(), unit, rule.getCheckerName(), rule.getApplicationId(), rule.getNotes()); + return String.format("%s value is %s%s during the past 5 mins.(Threshold : %s%s) %s For From '%s' To '%s'.
", + rule.getCheckerName(), getDetectedValue(), unit, rule.getThreshold(), unit, rule.getCheckerName(), rule.getApplicationName(), rule.getNotes()); } } diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/checker/ErrorRateToCalleeChecker.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/checker/ErrorRateToCalleeChecker.java index f69363ab04e2c..88df10275dd88 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/checker/ErrorRateToCalleeChecker.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/checker/ErrorRateToCalleeChecker.java @@ -38,7 +38,8 @@ protected Long getDetectedValue() { @Override public String getEmailMessage(String pinpointUrl, String applicationId, String serviceType, String currentTime) { - return String.format("%s value is %s%s during the past 5 mins.(Threshold : %s%s) %s For From '%s' To '%s'.
", rule.getCheckerName(), getDetectedValue(), unit, rule.getThreshold(), unit, rule.getCheckerName(), rule.getApplicationId(), rule.getNotes()); + return String.format("%s value is %s%s during the past 5 mins.(Threshold : %s%s) %s For From '%s' To '%s'.
", + rule.getCheckerName(), getDetectedValue(), unit, rule.getThreshold(), unit, rule.getCheckerName(), rule.getApplicationName(), rule.getNotes()); } } diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/checker/SlowCountToCalleeChecker.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/checker/SlowCountToCalleeChecker.java index 33c1701ca06a1..bf7eeadc355cd 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/checker/SlowCountToCalleeChecker.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/checker/SlowCountToCalleeChecker.java @@ -37,7 +37,8 @@ protected Long getDetectedValue() { @Override public String getEmailMessage(String pinpointUrl, String applicationId, String serviceType, String currentTime) { - return String.format("%s value is %s%s during the past 5 mins.(Threshold : %s%s) %s For From '%s' To '%s'.
", rule.getCheckerName(), getDetectedValue(), unit, rule.getThreshold(), unit, rule.getCheckerName(), rule.getApplicationId(), rule.getNotes()); + return String.format("%s value is %s%s during the past 5 mins.(Threshold : %s%s) %s For From '%s' To '%s'.
", + rule.getCheckerName(), getDetectedValue(), unit, rule.getThreshold(), unit, rule.getCheckerName(), rule.getApplicationName(), rule.getNotes()); } } diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/checker/SlowRateToCalleeChecker.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/checker/SlowRateToCalleeChecker.java index b5961258a101f..4f3bbf0a45757 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/checker/SlowRateToCalleeChecker.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/checker/SlowRateToCalleeChecker.java @@ -32,13 +32,14 @@ public SlowRateToCalleeChecker(DataCollector dataCollector, Rule rule) { @Override protected Long getDetectedValue() { - String calleName = rule.getNotes(); - return ((MapStatisticsCallerDataCollector)dataCollector).getCountRate(calleName, DataCategory.SLOW_RATE); + String calleeName = rule.getNotes(); + return ((MapStatisticsCallerDataCollector)dataCollector).getCountRate(calleeName, DataCategory.SLOW_RATE); } @Override public String getEmailMessage(String pinpointUrl, String applicationId, String serviceType, String currentTime) { - return String.format("%s value is %s%s during the past 5 mins.(Threshold : %s%s) %s For From '%s' To '%s'.
", rule.getCheckerName(), getDetectedValue(), unit, rule.getThreshold(), unit, rule.getCheckerName(), rule.getApplicationId(), rule.getNotes()); + return String.format("%s value is %s%s during the past 5 mins.(Threshold : %s%s) %s For From '%s' To '%s'.
", + rule.getCheckerName(), getDetectedValue(), unit, rule.getThreshold(), unit, rule.getCheckerName(), rule.getApplicationName(), rule.getNotes()); } } diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/MapStatisticsCallerDataCollector.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/MapStatisticsCallerDataCollector.java index f4654bea2198d..2563e92a746e1 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/MapStatisticsCallerDataCollector.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/MapStatisticsCallerDataCollector.java @@ -62,15 +62,15 @@ public void collect() { LinkCallDataMap linkCallDataMap = linkData.getLinkCallDataMap(); for (LinkCallData linkCallData : linkCallDataMap.getLinkDataList()) { - calleeStatMap.put(linkCallData.getTarget().getName(), linkCallData); + calleeStatMap.put(linkCallData.getTarget().name(), linkCallData); } } init.set(true); } - public long getCount(String calleName, DataCategory dataCategory) { - final LinkCallData linkCallData = calleeStatMap.get(calleName); + public long getCount(String calleeName, DataCategory dataCategory) { + final LinkCallData linkCallData = calleeStatMap.get(calleeName); if (linkCallData == null) { return 0; } @@ -102,8 +102,8 @@ public long getCount(String calleName, DataCategory dataCategory) { } - public long getCountRate(String calleName, DataCategory dataCategory) { - final LinkCallData linkCallData = calleeStatMap.get(calleName); + public long getCountRate(String calleeName, DataCategory dataCategory) { + final LinkCallData linkCallData = calleeStatMap.get(calleeName); if (linkCallData == null) { return 0; } 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 d0e67e6b10025..ff3188e6a3acc 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 @@ -36,7 +36,7 @@ public class ResponseTimeDataCollector extends DataCollector { private final MapResponseDao responseDao; private final long timeSlotEndTime; private final long slotInterval; - private final AtomicBoolean init =new AtomicBoolean(false); // need to consider a race condition when checkers start simultaneously. + private final AtomicBoolean init = new AtomicBoolean(false); // need to consider a race condition when checkers start simultaneously. private long fastCount = 0; private long normalCount = 0; diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/DataSourceDataCollector.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/DataSourceDataCollector.java index 15fd8f518efc0..2dce91608153b 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/DataSourceDataCollector.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/DataSourceDataCollector.java @@ -84,7 +84,7 @@ public void collect() { for (TagInformation tagInformation : tagInformationList) { CompletableFuture> futureAgent = alarmDao - .selectAvgGroupByField(application.getName(), agentId, METRIC_NAME, fieldList, tagInformation.tags(), range); + .selectAvgGroupByField(application.name(), agentId, METRIC_NAME, fieldList, tagInformation.tags(), range); queryResults.add(new QueryResult<>(futureAgent, tagInformation)); } } @@ -141,7 +141,7 @@ private Map> getAgentTagInformation(Range range) th for (Tag jdbcUrlTag : jdbcUrlList) { List tagList = List.of(jdbcUrlTag); - CompletableFuture> futureTagInformation = alarmDao.getTagInfoContainedSpecificTag(application.getName(), agentId, METRIC_NAME, FIELD_ACTIVE_CONNECTION, tagList, range); + CompletableFuture> futureTagInformation = alarmDao.getTagInfoContainedSpecificTag(application.name(), agentId, METRIC_NAME, FIELD_ACTIVE_CONNECTION, tagList, range); queryResults.add(new QueryResult<>(futureTagInformation, agentId)); } } @@ -176,7 +176,7 @@ private Map> distinctJdbUrlForAgent(Range range) throws Execut List> queryResults = new ArrayList<>(); for (String agentId : agentIds) { - CompletableFuture> future = alarmDao.selectTagInfo(application.getName(), agentId, METRIC_NAME, FIELD_ACTIVE_CONNECTION, range); + CompletableFuture> future = alarmDao.selectTagInfo(application.name(), agentId, METRIC_NAME, FIELD_ACTIVE_CONNECTION, range); queryResults.add(new QueryResult<>(future, agentId)); } diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/FileDescriptorDataCollector.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/FileDescriptorDataCollector.java index 351e23e0bb7dd..2d2dfa1b6e856 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/FileDescriptorDataCollector.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/FileDescriptorDataCollector.java @@ -54,7 +54,7 @@ public FileDescriptorDataCollector(DataCollectorCategory dataCollectorCategory, @Override public void collect() { Range range = Range.newUncheckedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); - List agentUsageList = alarmDao.selectAvg(application.getName(), METRIC_NAME, FIELD_NAME, range); + List agentUsageList = alarmDao.selectAvg(application.name(), METRIC_NAME, FIELD_NAME, range); for (AgentUsage agentUsage : agentUsageList) { agentFileDescriptorCount.put(agentUsage.getAgentId(), agentUsage.getValue().longValue()); diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/HeapDataCollector.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/HeapDataCollector.java index 9b20f6210b0de..1e6f0c6c675a9 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/HeapDataCollector.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/HeapDataCollector.java @@ -57,7 +57,7 @@ public HeapDataCollector(DataCollectorCategory dataCollectorCategory, AlarmDao a @Override public void collect() { Range range = Range.newUncheckedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); - List agentFieldUsageList = alarmDao.selectSumGroupByField(application.getName(), METRIC_NAME, fieldList, range); + List agentFieldUsageList = alarmDao.selectSumGroupByField(application.name(), METRIC_NAME, fieldList, range); Map agentHeapUsageMap = new HashMap<>(); for(AgentFieldUsage agentFieldUsage : agentFieldUsageList) { diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/JvmCpuDataCollector.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/JvmCpuDataCollector.java index f05c1a0b90bf5..91f3256552f6f 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/JvmCpuDataCollector.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/JvmCpuDataCollector.java @@ -56,7 +56,7 @@ public JvmCpuDataCollector(DataCollectorCategory dataCollectorCategory, AlarmDao @Override public void collect() { Range range = Range.newUncheckedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); - List agentUsageCountList = alarmDao.selectSumCount(application.getName(), METRIC_NAME, FIELD_NAME, range); + List agentUsageCountList = alarmDao.selectSumCount(application.name(), METRIC_NAME, FIELD_NAME, range); for (AgentUsageCount agentUsageCount : agentUsageCountList) { long jvmCpuUsagePercent = calculatePercent(agentUsageCount.getValue().longValue(), 100L * agentUsageCount.getCountValue().longValue()); diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/SystemCpuDataCollector.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/SystemCpuDataCollector.java index 7922f9be93897..76454c4f4e411 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/SystemCpuDataCollector.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/SystemCpuDataCollector.java @@ -54,7 +54,7 @@ public SystemCpuDataCollector(DataCollectorCategory dataCollectorCategory, Alarm @Override public void collect() { Range range = Range.newUncheckedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); - List agentUsageCountList = alarmDao.selectSumCount(application.getName(), METRIC_NAME, FIELD_NAME, range); + List agentUsageCountList = alarmDao.selectSumCount(application.name(), METRIC_NAME, FIELD_NAME, range); for (AgentUsageCount agentUsageCount : agentUsageCountList) { long jvmCpuUsagePercent = calculatePercent(agentUsageCount.getValue().longValue(), 100L * agentUsageCount.getCountValue().longValue()); diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/vo/AppAlarmChecker.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/vo/AppAlarmChecker.java index f7a3b310bd3f5..f4c7e47c5d93c 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/vo/AppAlarmChecker.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/vo/AppAlarmChecker.java @@ -30,7 +30,7 @@ public class AppAlarmChecker { public AppAlarmChecker(List> children) { this.children = haveSameApplication(children); - this.applicationId = this.children.get(0).getRule().getApplicationId(); + this.applicationId = this.children.get(0).getRule().getApplicationName(); } private List> haveSameApplication(List> children) { @@ -38,10 +38,10 @@ private List> haveSameApplication(List> children throw new IllegalArgumentException("children should not be empty"); } - final String applicationName = children.get(0).getRule().getApplicationId(); + final String applicationName = children.get(0).getRule().getApplicationName(); for (AlarmChecker child : children) { - if (!applicationName.equals(child.getRule().getApplicationId())) { - throw new IllegalArgumentException("All children should have the same application: " + applicationName + " != " + child.getRule().getApplicationId()); + if (!applicationName.equals(child.getRule().getApplicationName())) { + throw new IllegalArgumentException("All children should have the same application: " + applicationName + " != " + child.getRule().getApplicationName()); } } return children; diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/job/AgentCountProcessor.java b/batch/src/main/java/com/navercorp/pinpoint/batch/job/AgentCountProcessor.java index 947450029b336..c5f0e534592b2 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/job/AgentCountProcessor.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/job/AgentCountProcessor.java @@ -17,33 +17,34 @@ import com.navercorp.pinpoint.batch.common.BatchProperties; import com.navercorp.pinpoint.common.server.util.time.Range; -import com.navercorp.pinpoint.web.dao.ApplicationIndexDao; import com.navercorp.pinpoint.web.service.AgentInfoService; +import com.navercorp.pinpoint.web.service.ApplicationService; +import jakarta.annotation.Nonnull; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.batch.item.ItemProcessor; -import jakarta.annotation.Nonnull; import java.util.Objects; +import java.util.UUID; import java.util.concurrent.TimeUnit; /** * @author youngjin.kim2 */ -public class AgentCountProcessor implements ItemProcessor { +public class AgentCountProcessor implements ItemProcessor { private final Logger logger = LogManager.getLogger(this.getClass()); - private final ApplicationIndexDao applicationIndexDao; + private final ApplicationService applicationService; private final AgentInfoService agentInfoService; private final long duration; public AgentCountProcessor( - ApplicationIndexDao applicationIndexDao, + ApplicationService applicationService, AgentInfoService agentInfoService, BatchProperties batchProperties ) { - this.applicationIndexDao = Objects.requireNonNull(applicationIndexDao, "applicationIndexDao"); + this.applicationService = Objects.requireNonNull(applicationService, "applicationService"); this.agentInfoService = Objects.requireNonNull(agentInfoService, "agentInfoService"); long durationDays = batchProperties.getCleanupInactiveAgentsDurationDays(); @@ -51,12 +52,12 @@ public AgentCountProcessor( } @Override - public Integer process(@Nonnull String applicationName) { - long localCount = applicationIndexDao.selectAgentIds(applicationName) + public Integer process(@Nonnull UUID applicationId) { + long localCount = applicationService.getAgents(applicationId) .stream() .filter(this::isActive) .count(); - logger.info("Application {} has {} agents", applicationName, localCount); + logger.info("Application {} has {} agents", applicationId, localCount); return Math.toIntExact(localCount); } diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/job/AgentCountReader.java b/batch/src/main/java/com/navercorp/pinpoint/batch/job/AgentCountReader.java index 807a2a1a920d9..44a63ac13c729 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/job/AgentCountReader.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/job/AgentCountReader.java @@ -16,7 +16,7 @@ package com.navercorp.pinpoint.batch.job; -import com.navercorp.pinpoint.web.dao.ApplicationIndexDao; +import com.navercorp.pinpoint.web.service.ApplicationService; import com.navercorp.pinpoint.web.vo.Application; import jakarta.annotation.Nonnull; import org.springframework.batch.core.ExitStatus; @@ -27,26 +27,27 @@ import java.util.List; import java.util.Objects; import java.util.Queue; +import java.util.UUID; import java.util.concurrent.ConcurrentLinkedQueue; /** * @author youngjin.kim2 */ -public class AgentCountReader implements ItemReader, StepExecutionListener { +public class AgentCountReader implements ItemReader, StepExecutionListener { - private final ApplicationIndexDao applicationIndexDao; + private final ApplicationService applicationService; - private Queue applicationNameQueue; + private Queue applicationNameQueue; - public AgentCountReader(ApplicationIndexDao applicationIndexDao) { - this.applicationIndexDao = Objects.requireNonNull(applicationIndexDao, "applicationIndexDao"); + public AgentCountReader(ApplicationService applicationService) { + this.applicationService = Objects.requireNonNull(applicationService, "applicationService"); } @Override public void beforeStep(@Nonnull StepExecution stepExecution) { - List applicationNames = applicationIndexDao.selectAllApplicationNames() + List applicationNames = applicationService.getApplications() .stream() - .map(Application::getName) + .map(Application::id) .toList(); this.applicationNameQueue = new ConcurrentLinkedQueue<>(applicationNames); } @@ -57,7 +58,7 @@ public ExitStatus afterStep(@Nonnull StepExecution stepExecution) { } @Override - public String read() { + public UUID read() { return applicationNameQueue.poll(); } diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/job/AgentRemover.java b/batch/src/main/java/com/navercorp/pinpoint/batch/job/AgentRemover.java index a7e605b810a69..bd9aaa9fcde25 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/job/AgentRemover.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/job/AgentRemover.java @@ -25,6 +25,7 @@ import java.util.List; import java.util.Objects; +import java.util.UUID; /** * @author youngjin.kim2 @@ -44,7 +45,7 @@ public void write(@Nonnull List serAgentKeys) throws Exception for (String serKey: serAgentKeys) { logger.info("Removing agent: {}", serKey); ClusterKey key = ClusterKey.parse(serKey); - this.agentService.remove(key.getApplicationName(), key.getAgentId()); + this.agentService.remove(UUID.fromString(key.getApplicationName()), key.getAgentId()); } } } diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/job/ApplicationCleaningProcessor.java b/batch/src/main/java/com/navercorp/pinpoint/batch/job/ApplicationCleaningProcessor.java index 4b62a869a6b87..27d027916fc8b 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/job/ApplicationCleaningProcessor.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/job/ApplicationCleaningProcessor.java @@ -30,65 +30,66 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.UUID; /** * @author youngjin.kim2 */ -public class ApplicationCleaningProcessor implements ItemProcessor> { +public class ApplicationCleaningProcessor implements ItemProcessor> { private static final Logger logger = LogManager.getLogger(ApplicationCleaningProcessor.class); private final BatchAgentService agentService; - private final BatchApplicationService applicationService; + private final BatchApplicationService batchApplicationService; private final Duration emptyDurationThreshold; public ApplicationCleaningProcessor( BatchAgentService agentService, - BatchApplicationService applicationService, + BatchApplicationService batchApplicationService, Duration emptyDurationThreshold ) { this.agentService = Objects.requireNonNull(agentService, "agentService"); - this.applicationService = Objects.requireNonNull(applicationService, "applicationService"); + this.batchApplicationService = Objects.requireNonNull(batchApplicationService, "batchApplicationService"); this.emptyDurationThreshold = Objects.requireNonNull(emptyDurationThreshold, "emptyDurationThreshold"); } @Override - public List process(@Nonnull String applicationName) throws Exception { - logger.info("Processing application: {}", applicationName); + public List process(@Nonnull UUID applicationId) throws Exception { + logger.info("Processing application: {}", applicationId); Range range = getRange(); - List agentIds = getAgents(applicationName); + List agentIds = getAgents(applicationId); List targets = new ArrayList<>(agentIds.size() + 1); for (String agentId: agentIds) { if (isAgentTarget(agentId, range)) { - String agentKey = ClusterKey.compose(applicationName, agentId, -1); + String agentKey = ClusterKey.compose(applicationId.toString(), agentId, -1); targets.add(new CleanTarget(CleanTarget.TYPE_AGENT, agentKey)); } } - if (targets.size() == agentIds.size() && isApplicationTarget(applicationName)) { - targets.add(new CleanTarget(CleanTarget.TYPE_APPLICATION, applicationName)); + if (targets.size() == agentIds.size() && isApplicationTarget(applicationId)) { + targets.add(new CleanTarget(CleanTarget.TYPE_APPLICATION, applicationId.toString())); } if (targets.isEmpty()) { return null; } - logger.info("Cleaning application {}: {}", applicationName, targets); + logger.info("Cleaning application {}: {}", applicationId, targets); return targets; } - private boolean isApplicationTarget(String applicationName) { - return !this.applicationService.isActive(applicationName, this.emptyDurationThreshold); + private boolean isApplicationTarget(UUID applicationId) { + return !this.batchApplicationService.isActive(applicationId, this.emptyDurationThreshold); } private boolean isAgentTarget(String agentId, Range range) { return !this.agentService.isActive(agentId, range); } - private List getAgents(String applicationName) { - return this.agentService.getIds(applicationName); + private List getAgents(UUID applicationId) { + return this.agentService.getIds(applicationId); } private Range getRange() { diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/job/ApplicationReader.java b/batch/src/main/java/com/navercorp/pinpoint/batch/job/ApplicationReader.java index adc3a04a5c9c4..ed5f703965251 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/job/ApplicationReader.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/job/ApplicationReader.java @@ -26,19 +26,20 @@ import java.util.List; import java.util.Objects; +import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; /** * @author youngjin.kim2 */ -public class ApplicationReader implements ItemStreamReader { +public class ApplicationReader implements ItemStreamReader { private static final Logger logger = LogManager.getLogger(ApplicationReader.class); private static final String CURRENT_INDEX = "current.index"; private final BatchApplicationService applicationService; - private List applicationNames; + private List applicationIds; private final AtomicInteger currentIndexAtom = new AtomicInteger(0); @@ -47,11 +48,11 @@ public ApplicationReader(BatchApplicationService applicationService) { } @Override - public String read() { + public UUID read() { int currentIndex = currentIndexAtom.getAndIncrement(); - if (currentIndex < applicationNames.size()) { - logger.info("Reading application: {} / {}", currentIndex, applicationNames.size()); - return applicationNames.get(currentIndex); + if (currentIndex < applicationIds.size()) { + logger.info("Reading application: {} / {}", currentIndex, applicationIds.size()); + return applicationIds.get(currentIndex); } else { return null; } @@ -60,8 +61,8 @@ public String read() { @Override public void open(@Nonnull ExecutionContext executionContext) throws ItemStreamException { logger.info("Opened application reader"); - this.applicationNames = getAllApplications(); - logger.info("Application reader has {} applications", applicationNames.size()); + this.applicationIds = getAllApplications(); + logger.info("Application reader has {} applications", applicationIds.size()); if (executionContext.containsKey(CURRENT_INDEX)) { int loadedIndex = executionContext.getInt(CURRENT_INDEX); this.currentIndexAtom.set(loadedIndex); @@ -82,7 +83,7 @@ public void close() throws ItemStreamException { logger.info("Closing application reader"); } - private List getAllApplications() { + private List getAllApplications() { return this.applicationService.getAll() .stream() .sorted() diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/job/ApplicationRemover.java b/batch/src/main/java/com/navercorp/pinpoint/batch/job/ApplicationRemover.java index e7b21ffe2a010..4126e4fa75857 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/job/ApplicationRemover.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/job/ApplicationRemover.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Objects; +import java.util.UUID; /** * @author youngjin.kim2 @@ -38,11 +39,12 @@ public ApplicationRemover(BatchApplicationService applicationService) { } @Override - public void write(List applicationNames) throws Exception { - for (String applicationName : applicationNames) { - logger.info("Removing application: {}", applicationName); - this.applicationService.remove(applicationName); - logger.info("Removed application: {}", applicationName); + public void write(List applicationIds) throws Exception { + for (String applicationIdStr : applicationIds) { + UUID applicationId = UUID.fromString(applicationIdStr); + logger.info("Removing application: {}", applicationId); + this.applicationService.remove(applicationId); + logger.info("Removed application: {}", applicationId); } } } diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/job/CleanupInactiveAgentsTasklet.java b/batch/src/main/java/com/navercorp/pinpoint/batch/job/CleanupInactiveAgentsTasklet.java index 339ca8aa69f9e..27a1b49b97703 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/job/CleanupInactiveAgentsTasklet.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/job/CleanupInactiveAgentsTasklet.java @@ -17,8 +17,8 @@ package com.navercorp.pinpoint.batch.job; import com.navercorp.pinpoint.batch.common.BatchProperties; -import com.navercorp.pinpoint.web.dao.ApplicationIndexDao; import com.navercorp.pinpoint.web.service.AdminService; +import com.navercorp.pinpoint.web.service.ApplicationService; import com.navercorp.pinpoint.web.vo.Application; import jakarta.annotation.Nonnull; import org.apache.logging.log4j.LogManager; @@ -50,7 +50,7 @@ public class CleanupInactiveAgentsTasklet implements Tasklet, StepExecutionListe private final AdminService adminService; - private final ApplicationIndexDao applicationIndexDao; + private final ApplicationService applicationService; private Queue applicationNameQueue; private int progress; @@ -60,19 +60,19 @@ public class CleanupInactiveAgentsTasklet implements Tasklet, StepExecutionListe public CleanupInactiveAgentsTasklet( BatchProperties batchProperties, AdminService adminService, - ApplicationIndexDao applicationIndexDao + ApplicationService applicationService ) { Objects.requireNonNull(batchProperties, "batchProperties"); this.durationDays = batchProperties.getCleanupInactiveAgentsDurationDays(); this.adminService = Objects.requireNonNull(adminService, "adminService"); - this.applicationIndexDao = Objects.requireNonNull(applicationIndexDao, "applicationIndexDao"); + this.applicationService = Objects.requireNonNull(applicationService, "applicationService"); } @Override public void beforeStep(@Nonnull StepExecution stepExecution) { - List applicationNames = this.applicationIndexDao.selectAllApplicationNames() + List applicationNames = this.applicationService.getApplications() .stream() - .map(Application::getName) + .map(Application::name) .distinct() .collect(Collectors.toList()); Collections.shuffle(applicationNames); diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/service/AlarmServiceImpl.java b/batch/src/main/java/com/navercorp/pinpoint/batch/service/AlarmServiceImpl.java index 3fcdc70b9df8b..49e63986b8eab 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/service/AlarmServiceImpl.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/service/AlarmServiceImpl.java @@ -64,7 +64,7 @@ public void updateBeforeCheckerResult(CheckerResult beforeCheckerResult, AlarmCh beforeCheckerResult.increseCount(); alarmDao.insertCheckerResult(beforeCheckerResult); } else { - alarmDao.insertCheckerResult(new CheckerResult(checker.getRule().getRuleId(), checker.getRule().getApplicationId(), checker.getRule().getCheckerName(), false, 0, 1)); + alarmDao.insertCheckerResult(new CheckerResult(checker.getRule().getRuleId(), checker.getRule().getApplicationName(), checker.getRule().getCheckerName(), false, 0, 1)); } diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/service/BatchAgentService.java b/batch/src/main/java/com/navercorp/pinpoint/batch/service/BatchAgentService.java index a3f447ef1a48e..3e42d1dd1b024 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/service/BatchAgentService.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/service/BatchAgentService.java @@ -19,16 +19,17 @@ import com.navercorp.pinpoint.common.server.util.time.Range; import java.util.List; +import java.util.UUID; /** * @author youngjin.kim2 */ public interface BatchAgentService { - List getIds(String applicationName); + List getIds(UUID applicationId); boolean isActive(String agentId, Range range); - void remove(String applicationName, String agentId); + void remove(UUID applicationId, String agentId); } diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/service/BatchAgentServiceImpl.java b/batch/src/main/java/com/navercorp/pinpoint/batch/service/BatchAgentServiceImpl.java index 617c56ce9f14a..f4ad2b41610a5 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/service/BatchAgentServiceImpl.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/service/BatchAgentServiceImpl.java @@ -17,31 +17,32 @@ package com.navercorp.pinpoint.batch.service; import com.navercorp.pinpoint.common.server.util.time.Range; -import com.navercorp.pinpoint.web.dao.ApplicationIndexDao; import com.navercorp.pinpoint.web.service.AgentInfoService; +import com.navercorp.pinpoint.web.service.ApplicationService; import java.util.List; import java.util.Objects; +import java.util.UUID; /** * @author youngjin.kim2 */ public class BatchAgentServiceImpl implements BatchAgentService { - private final ApplicationIndexDao applicationIndexDao; + private final ApplicationService applicationService; private final AgentInfoService agentInfoService; public BatchAgentServiceImpl( - ApplicationIndexDao applicationIndexDao, + ApplicationService applicationService, AgentInfoService agentInfoService ) { - this.applicationIndexDao = Objects.requireNonNull(applicationIndexDao, "applicationIndexDao"); + this.applicationService = Objects.requireNonNull(applicationService, "applicationService"); this.agentInfoService = Objects.requireNonNull(agentInfoService, "agentInfoService"); } @Override - public List getIds(String applicationName) { - return this.applicationIndexDao.selectAgentIds(applicationName); + public List getIds(UUID applicationId) { + return this.applicationService.getAgents(applicationId); } @Override @@ -50,7 +51,7 @@ public boolean isActive(String agentId, Range range) { } @Override - public void remove(String applicationName, String agentId) { - this.applicationIndexDao.deleteAgentId(applicationName, agentId); + public void remove(UUID applicationId, String agentId) { + this.applicationService.deleteAgent(applicationId, agentId); } } diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/service/BatchApplicationService.java b/batch/src/main/java/com/navercorp/pinpoint/batch/service/BatchApplicationService.java index 49d9db155e386..d477a09a5e1b2 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/service/BatchApplicationService.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/service/BatchApplicationService.java @@ -18,16 +18,17 @@ import java.time.Duration; import java.util.List; +import java.util.UUID; /** * @author youngjin.kim2 */ public interface BatchApplicationService { - List getAll(); + List getAll(); - boolean isActive(String applicationName, Duration duration); + boolean isActive(UUID applicationId, Duration duration); - void remove(String applicationName); + void remove(UUID applicationId); } diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/service/BatchApplicationServiceImpl.java b/batch/src/main/java/com/navercorp/pinpoint/batch/service/BatchApplicationServiceImpl.java index 7ab50947420e2..c7ec6339ce35d 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/service/BatchApplicationServiceImpl.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/service/BatchApplicationServiceImpl.java @@ -17,14 +17,15 @@ package com.navercorp.pinpoint.batch.service; import com.navercorp.pinpoint.common.server.util.time.Range; -import com.navercorp.pinpoint.web.dao.ApplicationIndexDao; -import com.navercorp.pinpoint.web.dao.ApplicationTraceIndexDao; +import com.navercorp.pinpoint.web.dao.ApplicationTraceIndexDaoV2; +import com.navercorp.pinpoint.web.service.ApplicationService; import com.navercorp.pinpoint.web.vo.Application; import org.springframework.stereotype.Service; import java.time.Duration; import java.util.List; import java.util.Objects; +import java.util.UUID; /** * @author youngjin.kim2 @@ -32,38 +33,39 @@ @Service public class BatchApplicationServiceImpl implements BatchApplicationService { - private final ApplicationIndexDao applicationIndexDao; - private final ApplicationTraceIndexDao applicationTraceIndexDao; + private final ApplicationService applicationService; + private final ApplicationTraceIndexDaoV2 applicationTraceIndexDao; public BatchApplicationServiceImpl( - ApplicationIndexDao applicationIndexDao, - ApplicationTraceIndexDao applicationTraceIndexDao + ApplicationService applicationService, + ApplicationTraceIndexDaoV2 applicationTraceIndexDao ) { - this.applicationIndexDao = Objects.requireNonNull(applicationIndexDao, "applicationIndexDao"); + this.applicationService = Objects.requireNonNull(applicationService, "applicationService"); this.applicationTraceIndexDao = Objects.requireNonNull(applicationTraceIndexDao, "applicationTraceIndexDao"); } @Override - public List getAll() { - return this.applicationIndexDao.selectAllApplicationNames() + public List getAll() { + return this.applicationService.getApplications() .stream() - .map(Application::getName) + .map(Application::id) .toList(); } @Override - public boolean isActive(String applicationName, Duration duration) { + public boolean isActive(UUID applicationId, Duration duration) { long now = System.currentTimeMillis(); Range range = Range.between(now - duration.toMillis(), now); - return hasTrace(applicationName, range); + return hasTrace(applicationId, range); } - private boolean hasTrace(String applicationName, Range range) { - return this.applicationTraceIndexDao.hasTraceIndex(applicationName, range,false); + private boolean hasTrace(UUID applicationId, Range range) { + return this.applicationTraceIndexDao.hasTraceIndex(applicationId, range,false); } @Override - public void remove(String applicationName) { - this.applicationIndexDao.deleteApplicationName(applicationName); + public void remove(UUID applicationId) { + this.applicationService.deleteApplication(applicationId); } + } diff --git a/batch/src/main/resources/job/applicationContext-cleanupInactiveApplicationsJob.xml b/batch/src/main/resources/job/applicationContext-cleanupInactiveApplicationsJob.xml index 7c708de984fcd..b1a78d70a55a7 100644 --- a/batch/src/main/resources/job/applicationContext-cleanupInactiveApplicationsJob.xml +++ b/batch/src/main/resources/job/applicationContext-cleanupInactiveApplicationsJob.xml @@ -53,7 +53,7 @@ - + diff --git a/batch/src/test/java/com/navercorp/pinpoint/batch/alarm/AlarmProcessorTest.java b/batch/src/test/java/com/navercorp/pinpoint/batch/alarm/AlarmProcessorTest.java index 406cdea5a8235..dda419dd681c3 100644 --- a/batch/src/test/java/com/navercorp/pinpoint/batch/alarm/AlarmProcessorTest.java +++ b/batch/src/test/java/com/navercorp/pinpoint/batch/alarm/AlarmProcessorTest.java @@ -6,9 +6,9 @@ import com.navercorp.pinpoint.common.trace.ServiceType; import com.navercorp.pinpoint.web.alarm.CheckerCategory; import com.navercorp.pinpoint.web.alarm.vo.Rule; -import com.navercorp.pinpoint.web.dao.ApplicationIndexDao; import com.navercorp.pinpoint.web.service.AgentInfoService; import com.navercorp.pinpoint.web.service.AlarmService; +import com.navercorp.pinpoint.web.service.ApplicationService; import com.navercorp.pinpoint.web.vo.Application; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -42,7 +42,7 @@ public class AlarmProcessorTest { private AlarmService alarmService; @Mock - private ApplicationIndexDao applicationIndexDao; + private ApplicationService applicationService; @Mock private AgentInfoService agentInfoService; @@ -63,7 +63,7 @@ public void shouldSkipIfNoRule() { when(alarmService.selectRuleByApplicationId(SERVICE_NAME)).thenReturn(List.of()); - AlarmProcessor proc = new AlarmProcessor(dataCollectorFactory, alarmService, applicationIndexDao, agentInfoService, checkerRegistry); + AlarmProcessor proc = new AlarmProcessor(dataCollectorFactory, alarmService, applicationService, agentInfoService, checkerRegistry); AppAlarmChecker checker = proc.process(app); assertNull(checker, "should be skipped"); @@ -82,7 +82,7 @@ public void test() { when(agentStatDataCollector.getHeapUsageRate()).thenReturn(heapUsageRate); // Executions - AlarmProcessor processor = new AlarmProcessor(dataCollectorFactory, alarmService, applicationIndexDao, agentInfoService, checkerRegistry); + AlarmProcessor processor = new AlarmProcessor(dataCollectorFactory, alarmService, applicationService, agentInfoService, checkerRegistry); AppAlarmChecker appChecker = processor.process(application); // Validations diff --git a/batch/src/test/java/com/navercorp/pinpoint/batch/alarm/AlarmReaderTest.java b/batch/src/test/java/com/navercorp/pinpoint/batch/alarm/AlarmReaderTest.java index 3b9786cdf71af..f86daef7c3c08 100644 --- a/batch/src/test/java/com/navercorp/pinpoint/batch/alarm/AlarmReaderTest.java +++ b/batch/src/test/java/com/navercorp/pinpoint/batch/alarm/AlarmReaderTest.java @@ -17,8 +17,8 @@ package com.navercorp.pinpoint.batch.alarm; import com.navercorp.pinpoint.common.trace.ServiceType; -import com.navercorp.pinpoint.web.dao.ApplicationIndexDao; import com.navercorp.pinpoint.web.service.AlarmService; +import com.navercorp.pinpoint.web.service.ApplicationService; import com.navercorp.pinpoint.web.vo.Application; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -27,6 +27,7 @@ import org.springframework.batch.core.StepExecution; import java.util.List; +import java.util.UUID; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; @@ -36,7 +37,7 @@ public class AlarmReaderTest { @Mock - private ApplicationIndexDao applicationIndexDao; + private ApplicationService applicationService; @Mock private AlarmService alarmService; @@ -45,22 +46,22 @@ public class AlarmReaderTest { private StepExecution stepExecution; private static final List mockApplications = List.of( - new Application("testApplication0", ServiceType.TEST), - new Application("testApplication1", ServiceType.TEST), - new Application("testApplication2", ServiceType.TEST), - new Application("testApplication3", ServiceType.TEST) + new Application(UUID.randomUUID(), "testApplication0", ServiceType.TEST), + new Application(UUID.randomUUID(), "testApplication1", ServiceType.TEST), + new Application(UUID.randomUUID(), "testApplication2", ServiceType.TEST), + new Application(UUID.randomUUID(), "testApplication3", ServiceType.TEST) ); private static final List applicationIds = mockApplications.stream() - .map(Application::getName) + .map(Application::name) .toList(); @Test public void pollingTest() { - when(applicationIndexDao.selectAllApplicationNames()).thenReturn(mockApplications); + when(applicationService.getApplications()).thenReturn(mockApplications); when(alarmService.selectApplicationId()).thenReturn(applicationIds); - AlarmReader reader = new AlarmReader(applicationIndexDao, alarmService); + AlarmReader reader = new AlarmReader(applicationService, alarmService); reader.beforeStep(stepExecution); for (int i = 0; i < 4; i++) { assertEquals(mockApplications.get(i), reader.read(), "polled application should be same"); @@ -70,9 +71,9 @@ public void pollingTest() { @Test public void pollingFromEmptyTest() { - when(applicationIndexDao.selectAllApplicationNames()).thenReturn(List.of()); + when(applicationService.getApplications()).thenReturn(List.of()); - AlarmReader reader = new AlarmReader(applicationIndexDao, alarmService); + AlarmReader reader = new AlarmReader(applicationService, alarmService); reader.beforeStep(stepExecution); assertNull(reader.read()); } diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/ApplicationInfoDao.java b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/ApplicationInfoDao.java new file mode 100644 index 0000000000000..3d9f02dbf5e85 --- /dev/null +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/ApplicationInfoDao.java @@ -0,0 +1,34 @@ +/* + * Copyright 2024 NAVER Corp. + * + * 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 implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.collector.dao; + +import com.navercorp.pinpoint.common.id.ApplicationId; + +/** + * @author youngjin.kim2 + */ +public interface ApplicationInfoDao { + + ApplicationId getApplicationId(String applicationName); + + String getApplicationName(ApplicationId applicationId); + + ApplicationId putApplicationIdIfAbsent(String applicationName, ApplicationId applicationId); + + void ensureInverse(String applicationName, ApplicationId applicationId); + +} diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/MapStatisticsCalleeDao.java b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/MapStatisticsCalleeDao.java index 3cd392c1a69a2..ae14b24c6f5c7 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/MapStatisticsCalleeDao.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/MapStatisticsCalleeDao.java @@ -24,5 +24,7 @@ * @author emeroad */ public interface MapStatisticsCalleeDao extends CachedStatisticsDao { - void update(String calleeApplicationName, ServiceType calleeServiceType, String callerApplicationName, ServiceType callerServiceType, String callerHost, int elapsed, boolean isError); + void update(String calleeApplicationName, ServiceType calleeServiceType, + String callerApplicationName, ServiceType callerServiceType, String callerHost, + int elapsed, boolean isError); } diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/MapStatisticsCallerDao.java b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/MapStatisticsCallerDao.java index a0db76976df39..1cd3abcd29a99 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/MapStatisticsCallerDao.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/MapStatisticsCallerDao.java @@ -24,5 +24,7 @@ * @author emeroad */ public interface MapStatisticsCallerDao extends CachedStatisticsDao { - void update(String callerApplicationName, ServiceType callerServiceType, String callerAgentId, String calleeApplicationName, ServiceType calleeServiceType, String calleeHost, int elapsed, boolean isError); + void update(String callerApplicationName, ServiceType callerServiceType, String callerAgentId, + String calleeApplicationName, ServiceType calleeServiceType, String calleeHost, + int elapsed, boolean isError); } diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseAgentEventDao.java b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseAgentEventDao.java index 15d22c7484de9..d820c77b0597f 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseAgentEventDao.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseAgentEventDao.java @@ -86,6 +86,6 @@ public void insert(AgentEventBo agentEventBo) { } byte[] createRowKey(String agentId, long eventTimestamp) { - return rowKeyEncoder.encodeRowKey(agentId, eventTimestamp); + return rowKeyEncoder.encodeRowKey(agentId, eventTimestamp); } } \ No newline at end of file diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseAgentInfoDao.java b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseAgentInfoDao.java index 1686608f90b82..8f55c3cefc0b2 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseAgentInfoDao.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseAgentInfoDao.java @@ -76,7 +76,7 @@ public void insert(AgentInfoBo agentInfo) { final byte[] rowKey = rowKeyEncoder.encodeRowKey(agentInfo.getAgentId(), agentInfo.getStartTime()); final Put put = new Put(rowKey); - // should add additional agent informations. for now added only starttime for sqlMetaData + // should add additional agent information. for now added only start-time for sqlMetaData final byte[] agentInfoBoValue = agentInfo.writeValue(); put.addColumn(DESCRIPTOR.getName(), DESCRIPTOR.QUALIFIER_IDENTIFIER, agentInfoBoValue); diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseApplicationIndexDao.java b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseApplicationIndexDao.java index dd9978c97eb53..02939149ba801 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseApplicationIndexDao.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseApplicationIndexDao.java @@ -21,12 +21,15 @@ import com.navercorp.pinpoint.common.hbase.HbaseColumnFamily; import com.navercorp.pinpoint.common.hbase.HbaseOperations; import com.navercorp.pinpoint.common.hbase.TableNameProvider; +import com.navercorp.pinpoint.common.hbase.ValueMapper; import com.navercorp.pinpoint.common.server.bo.AgentInfoBo; +import com.navercorp.pinpoint.common.util.UuidUtils; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.util.Bytes; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Repository; import java.util.Objects; @@ -42,15 +45,20 @@ public class HbaseApplicationIndexDao implements ApplicationIndexDao { private final Logger logger = LogManager.getLogger(this.getClass()); - private static final HbaseColumnFamily.ApplicationIndex DESCRIPTOR = HbaseColumnFamily.APPLICATION_INDEX_AGENTS; + private static final HbaseColumnFamily.ApplicationIndex DESCRIPTOR = HbaseColumnFamily.APPLICATION_INDEX_AGENTS_VER2; private final HbaseOperations hbaseTemplate; private final TableNameProvider tableNameProvider; + private final ValueMapper valueMapper; - public HbaseApplicationIndexDao(HbaseOperations hbaseTemplate, TableNameProvider tableNameProvider) { + public HbaseApplicationIndexDao( + HbaseOperations hbaseTemplate, + TableNameProvider tableNameProvider, + @Qualifier("applicationIndexValueMapper") ValueMapper valueMapper) { this.hbaseTemplate = Objects.requireNonNull(hbaseTemplate, "hbaseTemplate"); this.tableNameProvider = Objects.requireNonNull(tableNameProvider, "tableNameProvider"); + this.valueMapper = Objects.requireNonNull(valueMapper, "valueMapper"); } @Override @@ -62,9 +70,9 @@ public void insert(final AgentInfoBo agentInfo) { // Assert applicationName CollectorUtils.checkApplicationName(agentInfo.getApplicationName()); - final Put put = new Put(Bytes.toBytes(agentInfo.getApplicationName())); + final Put put = new Put(UuidUtils.toBytes(agentInfo.getApplicationId().value())); final byte[] qualifier = Bytes.toBytes(agentInfo.getAgentId()); - final byte[] value = Bytes.toBytes(agentInfo.getServiceTypeCode()); + final byte[] value = this.valueMapper.mapValue(agentInfo); put.addColumn(DESCRIPTOR.getName(), qualifier, value); final TableName applicationIndexTableName = tableNameProvider.getTableName(DESCRIPTOR.getTable()); diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseApplicationInfoDao.java b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseApplicationInfoDao.java new file mode 100644 index 0000000000000..d55bb2f807daf --- /dev/null +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseApplicationInfoDao.java @@ -0,0 +1,177 @@ +/* + * Copyright 2024 NAVER Corp. + * + * 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 implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.collector.dao.hbase; + +import com.navercorp.pinpoint.collector.dao.ApplicationInfoDao; +import com.navercorp.pinpoint.common.hbase.HbaseColumnFamily; +import com.navercorp.pinpoint.common.hbase.HbaseOperations; +import com.navercorp.pinpoint.common.hbase.RowMapper; +import com.navercorp.pinpoint.common.hbase.TableNameProvider; +import com.navercorp.pinpoint.common.id.ApplicationId; +import com.navercorp.pinpoint.common.server.util.HashUtils; +import com.navercorp.pinpoint.common.util.BytesUtils; +import com.navercorp.pinpoint.common.util.UuidUtils; +import org.apache.hadoop.hbase.Cell; +import org.apache.hadoop.hbase.TableName; +import org.apache.hadoop.hbase.client.CheckAndMutate; +import org.apache.hadoop.hbase.client.CheckAndMutateResult; +import org.apache.hadoop.hbase.client.Get; +import org.apache.hadoop.hbase.client.Put; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; + +import java.util.Objects; +import java.util.UUID; + +/** + * @author youngjin.kim2 + */ +@Repository +public class HbaseApplicationInfoDao implements ApplicationInfoDao { + private final Logger logger = LogManager.getLogger(this.getClass()); + + private static final HbaseColumnFamily.ApplicationId DESCRIPTOR_FORWARD = HbaseColumnFamily.APPLICATION_ID_FORWARD; + private static final HbaseColumnFamily.ApplicationId DESCRIPTOR_INVERSE = HbaseColumnFamily.APPLICATION_ID_INVERSE; + + private final HbaseOperations hbaseTemplate; + private final TableNameProvider tableNameProvider; + private final RowMapper forwardRowMapper; + private final RowMapper inverseRowMapper; + + public HbaseApplicationInfoDao( + HbaseOperations hbaseTemplate, + TableNameProvider tableNameProvider, + @Qualifier("applicationIdForwardMapper") RowMapper forwardRowMapper, + @Qualifier("applicationIdInverseMapper") RowMapper inverseRowMapper) { + this.hbaseTemplate = Objects.requireNonNull(hbaseTemplate, "hbaseTemplate"); + this.tableNameProvider = Objects.requireNonNull(tableNameProvider, "tableNameProvider"); + this.forwardRowMapper = Objects.requireNonNull(forwardRowMapper, "forwardRowMapper"); + this.inverseRowMapper = Objects.requireNonNull(inverseRowMapper, "inverseRowMapper"); + } + + @Override + public ApplicationId getApplicationId(String applicationName) { + Objects.requireNonNull(applicationName, "applicationName"); + + if (logger.isDebugEnabled()) { + logger.debug("getApplicationId() applicationName:{}", applicationName); + } + + TableName tableName = this.tableNameProvider.getTableName(DESCRIPTOR_FORWARD.getTable()); + byte[] rowKey = encodeStringAsRowKey(applicationName); + byte[] family = DESCRIPTOR_FORWARD.getName(); + byte[] qualifier = DESCRIPTOR_FORWARD.getName(); + + Get get = new Get(rowKey); + get.addColumn(family, qualifier); + + return ApplicationId.of(hbaseTemplate.get(tableName, get, this.forwardRowMapper)); + } + + @Override + public String getApplicationName(ApplicationId applicationId) { + Objects.requireNonNull(applicationId, "applicationId"); + + if (logger.isDebugEnabled()) { + logger.debug("getApplicationName() applicationId:{}", applicationId); + } + + TableName tableName = this.tableNameProvider.getTableName(DESCRIPTOR_INVERSE.getTable()); + byte[] rowKey = encodeUuidAsRowKey(applicationId.value()); + byte[] family = DESCRIPTOR_INVERSE.getName(); + byte[] qualifier = DESCRIPTOR_INVERSE.getName(); + + Get get = new Get(rowKey); + get.addColumn(family, qualifier); + + return hbaseTemplate.get(tableName, get, this.inverseRowMapper); + } + + @Override + public ApplicationId putApplicationIdIfAbsent(String applicationName, ApplicationId applicationId) { + Objects.requireNonNull(applicationName, "applicationName"); + Objects.requireNonNull(applicationId, "applicationId"); + + if (logger.isDebugEnabled()) { + logger.debug("putApplicationIdIfAbsent() applicationName:{}, applicationId:{}", applicationName, applicationId); + } + + byte[] family = DESCRIPTOR_FORWARD.getName(); + byte[] qualifier = DESCRIPTOR_FORWARD.getName(); + + CheckAndMutateResult camResult = putForward(applicationName, applicationId); + + if (camResult.isSuccess()) { + putInverse(applicationId, applicationName); + } + + Cell cell = camResult.getResult().getColumnLatestCell(family, qualifier); + return ApplicationId.of(UuidUtils.fromBytes(cell.getValueArray())); + } + + @Override + public void ensureInverse(String applicationName, ApplicationId applicationId) { + Objects.requireNonNull(applicationName, "applicationName"); + Objects.requireNonNull(applicationId, "applicationId"); + + if (logger.isDebugEnabled()) { + logger.debug("ensureInverse() applicationName:{}, applicationId:{}", applicationName, applicationId); + } + + putInverse(applicationId, applicationName); + } + + private CheckAndMutateResult putForward(String applicationName, ApplicationId applicationId) { + TableName tableName = this.tableNameProvider.getTableName(DESCRIPTOR_FORWARD.getTable()); + byte[] rowKey = encodeStringAsRowKey(applicationName); + byte[] family = DESCRIPTOR_FORWARD.getName(); + byte[] qualifier = DESCRIPTOR_FORWARD.getName(); + byte[] value = UuidUtils.toBytes(applicationId.value()); + + Put put = new Put(rowKey); + put.addColumn(family, qualifier, value); + + CheckAndMutate checkAndMutate = CheckAndMutate.newBuilder(rowKey) + .ifNotExists(family, qualifier) + .build(put); + + return hbaseTemplate.checkAndMutate(tableName, checkAndMutate); + } + + private void putInverse(ApplicationId applicationId, String applicationName) { + TableName tableName = this.tableNameProvider.getTableName(DESCRIPTOR_INVERSE.getTable()); + byte[] rowKey = encodeUuidAsRowKey(applicationId.value()); + byte[] family = DESCRIPTOR_INVERSE.getName(); + byte[] qualifier = DESCRIPTOR_INVERSE.getName(); + byte[] value = BytesUtils.toBytes(applicationName); + + Put put = new Put(rowKey); + put.addColumn(family, qualifier, value); + + hbaseTemplate.put(tableName, put); + } + + private static byte[] encodeStringAsRowKey(String str) { + return HashUtils.hashBytes(BytesUtils.toBytes(str)).asBytes(); + } + + private static byte[] encodeUuidAsRowKey(UUID uuid) { + return UuidUtils.toBytes(uuid); + } +} diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseApplicationTraceIndexDao.java b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseApplicationTraceIndexDao.java index 2beffeb326983..5280b00235460 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseApplicationTraceIndexDao.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseApplicationTraceIndexDao.java @@ -48,15 +48,13 @@ public class HbaseApplicationTraceIndexDao implements ApplicationTraceIndexDao { private final Logger logger = LogManager.getLogger(this.getClass()); - private static final HbaseColumnFamily.ApplicationTraceIndexTrace INDEX = HbaseColumnFamily.APPLICATION_TRACE_INDEX_TRACE; - private static final HbaseColumnFamily.ApplicationTraceIndexTrace META = HbaseColumnFamily.APPLICATION_TRACE_INDEX_META; + private static final HbaseColumnFamily.ApplicationTraceIndexTrace INDEX = HbaseColumnFamily.APPLICATION_TRACE_INDEX_TRACE_VER2; + private static final HbaseColumnFamily.ApplicationTraceIndexTrace META = HbaseColumnFamily.APPLICATION_TRACE_INDEX_META_VER2; private final HbasePutWriter putWriter; private final TableNameProvider tableNameProvider; - private final RowKeyEncoder applicationIndexRowKeyEncoder; - public HbaseApplicationTraceIndexDao(HbasePutWriter putWriter, TableNameProvider tableNameProvider, @Qualifier("applicationIndexRowKeyEncoder") RowKeyEncoder applicationIndexRowKeyEncoder) { @@ -77,7 +75,7 @@ public void insert(final SpanBo span) { // Assert agentId CollectorUtils.checkAgentId(span.getAgentId()); // Assert applicationName - CollectorUtils.checkApplicationName(span.getApplicationId()); + CollectorUtils.checkApplicationName(span.getApplicationName()); final long acceptedTime = span.getCollectorAcceptTime(); final byte[] distributedKey = applicationIndexRowKeyEncoder.encodeRowKey(span); diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseTraceDaoV2.java b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseTraceDaoV2.java index 596618e3cfdc6..833c3f62a93ed 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseTraceDaoV2.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseTraceDaoV2.java @@ -100,7 +100,7 @@ public CompletableFuture asyncInsert(final SpanBo spanBo) { // Assert agentId CollectorUtils.checkAgentId(spanBo.getAgentId()); // Assert applicationName - CollectorUtils.checkApplicationName(spanBo.getApplicationId()); + CollectorUtils.checkApplicationName(spanBo.getApplicationName()); long acceptedTime = spanBo.getCollectorAcceptTime(); diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/encode/ApplicationIndexRowKeyEncoderV1.java b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/encode/ApplicationIndexRowKeyEncoderV1.java index ac140697a64c4..aca4a18318283 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/encode/ApplicationIndexRowKeyEncoderV1.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/encode/ApplicationIndexRowKeyEncoderV1.java @@ -38,7 +38,7 @@ public ApplicationIndexRowKeyEncoderV1(AbstractRowKeyDistributor rowKeyDistribut public byte[] encodeRowKey(SpanBo span) { // distribute key evenly long acceptedTime = span.getCollectorAcceptTime(); - final byte[] applicationTraceIndexRowKey = rowKeyEncoder.encodeRowKey(span.getApplicationId(), acceptedTime); + final byte[] applicationTraceIndexRowKey = rowKeyEncoder.encodeRowKey(span.getApplicationName(), acceptedTime); return rowKeyDistributor.getDistributedKey(applicationTraceIndexRowKey); } } diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/encode/ApplicationIndexRowKeyEncoderV2.java b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/encode/ApplicationIndexRowKeyEncoderV2.java index 5c7bf3c6560b3..9c8dd3add65c1 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/encode/ApplicationIndexRowKeyEncoderV2.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/encode/ApplicationIndexRowKeyEncoderV2.java @@ -27,6 +27,7 @@ import org.apache.logging.log4j.Logger; import java.util.Objects; +import java.util.UUID; public class ApplicationIndexRowKeyEncoderV2 implements RowKeyEncoder { @@ -45,17 +46,17 @@ public byte[] encodeRowKey(SpanBo span) { // distribute key evenly long acceptedTime = span.getCollectorAcceptTime(); byte fuzzyKey = fuzzyRowKeyFactory.getKey(span.getElapsed()); - final byte[] appTraceIndexRowKey = newRowKey(span.getApplicationId(), acceptedTime, fuzzyKey); + final byte[] appTraceIndexRowKey = newRowKey(span.getApplicationId().value(), acceptedTime, fuzzyKey); return rowKeyDistributor.getDistributedKey(appTraceIndexRowKey); } - byte[] newRowKey(String applicationName, long acceptedTime, byte fuzzySlotKey) { - Objects.requireNonNull(applicationName, "applicationName"); + byte[] newRowKey(UUID applicationId, long acceptedTime, byte fuzzySlotKey) { + Objects.requireNonNull(applicationId, "applicationId"); if (logger.isDebugEnabled()) { logger.debug("fuzzySlotKey:{}", fuzzySlotKey); } - byte[] rowKey = rowKeyEncoder.encodeRowKey(applicationName, acceptedTime); + byte[] rowKey = rowKeyEncoder.encodeRowKey(applicationId, acceptedTime); byte[] fuzzyRowKey = new byte[rowKey.length + 1]; System.arraycopy(rowKey, 0, fuzzyRowKey, 0, rowKey.length); diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/mapper/ApplicationIndexValueMapper.java b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/mapper/ApplicationIndexValueMapper.java new file mode 100644 index 0000000000000..c9abb7e02b521 --- /dev/null +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/mapper/ApplicationIndexValueMapper.java @@ -0,0 +1,37 @@ +/* + * Copyright 2024 NAVER Corp. + * + * 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 com.navercorp.pinpoint.collector.dao.hbase.mapper; + +import com.navercorp.pinpoint.common.buffer.AutomaticBuffer; +import com.navercorp.pinpoint.common.buffer.Buffer; +import com.navercorp.pinpoint.common.hbase.ValueMapper; +import com.navercorp.pinpoint.common.server.bo.AgentInfoBo; +import org.springframework.stereotype.Component; + +/** + * @author youngjin.kim2 + */ +@Component +public class ApplicationIndexValueMapper implements ValueMapper { + + @Override + public byte[] mapValue(AgentInfoBo value) { + Buffer buffer = new AutomaticBuffer(); + buffer.putShort(value.getServiceTypeCode()); + return buffer.getBuffer(); + } + +} diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/handler/grpc/GrpcSpanChunkHandler.java b/collector/src/main/java/com/navercorp/pinpoint/collector/handler/grpc/GrpcSpanChunkHandler.java index d71f097a92f8f..4039e38a9948f 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/handler/grpc/GrpcSpanChunkHandler.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/handler/grpc/GrpcSpanChunkHandler.java @@ -5,7 +5,9 @@ import com.navercorp.pinpoint.collector.handler.SimpleHandler; import com.navercorp.pinpoint.collector.sampler.Sampler; import com.navercorp.pinpoint.collector.sampler.SpanSamplerFactory; +import com.navercorp.pinpoint.collector.service.ApplicationInfoService; import com.navercorp.pinpoint.collector.service.TraceService; +import com.navercorp.pinpoint.common.id.ApplicationId; import com.navercorp.pinpoint.common.profiler.logging.ThrottledLogger; import com.navercorp.pinpoint.common.server.bo.BasicSpan; import com.navercorp.pinpoint.common.server.bo.SpanChunkBo; @@ -44,13 +46,20 @@ public class GrpcSpanChunkHandler implements SimpleHandler { private final GrpcSpanFactory spanFactory; private final AcceptedTimeService acceptedTimeService; + private final ApplicationInfoService applicationInfoService; private final Sampler sampler; - public GrpcSpanChunkHandler(TraceService[] traceServices, GrpcSpanFactory spanFactory, AcceptedTimeService acceptedTimeService, SpanSamplerFactory spanSamplerFactory) { + public GrpcSpanChunkHandler( + TraceService[] traceServices, + GrpcSpanFactory spanFactory, + AcceptedTimeService acceptedTimeService, + SpanSamplerFactory spanSamplerFactory, + ApplicationInfoService applicationInfoService) { this.traceServices = Objects.requireNonNull(traceServices, "traceServices"); this.spanFactory = Objects.requireNonNull(spanFactory, "spanFactory"); this.acceptedTimeService = Objects.requireNonNull(acceptedTimeService, "acceptedTimeService"); + this.applicationInfoService = Objects.requireNonNull(applicationInfoService, "applicationInfoService"); this.sampler = spanSamplerFactory.createBasicSpanSampler(); logger.info("TraceServices {}", Arrays.toString(traceServices)); @@ -75,7 +84,8 @@ private void handleSpanChunk(PSpanChunk spanChunk) { final Header header = ServerContext.getAgentInfo(); - final BindAttribute attribute = BindAttribute.of(header, acceptedTimeService.getAcceptedTime()); + final ApplicationId applicationId = this.applicationInfoService.getApplicationId(header.getApplicationName()); + final BindAttribute attribute = BindAttribute.of(header, applicationId, acceptedTimeService.getAcceptedTime()); final SpanChunkBo spanChunkBo = spanFactory.buildSpanChunkBo(spanChunk, attribute); if (!sampler.isSampling(spanChunkBo)) { if (isDebug) { diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/handler/grpc/GrpcSpanHandler.java b/collector/src/main/java/com/navercorp/pinpoint/collector/handler/grpc/GrpcSpanHandler.java index fd953ab1c6906..a75b2ffc34d91 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/handler/grpc/GrpcSpanHandler.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/handler/grpc/GrpcSpanHandler.java @@ -20,7 +20,9 @@ import com.navercorp.pinpoint.collector.handler.SimpleHandler; import com.navercorp.pinpoint.collector.sampler.Sampler; import com.navercorp.pinpoint.collector.sampler.SpanSamplerFactory; +import com.navercorp.pinpoint.collector.service.ApplicationInfoService; import com.navercorp.pinpoint.collector.service.TraceService; +import com.navercorp.pinpoint.common.id.ApplicationId; import com.navercorp.pinpoint.common.profiler.logging.ThrottledLogger; import com.navercorp.pinpoint.common.server.bo.BasicSpan; import com.navercorp.pinpoint.common.server.bo.SpanBo; @@ -60,13 +62,20 @@ public class GrpcSpanHandler implements SimpleHandler { private final GrpcSpanFactory spanFactory; private final AcceptedTimeService acceptedTimeService; + private final ApplicationInfoService applicationInfoService; private final Sampler sampler; - public GrpcSpanHandler(TraceService[] traceServices, GrpcSpanFactory spanFactory, AcceptedTimeService acceptedTimeService, SpanSamplerFactory spanSamplerFactory) { + public GrpcSpanHandler( + TraceService[] traceServices, + GrpcSpanFactory spanFactory, + AcceptedTimeService acceptedTimeService, + SpanSamplerFactory spanSamplerFactory, + ApplicationInfoService applicationInfoService) { this.traceServices = Objects.requireNonNull(traceServices, "traceServices"); this.spanFactory = Objects.requireNonNull(spanFactory, "spanFactory"); this.acceptedTimeService = Objects.requireNonNull(acceptedTimeService, "acceptedTimeService"); + this.applicationInfoService = Objects.requireNonNull(applicationInfoService, "applicationInfoService"); this.sampler = spanSamplerFactory.createBasicSpanSampler(); logger.info("TraceServices {}", Arrays.toString(traceServices)); @@ -89,7 +98,8 @@ private void handleSpan(PSpan span) { } final Header header = ServerContext.getAgentInfo(); - final BindAttribute attribute = BindAttribute.of(header, acceptedTimeService.getAcceptedTime()); + final ApplicationId applicationId = this.applicationInfoService.getApplicationId(header.getApplicationName()); + final BindAttribute attribute = BindAttribute.of(header, applicationId, acceptedTimeService.getAcceptedTime()); final SpanBo spanBo = spanFactory.buildSpanBo(span, attribute); if (!sampler.isSampling(spanBo)) { if (isDebug) { diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/mapper/grpc/GrpcAgentInfoBoMapper.java b/collector/src/main/java/com/navercorp/pinpoint/collector/mapper/grpc/GrpcAgentInfoBoMapper.java index e0af25648f30e..66026283a6e6a 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/mapper/grpc/GrpcAgentInfoBoMapper.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/mapper/grpc/GrpcAgentInfoBoMapper.java @@ -16,6 +16,8 @@ package com.navercorp.pinpoint.collector.mapper.grpc; +import com.navercorp.pinpoint.collector.service.ApplicationInfoService; +import com.navercorp.pinpoint.common.id.ApplicationId; import com.navercorp.pinpoint.common.server.bo.AgentInfoBo; import com.navercorp.pinpoint.grpc.Header; import com.navercorp.pinpoint.grpc.trace.PAgentInfo; @@ -30,19 +32,26 @@ */ @Component public class GrpcAgentInfoBoMapper { - private final GrpcServerMetaDataBoMapper serverMetaDataBoMapper; + private final GrpcServerMetaDataBoMapper serverMetaDataBoMapper; private final GrpcJvmInfoBoMapper jvmInfoBoMapper; + private final ApplicationInfoService applicationInfoService; - public GrpcAgentInfoBoMapper(GrpcServerMetaDataBoMapper serverMetaDataBoMapper, GrpcJvmInfoBoMapper jvmInfoBoMapper) { + public GrpcAgentInfoBoMapper( + GrpcServerMetaDataBoMapper serverMetaDataBoMapper, + GrpcJvmInfoBoMapper jvmInfoBoMapper, + ApplicationInfoService applicationInfoService) { this.serverMetaDataBoMapper = Objects.requireNonNull(serverMetaDataBoMapper, "serverMetaDataBoMapper"); this.jvmInfoBoMapper = Objects.requireNonNull(jvmInfoBoMapper, "jvmInfoBoMapper"); + this.applicationInfoService = Objects.requireNonNull(applicationInfoService, "applicationInfoService"); } public AgentInfoBo map(final PAgentInfo agentInfo, final Header header) { final String agentId = header.getAgentId(); final String agentName = header.getAgentName(); final String applicationName = header.getApplicationName(); + final ApplicationId applicationId = this.applicationInfoService.getApplicationId(applicationName); + this.applicationInfoService.ensureApplicationIdInverseIndexed(applicationName, applicationId); final long startTime = header.getAgentStartTime(); final String hostName = agentInfo.getHostname(); @@ -63,6 +72,7 @@ public AgentInfoBo map(final PAgentInfo agentInfo, final Header header) { builder.setAgentId(agentId); builder.setAgentName(agentName); builder.setApplicationName(applicationName); + builder.setApplicationId(applicationId); builder.setServiceTypeCode(serviceType); builder.setPid(pid); builder.setVmVersion(vmVersion); diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/receiver/grpc/service/KeepAliveService.java b/collector/src/main/java/com/navercorp/pinpoint/collector/receiver/grpc/service/KeepAliveService.java index 6ac043ec757c2..14120f8c32507 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/receiver/grpc/service/KeepAliveService.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/receiver/grpc/service/KeepAliveService.java @@ -94,7 +94,7 @@ public void updateState(PingSession pingSession, boolean closeState, AgentLifeCy try { final AgentProperty agentProperty = newChannelProperties(header, pingSession.getServiceType()); long eventIdentifier = AgentLifeCycleAsyncTaskService.createEventIdentifier((int)socketId, (int) pingSession.nextEventIdAllocator()); - this.agentLifeCycleAsyncTask.handleLifeCycleEvent(agentProperty , pingTimestamp, agentLifeCycleState, eventIdentifier); + this.agentLifeCycleAsyncTask.handleLifeCycleEvent(agentProperty, pingTimestamp, agentLifeCycleState, eventIdentifier); this.agentEventAsyncTask.handleEvent(agentProperty, pingTimestamp, agentEventType); } catch (Exception e) { logger.warn("Failed to update state. closeState:{} lifeCycle={} {}/{}", closeState, pingSession, agentLifeCycleState, agentEventType, e); diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/service/AgentInfoService.java b/collector/src/main/java/com/navercorp/pinpoint/collector/service/AgentInfoService.java index 425f83b9e860a..43726b85fd04d 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/service/AgentInfoService.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/service/AgentInfoService.java @@ -53,4 +53,4 @@ public void insert(@Valid final AgentInfoBo agentInfoBo) { public AgentInfoBo getAgentInfo(@NotBlank final String agentId, @PositiveOrZero final long timestamp) { return agentInfoDao.getAgentInfo(agentId, timestamp); } -} \ No newline at end of file +} diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/service/ApplicationInfoService.java b/collector/src/main/java/com/navercorp/pinpoint/collector/service/ApplicationInfoService.java new file mode 100644 index 0000000000000..5320c0d1022cd --- /dev/null +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/service/ApplicationInfoService.java @@ -0,0 +1,59 @@ +/* + * Copyright 2024 NAVER Corp. + * + * 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 implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.collector.service; + +import com.navercorp.pinpoint.collector.dao.ApplicationInfoDao; +import com.navercorp.pinpoint.common.id.ApplicationId; +import com.navercorp.pinpoint.common.util.UuidUtils; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; + +import java.util.Objects; + +/** + * @author youngjin.kim2 + */ +@Service +public class ApplicationInfoService { + + private final ApplicationInfoDao applicationInfoDao; + + public ApplicationInfoService(ApplicationInfoDao applicationInfoDao) { + this.applicationInfoDao = Objects.requireNonNull(applicationInfoDao, "applicationInfoDao"); + } + + @Cacheable(value = "applicationNameById", key = "#applicationId") + public String getApplicationName(ApplicationId applicationId) { + return this.applicationInfoDao.getApplicationName(applicationId); + } + + @Cacheable(value = "applicationIdByName", key = "#applicationName") + public ApplicationId getApplicationId(String applicationName) { + ApplicationId applicationId = this.applicationInfoDao.getApplicationId(applicationName); + if (applicationId != null) { + return applicationId; + } + + ApplicationId newApplicationId = ApplicationId.of(UuidUtils.createV4()); + return this.applicationInfoDao.putApplicationIdIfAbsent(applicationName, newApplicationId); + } + + public void ensureApplicationIdInverseIndexed(String applicationName, ApplicationId applicationId) { + this.applicationInfoDao.ensureInverse(applicationName, applicationId); + } + +} diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/service/HbaseTraceService.java b/collector/src/main/java/com/navercorp/pinpoint/collector/service/HbaseTraceService.java index a1a3511b9cbe8..91f20aa24191d 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/service/HbaseTraceService.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/service/HbaseTraceService.java @@ -86,7 +86,7 @@ public void insertSpanChunk(@Valid final SpanChunkBo spanChunkBo) { final List spanEventList = spanChunkBo.getSpanEventBoList(); if (spanEventList != null) { // TODO need to batch update later. - insertSpanEventList(spanEventList, applicationServiceType, spanChunkBo.getApplicationId(), spanChunkBo.getAgentId(), spanChunkBo.getEndPoint()); + insertSpanEventList(spanEventList, applicationServiceType, spanChunkBo.getApplicationName(), spanChunkBo.getAgentId(), spanChunkBo.getEndPoint()); } // TODO should be able to tell whether the span chunk is successfully inserted @@ -114,18 +114,18 @@ public void insertSpan(@Valid final SpanBo spanBo) { }, grpcSpanServerExecutor); } - private void insertAcceptorHost(SpanEventBo spanEvent, String applicationId, ServiceType serviceType) { + private void insertAcceptorHost(SpanEventBo spanEvent, String applicationName, ServiceType serviceType) { final String endPoint = spanEvent.getEndPoint(); if (endPoint == null) { logger.debug("endPoint is null. spanEvent:{}", spanEvent); return; } - final String destinationId = spanEvent.getDestinationId(); - if (destinationId == null) { + final String destinationAppName = spanEvent.getDestinationId(); + if (destinationAppName == null) { logger.debug("destinationId is null. spanEvent:{}", spanEvent); return; } - hostApplicationMapDao.insert(endPoint, destinationId, spanEvent.getServiceType(), applicationId, serviceType.getCode()); + hostApplicationMapDao.insert(endPoint, destinationAppName, spanEvent.getServiceType(), applicationName, serviceType.getCode()); } private void insertAcceptorHost(SpanBo span) { @@ -136,17 +136,16 @@ private void insertAcceptorHost(SpanBo span) { logger.debug("acceptorHost is null {}", span); return; } - final String spanApplicationName = span.getApplicationId(); final short applicationServiceTypeCode = getApplicationServiceType(span).getCode(); - final String parentApplicationName = span.getParentApplicationId(); + final String parentApplicationName = span.getParentApplicationName(); final short parentServiceType = span.getParentApplicationServiceType(); final ServiceType spanServiceType = registry.findServiceType(span.getServiceType()); if (spanServiceType.isQueue()) { - hostApplicationMapDao.insert(span.getEndPoint(), spanApplicationName, applicationServiceTypeCode, parentApplicationName, parentServiceType); + hostApplicationMapDao.insert(span.getEndPoint(), span.getApplicationName(), applicationServiceTypeCode, parentApplicationName, parentServiceType); } else { - hostApplicationMapDao.insert(acceptorHost, spanApplicationName, applicationServiceTypeCode, parentApplicationName, parentServiceType); + hostApplicationMapDao.insert(acceptorHost, span.getApplicationName(), applicationServiceTypeCode, parentApplicationName, parentServiceType); } } @@ -165,23 +164,23 @@ private void insertSpanStat(SpanBo span) { if (span.getParentSpanId() == -1) { if (spanServiceType.isQueue()) { // create virtual queue node - statisticsService.updateCaller(span.getAcceptorHost(), spanServiceType, span.getRemoteAddr(), span.getApplicationId(), applicationServiceType, span.getEndPoint(), span.getElapsed(), isError); + statisticsService.updateCaller(span.getAcceptorHost(), spanServiceType, span.getRemoteAddr(), span.getApplicationName(), applicationServiceType, span.getEndPoint(), span.getElapsed(), isError); - statisticsService.updateCallee(span.getApplicationId(), applicationServiceType, span.getAcceptorHost(), spanServiceType, span.getAgentId(), span.getElapsed(), isError); + statisticsService.updateCallee(span.getApplicationName(), applicationServiceType, span.getAcceptorHost(), spanServiceType, span.getAgentId(), span.getElapsed(), isError); } else { // create virtual user - statisticsService.updateCaller(span.getApplicationId(), ServiceType.USER, span.getAgentId(), span.getApplicationId(), applicationServiceType, span.getAgentId(), span.getElapsed(), isError); + statisticsService.updateCaller(span.getApplicationName(), ServiceType.USER, span.getAgentId(), span.getApplicationName(), applicationServiceType, span.getAgentId(), span.getElapsed(), isError); // update the span information of the current node (self) - statisticsService.updateCallee(span.getApplicationId(), applicationServiceType, span.getApplicationId(), ServiceType.USER, span.getAgentId(), span.getElapsed(), isError); + statisticsService.updateCallee(span.getApplicationName(), applicationServiceType, span.getApplicationName(), ServiceType.USER, span.getAgentId(), span.getElapsed(), isError); } bugCheck++; } // save statistics info only when parentApplicationContext exists // when drawing server map based on statistics info, you must know the application name of the previous node. - if (span.getParentApplicationId() != null) { - String parentApplicationName = span.getParentApplicationId(); + if (span.getParentApplicationName() != null) { + String parentApplicationName = span.getParentApplicationName(); logger.debug("Received parent application name. {}", parentApplicationName); ServiceType parentApplicationType = registry.findServiceType(span.getParentApplicationServiceType()); @@ -194,14 +193,13 @@ private void insertSpanStat(SpanBo span) { // emulate virtual queue node's accept Span and record it's acceptor host hostApplicationMapDao.insert(span.getRemoteAddr(), span.getAcceptorHost(), spanServiceType.getCode(), parentApplicationName, parentApplicationType.getCode()); // emulate virtual queue node's send SpanEvent - statisticsService.updateCaller(span.getAcceptorHost(), spanServiceType, span.getRemoteAddr(), span.getApplicationId(), applicationServiceType, span.getEndPoint(), span.getElapsed(), isError); + statisticsService.updateCaller(span.getAcceptorHost(), spanServiceType, span.getRemoteAddr(), span.getApplicationName(), applicationServiceType, span.getEndPoint(), span.getElapsed(), isError); - parentApplicationName = span.getAcceptorHost(); parentApplicationType = spanServiceType; } } - statisticsService.updateCallee(span.getApplicationId(), applicationServiceType, parentApplicationName, parentApplicationType, span.getAgentId(), span.getElapsed(), isError); + statisticsService.updateCallee(span.getApplicationName(), applicationServiceType, parentApplicationName, parentApplicationType, span.getAgentId(), span.getElapsed(), isError); bugCheck++; } @@ -210,7 +208,7 @@ private void insertSpanStat(SpanBo span) { // it is odd to record reversely, because of already recording the caller data at previous node. // the data may be different due to timeout or network error. - statisticsService.updateResponseTime(span.getApplicationId(), applicationServiceType, span.getAgentId(), span.getElapsed(), isError); + statisticsService.updateResponseTime(span.getApplicationName(), applicationServiceType, span.getAgentId(), span.getElapsed(), isError); if (bugCheck != 1) { logger.info("ambiguous span found(bug). span:{}", span); @@ -224,21 +222,21 @@ private void insertSpanEventStat(SpanBo span) { return; } if (logger.isDebugEnabled()) { - logger.debug("handle spanEvent {}/{} size:{}", span.getApplicationId(), span.getAgentId(), spanEventList.size()); + logger.debug("handle spanEvent {}/{} size:{}", span.getApplicationName(), span.getAgentId(), spanEventList.size()); } final ServiceType applicationServiceType = getApplicationServiceType(span); // TODO need to batch update later. - insertSpanEventList(spanEventList, applicationServiceType, span.getApplicationId(), span.getAgentId(), span.getEndPoint()); + insertSpanEventList(spanEventList, applicationServiceType, span.getApplicationName(), span.getAgentId(), span.getEndPoint()); } - private void insertSpanEventList(List spanEventList, ServiceType applicationServiceType, String applicationId, String agentId, String endPoint) { + private void insertSpanEventList(List spanEventList, ServiceType applicationServiceType, String applicationName, String agentId, String endPoint) { for (SpanEventBo spanEvent : spanEventList) { final ServiceType spanEventType = registry.findServiceType(spanEvent.getServiceType()); if (isAlias(spanEventType, spanEvent)) { - insertAcceptorHost(spanEvent, applicationId, applicationServiceType); + insertAcceptorHost(spanEvent, applicationName, applicationServiceType); continue; } @@ -253,10 +251,10 @@ private void insertSpanEventList(List spanEventList, ServiceType ap final int elapsed = spanEvent.getEndElapsed(); final boolean hasException = spanEvent.hasException(); - if (applicationId == null || spanEventApplicationName == null) { + if (applicationName == null || spanEventApplicationName == null) { throttledLogger.info("Failed to insert statistics. Cause:SpanEvent has invalid format." + "(application:{}/{}[{}], spanEventApplication:{}[{}])", - applicationId, agentId, applicationServiceType, spanEventApplicationName, spanEventType); + applicationName, agentId, applicationServiceType, spanEventApplicationName, spanEventType); continue; } @@ -264,10 +262,10 @@ private void insertSpanEventList(List spanEventList, ServiceType ap * save information to draw a server map based on statistics */ // save the information of caller (the spanevent that called span) - statisticsService.updateCaller(applicationId, applicationServiceType, agentId, spanEventApplicationName, spanEventType, spanEventEndPoint, elapsed, hasException); + statisticsService.updateCaller(applicationName, applicationServiceType, agentId, spanEventApplicationName, spanEventType, spanEventEndPoint, elapsed, hasException); // save the information of callee (the span that spanevent called) - statisticsService.updateCallee(spanEventApplicationName, spanEventType, applicationId, applicationServiceType, endPoint, elapsed, hasException); + statisticsService.updateCallee(spanEventApplicationName, spanEventType, applicationName, applicationServiceType, endPoint, elapsed, hasException); } } diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/service/StatisticsService.java b/collector/src/main/java/com/navercorp/pinpoint/collector/service/StatisticsService.java index 9e256bee8f06c..736481cb1218b 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/service/StatisticsService.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/service/StatisticsService.java @@ -67,7 +67,10 @@ public void updateCaller( int elapsed, boolean isError ) { - mapStatisticsCallerDao.update(callerApplicationName, callerServiceType, callerAgentId, calleeApplicationName, calleeServiceType, calleeHost, elapsed, isError); + mapStatisticsCallerDao.update( + callerApplicationName, callerServiceType, callerAgentId, + calleeApplicationName, calleeServiceType, calleeHost, + elapsed, isError); } /** @@ -93,7 +96,10 @@ public void updateCallee( int elapsed, boolean isError ) { - mapStatisticsCalleeDao.update(calleeApplicationName, calleeServiceType, callerApplicationName, callerServiceType, callerHost, elapsed, isError); + mapStatisticsCalleeDao.update( + calleeApplicationName, calleeServiceType, + callerApplicationName, callerServiceType, + callerHost, elapsed, isError); } public void updateResponseTime( diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/service/async/AgentLifeCycleAsyncTaskService.java b/collector/src/main/java/com/navercorp/pinpoint/collector/service/async/AgentLifeCycleAsyncTaskService.java index 7a0b9269fa350..973228f73cfd3 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/service/async/AgentLifeCycleAsyncTaskService.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/service/async/AgentLifeCycleAsyncTaskService.java @@ -24,8 +24,8 @@ import com.navercorp.pinpoint.common.trace.ServiceType; import com.navercorp.pinpoint.common.util.BytesUtils; import com.navercorp.pinpoint.loader.service.ServiceTypeRegistryService; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @@ -107,10 +107,7 @@ private boolean isUpdateAgentState(ServiceType serviceType) { if (!collectorProperties.isStatisticsAgentStateEnable()) { return false; } - if (serviceType == null || serviceType == ServiceType.UNDEFINED) { - return false; - } - return true; + return serviceType != null && serviceType != ServiceType.UNDEFINED; } public static long createEventIdentifier(int socketId, int eventCounter) { diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/util/CollectorUtils.java b/collector/src/main/java/com/navercorp/pinpoint/collector/util/CollectorUtils.java index 5596c9170c4ac..64243cd6ebaca 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/util/CollectorUtils.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/util/CollectorUtils.java @@ -57,7 +57,7 @@ public static void checkAgentId(final String agentId) { } public static void checkApplicationName(final String applicationName) { - if (!IdValidateUtils.validateId(applicationName)) { + if (!IdValidateUtils.validateId(applicationName, PinpointConstants.APPLICATION_NAME_MAX_LEN)) { throw new IllegalArgumentException("invalid applicationName. applicationName=" + applicationName); } } diff --git a/collector/src/test/java/com/navercorp/pinpoint/collector/dao/hbase/encode/ApplicationIndexRowKeyEncoderV2Test.java b/collector/src/test/java/com/navercorp/pinpoint/collector/dao/hbase/encode/ApplicationIndexRowKeyEncoderV2Test.java index 3c2afd7b41bf2..6f249be0109a4 100644 --- a/collector/src/test/java/com/navercorp/pinpoint/collector/dao/hbase/encode/ApplicationIndexRowKeyEncoderV2Test.java +++ b/collector/src/test/java/com/navercorp/pinpoint/collector/dao/hbase/encode/ApplicationIndexRowKeyEncoderV2Test.java @@ -25,6 +25,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.util.UUID; + import static org.assertj.core.api.Assertions.assertThat; class ApplicationIndexRowKeyEncoderV2Test { @@ -45,7 +47,7 @@ private AbstractRowKeyDistributor applicationTraceIndexDistributor() { @Test void newRowKey() { - byte[] rowKey = encoder.newRowKey("agent", 100, (byte) 10); + byte[] rowKey = encoder.newRowKey(new UUID(100, 100), 100, (byte) 10); int fuzzySize = PinpointConstants.APPLICATION_NAME_MAX_LEN + Bytes.SIZEOF_LONG + 1; assertThat(rowKey).hasSize(fuzzySize); diff --git a/commons-buffer/src/main/java/com/navercorp/pinpoint/common/buffer/Buffer.java b/commons-buffer/src/main/java/com/navercorp/pinpoint/common/buffer/Buffer.java index 1cfec07f5b042..43cd791d8650d 100644 --- a/commons-buffer/src/main/java/com/navercorp/pinpoint/common/buffer/Buffer.java +++ b/commons-buffer/src/main/java/com/navercorp/pinpoint/common/buffer/Buffer.java @@ -19,6 +19,7 @@ import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.util.UUID; /** * @author emeroad @@ -89,7 +90,10 @@ public interface Buffer { void putLong(long v); - + default void putUUID(UUID v) { + putLong(v.getMostSignificantBits()); + putLong(v.getLeastSignificantBits()); + } /** * put value using the variable-length encoding especially for constants @@ -150,6 +154,12 @@ public interface Buffer { long readLong(); + default UUID readUUID() { + long mostSigBits = readLong(); + long leastSigBits = readLong(); + return new UUID(mostSigBits, leastSigBits); + } + long readVLong(); long readSVLong(); diff --git a/commons-hbase/src/main/java/com/navercorp/pinpoint/common/hbase/HbaseColumnFamily.java b/commons-hbase/src/main/java/com/navercorp/pinpoint/common/hbase/HbaseColumnFamily.java index 1198996d531d0..25fd9c91e4942 100644 --- a/commons-hbase/src/main/java/com/navercorp/pinpoint/common/hbase/HbaseColumnFamily.java +++ b/commons-hbase/src/main/java/com/navercorp/pinpoint/common/hbase/HbaseColumnFamily.java @@ -82,12 +82,21 @@ private ApiMetadata(HbaseTable hBaseTable, byte[] columnFamilyName) { } public static final ApplicationIndex APPLICATION_INDEX_AGENTS = new ApplicationIndex(HbaseTable.APPLICATION_INDEX, Bytes.toBytes("Agents")); + public static final ApplicationIndex APPLICATION_INDEX_AGENTS_VER2 = new ApplicationIndex(HbaseTable.APPLICATION_INDEX_VER2, Bytes.toBytes("Agents")); public static class ApplicationIndex extends HbaseColumnFamily { private ApplicationIndex(HbaseTable hBaseTable, byte[] columnFamilyName) { super(hBaseTable, columnFamilyName); } } + public static final ApplicationId APPLICATION_ID_FORWARD = new ApplicationId(HbaseTable.APPLICATION_ID, Bytes.toBytes("F")); + public static final ApplicationId APPLICATION_ID_INVERSE = new ApplicationId(HbaseTable.APPLICATION_ID, Bytes.toBytes("I")); + public static class ApplicationId extends HbaseColumnFamily { + private ApplicationId(HbaseTable hBaseTable, byte[] columnFamilyName) { + super(hBaseTable, columnFamilyName); + } + } + public static final ApplicationStatStatistics APPLICATION_STAT_STATISTICS = new ApplicationStatStatistics(HbaseTable.APPLICATION_STAT_AGGRE, Bytes.toBytes("S")); public static class ApplicationStatStatistics extends HbaseColumnFamily { public int TIMESPAN_MS = 5 * 60 * 1000; @@ -99,6 +108,8 @@ private ApplicationStatStatistics(HbaseTable hBaseTable, byte[] columnFamilyName public static final ApplicationTraceIndexTrace APPLICATION_TRACE_INDEX_TRACE = new ApplicationTraceIndexTrace(HbaseTable.APPLICATION_TRACE_INDEX, Bytes.toBytes("I")); public static final ApplicationTraceIndexTrace APPLICATION_TRACE_INDEX_META = new ApplicationTraceIndexTrace(HbaseTable.APPLICATION_TRACE_INDEX, Bytes.toBytes("M")); + public static final ApplicationTraceIndexTrace APPLICATION_TRACE_INDEX_TRACE_VER2 = new ApplicationTraceIndexTrace(HbaseTable.APPLICATION_TRACE_INDEX_VER2, Bytes.toBytes("I")); + public static final ApplicationTraceIndexTrace APPLICATION_TRACE_INDEX_META_VER2 = new ApplicationTraceIndexTrace(HbaseTable.APPLICATION_TRACE_INDEX_VER2, Bytes.toBytes("M")); public static class ApplicationTraceIndexTrace extends HbaseColumnFamily { public static final int ROW_DISTRIBUTE_SIZE = 1; // applicationIndex hash size diff --git a/commons-hbase/src/main/java/com/navercorp/pinpoint/common/hbase/HbaseTable.java b/commons-hbase/src/main/java/com/navercorp/pinpoint/common/hbase/HbaseTable.java index 07990ce8494f7..5e8d05562d936 100644 --- a/commons-hbase/src/main/java/com/navercorp/pinpoint/common/hbase/HbaseTable.java +++ b/commons-hbase/src/main/java/com/navercorp/pinpoint/common/hbase/HbaseTable.java @@ -29,11 +29,15 @@ public enum HbaseTable { AGENT_URI_STAT("AgentUriStat"), API_METADATA("ApiMetaData"), APPLICATION_INDEX("ApplicationIndex"), + APPLICATION_INDEX_VER2("ApplicationIndex_Ver2"), + APPLICATION_ID("ApplicationId"), APPLICATION_STAT_AGGRE("ApplicationStatAggre"), APPLICATION_TRACE_INDEX("ApplicationTraceIndex"), + APPLICATION_TRACE_INDEX_VER2("ApplicationTraceIndex_Ver2"), HOST_APPLICATION_MAP_VER2("HostApplicationMap_Ver2"), MAP_STATISTICS_CALLEE_VER2("ApplicationMapStatisticsCallee_Ver2"), MAP_STATISTICS_CALLER_VER2("ApplicationMapStatisticsCaller_Ver2"), + MAP_STATISTICS_CALLEE_VER3("ApplicationMapStatisticsCallee_Ver3"), MAP_STATISTICS_SELF_VER2("ApplicationMapStatisticsSelf_Ver2"), SQL_METADATA_VER2("SqlMetaData_Ver2"), SQL_UID_METADATA("SqlUidMetaData"), diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/alram/event/DeleteRuleEvent.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/alarm/event/DeleteRuleEvent.java similarity index 95% rename from commons-server/src/main/java/com/navercorp/pinpoint/common/server/alram/event/DeleteRuleEvent.java rename to commons-server/src/main/java/com/navercorp/pinpoint/common/server/alarm/event/DeleteRuleEvent.java index 19de7cda11ed6..e59c20655b810 100644 --- a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/alram/event/DeleteRuleEvent.java +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/alarm/event/DeleteRuleEvent.java @@ -15,7 +15,7 @@ * */ -package com.navercorp.pinpoint.common.server.alram.event; +package com.navercorp.pinpoint.common.server.alarm.event; import java.util.Objects; diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/AgentInfoBo.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/AgentInfoBo.java index 751cb96f4de7f..80878dfc5b7e5 100644 --- a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/AgentInfoBo.java +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/AgentInfoBo.java @@ -18,6 +18,7 @@ import com.navercorp.pinpoint.common.buffer.AutomaticBuffer; import com.navercorp.pinpoint.common.buffer.Buffer; +import com.navercorp.pinpoint.common.id.ApplicationId; import jakarta.validation.constraints.NotBlank; /** @@ -32,6 +33,7 @@ public class AgentInfoBo { @NotBlank private final String agentId; private final String agentName; @NotBlank private final String applicationName; + private final ApplicationId applicationId; private final short serviceTypeCode; private final int pid; private final String vmVersion; @@ -55,6 +57,7 @@ private AgentInfoBo(Builder builder) { this.agentId = builder.agentId; this.agentName = builder.agentName; this.applicationName = builder.applicationName; + this.applicationId = builder.applicationId; this.serviceTypeCode = builder.serviceTypeCode; this.pid = builder.pid; this.vmVersion = builder.vmVersion; @@ -91,6 +94,10 @@ public String getApplicationName() { return applicationName; } + public ApplicationId getApplicationId() { + return applicationId; + } + public long getStartTime() { return startTime; } @@ -151,6 +158,8 @@ public byte[] writeValue() { buffer.putBoolean(this.isContainer()); buffer.putPrefixedString(this.getAgentName()); + buffer.putUUID(this.getApplicationId().value()); + return buffer.getBuffer(); } @@ -188,6 +197,7 @@ public String toString() { ", agentId='" + agentId + '\'' + ", agentName='" + agentName + '\'' + ", applicationName='" + applicationName + '\'' + + ", applicationId='" + applicationId + '\'' + ", serviceTypeCode=" + serviceTypeCode + ", pid=" + pid + ", vmVersion='" + vmVersion + '\'' + @@ -208,6 +218,7 @@ public static class Builder { private String agentId; private String agentName; private String applicationName; + private ApplicationId applicationId; private short serviceTypeCode; private int pid; private String vmVersion; @@ -250,6 +261,10 @@ public void setApplicationName(String applicationName) { this.applicationName = applicationName; } + public void setApplicationId(ApplicationId applicationId) { + this.applicationId = applicationId; + } + public void setServiceTypeCode(short serviceTypeCode) { this.serviceTypeCode = serviceTypeCode; } @@ -307,6 +322,9 @@ public AgentInfoBo build() { this.agentName = ""; if (this.applicationName == null) this.applicationName = ""; + if (this.applicationId == null) { + this.applicationId = ApplicationId.NOT_EXIST_APPLICATION_ID; + } if (this.vmVersion == null) this.vmVersion = ""; if (this.agentVersion == null) { diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/BasicSpan.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/BasicSpan.java index af3905ecf1c85..be934417f849e 100644 --- a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/BasicSpan.java +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/BasicSpan.java @@ -16,6 +16,7 @@ package com.navercorp.pinpoint.common.server.bo; +import com.navercorp.pinpoint.common.id.ApplicationId; import com.navercorp.pinpoint.common.profiler.util.TransactionId; /** @@ -31,8 +32,11 @@ public interface BasicSpan { String getAgentName(); void setAgentName(String agentName); - String getApplicationId(); - void setApplicationId(String applicationId); + String getApplicationName(); + void setApplicationName(String applicationName); + + ApplicationId getApplicationId(); + void setApplicationId(ApplicationId applicationId); long getAgentStartTime(); void setAgentStartTime(long agentStartTime); diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/SpanBo.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/SpanBo.java index 702622fc029ce..c3d1530c8e06a 100644 --- a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/SpanBo.java +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/SpanBo.java @@ -16,6 +16,7 @@ package com.navercorp.pinpoint.common.server.bo; +import com.navercorp.pinpoint.common.id.ApplicationId; import com.navercorp.pinpoint.common.profiler.util.TransactionId; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.PositiveOrZero; @@ -34,7 +35,8 @@ public class SpanBo implements Event, BasicSpan { // private AgentKeyBo agentKeyBo; @NotBlank private String agentId; private String agentName; - @NotBlank private String applicationId; + @NotBlank private String applicationName; + private ApplicationId applicationId; @PositiveOrZero private long agentStartTime; private TransactionId transactionId; @@ -42,7 +44,7 @@ public class SpanBo implements Event, BasicSpan { private long spanId; private long parentSpanId; - private String parentApplicationId; + private String parentApplicationName; private short parentApplicationServiceType; private long startTime; @@ -129,12 +131,22 @@ public void setAgentName(String agentName) { } @Override - public String getApplicationId() { + public String getApplicationName() { + return applicationName; + } + + @Override + public void setApplicationName(String applicationName) { + this.applicationName = applicationName; + } + + @Override + public ApplicationId getApplicationId() { return applicationId; } @Override - public void setApplicationId(String applicationId) { + public void setApplicationId(ApplicationId applicationId) { this.applicationId = applicationId; } @@ -348,12 +360,12 @@ public short getApplicationServiceType() { } } - public String getParentApplicationId() { - return parentApplicationId; + public String getParentApplicationName() { + return parentApplicationName; } - public void setParentApplicationId(String parentApplicationId) { - this.parentApplicationId = parentApplicationId; + public void setParentApplicationName(String parentApplicationName) { + this.parentApplicationName = parentApplicationName; } public short getParentApplicationServiceType() { @@ -383,12 +395,13 @@ public String toString() { "version=" + version + ", agentId='" + agentId + '\'' + ", agentName='" + agentName + '\'' + + ", applicationName='" + applicationName + '\'' + ", applicationId='" + applicationId + '\'' + ", agentStartTime=" + agentStartTime + ", transactionId=" + transactionId + ", spanId=" + spanId + ", parentSpanId=" + parentSpanId + - ", parentApplicationId='" + parentApplicationId + '\'' + + ", parentApplicationId='" + parentApplicationName + '\'' + ", parentApplicationServiceType=" + parentApplicationServiceType + ", startTime=" + startTime + ", elapsed=" + elapsed + @@ -419,7 +432,8 @@ public static class Builder { private String agentId; private String agentName; - private String applicationId; + private String applicationName; + private ApplicationId applicationId; private long agentStartTime; private TransactionId transactionId; @@ -478,7 +492,12 @@ public Builder setAgentName(String agentName) { return this; } - public Builder setApplicationId(String applicationId) { + public Builder setApplicationName(String applicationName) { + this.applicationName = applicationName; + return this; + } + + public Builder setApplicationId(ApplicationId applicationId) { this.applicationId = applicationId; return this; } @@ -603,12 +622,13 @@ public SpanBo build() { result.setVersion(this.version); result.setAgentId(this.agentId); result.setAgentName(this.agentName); + result.setApplicationName(this.applicationName); result.setApplicationId(this.applicationId); result.setAgentStartTime(this.agentStartTime); result.setTransactionId(this.transactionId); result.setSpanId(this.spanId); result.setParentSpanId(this.parentSpanId); - result.setParentApplicationId(this.parentApplicationId); + result.setParentApplicationName(this.parentApplicationId); result.setParentApplicationServiceType(this.parentApplicationServiceType); result.setStartTime(this.startTime); result.setElapsed(this.elapsed); diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/SpanChunkBo.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/SpanChunkBo.java index d8793369f3e3d..0b8c05034bd88 100644 --- a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/SpanChunkBo.java +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/SpanChunkBo.java @@ -16,6 +16,7 @@ package com.navercorp.pinpoint.common.server.bo; +import com.navercorp.pinpoint.common.id.ApplicationId; import com.navercorp.pinpoint.common.profiler.util.TransactionId; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.PositiveOrZero; @@ -32,7 +33,8 @@ public class SpanChunkBo implements BasicSpan { @NotBlank private String agentId; private String agentName; - @NotBlank private String applicationId; + @NotBlank private String applicationName; + private ApplicationId applicationId; @PositiveOrZero private long agentStartTime; private TransactionId transactionId; @@ -85,11 +87,22 @@ public void setAgentName(String agentName) { } @Override - public String getApplicationId() { - return applicationId; + public String getApplicationName() { + return applicationName; } - public void setApplicationId(String applicationId) { + @Override + public void setApplicationName(String applicationName) { + this.applicationName = applicationName; + } + + @Override + public ApplicationId getApplicationId() { + return this.applicationId; + } + + @Override + public void setApplicationId(ApplicationId applicationId) { this.applicationId = applicationId; } @@ -200,7 +213,7 @@ public String toString() { "version=" + version + ", agentId='" + agentId + '\'' + ", agentName='" + agentName + '\'' + - ", applicationId='" + applicationId + '\'' + + ", applicationId='" + applicationName + '\'' + ", agentStartTime=" + agentStartTime + ", transactionId=" + transactionId + ", spanId=" + spanId + diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/grpc/BindAttribute.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/grpc/BindAttribute.java index e321cca4b08ea..aaf7baea374c8 100644 --- a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/grpc/BindAttribute.java +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/grpc/BindAttribute.java @@ -1,5 +1,6 @@ package com.navercorp.pinpoint.common.server.bo.grpc; +import com.navercorp.pinpoint.common.id.ApplicationId; import com.navercorp.pinpoint.grpc.Header; import java.util.Objects; @@ -7,19 +8,22 @@ public class BindAttribute { private final String agentId; private final String applicationName; + private final ApplicationId applicationId; private final long agentStartTime; private final long acceptedTime; - public static BindAttribute of(Header header, long acceptedTime) { + public static BindAttribute of(Header header, ApplicationId applicationId, long acceptedTime) { return new BindAttribute(header.getAgentId(), header.getApplicationName(), + applicationId, header.getAgentStartTime(), acceptedTime); } - public BindAttribute(String agentId, String applicationName, long agentStartTime, long acceptedTime) { + public BindAttribute(String agentId, String applicationName, ApplicationId applicationId, long agentStartTime, long acceptedTime) { this.agentId = Objects.requireNonNull(agentId, "agentId"); this.applicationName = Objects.requireNonNull(applicationName, "applicationName"); + this.applicationId = Objects.requireNonNull(applicationId, "applicationId"); this.agentStartTime = agentStartTime; this.acceptedTime = acceptedTime; } @@ -36,6 +40,10 @@ public String getApplicationName() { return this.applicationName; } + public ApplicationId getApplicationId() { + return this.applicationId; + } + public long getAgentStartTime() { return this.agentStartTime; } diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/grpc/GrpcSpanBinder.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/grpc/GrpcSpanBinder.java index 9f351e6a80719..c75444510ab05 100644 --- a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/grpc/GrpcSpanBinder.java +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/grpc/GrpcSpanBinder.java @@ -80,7 +80,8 @@ SpanBo newSpanBo(PSpan pSpan, BindAttribute attribute) { final SpanBo spanBo = new SpanBo(); spanBo.setVersion(pSpan.getVersion()); spanBo.setAgentId(attribute.getAgentId()); - spanBo.setApplicationId(attribute.getApplicationName()); + spanBo.setApplicationName(attribute.getApplicationName()); + spanBo.setApplicationId(attribute.getApplicationId()); spanBo.setAgentStartTime(attribute.getAgentStartTime()); spanBo.setCollectorAcceptTime(attribute.getAcceptedTime()); @@ -134,7 +135,7 @@ SpanBo newSpanBo(PSpan pSpan, BindAttribute attribute) { final String parentApplicationName = parentInfo.getParentApplicationName(); if (StringUtils.hasLength(parentApplicationName)) { - spanBo.setParentApplicationId(parentApplicationName); + spanBo.setParentApplicationName(parentApplicationName); } spanBo.setParentApplicationServiceType((short) parentInfo.getParentApplicationType()); } @@ -244,7 +245,8 @@ SpanChunkBo newSpanChunkBo(PSpanChunk pSpanChunk, BindAttribute attribute) { final SpanChunkBo spanChunkBo = new SpanChunkBo(); spanChunkBo.setVersion(pSpanChunk.getVersion()); spanChunkBo.setAgentId(attribute.getAgentId()); - spanChunkBo.setApplicationId(attribute.getApplicationName()); + spanChunkBo.setApplicationName(attribute.getApplicationName()); + spanChunkBo.setApplicationId(attribute.getApplicationId()); spanChunkBo.setAgentStartTime(attribute.getAgentStartTime()); spanChunkBo.setCollectorAcceptTime(attribute.getAcceptedTime()); diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/agent/AgentIdRowKeyEncoder.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/agent/AgentIdRowKeyEncoder.java index bbb1933d5854d..1d1e443e2a25e 100644 --- a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/agent/AgentIdRowKeyEncoder.java +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/agent/AgentIdRowKeyEncoder.java @@ -8,8 +8,4 @@ public AgentIdRowKeyEncoder() { super(HbaseTableConstants.AGENT_ID_MAX_LEN); } - @Override - public byte[] encodeRowKey(String agentId, long timestamp) { - return super.encodeRowKey(agentId, timestamp); - } } diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/agent/ApplicationNameRowKeyEncoder.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/agent/ApplicationNameRowKeyEncoder.java index 82b17c95a45e2..4179fb1c9aa4b 100644 --- a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/agent/ApplicationNameRowKeyEncoder.java +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/agent/ApplicationNameRowKeyEncoder.java @@ -8,8 +8,4 @@ public ApplicationNameRowKeyEncoder() { super(HbaseTableConstants.APPLICATION_NAME_MAX_LEN); } - @Override - public byte[] encodeRowKey(String applicationName, long timestamp) { - return super.encodeRowKey(applicationName, timestamp); - } } diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/agent/IdRowKeyEncoder.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/agent/IdRowKeyEncoder.java index 22f8646e14b1e..f548d752db47b 100644 --- a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/agent/IdRowKeyEncoder.java +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/agent/IdRowKeyEncoder.java @@ -3,6 +3,9 @@ import com.navercorp.pinpoint.common.server.util.RowKeyUtils; import com.navercorp.pinpoint.common.util.BytesUtils; import com.navercorp.pinpoint.common.util.TimeUtils; +import com.navercorp.pinpoint.common.util.UuidUtils; + +import java.util.UUID; public class IdRowKeyEncoder { @@ -12,9 +15,17 @@ public IdRowKeyEncoder(int max) { this.max = max; } - public byte[] encodeRowKey(String id, long timestamp) { - byte[] idKey = BytesUtils.toBytes(id); + public byte[] encodeRowKey(String idKey, long timestamp) { + return this.encodeRowKey(BytesUtils.toBytes(idKey), timestamp); + } + + public byte[] encodeRowKey(UUID idKey, long timestamp) { + return this.encodeRowKey(UuidUtils.toBytes(idKey), timestamp); + } + + private byte[] encodeRowKey(byte[] idKey, long timestamp) { long reverseTimestamp = TimeUtils.reverseTimeMillis(timestamp); return RowKeyUtils.concatFixedByteAndLong(idKey, max, reverseTimestamp); } + } diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/trace/v2/SpanDecoderV0.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/trace/v2/SpanDecoderV0.java index 4cf16eaa1a778..cb4af2ff79188 100644 --- a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/trace/v2/SpanDecoderV0.java +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/trace/v2/SpanDecoderV0.java @@ -371,7 +371,7 @@ private AnnotationBo readDeltaAnnotationBo(Buffer buffer, AnnotationBo prev) { private void readQualifier(BasicSpan basicSpan, Buffer buffer) { String applicationId = buffer.readPrefixedString(); - basicSpan.setApplicationId(applicationId); + basicSpan.setApplicationName(applicationId); String agentId = buffer.readPrefixedString(); basicSpan.setAgentId(agentId); diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/trace/v2/SpanEncoderV0.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/trace/v2/SpanEncoderV0.java index b07fe5cf207aa..ae7ab7b6e1268 100644 --- a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/trace/v2/SpanEncoderV0.java +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/trace/v2/SpanEncoderV0.java @@ -52,7 +52,7 @@ public ByteBuffer encodeSpanChunkQualifier(SpanEncodingContext enco private ByteBuffer encodeQualifier(byte type, BasicSpan basicSpan, SpanEventBo firstEvent, LocalAsyncIdBo localAsyncId) { final Buffer buffer = new AutomaticBuffer(128); buffer.putByte(type); - buffer.putPrefixedString(basicSpan.getApplicationId()); + buffer.putPrefixedString(basicSpan.getApplicationName()); buffer.putPrefixedString(basicSpan.getAgentId()); buffer.putVLong(basicSpan.getAgentStartTime()); buffer.putLong(basicSpan.getSpanId()); diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/trace/v2/TraceRowKeyEncoderV2.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/trace/v2/TraceRowKeyEncoderV2.java index 5424b0c829190..864605a67b1e1 100644 --- a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/trace/v2/TraceRowKeyEncoderV2.java +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/serializer/trace/v2/TraceRowKeyEncoderV2.java @@ -41,7 +41,8 @@ public TraceRowKeyEncoderV2(AbstractRowKeyDistributor rowKeyDistributor) { public byte[] encodeRowKey(TransactionId transactionId) { Objects.requireNonNull(transactionId, "transactionId"); - byte[] rowKey = BytesUtils.stringLongLongToBytes(transactionId.getAgentId(), AGENT_ID_MAX_LEN, transactionId.getAgentStartTime(), transactionId.getTransactionSequence()); + byte[] rowKey = BytesUtils.stringLongLongToBytes( + transactionId.getAgentId(), AGENT_ID_MAX_LEN, transactionId.getAgentStartTime(), transactionId.getTransactionSequence()); return wrapDistributedRowKey(rowKey); } diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/thrift/SpanFactory.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/thrift/SpanFactory.java index 6725d7e020cef..84ee2a3d8c5e7 100644 --- a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/thrift/SpanFactory.java +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/bo/thrift/SpanFactory.java @@ -73,7 +73,7 @@ public SpanBo buildSpanBo(TSpan tSpan, long acceptedTime, SpanEventFilter spanEv SpanBo newSpanBo(TSpan tSpan) { final SpanBo spanBo = new SpanBo(); spanBo.setAgentId(tSpan.getAgentId()); - spanBo.setApplicationId(tSpan.getApplicationName()); + spanBo.setApplicationName(tSpan.getApplicationName()); spanBo.setAgentStartTime(tSpan.getAgentStartTime()); final TransactionId transactionId = newTransactionId(tSpan.getTransactionId(), spanBo.getAgentId()); @@ -107,7 +107,7 @@ SpanBo newSpanBo(TSpan tSpan) { spanBo.setApplicationServiceType(tSpan.getServiceType()); } - spanBo.setParentApplicationId(tSpan.getParentApplicationName()); + spanBo.setParentApplicationName(tSpan.getParentApplicationName()); spanBo.setParentApplicationServiceType(tSpan.getParentApplicationType()); // FIXME span.errCode contains error of span and spanEvent @@ -202,7 +202,7 @@ private LocalAsyncIdBo getLocalAsyncId(TSpanChunk tSpanChunk) { SpanChunkBo newSpanChunkBo(TSpanChunk tSpanChunk) { final SpanChunkBo spanChunkBo = new SpanChunkBo(); spanChunkBo.setAgentId(tSpanChunk.getAgentId()); - spanChunkBo.setApplicationId(tSpanChunk.getApplicationName()); + spanChunkBo.setApplicationName(tSpanChunk.getApplicationName()); spanChunkBo.setAgentStartTime(tSpanChunk.getAgentStartTime()); spanChunkBo.setServiceType(tSpanChunk.getServiceType()); if (tSpanChunk.isSetApplicationServiceType()) { diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/dao/hbase/mapper/AgentInfoBoMapper.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/dao/hbase/mapper/AgentInfoBoMapper.java index 4daa151726511..f222c43f1d6a9 100644 --- a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/dao/hbase/mapper/AgentInfoBoMapper.java +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/dao/hbase/mapper/AgentInfoBoMapper.java @@ -21,6 +21,7 @@ import com.navercorp.pinpoint.common.buffer.FixedBuffer; import com.navercorp.pinpoint.common.hbase.HbaseTableConstants; import com.navercorp.pinpoint.common.hbase.RowMapper; +import com.navercorp.pinpoint.common.id.ApplicationId; import com.navercorp.pinpoint.common.server.bo.AgentInfoBo; import com.navercorp.pinpoint.common.server.bo.JvmInfoBo; import com.navercorp.pinpoint.common.server.bo.ServerMetaDataBo; @@ -87,6 +88,10 @@ private AgentInfoBo.Builder createBuilderFromValue(byte[] serializedAgentInfo) { if (buffer.hasRemaining()) { builder.setAgentName(buffer.readPrefixedString()); } + // 2024.03.11 added application id + if (buffer.hasRemaining()) { + builder.setApplicationId(ApplicationId.of(buffer.readUUID())); + } return builder; } } diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/dao/hbase/mapper/ApplicationIdForwardMapper.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/dao/hbase/mapper/ApplicationIdForwardMapper.java new file mode 100644 index 0000000000000..6aa4e45c94a32 --- /dev/null +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/dao/hbase/mapper/ApplicationIdForwardMapper.java @@ -0,0 +1,52 @@ +/* + * Copyright 2024 NAVER Corp. + * + * 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 implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.common.server.dao.hbase.mapper; + +import com.navercorp.pinpoint.common.hbase.HbaseColumnFamily; +import com.navercorp.pinpoint.common.hbase.RowMapper; +import com.navercorp.pinpoint.common.util.BytesUtils; +import org.apache.hadoop.hbase.Cell; +import org.apache.hadoop.hbase.client.Result; +import org.springframework.stereotype.Component; + +import java.util.UUID; + +/** + * @author youngjin.kim2 + */ +@Component +public class ApplicationIdForwardMapper implements RowMapper { + + private static final HbaseColumnFamily.ApplicationId DESCRIPTOR = HbaseColumnFamily.APPLICATION_ID_FORWARD; + + @Override + public UUID mapRow(Result result, int rowNum) throws Exception { + byte[] family = DESCRIPTOR.getName(); + byte[] qualifier = DESCRIPTOR.getName(); + Cell cell = result.getColumnLatestCell(family, qualifier); + if (cell == null) { + return null; + } + + if (cell.getValueLength() < 16) { + throw new IllegalArgumentException("Invalid bytes length: " + cell.getValueLength()); + } + + return BytesUtils.bytesToUUID(cell.getValueArray(), cell.getValueOffset()); + } + +} diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/dao/hbase/mapper/ApplicationIdInverseMapper.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/dao/hbase/mapper/ApplicationIdInverseMapper.java new file mode 100644 index 0000000000000..919cbca8e8b9f --- /dev/null +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/dao/hbase/mapper/ApplicationIdInverseMapper.java @@ -0,0 +1,45 @@ +/* + * Copyright 2024 NAVER Corp. + * + * 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 implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.common.server.dao.hbase.mapper; + +import com.navercorp.pinpoint.common.hbase.HbaseColumnFamily; +import com.navercorp.pinpoint.common.hbase.RowMapper; +import com.navercorp.pinpoint.common.util.BytesUtils; +import org.apache.hadoop.hbase.Cell; +import org.apache.hadoop.hbase.client.Result; +import org.springframework.stereotype.Component; + +/** + * @author youngjin.kim2 + */ +@Component +public class ApplicationIdInverseMapper implements RowMapper { + + private static final HbaseColumnFamily.ApplicationId DESCRIPTOR = HbaseColumnFamily.APPLICATION_ID_INVERSE; + + @Override + public String mapRow(Result result, int rowNum) throws Exception { + byte[] family = DESCRIPTOR.getName(); + byte[] qualifier = DESCRIPTOR.getName(); + Cell cell = result.getColumnLatestCell(family, qualifier); + if (cell == null) { + return null; + } + return BytesUtils.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()); + } + +} diff --git a/exceptiontrace/exceptiontrace-common/src/main/java/com/navercorp/pinpoint/exceptiontrace/common/util/HashUtils.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/HashUtils.java similarity index 85% rename from exceptiontrace/exceptiontrace-common/src/main/java/com/navercorp/pinpoint/exceptiontrace/common/util/HashUtils.java rename to commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/HashUtils.java index 7ca07a3f45584..3d462e1949075 100644 --- a/exceptiontrace/exceptiontrace-common/src/main/java/com/navercorp/pinpoint/exceptiontrace/common/util/HashUtils.java +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/HashUtils.java @@ -1,19 +1,19 @@ /* - * Copyright 2023 NAVER Corp. + * Copyright 2024 NAVER Corp. * * 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 + * 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. + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express implied. * See the License for the specific language governing permissions and * limitations under the License. */ -package com.navercorp.pinpoint.exceptiontrace.common.util; +package com.navercorp.pinpoint.common.server.util; import com.google.common.hash.Funnel; @@ -48,6 +48,8 @@ public static HashCode objectsToHashCode(Iterable objects, Funnel funn return hc.hash(); } - + public static HashCode hashBytes(byte[] bytes) { + return HASH.hashBytes(bytes); + } } diff --git a/commons-server/src/test/java/com/navercorp/pinpoint/common/server/bo/SpanFactoryAssert.java b/commons-server/src/test/java/com/navercorp/pinpoint/common/server/bo/SpanFactoryAssert.java index e510608f2969e..720569c1b219f 100644 --- a/commons-server/src/test/java/com/navercorp/pinpoint/common/server/bo/SpanFactoryAssert.java +++ b/commons-server/src/test/java/com/navercorp/pinpoint/common/server/bo/SpanFactoryAssert.java @@ -37,7 +37,7 @@ public class SpanFactoryAssert { public void assertSpan(TSpan tSpan, SpanBo spanBo) { Assertions.assertEquals(tSpan.getAgentId(), spanBo.getAgentId()); - Assertions.assertEquals(tSpan.getApplicationName(), spanBo.getApplicationId()); + Assertions.assertEquals(tSpan.getApplicationName(), spanBo.getApplicationName()); Assertions.assertEquals(tSpan.getAgentStartTime(), spanBo.getAgentStartTime()); TransactionId transactionId = spanBo.getTransactionId(); @@ -60,7 +60,7 @@ public void assertSpan(TSpan tSpan, SpanBo spanBo) { Assertions.assertEquals(tSpan.getFlag(), spanBo.getFlag()); Assertions.assertEquals(tSpan.getErr(), spanBo.getErrCode()); - Assertions.assertEquals(tSpan.getParentApplicationName(), spanBo.getParentApplicationId()); + Assertions.assertEquals(tSpan.getParentApplicationName(), spanBo.getParentApplicationName()); Assertions.assertEquals(tSpan.getParentApplicationType(), spanBo.getParentApplicationServiceType()); Assertions.assertEquals(tSpan.getAcceptorHost(), spanBo.getAcceptorHost()); @@ -132,7 +132,7 @@ public void assertSpanEvent(TSpanEvent tSpanEvent, SpanEventBo spanEventBo) { public void assertSpanChunk(TSpanChunk tSpanChunk, SpanChunkBo spanChunkBo) { Assertions.assertEquals(tSpanChunk.getAgentId(), spanChunkBo.getAgentId()); - Assertions.assertEquals(tSpanChunk.getApplicationName(), spanChunkBo.getApplicationId()); + Assertions.assertEquals(tSpanChunk.getApplicationName(), spanChunkBo.getApplicationName()); Assertions.assertEquals(tSpanChunk.getAgentStartTime(), spanChunkBo.getAgentStartTime()); diff --git a/commons-server/src/test/java/com/navercorp/pinpoint/common/server/bo/grpc/CollectorGrpcSpanFactoryTest.java b/commons-server/src/test/java/com/navercorp/pinpoint/common/server/bo/grpc/CollectorGrpcSpanFactoryTest.java index fb682bd94588a..75f309778c9c3 100644 --- a/commons-server/src/test/java/com/navercorp/pinpoint/common/server/bo/grpc/CollectorGrpcSpanFactoryTest.java +++ b/commons-server/src/test/java/com/navercorp/pinpoint/common/server/bo/grpc/CollectorGrpcSpanFactoryTest.java @@ -16,6 +16,7 @@ package com.navercorp.pinpoint.common.server.bo.grpc; +import com.navercorp.pinpoint.common.id.ApplicationId; import com.navercorp.pinpoint.common.server.bo.SpanChunkBo; import com.navercorp.pinpoint.common.server.bo.SpanEventBo; import com.navercorp.pinpoint.common.server.bo.filter.SequenceSpanEventFilter; @@ -28,12 +29,14 @@ import org.junit.jupiter.api.Test; import java.util.List; +import java.util.UUID; /** * @author Woonduk Kang(emeroad) */ public class CollectorGrpcSpanFactoryTest { private static final int MAX_SEQUENCE = 10; + private static final ApplicationId APPLICATION_ID = ApplicationId.of(UUID.randomUUID()); private final GrpcSpanBinder binder = new GrpcSpanBinder(); private final SpanEventFilter filter = new SequenceSpanEventFilter(MAX_SEQUENCE); @@ -41,7 +44,7 @@ public class CollectorGrpcSpanFactoryTest { private final BindAttribute attribute = newAttribute(); private BindAttribute newAttribute() { - return new BindAttribute("agentId", "applicationName", 88, System.currentTimeMillis()); + return new BindAttribute("agentId", "applicationName", APPLICATION_ID, 88, System.currentTimeMillis()); } private final GrpcSpanFactory factory = new CollectorGrpcSpanFactory(binder, filter); diff --git a/commons/src/main/java/com/navercorp/pinpoint/common/PinpointConstants.java b/commons/src/main/java/com/navercorp/pinpoint/common/PinpointConstants.java index cae648d29a581..9243b97d3d173 100644 --- a/commons/src/main/java/com/navercorp/pinpoint/common/PinpointConstants.java +++ b/commons/src/main/java/com/navercorp/pinpoint/common/PinpointConstants.java @@ -21,7 +21,7 @@ */ public final class PinpointConstants { - public static final int APPLICATION_NAME_MAX_LEN = 24; + public static final int APPLICATION_NAME_MAX_LEN = 255; public static final int AGENT_ID_MAX_LEN = 24; diff --git a/commons/src/main/java/com/navercorp/pinpoint/common/id/AbstractPinpointIdentifier.java b/commons/src/main/java/com/navercorp/pinpoint/common/id/AbstractPinpointIdentifier.java new file mode 100644 index 0000000000000..5a4ae1e8e4e18 --- /dev/null +++ b/commons/src/main/java/com/navercorp/pinpoint/common/id/AbstractPinpointIdentifier.java @@ -0,0 +1,48 @@ +/* + * Copyright 2024 NAVER Corp. + * + * 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 com.navercorp.pinpoint.common.id; + +import java.util.Objects; + +/** + * @author youngjin.kim2 + */ +public class AbstractPinpointIdentifier implements PinpointIdentifier { + + private final T value; + + public AbstractPinpointIdentifier(T value) { + this.value = Objects.requireNonNull(value, "value"); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + AbstractPinpointIdentifier that = (AbstractPinpointIdentifier) o; + return Objects.equals(value, that.value); + } + + @Override + public int hashCode() { + return Objects.hash(value); + } + + public T value() { + return value; + } + +} diff --git a/commons/src/main/java/com/navercorp/pinpoint/common/id/AgentId.java b/commons/src/main/java/com/navercorp/pinpoint/common/id/AgentId.java new file mode 100644 index 0000000000000..3faf4d6e07ca8 --- /dev/null +++ b/commons/src/main/java/com/navercorp/pinpoint/common/id/AgentId.java @@ -0,0 +1,35 @@ +/* + * Copyright 2024 NAVER Corp. + * + * 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 com.navercorp.pinpoint.common.id; + +import com.navercorp.pinpoint.common.PinpointConstants; + +/** + * @author youngjin.kim2 + */ +public class AgentId extends StringPinpointIdentifier { + + private static final int MAX_LENGTH = PinpointConstants.AGENT_ID_MAX_LEN; + + public AgentId(String value) { + super(value); + + if (value().length() > MAX_LENGTH) { + throw new IllegalArgumentException("length of agentId cannot be greater than " + MAX_LENGTH); + } + } + +} diff --git a/commons/src/main/java/com/navercorp/pinpoint/common/id/ApplicationId.java b/commons/src/main/java/com/navercorp/pinpoint/common/id/ApplicationId.java new file mode 100644 index 0000000000000..e18ed4aab8d5c --- /dev/null +++ b/commons/src/main/java/com/navercorp/pinpoint/common/id/ApplicationId.java @@ -0,0 +1,36 @@ +/* + * Copyright 2024 NAVER Corp. + * + * 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 com.navercorp.pinpoint.common.id; + +import com.navercorp.pinpoint.common.util.UuidUtils; + +import java.util.UUID; + +/** + * @author youngjin.kim2 + */ +public class ApplicationId extends UUIDPinpointIdentifier { + public static final ApplicationId NOT_EXIST_APPLICATION_ID = new ApplicationId(UuidUtils.EMPTY); + + public ApplicationId(UUID value) { + super(value); + } + + public static ApplicationId of(UUID value) { + return new ApplicationId(value); + } + +} diff --git a/commons/src/main/java/com/navercorp/pinpoint/common/id/PinpointIdentifier.java b/commons/src/main/java/com/navercorp/pinpoint/common/id/PinpointIdentifier.java new file mode 100644 index 0000000000000..afc7166619a02 --- /dev/null +++ b/commons/src/main/java/com/navercorp/pinpoint/common/id/PinpointIdentifier.java @@ -0,0 +1,22 @@ +/* + * Copyright 2024 NAVER Corp. + * + * 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 com.navercorp.pinpoint.common.id; + +/** + * @author youngjin.kim2 + */ +public interface PinpointIdentifier { +} diff --git a/commons/src/main/java/com/navercorp/pinpoint/common/id/StringPinpointIdentifier.java b/commons/src/main/java/com/navercorp/pinpoint/common/id/StringPinpointIdentifier.java new file mode 100644 index 0000000000000..67062eb8eed3c --- /dev/null +++ b/commons/src/main/java/com/navercorp/pinpoint/common/id/StringPinpointIdentifier.java @@ -0,0 +1,32 @@ +/* + * Copyright 2024 NAVER Corp. + * + * 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 com.navercorp.pinpoint.common.id; + +/** + * @author youngjin.kim2 + */ +public class StringPinpointIdentifier extends AbstractPinpointIdentifier { + + public StringPinpointIdentifier(String value) { + super(value); + } + + @Override + public String toString() { + return value(); + } + +} diff --git a/commons/src/main/java/com/navercorp/pinpoint/common/id/UUIDPinpointIdentifier.java b/commons/src/main/java/com/navercorp/pinpoint/common/id/UUIDPinpointIdentifier.java new file mode 100644 index 0000000000000..79114354d0cc2 --- /dev/null +++ b/commons/src/main/java/com/navercorp/pinpoint/common/id/UUIDPinpointIdentifier.java @@ -0,0 +1,34 @@ +/* + * Copyright 2024 NAVER Corp. + * + * 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 com.navercorp.pinpoint.common.id; + +import java.util.UUID; + +/** + * @author youngjin.kim2 + */ +public class UUIDPinpointIdentifier extends AbstractPinpointIdentifier { + + public UUIDPinpointIdentifier(UUID value) { + super(value); + } + + @Override + public String toString() { + return value().toString(); + } + +} diff --git a/commons/src/main/java/com/navercorp/pinpoint/common/util/AgentUuidUtils.java b/commons/src/main/java/com/navercorp/pinpoint/common/util/AgentUuidUtils.java index 8adc4b3221b1f..c203b88ace252 100644 --- a/commons/src/main/java/com/navercorp/pinpoint/common/util/AgentUuidUtils.java +++ b/commons/src/main/java/com/navercorp/pinpoint/common/util/AgentUuidUtils.java @@ -16,9 +16,6 @@ package com.navercorp.pinpoint.common.util; -import java.nio.charset.StandardCharsets; -import java.util.Base64; -import java.util.Objects; import java.util.UUID; /** @@ -26,8 +23,6 @@ */ public class AgentUuidUtils { - private static final Base64.Encoder ENCODER = Base64.getUrlEncoder().withoutPadding(); - /** * Base64 encodes the given {@code uuidString} into URL and filename safe string as specified by RFC 4648 section 5. * The returned string is guaranteed to be 22 characters long (with 2 pad characters "=" removed) as a valid UUID @@ -40,10 +35,7 @@ public class AgentUuidUtils { * @throws IllegalArgumentException if {@code uuidString} is not a valid string representation of uuid */ public static String encode(String uuidString) { - Objects.requireNonNull(uuidString, "uuidString"); - - UUID uuid = UUID.fromString(uuidString); - return encode(uuid); + return UuidUtils.encode(uuidString); } /** @@ -58,14 +50,7 @@ public static String encode(String uuidString) { * @throws IllegalArgumentException if {@code uuid} is not a valid uuid */ public static String encode(UUID uuid) { - Objects.requireNonNull(uuid, "uuid"); - - final byte[] bytes = new byte[16]; - BytesUtils.writeLong(uuid.getMostSignificantBits(), bytes, 0); - BytesUtils.writeLong(uuid.getLeastSignificantBits(), bytes, BytesUtils.LONG_BYTE_LENGTH); - - byte[] encode = ENCODER.encode(bytes); - return new String(encode, StandardCharsets.US_ASCII); + return UuidUtils.encode(uuid); } /** @@ -80,17 +65,7 @@ public static String encode(UUID uuid) { * trailing pad characters */ public static UUID decode(String src) { - Objects.requireNonNull(src, "src"); - byte[] bytes = src.getBytes(StandardCharsets.US_ASCII); - if (bytes.length != 22) { - throw new IllegalArgumentException("Invalid src byte array: " + src); - } - - byte[] decoded = Base64.getUrlDecoder().decode(bytes); - - long mostSigBits = BytesUtils.bytesToLong(decoded, 0); - long leastSigBits = BytesUtils.bytesToLong(decoded, BytesUtils.LONG_BYTE_LENGTH); - return new UUID(mostSigBits, leastSigBits); + return UuidUtils.decode(src); } } diff --git a/commons/src/main/java/com/navercorp/pinpoint/common/util/BytesUtils.java b/commons/src/main/java/com/navercorp/pinpoint/common/util/BytesUtils.java index 8e5e62d4626a6..3b3064f78f9c5 100644 --- a/commons/src/main/java/com/navercorp/pinpoint/common/util/BytesUtils.java +++ b/commons/src/main/java/com/navercorp/pinpoint/common/util/BytesUtils.java @@ -20,6 +20,7 @@ import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.util.UUID; /** * @author emeroad @@ -28,6 +29,7 @@ public final class BytesUtils { public static final int SHORT_BYTE_LENGTH = 2; public static final int INT_BYTE_LENGTH = 4; public static final int LONG_BYTE_LENGTH = 8; + public static final int UUID_BYTE_LENGTH = 16; public static final int LONG_LONG_BYTE_LENGTH = 16; public static final int VLONG_MAX_SIZE = 10; @@ -125,6 +127,17 @@ public static short bytesToShort(final byte[] buf, final int offset) { return v; } + public static UUID bytesToUUID(final byte[] buf, final int offset) { + if (buf == null) { + throw new NullPointerException("buf"); + } + checkBounds(buf, offset, UUID_BYTE_LENGTH); + + long msb = bytesToLong(buf, offset); + long lsb = bytesToLong(buf, offset + 8); + return new UUID(msb, lsb); + } + public static int bytesToSVar32(final byte[] buffer, final int offset) { return zigzagToInt(bytesToVar32(buffer, offset)); diff --git a/commons/src/main/java/com/navercorp/pinpoint/common/util/UuidUtils.java b/commons/src/main/java/com/navercorp/pinpoint/common/util/UuidUtils.java new file mode 100644 index 0000000000000..8ef9ac9c0a445 --- /dev/null +++ b/commons/src/main/java/com/navercorp/pinpoint/common/util/UuidUtils.java @@ -0,0 +1,133 @@ +/* + * Copyright 2024 NAVER Corp. + * + * 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 implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.common.util; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.Objects; +import java.util.UUID; + +/** + * @author youngjin.kim2 + */ +public class UuidUtils { + + public static final UUID EMPTY = new UUID(0, 0); + + private static final Base64.Encoder ENCODER = Base64.getUrlEncoder().withoutPadding(); + + /** + * Base64 encodes the given {@code uuidString} into URL and filename safe string as specified by RFC 4648 section 5. + * The returned string is guaranteed to be 22 characters long (with 2 pad characters "=" removed) as a valid UUID + * string will always be encoded into the same length. + * + * @param uuidString uuid string to encode + * @return URL and filename safe base64 encoded string with pad characters removed + * + * @throws NullPointerException if {@code uuidString} is null + * @throws IllegalArgumentException if {@code uuidString} is not a valid string representation of uuid + */ + public static String encode(String uuidString) { + Objects.requireNonNull(uuidString, "uuidString"); + + UUID uuid = UUID.fromString(uuidString); + return encode(uuid); + } + + /** + * Base64 encodes the given {@code uuid} into URL and filename safe string as specified by RFC 4648 section 5. + * The returned string is guaranteed to be 22 characters long (with 2 pad characters "=" removed) as a valid UUID + * string will always be encoded into the same length. + * + * @param uuid uuid to encode + * @return URL and filename safe base64 encoded string with pad characters removed + * + * @throws NullPointerException if {@code uuid} is null + * @throws IllegalArgumentException if {@code uuid} is not a valid uuid + */ + public static String encode(UUID uuid) { + Objects.requireNonNull(uuid, "uuid"); + + final byte[] bytes = UuidUtils.toBytes(uuid); + + byte[] encode = ENCODER.encode(bytes); + return new String(encode, StandardCharsets.US_ASCII); + } + + /** + * Decodes the given {@code src} string into a {@link UUID}. {@code src} must be a URL and filename safe base64 + * encoded string 22 characters in length without pad characters "=". + * + * @param src string to be decoded into {@link UUID} + * @return uuid decoded from the given {@code src} + * + * @throws NullPointerException if {@code src} is null + * @throws IllegalArgumentException if {@code src} is not a URL and filename safe base64 encoded string without + * trailing pad characters + */ + public static UUID decode(String src) { + Objects.requireNonNull(src, "src"); + byte[] bytes = src.getBytes(StandardCharsets.US_ASCII); + if (bytes.length != 22) { + throw new IllegalArgumentException("Invalid src byte array: " + src); + } + + byte[] decoded = Base64.getUrlDecoder().decode(bytes); + + return UuidUtils.fromBytes(decoded); + } + + public static UUID fromBytes(byte[] bytes) { + if (bytes == null) { + return null; + } + + if (bytes.length != 16) { + throw new IllegalArgumentException("Invalid bytes length: " + bytes.length); + } + + long mostSigBits = BytesUtils.bytesToLong(bytes, 0); + long leastSigBits = BytesUtils.bytesToLong(bytes, BytesUtils.LONG_BYTE_LENGTH); + return new UUID(mostSigBits, leastSigBits); + } + + public static byte[] toBytes(UUID uuid) { + if (uuid == null) { + return null; + } + + byte[] bytes = new byte[16]; + BytesUtils.writeLong(uuid.getMostSignificantBits(), bytes, 0); + BytesUtils.writeLong(uuid.getLeastSignificantBits(), bytes, BytesUtils.LONG_BYTE_LENGTH); + return bytes; + } + + public static UUID add(UUID a, int b) { + long mostSigBits = a.getMostSignificantBits(); + long leastSigBits = a.getLeastSignificantBits(); + leastSigBits += b; + if (leastSigBits - b < 0 && leastSigBits >= 0) { + mostSigBits++; + } + return new UUID(mostSigBits, leastSigBits); + } + + public static UUID createV4() { + return UUID.randomUUID(); + } + +} diff --git a/exceptiontrace/exceptiontrace-common/src/main/java/com/navercorp/pinpoint/exceptiontrace/common/model/ExceptionMetaData.java b/exceptiontrace/exceptiontrace-common/src/main/java/com/navercorp/pinpoint/exceptiontrace/common/model/ExceptionMetaData.java index f5483df651286..47d40cfa79c80 100644 --- a/exceptiontrace/exceptiontrace-common/src/main/java/com/navercorp/pinpoint/exceptiontrace/common/model/ExceptionMetaData.java +++ b/exceptiontrace/exceptiontrace-common/src/main/java/com/navercorp/pinpoint/exceptiontrace/common/model/ExceptionMetaData.java @@ -16,13 +16,12 @@ package com.navercorp.pinpoint.exceptiontrace.common.model; +import com.navercorp.pinpoint.common.server.util.HashUtils; import com.navercorp.pinpoint.common.server.util.StringPrecondition; import com.navercorp.pinpoint.common.util.StringUtils; -import com.navercorp.pinpoint.exceptiontrace.common.util.HashUtils; import java.util.List; -import java.util.Objects; /** * @author intr3p1d diff --git a/grpc/src/main/java/com/navercorp/pinpoint/grpc/server/AgentHeaderReader.java b/grpc/src/main/java/com/navercorp/pinpoint/grpc/server/AgentHeaderReader.java index b7e40252361b8..1dcee81161d98 100644 --- a/grpc/src/main/java/com/navercorp/pinpoint/grpc/server/AgentHeaderReader.java +++ b/grpc/src/main/java/com/navercorp/pinpoint/grpc/server/AgentHeaderReader.java @@ -54,9 +54,9 @@ public AgentHeaderReader(String name, Function> me @Override public Header extract(Metadata headers) { - final String agentId = getId(headers, Header.AGENT_ID_KEY); + final String agentId = getId(headers, Header.AGENT_ID_KEY, PinpointConstants.AGENT_ID_MAX_LEN); final String agentName = getAgentName(headers, Header.AGENT_NAME_KEY); - final String applicationName = getId(headers, Header.APPLICATION_NAME_KEY); + final String applicationName = getId(headers, Header.APPLICATION_NAME_KEY, PinpointConstants.APPLICATION_NAME_MAX_LEN); final long startTime = getTime(headers, Header.AGENT_START_TIME_KEY); final int serviceType = getServiceType(headers); final long socketId = getSocketId(headers); @@ -82,12 +82,12 @@ protected long getTime(Metadata headers, Metadata.Key timeKey) { } } - protected String getId(Metadata headers, Metadata.Key idKey) { + protected String getId(Metadata headers, Metadata.Key idKey, int maxLen) { final String id = headers.get(idKey); if (id == null) { throw Status.INVALID_ARGUMENT.withDescription(idKey.name() + " header is missing").asRuntimeException(); } - return validateId(id, idKey); + return validateId(id, idKey, maxLen); } protected String getAgentName(Metadata headers, Metadata.Key idKey) { @@ -141,8 +141,8 @@ protected List getSupportCommandCodeList(Metadata headers) { } } - String validateId(String id, Metadata.Key key) { - if (!IdValidateUtils.validateId(id)) { + String validateId(String id, Metadata.Key key, int maxLen) { + if (!IdValidateUtils.validateId(id, maxLen)) { throw Status.INVALID_ARGUMENT.withDescription("invalid " + key.name()).asRuntimeException(); } return id; diff --git a/hbase/scripts/hbase-create.hbase b/hbase/scripts/hbase-create.hbase index d8abbdb0a0d5c..2c72d1664102c 100644 --- a/hbase/scripts/hbase-create.hbase +++ b/hbase/scripts/hbase-create.hbase @@ -22,6 +22,10 @@ create 'ApplicationMapStatisticsSelf_Ver2', { NAME => 'C', TTL => 5184000, VERSI create 'HostApplicationMap_Ver2', { NAME => 'M', TTL => 5184000, VERSIONS => 1, DATA_BLOCK_ENCODING => 'PREFIX' }, {SPLITS=>["\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"]} +create 'ApplicationIndex_Ver2', { NAME => 'Agents', TTL => 31536000, DATA_BLOCK_ENCODING => 'PREFIX' } +create 'ApplicationId', { NAME => 'F', TTL => 5184000, DATA_BLOCK_ENCODING => 'PREFIX' }, { NAME => 'I', TTL => 5184000, DATA_BLOCK_ENCODING => 'PREFIX' }, {SPLITS=>["\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"]} +create 'ApplicationTraceIndex_Ver2', { NAME => 'I', TTL => 5184000, DATA_BLOCK_ENCODING => 'PREFIX' }, { NAME => 'M', TTL => 5184000, DATA_BLOCK_ENCODING => 'PREFIX' }, {SPLITS=>["\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00","\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"]} + list exit diff --git a/web/src/main/java/com/navercorp/pinpoint/web/alarm/vo/Rule.java b/web/src/main/java/com/navercorp/pinpoint/web/alarm/vo/Rule.java index d24aaa2b7e719..91acffceb3b9f 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/alarm/vo/Rule.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/alarm/vo/Rule.java @@ -27,7 +27,7 @@ public class Rule implements RuleInterface { private String ruleId; - @NotBlank private String applicationId; + private String applicationName; private String serviceType; @NotBlank private String checkerName; @NotNull private Integer threshold; @@ -40,8 +40,9 @@ public class Rule implements RuleInterface { public Rule() { } - public Rule(String applicationId, String serviceType, String checkerName, Integer Threshold, String userGroupId, boolean smsSend, boolean emailSend, boolean webhookSend, String notes) { - this.applicationId = applicationId; + public Rule(String applicationName, String serviceType, String checkerName, Integer Threshold, String userGroupId, + boolean smsSend, boolean emailSend, boolean webhookSend, String notes) { + this.applicationName = applicationName; this.serviceType = serviceType; this.checkerName = checkerName; this.threshold = Threshold; @@ -52,14 +53,16 @@ public Rule(String applicationId, String serviceType, String checkerName, Intege this.notes = notes; } - public String getApplicationId() { - return applicationId; + @Override + public String getApplicationName() { + return applicationName; } - public void setApplicationId(String applicationId) { - this.applicationId = applicationId; + public void setApplicationName(String applicationName) { + this.applicationName = applicationName; } + @Override public String getServiceType() { return serviceType; } @@ -67,7 +70,8 @@ public String getServiceType() { public void setServiceType(String serviceType) { this.serviceType = serviceType; } - + + @Override public String getCheckerName() { return checkerName; } @@ -76,6 +80,7 @@ public void setCheckerName(String checkerName) { this.checkerName = checkerName; } + @Override public Integer getThreshold() { return threshold; } @@ -124,6 +129,7 @@ public void setRuleId(String ruleId) { this.ruleId = ruleId; } + @Override public String getNotes() { return notes; } @@ -133,7 +139,7 @@ public void setNotes(String notes) { } public static boolean isRuleInvalidForPost(Rule rule) { - return StringUtils.isEmpty(rule.getApplicationId()) || + return StringUtils.isEmpty(rule.getApplicationName()) || StringUtils.isEmpty(rule.getCheckerName()) || StringUtils.isEmpty(rule.getUserGroupId()) || rule.getThreshold() == null; @@ -142,7 +148,7 @@ public static boolean isRuleInvalidForPost(Rule rule) { public static boolean isRuleInvalid(Rule rule) { return StringUtils.isEmpty(rule.getRuleId()) || - StringUtils.isEmpty(rule.getApplicationId()) || + StringUtils.isEmpty(rule.getApplicationName()) || StringUtils.isEmpty(rule.getCheckerName()) || StringUtils.isEmpty(rule.getUserGroupId()) || rule.getThreshold() == null; @@ -151,18 +157,16 @@ public static boolean isRuleInvalid(Rule rule) { @Override public String toString() { - final StringBuilder sb = new StringBuilder("Rule{"); - sb.append("ruleId='").append(ruleId).append('\''); - sb.append(", applicationId='").append(applicationId).append('\''); - sb.append(", serviceType='").append(serviceType).append('\''); - sb.append(", checkerName='").append(checkerName).append('\''); - sb.append(", threshold=").append(threshold); - sb.append(", userGroupId='").append(userGroupId).append('\''); - sb.append(", smsSend=").append(smsSend); - sb.append(", emailSend=").append(emailSend); - sb.append(", webhookSend=").append(webhookSend); - sb.append(", notes='").append(notes).append('\''); - sb.append('}'); - return sb.toString(); + return "Rule{" + "ruleId='" + ruleId + '\'' + + ", applicationName='" + applicationName + '\'' + + ", serviceType='" + serviceType + '\'' + + ", checkerName='" + checkerName + '\'' + + ", threshold=" + threshold + + ", userGroupId='" + userGroupId + '\'' + + ", smsSend=" + smsSend + + ", emailSend=" + emailSend + + ", webhookSend=" + webhookSend + + ", notes='" + notes + '\'' + + '}'; } } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/histogram/DefaultNodeHistogramAppender.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/histogram/DefaultNodeHistogramAppender.java index 8280561d2ebbc..40babd04dec75 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/histogram/DefaultNodeHistogramAppender.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/histogram/DefaultNodeHistogramAppender.java @@ -92,7 +92,7 @@ private CompletableFuture[] getNodeHistogramFutures(Range range, Collection getNodeHistogramFuture(Range range, Node node, LinkList linkList, AtomicBoolean stopSign) { CompletableFuture nodeHistogramFuture; final Application application = node.getApplication(); - final ServiceType serviceType = application.getServiceType(); + final ServiceType serviceType = application.serviceType(); if (serviceType.isWas()) { // for WAS nodes, set their own response time histogram diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/histogram/DefaultNodeHistogramFactory.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/histogram/DefaultNodeHistogramFactory.java index 557f124853764..10c7abac57252 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/histogram/DefaultNodeHistogramFactory.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/histogram/DefaultNodeHistogramFactory.java @@ -63,7 +63,7 @@ public NodeHistogram createTerminalNodeHistogram(Application terminalApplication // create applicationHistogram final List toLinkList = linkList.findToLink(terminalApplication); - final Histogram applicationHistogram = new Histogram(terminalApplication.getServiceType()); + final Histogram applicationHistogram = new Histogram(terminalApplication.serviceType()); for (Link link : toLinkList) { applicationHistogram.add(link.getHistogram()); } @@ -80,7 +80,7 @@ public NodeHistogram createTerminalNodeHistogram(Application terminalApplication nodeHistogram.setApplicationTimeHistogram(applicationTimeHistogram); // for Terminal nodes, create AgentLevel histogram - if (terminalApplication.getServiceType().isTerminal() || terminalApplication.getServiceType().isAlias()) { + if (terminalApplication.serviceType().isTerminal() || terminalApplication.serviceType().isAlias()) { LinkCallDataMap mergeSource = new LinkCallDataMap(); final Map agentHistogramMap = new HashMap<>(); for (Link link : toLinkList) { @@ -136,7 +136,7 @@ public NodeHistogram createQueueNodeHistogram(Application queueApplication, Rang final NodeHistogram nodeHistogram = new NodeHistogram(queueApplication, range); // create applicationHistogram - final Histogram applicationHistogram = new Histogram(queueApplication.getServiceType()); + final Histogram applicationHistogram = new Histogram(queueApplication.serviceType()); for (Link link : toLinkList) { applicationHistogram.add(link.getHistogram()); } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/histogram/SimplifiedNodeHistogramFactory.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/histogram/SimplifiedNodeHistogramFactory.java index 1c09ca2ef6801..65ec24c87d8e0 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/histogram/SimplifiedNodeHistogramFactory.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/histogram/SimplifiedNodeHistogramFactory.java @@ -42,7 +42,7 @@ public NodeHistogram createTerminalNodeHistogram(Application terminalApplication // create applicationHistogram final List toLinkList = linkList.findToLink(terminalApplication); - final ServiceType terminalService = terminalApplication.getServiceType(); + final ServiceType terminalService = terminalApplication.serviceType(); final Histogram applicationHistogram = new Histogram(terminalService); for (Link link : toLinkList) { applicationHistogram.add(link.getHistogram()); @@ -98,7 +98,7 @@ public NodeHistogram createQueueNodeHistogram(Application queueApplication, Rang final NodeHistogram nodeHistogram = new NodeHistogram(queueApplication, range); // create applicationHistogram - final Histogram applicationHistogram = new Histogram(queueApplication.getServiceType()); + final Histogram applicationHistogram = new Histogram(queueApplication.serviceType()); for (Link link : toLinkList) { applicationHistogram.add(link.getHistogram()); } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/server/datasource/AgentInfoServerGroupListDataSource.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/server/datasource/AgentInfoServerGroupListDataSource.java index 6b8a9a7de3d1c..10d5a4b249c91 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/server/datasource/AgentInfoServerGroupListDataSource.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/server/datasource/AgentInfoServerGroupListDataSource.java @@ -67,7 +67,7 @@ public ServerGroupList createServerGroupList(Node node, Instant timestamp) { } Application application = node.getApplication(); - Set agentInfos = agentInfoService.getAgentsByApplicationNameWithoutStatus(application.getName(), timestamp.toEpochMilli()); + Set agentInfos = agentInfoService.getAgentsByApplicationNameWithoutStatus(application.name(), timestamp.toEpochMilli()); if (CollectionUtils.isEmpty(agentInfos)) { logger.warn("agentInfo not found. application:{}", application); return ServerGroupList.empty(); 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 34c049821191b..02a8b1d7b826b 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 @@ -102,8 +102,8 @@ private Scan createScan(Application application, Range range, byte[] family) { } // start key is replaced by end key because timestamp has been reversed - byte[] startKey = ApplicationMapStatisticsUtils.makeRowKey(application.getName(), application.getServiceTypeCode(), range.getTo()); - byte[] endKey = ApplicationMapStatisticsUtils.makeRowKey(application.getName(), application.getServiceTypeCode(), range.getFrom()); + byte[] startKey = ApplicationMapStatisticsUtils.makeRowKey(application.name(), application.getServiceTypeCode(), range.getTo()); + byte[] endKey = ApplicationMapStatisticsUtils.makeRowKey(application.name(), application.getServiceTypeCode(), range.getFrom()); final Scan scan = new Scan(); scan.setCaching(this.scanCacheSize); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/hbase/HbaseMapStatisticsCalleeDao.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/hbase/HbaseMapStatisticsCalleeDao.java index df227b3a1f6ac..e9a6b78465a21 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/hbase/HbaseMapStatisticsCalleeDao.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/hbase/HbaseMapStatisticsCalleeDao.java @@ -117,8 +117,8 @@ private Scan createScan(Application application, Range range, byte[] family) { } // start key is replaced by end key because timestamp has been reversed - byte[] startKey = ApplicationMapStatisticsUtils.makeRowKey(application.getName(), application.getServiceTypeCode(), range.getTo()); - byte[] endKey = ApplicationMapStatisticsUtils.makeRowKey(application.getName(), application.getServiceTypeCode(), range.getFrom()); + byte[] startKey = ApplicationMapStatisticsUtils.makeRowKey(application.name(), application.getServiceTypeCode(), range.getTo()); + byte[] endKey = ApplicationMapStatisticsUtils.makeRowKey(application.name(), application.getServiceTypeCode(), range.getFrom()); Scan scan = new Scan(); scan.setCaching(SCAN_CACHE_SIZE); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/hbase/HbaseMapStatisticsCallerDao.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/hbase/HbaseMapStatisticsCallerDao.java index 7312200220570..111eb18c6f2fa 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/hbase/HbaseMapStatisticsCallerDao.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/hbase/HbaseMapStatisticsCallerDao.java @@ -118,8 +118,8 @@ private Scan createScan(Application application, Range range, byte[]... familyAr } // start key is replaced by end key because timestamp has been reversed - byte[] startKey = ApplicationMapStatisticsUtils.makeRowKey(application.getName(), application.getServiceTypeCode(), range.getTo()); - byte[] endKey = ApplicationMapStatisticsUtils.makeRowKey(application.getName(), application.getServiceTypeCode(), range.getFrom()); + byte[] startKey = ApplicationMapStatisticsUtils.makeRowKey(application.name(), application.getServiceTypeCode(), range.getTo()); + byte[] endKey = ApplicationMapStatisticsUtils.makeRowKey(application.name(), application.getServiceTypeCode(), range.getFrom()); Scan scan = new Scan(); scan.setCaching(SCAN_CACHE_SIZE); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/DefaultLinkFilter.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/DefaultLinkFilter.java index 40f11c6962efe..7b8e99eeed470 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/DefaultLinkFilter.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/DefaultLinkFilter.java @@ -40,7 +40,7 @@ public DefaultLinkFilter(Application outApplication, Application inApplication) public boolean filter(Application foundApplication) { Objects.requireNonNull(foundApplication, "foundApplication"); - if (this.inApplication.getServiceType().isWas() && this.outApplication.getServiceType().isWas()) { + if (this.inApplication.serviceType().isWas() && this.outApplication.serviceType().isWas()) { logger.debug("check was to was."); // if not from same source, drop if (!this.outApplication.equals(foundApplication)) { @@ -49,10 +49,10 @@ public boolean filter(Application foundApplication) { } return true; } - } else if (this.outApplication.getServiceType().isUser()) { + } else if (this.outApplication.serviceType().isUser()) { logger.debug("check client to was"); // if dest not equals to that WAS, drop - if (!this.inApplication.getName().equals(foundApplication.getName())) { + if (!this.inApplication.name().equals(foundApplication.name())) { if (logger.isDebugEnabled()) { logger.debug(" DROP THE ROW,2, DIFFERENT DEST. fetched={}, params={}", foundApplication, this.inApplication); } @@ -60,10 +60,10 @@ public boolean filter(Application foundApplication) { } } else { logger.debug("check any to any."); - if (this.inApplication.getServiceType().isUnknown()) { + if (this.inApplication.serviceType().isUnknown()) { // compare just only application name when dest is unknown. // TODO need more nice way to compare - if (!this.inApplication.getName().equals(foundApplication.getName())) { + if (!this.inApplication.name().equals(foundApplication.name())) { if (logger.isDebugEnabled()) { logger.debug(" DROP THE ROW,3, DIFFERENT DEST. fetched={}, params={}", foundApplication, inApplication); } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/MapStatisticsCalleeMapper.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/MapStatisticsCalleeMapper.java index 0e4a41fad461a..18fe82d94df6a 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/MapStatisticsCalleeMapper.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/MapStatisticsCalleeMapper.java @@ -89,7 +89,7 @@ public LinkDataMap mapRow(Result result, int rowNum) throws Exception { for (Cell cell : result.rawCells()) { final byte[] qualifier = CellUtil.cloneQualifier(cell); - final Application in = readInApplication(qualifier, calleeApplication.getServiceType()); + final Application in = readInApplication(qualifier, calleeApplication.serviceType()); if (filter.filter(in)) { continue; } @@ -101,7 +101,7 @@ public LinkDataMap mapRow(Result result, int rowNum) throws Exception { // There may be no callerHost for virtual queue nodes from user-defined entry points. // Terminal nodes, such as httpclient will not have callerHost set as well, but since they're terminal // nodes, they would not have reached here in the first place. - if (calleeApplication.getServiceType().isQueue()) { + if (calleeApplication.serviceType().isQueue()) { callerHost = StringUtils.defaultString(callerHost); } boolean isError = histogramSlot == (short) -1; @@ -111,7 +111,7 @@ public LinkDataMap mapRow(Result result, int rowNum) throws Exception { } final short slotTime = (isError) ? (short) -1 : histogramSlot; - linkDataMap.addLinkData(in, in.getName(), calleeApplication, callerHost, timestamp, slotTime, requestCount); + linkDataMap.addLinkData(in, in.name(), calleeApplication, callerHost, timestamp, slotTime, requestCount); if (logger.isDebugEnabled()) { logger.debug(" Fetched {}. statistics:{}", LinkDirection.IN_LINK, linkDataMap); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/MapStatisticsCalleeTimeAggregatedMapper.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/MapStatisticsCalleeTimeAggregatedMapper.java index 68f42da0e57da..3c7ad80dfc85d 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/MapStatisticsCalleeTimeAggregatedMapper.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/MapStatisticsCalleeTimeAggregatedMapper.java @@ -81,7 +81,7 @@ public LinkDataMap mapRow(Result result, int rowNum) throws Exception { for (Cell cell : result.rawCells()) { final byte[] qualifier = CellUtil.cloneQualifier(cell); - final Application callerApplication = readCallerApplication(qualifier, calleeApplication.getServiceType()); + final Application callerApplication = readCallerApplication(qualifier, calleeApplication.serviceType()); if (filter.filter(callerApplication)) { continue; } @@ -93,7 +93,7 @@ public LinkDataMap mapRow(Result result, int rowNum) throws Exception { // There may be no callerHost for virtual queue nodes from user-defined entry points. // Terminal nodes, such as httpclient will not have callerHost set as well, but since they're terminal // nodes, they would not have reached here in the first place. - if (calleeApplication.getServiceType().isQueue()) { + if (calleeApplication.serviceType().isQueue()) { callerHost = StringUtils.defaultString(callerHost); } boolean isError = histogramSlot == (short) -1; @@ -103,7 +103,7 @@ public LinkDataMap mapRow(Result result, int rowNum) throws Exception { } final short slotTime = (isError) ? (short) -1 : histogramSlot; - linkDataMap.addLinkData(callerApplication, callerApplication.getName(), calleeApplication, callerHost, timestamp, slotTime, requestCount); + linkDataMap.addLinkData(callerApplication, callerApplication.name(), calleeApplication, callerHost, timestamp, slotTime, requestCount); if (logger.isDebugEnabled()) { logger.debug(" Fetched Callee. statistics:{}", linkDataMap); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/MapStatisticsCallerMapper.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/MapStatisticsCallerMapper.java index 2e443daa24b17..b19908d45e87b 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/MapStatisticsCallerMapper.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/MapStatisticsCallerMapper.java @@ -101,7 +101,7 @@ public LinkDataMap mapRow(Result result, int rowNum) throws Exception { final short slotTime = (isError) ? (short) -1 : histogramSlot; if (StringUtils.isEmpty(calleeHost)) { - calleeHost = callee.getName(); + calleeHost = callee.name(); } linkDataMap.addLinkData(out, callerAgentId, callee, calleeHost, timestamp, slotTime, requestCount); } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/MapStatisticsCallerTimeAggregatedMapper.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/MapStatisticsCallerTimeAggregatedMapper.java index ba23717af10c9..250ca7efbd0cf 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/MapStatisticsCallerTimeAggregatedMapper.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/dao/mapper/MapStatisticsCallerTimeAggregatedMapper.java @@ -82,7 +82,7 @@ public LinkDataMap mapRow(Result result, int rowNum) throws Exception { final short slotTime = (isError) ? (short) -1 : histogramSlot; if (StringUtils.isEmpty(calleeHost)) { - calleeHost = callee.getName(); + calleeHost = callee.name(); } linkDataMap.addLinkData(caller, callerAgentId, callee, calleeHost, timestamp, slotTime, requestCount); } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/AgentTimeHistogram.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/AgentTimeHistogram.java index 5d3d7851bcd39..71ddf43b0de6b 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/AgentTimeHistogram.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/AgentTimeHistogram.java @@ -84,7 +84,7 @@ public List createViewModel(TimeHistogramFormat time public Map> getTimeHistogramMap() { Map> result = new HashMap<>(); for (AgentHistogram agentHistogram : agentHistogramList.getAgentHistogramList()) { - result.put(agentHistogram.getAgentId().getName(), sortTimeHistogram(agentHistogram.getTimeHistogram())); + result.put(agentHistogram.getAgentId().name(), sortTimeHistogram(agentHistogram.getTimeHistogram())); } return result; } @@ -124,7 +124,7 @@ public List getSampledAgentApdexScoreList(String agentName) { private AgentHistogram selectAgentHistogram(String agentName) { for (AgentHistogram agentHistogram : agentHistogramList.getAgentHistogramList()) { Application agentId = agentHistogram.getAgentId(); - if (agentId.getName().equals(agentName)) { + if (agentId.name().equals(agentName)) { return agentHistogram; } } @@ -138,7 +138,7 @@ public List getApplicationApdexScoreList(TimeWindow List max = fillList(size, DEFAULT_MAX_APDEX_SCORE); List maxAgentId = fillList(size, DEFAULT_AGENT_ID); - List sumHistogram = getDefaultHistograms(window, application.getServiceType()); + List sumHistogram = getDefaultHistograms(window, application.serviceType()); for (AgentHistogram agentHistogram : agentHistogramList.getAgentHistogramList()) { for (TimeHistogram timeHistogram : agentHistogram.getTimeHistogram()) { diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/AgentTimeHistogramBuilder.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/AgentTimeHistogramBuilder.java index f63ce1c18c602..926168cc8ec07 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/AgentTimeHistogramBuilder.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/AgentTimeHistogramBuilder.java @@ -87,7 +87,7 @@ private AgentHistogramList interpolation(AgentHistogramList agentHistogramList, for (AgentHistogram agentHistogram : agentHistogramList.getAgentHistogramList()) { List timeHistogramList = new ArrayList<>(); for (Long time : window) { - timeHistogramList.add(new TimeHistogram(application.getServiceType(), time)); + timeHistogramList.add(new TimeHistogram(application.serviceType(), time)); } resultAgentHistogramList.addTimeHistogram(agentHistogram.getAgentId(), timeHistogramList); } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/AgentTimeHistogramSummary.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/AgentTimeHistogramSummary.java index d849fb2192a42..06040ec43ea7c 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/AgentTimeHistogramSummary.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/AgentTimeHistogramSummary.java @@ -32,7 +32,7 @@ public class AgentTimeHistogramSummary { public static AgentTimeHistogramSummary createSummary(AgentHistogram agentHistogram) { Objects.requireNonNull(agentHistogram, "agentHistogram"); - return new AgentTimeHistogramSummary(agentHistogram.getAgentId().getName(), agentHistogram.getHistogram()); + return new AgentTimeHistogramSummary(agentHistogram.getAgentId().name(), agentHistogram.getHistogram()); } public AgentTimeHistogramSummary(String agentId, Histogram histogram) { diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/ApplicationTimeHistogramBuilder.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/ApplicationTimeHistogramBuilder.java index 1e8163d65a62f..e9da32ce79c49 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/ApplicationTimeHistogramBuilder.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/ApplicationTimeHistogramBuilder.java @@ -55,7 +55,7 @@ public ApplicationTimeHistogram build(List responseHistogramList) final Long timeStamp = responseTime.getTimeStamp(); TimeHistogram timeHistogram = applicationLevelHistogram.get(timeStamp); if (timeHistogram == null) { - timeHistogram = new TimeHistogram(application.getServiceType(), timeStamp); + timeHistogram = new TimeHistogram(application.serviceType(), timeStamp); applicationLevelHistogram.put(timeStamp, timeHistogram); } // add each agent-level data @@ -105,14 +105,14 @@ private List interpolation(Collection histogramLis // Map resultMap = new HashMap<>(); for (Long time : window) { - resultMap.put(time, new TimeHistogram(application.getServiceType(), time)); + resultMap.put(time, new TimeHistogram(application.serviceType(), time)); } for (TimeHistogram timeHistogram : histogramList) { long time = window.refineTimestamp(timeHistogram.getTimeStamp()); - TimeHistogram windowHistogram = resultMap.computeIfAbsent(time, t -> new TimeHistogram(application.getServiceType(), t)); + TimeHistogram windowHistogram = resultMap.computeIfAbsent(time, t -> new TimeHistogram(application.serviceType(), t)); windowHistogram.add(timeHistogram); } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/NodeHistogram.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/NodeHistogram.java index af85101559a61..d6ab38a8d2b0b 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/NodeHistogram.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/histogram/NodeHistogram.java @@ -62,7 +62,7 @@ public NodeHistogram(Application application, Range range) { this.application = Objects.requireNonNull(application, "application"); this.range = Objects.requireNonNull(range, "range"); - this.applicationHistogram = new Histogram(this.application.getServiceType()); + this.applicationHistogram = new Histogram(this.application.serviceType()); this.agentHistogramMap = new HashMap<>(); this.applicationTimeHistogram = new ApplicationTimeHistogram(this.application, this.range); @@ -182,14 +182,14 @@ private Map createAgentLevelResponseTime(List r private void addAgentLevelHistogram(Map agentHistogramMap, String agentId, TimeHistogram histogram) { Histogram agentHistogram = agentHistogramMap.get(agentId); if (agentHistogram == null) { - agentHistogram = new Histogram(application.getServiceType()); + agentHistogram = new Histogram(application.serviceType()); agentHistogramMap.put(agentId, agentHistogram); } agentHistogram.add(histogram); } private Histogram createApplicationLevelResponseTime(List responseHistogram) { - final Histogram applicationHistogram = new Histogram(this.application.getServiceType()); + final Histogram applicationHistogram = new Histogram(this.application.serviceType()); for (ResponseTime responseTime : responseHistogram) { final Collection histogramList = responseTime.getAgentResponseHistogramList(); applicationHistogram.addAll(histogramList); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/link/Link.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/link/Link.java index 4fd2e315720e6..58ac18e1cf09f 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/link/Link.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/link/Link.java @@ -243,7 +243,7 @@ public Boolean getLinkAlert() { } public boolean isWasToWasLink() { - return this.fromNode.getApplication().getServiceType().isWas() && this.toNode.getApplication().getServiceType().isWas(); + return this.fromNode.getApplication().serviceType().isWas() && this.toNode.getApplication().serviceType().isWas(); } @Override diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/link/LinkName.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/link/LinkName.java index 332d172cb7049..cefc7c7f8b06e 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/link/LinkName.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/link/LinkName.java @@ -30,7 +30,7 @@ public String getName() { } private String toNodeName(Application node) { - return NodeName.toNodeName(node.getName(), node.getServiceType()); + return NodeName.toNodeName(node.name(), node.serviceType()); } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/DefaultApplicationMapCreator.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/DefaultApplicationMapCreator.java index a478635c35ae8..6835eb4df13e6 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/DefaultApplicationMapCreator.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/DefaultApplicationMapCreator.java @@ -66,7 +66,7 @@ public LinkDataDuplexMap createMap(Application application, LinkSelectContext li searchResult.addSourceLinkData(outLinkData); final Application toApplication = outLinkData.getToApplication(); // skip if nextApplication is a terminal or an unknown cloud - final ServiceType toServiceType = toApplication.getServiceType(); + final ServiceType toServiceType = toApplication.serviceType(); if (toServiceType.isTerminal() || toServiceType.isUnknown()) { continue; } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/FilteredMapBuilder.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/FilteredMapBuilder.java index 13c4ccc5e2108..4fcbf0ce8e745 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/FilteredMapBuilder.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/FilteredMapBuilder.java @@ -108,18 +108,18 @@ public FilteredMapBuilder addTransaction(List transaction) { for (SpanBo span : transaction) { final Application parentApplication = createParentApplication(span, transactionSpanMap, version); - final Application spanApplication = this.applicationFactory.createApplication(span.getApplicationId(), span.getApplicationServiceType()); + final Application spanApplication = this.applicationFactory.createApplication(span.getApplicationName(), span.getApplicationServiceType()); // records the Span's response time statistics responseHistogramsBuilder.addHistogram(spanApplication, span, span.getCollectorAcceptTime()); - if (!spanApplication.getServiceType().isRecordStatistics() || spanApplication.getServiceType().isRpcClient()) { + if (!spanApplication.serviceType().isRecordStatistics() || spanApplication.serviceType().isRpcClient()) { // span's serviceType is probably not set correctly logger.warn("invalid span application:{}", spanApplication); continue; } - if (parentApplication.getServiceType().isUser()) { + if (parentApplication.serviceType().isUser()) { // Outbound data if (logger.isTraceEnabled()) { logger.trace("span user:{} {} -> span:{} {}", parentApplication, span.getAgentId(), spanApplication, span.getAgentId()); @@ -154,7 +154,7 @@ public FilteredMapBuilder addTransaction(List transaction) { } private void addLinkData(LinkDataMap linkDataMap, SpanBo span, Application parentApplication, Application spanApplication) { - final short slotTime = getHistogramSlotTime(span, spanApplication.getServiceType()); + final short slotTime = getHistogramSlotTime(span, spanApplication.serviceType()); // might need to reconsider using collector's accept time for link statistics. // we need to convert to time window's timestamp. If not, it may lead to OOM due to mismatch in timeslots. long timestamp = timeWindow.refineTimestamp(span.getCollectorAcceptTime()); @@ -162,7 +162,7 @@ private void addLinkData(LinkDataMap linkDataMap, SpanBo span, Application paren final String spanAgentId = span.getAgentId(); linkDataMap.addLinkData(parentApplication, spanAgentId, spanApplication, spanAgentId, timestamp, slotTime, 1); - final HistogramSchema histogramSchema = spanApplication.getServiceType().getHistogramSchema(); + final HistogramSchema histogramSchema = spanApplication.serviceType().getHistogramSchema(); final short sumElapsedSlotTime = histogramSchema.getSumStatSlot().getSlotTime(); final short maxElapsedSlotTime = histogramSchema.getMaxStatSlot().getSlotTime(); final int elapsed = span.getElapsed(); @@ -201,9 +201,9 @@ private Application createParentApplication(SpanBo span, MultiValueMap= 4) { ServiceType applicationServiceType = this.registry.findServiceType(span.getApplicationServiceType()); - applicationName = span.getApplicationId() + "_" + applicationServiceType; + applicationName = span.getApplicationName() + "_" + applicationServiceType; } else { - applicationName = span.getApplicationId(); + applicationName = span.getApplicationName(); } ServiceType serviceType = this.registry.findServiceType(ServiceType.USER.getCode()); return this.applicationFactory.createApplication(applicationName, serviceType); @@ -225,7 +225,7 @@ private Application createParentApplication(SpanBo span, MultiValueMap transactionSpanMap destServiceType = ServiceType.UNKNOWN; } else { //replace with alias instead of Unkown when exists - logger.debug("replace with alias {}", replacedApplication.getServiceType()); - destServiceType = replacedApplication.getServiceType(); - dest = replacedApplication.getName(); + logger.debug("replace with alias {}", replacedApplication.serviceType()); + destServiceType = replacedApplication.serviceType(); + dest = replacedApplication.name(); } } } @@ -322,7 +322,7 @@ private void addNode(SpanBo span, MultiValueMap transactionSpanMap logger.trace("spanEvent src:{} {} -> dest:{} {}", srcApplication, span.getAgentId(), destApplication, spanEvent.getEndPoint()); } // endPoint may be null - final String destinationAgentId = StringUtils.defaultString(spanEvent.getEndPoint(), destApplication.getName()); + final String destinationAgentId = StringUtils.defaultString(spanEvent.getEndPoint(), destApplication.name()); sourceLinkDataMap.addLinkData(srcApplication, span.getAgentId(), destApplication, destinationAgentId, spanEventTimeStamp, slotTime, 1); } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/VirtualLinkHandler.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/VirtualLinkHandler.java index 6e6c6f068026a..e6cd692628665 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/VirtualLinkHandler.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/VirtualLinkHandler.java @@ -94,7 +94,7 @@ private Collection getEmulatedNodeCalleeLinkData(LinkVisitChecker link for (LinkData calleeLinkData : calleeLinkDataMap.getLinkDataList()) { Application fromApplication = calleeLinkData.getFromApplication(); // filter callee link data from non-WAS nodes - if (!fromApplication.getServiceType().isWas()) { + if (!fromApplication.serviceType().isWas()) { logger.trace("filtered {} as {} is not a WAS node", calleeLinkData, fromApplication); continue; } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/VirtualLinkMarker.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/VirtualLinkMarker.java index f9a3c00051d08..632dc32bc185b 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/VirtualLinkMarker.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/VirtualLinkMarker.java @@ -42,7 +42,7 @@ public Set getVirtualLinkData() { } public List createVirtualLink(LinkData linkData, Application toApplication, Set acceptApplicationList) { - logger.info("one to N replaced. node:{}->host:{} accept:{}", linkData.getFromApplication(), toApplication.getName(), acceptApplicationList); + logger.info("one to N replaced. node:{}->host:{} accept:{}", linkData.getFromApplication(), toApplication.name(), acceptApplicationList); List virtualLinkDataList = new ArrayList<>(); logger.debug("acceptApplicationList:{}", acceptApplicationList); for (AcceptApplication acceptApplication : acceptApplicationList) { diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/processor/RpcCallProcessor.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/processor/RpcCallProcessor.java index 4130dbe3cd651..59ac5e7ee3e5c 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/processor/RpcCallProcessor.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/processor/RpcCallProcessor.java @@ -73,11 +73,11 @@ public LinkDataMap processLinkDataMap(LinkDirection direction, LinkDataMap linkD private List replaceLinkData(LinkDirection direction, LinkData linkData, Range range) { final Application toApplication = linkData.getToApplication(); - if (toApplication.getServiceType().isRpcClient() || toApplication.getServiceType().isQueue()) { + if (toApplication.serviceType().isRpcClient() || toApplication.serviceType().isQueue()) { // rpc client's destination could have an agent installed in which case the link data must be replaced to point // to the destination application. logger.debug("Finding {} accept applications for {}, {}", direction, toApplication, range); - final Set acceptApplicationList = findAcceptApplications(linkData.getFromApplication(), toApplication.getName(), range); + final Set acceptApplicationList = findAcceptApplications(linkData.getFromApplication(), toApplication.name(), range); logger.debug("Found {} accept applications: {}", direction, acceptApplicationList); if (CollectionUtils.hasLength(acceptApplicationList)) { if (acceptApplicationList.size() == 1) { @@ -93,10 +93,10 @@ private List replaceLinkData(LinkDirection direction, LinkData linkDat } } else { // for queues, accept application may not exist if no consumers have an agent installed - if (toApplication.getServiceType().isQueue()) { + if (toApplication.serviceType().isQueue()) { return Collections.singletonList(linkData); } else { - final Application unknown = new Application(toApplication.getName(), ServiceType.UNKNOWN); + final Application unknown = new Application(toApplication.name(), ServiceType.UNKNOWN); final LinkData unknownLinkData = new LinkData(linkData.getFromApplication(), unknown); unknownLinkData.setLinkCallDataMap(linkData.getLinkCallDataMap()); return Collections.singletonList(unknownLinkData); @@ -115,7 +115,7 @@ private Set filterAlias(Set acceptApplicat final Set resultSet = new HashSet<>(); for (AcceptApplication acceptApplication : acceptApplicationList) { - if (!acceptApplication.getApplication().getServiceType().isAlias()) { + if (!acceptApplication.getApplication().serviceType().isAlias()) { resultSet.add(acceptApplication); } else { logger.debug("deduct alias application {}", acceptApplication); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/processor/WasOnlyProcessor.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/processor/WasOnlyProcessor.java index dc993078ea762..10d9178fbe3a1 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/processor/WasOnlyProcessor.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/map/processor/WasOnlyProcessor.java @@ -47,8 +47,8 @@ public LinkDataMap processLinkDataMap(LinkDirection linkDirection, LinkDataMap l private boolean accept(LinkData linkData) { final Application toApplication = linkData.getToApplication(); - boolean isDestinationTerminal = toApplication.getServiceType().isTerminal(); - boolean isDestinationUnknown = toApplication.getServiceType().isUnknown(); + boolean isDestinationTerminal = toApplication.serviceType().isTerminal(); + boolean isDestinationUnknown = toApplication.serviceType().isUnknown(); if (isDestinationTerminal || isDestinationUnknown) { logger.debug("Filtering linkData : {}", linkData); return false; diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/nodes/Node.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/nodes/Node.java index f97514084f2e4..a0af67e473770 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/nodes/Node.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/nodes/Node.java @@ -51,10 +51,10 @@ public Node(Application application) { } public String getApplicationTextName() { - if (application.getServiceType().isUser()) { + if (application.serviceType().isUser()) { return "USER"; } else { - return application.getName(); + return application.name(); } } @@ -78,7 +78,7 @@ public NodeName getNodeName() { } public ServiceType getServiceType() { - return application.getServiceType(); + return application.serviceType(); } public NodeHistogram getNodeHistogram() { diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/nodes/NodeListFactory.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/nodes/NodeListFactory.java index 763131d251d33..151f534447ec8 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/nodes/NodeListFactory.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/nodes/NodeListFactory.java @@ -72,17 +72,17 @@ private static void createNode(NodeList nodeList, LinkDataMap linkDataMap) { } private static boolean isFromNode(final Application fromApplication, final Application toApplication) { - if (fromApplication.getServiceType().isRpcClient()) { + if (fromApplication.serviceType().isRpcClient()) { return false; } return true; } private static boolean isToNode(final Application fromApplication, final Application toApplication) { - if (!toApplication.getServiceType().isRpcClient()) { + if (!toApplication.serviceType().isRpcClient()) { return true; } - if (toApplication.getServiceType().isAlias()) { + if (toApplication.serviceType().isAlias()) { return true; } return false; diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/nodes/NodeName.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/nodes/NodeName.java index 275eacbd6dc20..82199dad851ca 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/nodes/NodeName.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/nodes/NodeName.java @@ -17,7 +17,7 @@ public class NodeName { public static NodeName of(Application application) { Objects.requireNonNull(application, "application"); - return new NodeName(application.getName(), application.getServiceType()); + return new NodeName(application.name(), application.serviceType()); } public NodeName(String name, ServiceType serviceType) { diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogram.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogram.java index 0614fdfc3247e..936d9a968253e 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogram.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogram.java @@ -58,7 +58,7 @@ public AgentHistogram(AgentHistogram copyAgentHistogram) { @JsonProperty("name") public String getId() { - return agentId.getName(); + return agentId.name(); } @JsonIgnore @@ -68,12 +68,12 @@ public Application getAgentId() { @JsonIgnore public ServiceType getServiceType() { - return agentId.getServiceType(); + return agentId.serviceType(); } @JsonProperty("histogram") public Histogram getHistogram() { - Histogram histogram = new Histogram(agentId.getServiceType()); + Histogram histogram = new Histogram(agentId.serviceType()); histogram.addAll(timeHistogramMap.values()); return histogram; } @@ -86,7 +86,7 @@ public Collection getTimeHistogram() { public void addTimeHistogram(TimeHistogram timeHistogram) { TimeHistogram find = this.timeHistogramMap.get(timeHistogram.getTimeStamp()); if (find == null) { - find = new TimeHistogram(agentId.getServiceType(), timeHistogram.getTimeStamp()); + find = new TimeHistogram(agentId.serviceType(), timeHistogram.getTimeStamp()); this.timeHistogramMap.put(timeHistogram.getTimeStamp(), find); } find.add(timeHistogram); @@ -105,8 +105,8 @@ public void addTimeHistogram(Collection histogramList) { @Override public String toString() { final StringBuilder sb = new StringBuilder("AgentHistogram{"); - sb.append("agent='").append(agentId.getName()).append('\''); - sb.append(", serviceType=").append(agentId.getServiceType()); + sb.append("agent='").append(agentId.name()).append('\''); + sb.append(", serviceType=").append(agentId.serviceType()); // FIXME temporarily hard-coded due to a change in the data structure sb.append(", ").append(timeHistogramMap); sb.append('}'); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogramList.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogramList.java index 5bfdef37fbc7e..4bafb4a24aebe 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogramList.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/AgentHistogramList.java @@ -49,7 +49,7 @@ public AgentHistogramList(Application application, List responseHi for (ResponseTime responseTime : responseHistogramList) { for (Map.Entry agentEntry : responseTime.getAgentHistogram()) { TimeHistogram timeHistogram = agentEntry.getValue(); - this.addAgentHistogram(agentEntry.getKey(), application.getServiceType(), timeHistogram); + this.addAgentHistogram(agentEntry.getKey(), application.serviceType(), timeHistogram); } } } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkCallData.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkCallData.java index e5d0482ec35c1..b5a5922143933 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkCallData.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkCallData.java @@ -101,7 +101,7 @@ private TimeHistogram getTimeHistogram(Long timeStamp) { long key = timeWindow != null ? timeWindow.refineTimestamp(timeStamp) : timeStamp; TimeHistogram histogram = targetHistogramTimeMap.get(key); if (histogram == null) { - histogram = new TimeHistogram(target.getServiceType(), key); + histogram = new TimeHistogram(target.serviceType(), key); targetHistogramTimeMap.put(key, histogram); } return histogram; diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkCallDataMap.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkCallDataMap.java index 454ccd9d1aee5..79af3d42c90e5 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkCallDataMap.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkCallDataMap.java @@ -118,7 +118,7 @@ public AgentHistogramList getInLinkList() { // need target (to) ServiceType // the definition of source is data from the source when the source sends a request to a target. // Thus ServiceType is the target's ServiceType - sourceList.addAgentHistogram(key.getFrom().getName(), key.getTo().getServiceType(), linkCallData.getTimeHistogram()); + sourceList.addAgentHistogram(key.getFrom().name(), key.getTo().serviceType(), linkCallData.getTimeHistogram()); } return sourceList; } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkDataMap.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkDataMap.java index 518f74ecd95e8..e2a193b78a44a 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkDataMap.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/rawdata/LinkDataMap.java @@ -44,7 +44,7 @@ public Collection getLinkDataList() { public void addLinkData(Application sourceApplication, String sourceAgentId, Application destinationApplication, String destinationAgentId, long timestamp, short slotTime, long count) { final LinkData linkData = getLinkData(sourceApplication, destinationApplication); - linkData.addLinkData(sourceAgentId, sourceApplication.getServiceType(), destinationAgentId, destinationApplication.getServiceType(), timestamp, slotTime, count); + linkData.addLinkData(sourceAgentId, sourceApplication.serviceType(), destinationAgentId, destinationApplication.serviceType(), timestamp, slotTime, count); } @Override diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/FilteredMapServiceImpl.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/FilteredMapServiceImpl.java index 080b890e77d90..04155f1d48143 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/FilteredMapServiceImpl.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/FilteredMapServiceImpl.java @@ -36,11 +36,11 @@ import com.navercorp.pinpoint.web.applicationmap.map.FilteredMap; import com.navercorp.pinpoint.web.applicationmap.map.FilteredMapBuilder; import com.navercorp.pinpoint.web.component.ApplicationFactory; -import com.navercorp.pinpoint.web.dao.ApplicationTraceIndexDao; import com.navercorp.pinpoint.web.dao.TraceDao; import com.navercorp.pinpoint.web.filter.Filter; import com.navercorp.pinpoint.web.scatter.ScatterData; import com.navercorp.pinpoint.web.security.ServerMapDataFilter; +import com.navercorp.pinpoint.web.service.ApplicationTraceIndexService; import com.navercorp.pinpoint.web.service.ServerInstanceDatasourceService; import com.navercorp.pinpoint.web.vo.Application; import com.navercorp.pinpoint.web.vo.LimitedScanResult; @@ -70,7 +70,7 @@ public class FilteredMapServiceImpl implements FilteredMapService { private final TraceDao traceDao; - private final ApplicationTraceIndexDao applicationTraceIndexDao; + private final ApplicationTraceIndexService applicationTraceIndexService; private final ServiceTypeRegistryService registry; @@ -88,14 +88,14 @@ public class FilteredMapServiceImpl implements FilteredMapService { private long buildTimeoutMillis; public FilteredMapServiceImpl(TraceDao traceDao, - ApplicationTraceIndexDao applicationTraceIndexDao, + ApplicationTraceIndexService applicationTraceIndexService, ServiceTypeRegistryService registry, ApplicationFactory applicationFactory, ServerInstanceDatasourceService serverInstanceDatasourceService, Optional serverMapDataFilter, ApplicationMapBuilderFactory applicationMapBuilderFactory) { this.traceDao = Objects.requireNonNull(traceDao, "traceDao"); - this.applicationTraceIndexDao = Objects.requireNonNull(applicationTraceIndexDao, "applicationTraceIndexDao"); + this.applicationTraceIndexService = Objects.requireNonNull(applicationTraceIndexService, "applicationTraceIndexService"); this.registry = Objects.requireNonNull(registry, "registry"); this.applicationFactory = Objects.requireNonNull(applicationFactory, "applicationFactory"); this.serverInstanceDatasourceService = Objects.requireNonNull(serverInstanceDatasourceService, "serverInstanceDatasourceService"); @@ -117,7 +117,7 @@ public LimitedScanResult> selectTraceIdsFromApplicationTrace logger.trace("scan(selectTraceIdsFromApplicationTraceIndex) {}, {}", applicationName, range); } - return this.applicationTraceIndexDao.scanTraceIndex(applicationName, range, limit, backwardDirection); + return this.applicationTraceIndexService.scanTraceIndex(applicationName, range, limit, backwardDirection); } private List> filterList2(List> transactionList, Filter> filter) { diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/ResponseTimeHistogramServiceImpl.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/ResponseTimeHistogramServiceImpl.java index 4762580cb606c..cf1206a7728ba 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/ResponseTimeHistogramServiceImpl.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/ResponseTimeHistogramServiceImpl.java @@ -107,7 +107,7 @@ public ApplicationTimeHistogramViewModel selectResponseTimeHistogramData(Applica public NodeHistogramSummary selectNodeHistogramData(ResponseTimeHistogramServiceOption option) { Node node = new Node(option.getApplication()); Application application = option.getApplication(); - ServiceType applicationServiceType = application.getServiceType(); + ServiceType applicationServiceType = application.serviceType(); List sourceApplications = option.getFromApplications(); List destinationApplications = option.getToApplications(); @@ -189,7 +189,7 @@ public LinkHistogramSummary selectLinkHistogramData(Application fromApplication, LinkDataDuplexMap linkDataDuplexMap; - ServiceType fromApplicationServiceType = fromApplication.getServiceType(); + ServiceType fromApplicationServiceType = fromApplication.serviceType(); LinkDirection linkDirection = LinkDirection.OUT_LINK; if (fromApplicationServiceType.isUser()) { //scan using toApplication to distinguish same applicationName with different serviceType diff --git a/web/src/main/java/com/navercorp/pinpoint/web/authorization/controller/ResponseTimeController.java b/web/src/main/java/com/navercorp/pinpoint/web/authorization/controller/ResponseTimeController.java index eb945940d953d..f5edb6b130e8c 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/authorization/controller/ResponseTimeController.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/authorization/controller/ResponseTimeController.java @@ -156,8 +156,8 @@ public HistogramView getWasHistogramData( } private ResponseTimeHistogramServiceOption.Builder createWasOptionBuilder(Application application, Range range) { - if (!application.getServiceType().isWas()) { - throw new IllegalArgumentException("application is not WAS. application:" + application + ", serviceTypeCode:" + application.getServiceType()); + if (!application.serviceType().isWas()) { + throw new IllegalArgumentException("application is not WAS. application:" + application + ", serviceTypeCode:" + application.serviceType()); } return new ResponseTimeHistogramServiceOption.Builder(application, range, Collections.emptyList(), Collections.emptyList()); } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/MetaSpanCallTreeFactory.java b/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/MetaSpanCallTreeFactory.java index a662e42c7bf18..14f9214905241 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/MetaSpanCallTreeFactory.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/MetaSpanCallTreeFactory.java @@ -45,7 +45,7 @@ public CallTree unknown(final long startTimeMillis) { final SpanBo rootSpan = new SpanBo(); rootSpan.setTransactionId(new TransactionId(UNKNOWN_AGENT_ID, AGENT_START_TIME, 0)); rootSpan.setAgentId(UNKNOWN_AGENT_ID); - rootSpan.setApplicationId("UNKNOWN"); + rootSpan.setApplicationName("UNKNOWN"); rootSpan.setStartTime(startTimeMillis); rootSpan.setServiceType(ServiceType.UNKNOWN.getCode()); @@ -71,7 +71,7 @@ public SpanCallTree corrupted(final String title, final long parentSpanId, final rootSpan.setTransactionId(new TransactionId(CORRUPTED_AGENT_ID, AGENT_START_TIME, 0)); rootSpan.setAgentId(CORRUPTED_AGENT_ID); - rootSpan.setApplicationId("CORRUPTED"); + rootSpan.setApplicationName("CORRUPTED"); rootSpan.setServiceType(ServiceType.UNKNOWN.getCode()); List annotations = new ArrayList<>(); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/Node.java b/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/Node.java index 5666f1e935e37..c3ea983e93f42 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/Node.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/Node.java @@ -76,7 +76,7 @@ public void setCorrupted(boolean corrupted) { @Override public String toString() { final StringBuilder sb = new StringBuilder("{"); - sb.append("applicationId").append(span.getApplicationId()); + sb.append("applicationId").append(span.getApplicationName()); sb.append(", agentId=").append(span.getAgentId()); sb.append(", parentSpanId=").append(span.getParentSpanId()); sb.append(", spanId=").append(span.getSpanId()); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/SpanAlign.java b/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/SpanAlign.java index 48e8a8434bbf7..049a728140999 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/SpanAlign.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/SpanAlign.java @@ -190,7 +190,7 @@ public String getApplicationId() { if (isMeta()) { return " "; } - return spanBo.getApplicationId(); + return spanBo.getApplicationName(); } @Override diff --git a/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/SpanEventAlign.java b/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/SpanEventAlign.java index 4d39850ae0c96..22185421d6144 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/SpanEventAlign.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/SpanEventAlign.java @@ -154,7 +154,7 @@ public String getAgentName() { @Override public String getApplicationId() { - return spanBo.getApplicationId(); + return spanBo.getApplicationName(); } @Override diff --git a/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/SpanFilters.java b/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/SpanFilters.java index 19e976ce68ce8..167e11ba88154 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/SpanFilters.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/calltree/span/SpanFilters.java @@ -173,7 +173,7 @@ public static Predicate applicationIdFilter(String applicationId) { return new Predicate<>() { @Override public boolean test(SpanBo spanBo) { - return applicationId.equals(spanBo.getApplicationId()); + return applicationId.equals(spanBo.getApplicationName()); } @Override diff --git a/web/src/main/java/com/navercorp/pinpoint/web/component/ApplicationFactory.java b/web/src/main/java/com/navercorp/pinpoint/web/component/ApplicationFactory.java index 26e3f83a8c8bd..d2def16973818 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/component/ApplicationFactory.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/component/ApplicationFactory.java @@ -20,11 +20,15 @@ import com.navercorp.pinpoint.common.trace.ServiceType; import com.navercorp.pinpoint.web.vo.Application; +import java.util.UUID; + /** * @author emeroad */ public interface ApplicationFactory { + Application createApplication(UUID applicationId, String applicationName, short serviceTypeCode); + Application createApplication(String applicationName, short serviceTypeCode); Application createApplication(String applicationName, ServiceType serviceType); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/component/DefaultApplicationFactory.java b/web/src/main/java/com/navercorp/pinpoint/web/component/DefaultApplicationFactory.java index 40eac63b499a9..795215b66ab0b 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/component/DefaultApplicationFactory.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/component/DefaultApplicationFactory.java @@ -23,6 +23,7 @@ import org.springframework.stereotype.Component; import java.util.Objects; +import java.util.UUID; /** * @author emeroad @@ -36,6 +37,12 @@ public DefaultApplicationFactory(ServiceTypeRegistryService registry) { this.registry = Objects.requireNonNull(registry, "registry"); } + @Override + public Application createApplication(UUID applicationId, String applicationName, short serviceTypeCode) { + final ServiceType serviceType = registry.findServiceType(serviceTypeCode); + return new Application(applicationId, applicationName, serviceType); + } + @Override public Application createApplication(String applicationName, short serviceTypeCode) { Objects.requireNonNull(applicationName, "applicationName"); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/dao/ApplicationIndexDaoV2.java b/web/src/main/java/com/navercorp/pinpoint/web/dao/ApplicationIndexDaoV2.java new file mode 100644 index 0000000000000..4d411800c3320 --- /dev/null +++ b/web/src/main/java/com/navercorp/pinpoint/web/dao/ApplicationIndexDaoV2.java @@ -0,0 +1,44 @@ +/* + * Copyright 2014 NAVER Corp. + * + * 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 com.navercorp.pinpoint.web.dao; + +import com.navercorp.pinpoint.web.vo.Application; + +import java.util.List; +import java.util.Map; +import java.util.UUID; + +/** + * + * @author netspider + * + */ +public interface ApplicationIndexDaoV2 { + + List selectAllApplicationNames(); + + List selectApplicationName(UUID applicationId); + + List selectAgentIds(UUID applicationId); + + void deleteApplication(UUID applicationId); + + void deleteAgentIds(Map> applicationAgentIdMap); + + void deleteAgentId(UUID applicationId, String agentId); + +} diff --git a/web/src/main/java/com/navercorp/pinpoint/web/dao/ApplicationInfoDao.java b/web/src/main/java/com/navercorp/pinpoint/web/dao/ApplicationInfoDao.java new file mode 100644 index 0000000000000..a1e8348245df7 --- /dev/null +++ b/web/src/main/java/com/navercorp/pinpoint/web/dao/ApplicationInfoDao.java @@ -0,0 +1,34 @@ +/* + * Copyright 2024 NAVER Corp. + * + * 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 com.navercorp.pinpoint.web.dao; + +import com.navercorp.pinpoint.web.vo.Application; + +import java.util.List; +import java.util.UUID; + +/** + * @author youngjin.kim2 + */ +public interface ApplicationInfoDao { + + UUID getApplicationId(String applicationName); + + String getApplicationName(UUID applicationId); + + List getApplications(); + +} diff --git a/web/src/main/java/com/navercorp/pinpoint/web/dao/ApplicationTraceIndexDaoV2.java b/web/src/main/java/com/navercorp/pinpoint/web/dao/ApplicationTraceIndexDaoV2.java new file mode 100644 index 0000000000000..89381c4cea311 --- /dev/null +++ b/web/src/main/java/com/navercorp/pinpoint/web/dao/ApplicationTraceIndexDaoV2.java @@ -0,0 +1,51 @@ +/* + * Copyright 2019 NAVER Corp. + * + * 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 com.navercorp.pinpoint.web.dao; + +import com.navercorp.pinpoint.common.profiler.util.TransactionId; +import com.navercorp.pinpoint.common.server.util.time.Range; +import com.navercorp.pinpoint.web.scatter.DragArea; +import com.navercorp.pinpoint.web.scatter.DragAreaQuery; +import com.navercorp.pinpoint.web.vo.LimitedScanResult; +import com.navercorp.pinpoint.web.vo.scatter.Dot; +import com.navercorp.pinpoint.web.vo.scatter.DotMetaData; + +import java.util.List; +import java.util.UUID; + +/** + * @author emeroad + * @author netspider + */ +public interface ApplicationTraceIndexDaoV2 { + + boolean hasTraceIndex(UUID applicationId, Range range, boolean backwardDirection); + + LimitedScanResult> scanTraceIndex(UUID applicationId, Range range, int limit, boolean backwardDirection); + + LimitedScanResult> scanTraceScatterData(UUID applicationId, Range range, int limit, boolean scanBackward); + + + LimitedScanResult> scanTraceIndex(UUID applicationId, DragArea dragArea, int limit); + + + @Deprecated + LimitedScanResult> scanScatterData(UUID applicationId, DragAreaQuery dragAreaQuery, int limit); + + LimitedScanResult> scanScatterDataV2(UUID applicationId, DragAreaQuery dragAreaQuery, int limit); + +} diff --git a/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationIndexDao.java b/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationIndexDao.java index a36c5dd26986e..e151784700a3c 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationIndexDao.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationIndexDao.java @@ -32,7 +32,7 @@ import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.stereotype.Repository; +import org.springframework.stereotype.Component; import org.springframework.util.Assert; import java.util.ArrayList; @@ -44,7 +44,7 @@ * @author netspider * @author emeroad */ -@Repository +@Component public class HbaseApplicationIndexDao implements ApplicationIndexDao { private static final HbaseColumnFamily.ApplicationIndex DESCRIPTOR = HbaseColumnFamily.APPLICATION_INDEX_AGENTS; diff --git a/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationIndexDaoV2.java b/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationIndexDaoV2.java new file mode 100644 index 0000000000000..996009b5800f9 --- /dev/null +++ b/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationIndexDaoV2.java @@ -0,0 +1,161 @@ +/* + * Copyright 2014 NAVER Corp. + * + * 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 com.navercorp.pinpoint.web.dao.hbase; + +import com.navercorp.pinpoint.common.hbase.HbaseColumnFamily; +import com.navercorp.pinpoint.common.hbase.HbaseOperations; +import com.navercorp.pinpoint.common.hbase.RowMapper; +import com.navercorp.pinpoint.common.hbase.TableNameProvider; +import com.navercorp.pinpoint.common.util.StringUtils; +import com.navercorp.pinpoint.common.util.UuidUtils; +import com.navercorp.pinpoint.web.dao.ApplicationIndexDaoV2; +import com.navercorp.pinpoint.web.util.ListListUtils; +import com.navercorp.pinpoint.web.vo.Application; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; +import org.apache.hadoop.hbase.TableName; +import org.apache.hadoop.hbase.client.Delete; +import org.apache.hadoop.hbase.client.Get; +import org.apache.hadoop.hbase.client.Scan; +import org.apache.hadoop.hbase.util.Bytes; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Component; +import org.springframework.util.Assert; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.UUID; + +/** + * @author netspider + * @author emeroad + * @author smilu97 + */ +@Component +public class HbaseApplicationIndexDaoV2 implements ApplicationIndexDaoV2 { + + private static final HbaseColumnFamily.ApplicationIndex DESCRIPTOR = HbaseColumnFamily.APPLICATION_INDEX_AGENTS_VER2; + + private final HbaseOperations hbaseOperations; + private final TableNameProvider tableNameProvider; + private final RowMapper> applicationNameMapper; + private final RowMapper> agentIdMapper; + + + public HbaseApplicationIndexDaoV2(HbaseOperations hbaseOperations, + TableNameProvider tableNameProvider, + @Qualifier("applicationNameMapperV2") RowMapper> applicationNameMapper, + @Qualifier("agentIdMapper") RowMapper> agentIdMapper) { + this.hbaseOperations = Objects.requireNonNull(hbaseOperations, "hbaseOperations"); + this.tableNameProvider = Objects.requireNonNull(tableNameProvider, "tableNameProvider"); + this.applicationNameMapper = Objects.requireNonNull(applicationNameMapper, "applicationNameMapper"); + this.agentIdMapper = Objects.requireNonNull(agentIdMapper, "agentIdMapper"); + } + + @Override + public List selectAllApplicationNames() { + Scan scan = new Scan(); + scan.setCaching(30); + scan.addFamily(DESCRIPTOR.getName()); + + TableName applicationIndexTableName = tableNameProvider.getTableName(DESCRIPTOR.getTable()); + List> results = hbaseOperations.find(applicationIndexTableName, scan, applicationNameMapper); + + return ListListUtils.toList(results); + } + + @Override + public List selectApplicationName(UUID applicationId) { + return selectApplicationIndex0(applicationId, applicationNameMapper); + } + + @Override + public List selectAgentIds(UUID applicationId) { + return selectApplicationIndex0(applicationId, agentIdMapper); + } + + private List selectApplicationIndex0(UUID applicationId, RowMapper> rowMapper) { + Objects.requireNonNull(applicationId, "applicationId"); + Objects.requireNonNull(rowMapper, "rowMapper"); + + byte[] rowKey = UuidUtils.toBytes(applicationId); + + Get get = new Get(rowKey); + get.addFamily(DESCRIPTOR.getName()); + + TableName applicationIndexTableName = tableNameProvider.getTableName(DESCRIPTOR.getTable()); + return hbaseOperations.get(applicationIndexTableName, get, rowMapper); + } + + @Override + public void deleteApplication(UUID applicationId) { + Objects.requireNonNull(applicationId, "applicationName"); + + byte[] rowKey = UuidUtils.toBytes(applicationId); + Delete delete = new Delete(rowKey); + + TableName applicationIndexTableName = tableNameProvider.getTableName(DESCRIPTOR.getTable()); + hbaseOperations.delete(applicationIndexTableName, delete); + } + + @Override + public void deleteAgentIds(Map> applicationAgentIdMap) { + if (MapUtils.isEmpty(applicationAgentIdMap)) { + return; + } + + List deletes = new ArrayList<>(applicationAgentIdMap.size()); + + for (Map.Entry> entry : applicationAgentIdMap.entrySet()) { + UUID applicationId = entry.getKey(); + List agentIds = entry.getValue(); + if (applicationId == null || CollectionUtils.isEmpty(agentIds)) { + continue; + } + Delete delete = new Delete(UuidUtils.toBytes(applicationId)); + for (String agentId : agentIds) { + if (StringUtils.hasLength(agentId)) { + delete.addColumns(DESCRIPTOR.getName(), Bytes.toBytes(agentId)); + } + } + // don't delete if nothing has been specified except row + if (!delete.getFamilyCellMap().isEmpty()) { + deletes.add(delete); + } + } + + TableName applicationIndexTableName = tableNameProvider.getTableName(DESCRIPTOR.getTable()); + hbaseOperations.delete(applicationIndexTableName, deletes); + } + + @Override + public void deleteAgentId(UUID applicationId, String agentId) { + Objects.requireNonNull(applicationId, "applicationId"); + Assert.hasLength(agentId, "agentId"); + + byte[] rowKey = UuidUtils.toBytes(applicationId); + Delete delete = new Delete(rowKey); + byte[] qualifier = Bytes.toBytes(agentId); + delete.addColumns(DESCRIPTOR.getName(), qualifier); + + TableName applicationIndexTableName = tableNameProvider.getTableName(DESCRIPTOR.getTable()); + hbaseOperations.delete(applicationIndexTableName, delete); + } + +} diff --git a/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationInfoDao.java b/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationInfoDao.java new file mode 100644 index 0000000000000..28c786a9ee57f --- /dev/null +++ b/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationInfoDao.java @@ -0,0 +1,125 @@ +/* + * Copyright 2024 NAVER Corp. + * + * 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 implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.web.dao.hbase; + +import com.navercorp.pinpoint.common.hbase.HbaseColumnFamily; +import com.navercorp.pinpoint.common.hbase.HbaseOperations; +import com.navercorp.pinpoint.common.hbase.RowMapper; +import com.navercorp.pinpoint.common.hbase.TableNameProvider; +import com.navercorp.pinpoint.common.server.util.HashUtils; +import com.navercorp.pinpoint.common.util.BytesUtils; +import com.navercorp.pinpoint.common.util.UuidUtils; +import com.navercorp.pinpoint.web.dao.ApplicationInfoDao; +import com.navercorp.pinpoint.web.vo.Application; +import org.apache.hadoop.hbase.TableName; +import org.apache.hadoop.hbase.client.Get; +import org.apache.hadoop.hbase.client.Scan; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Objects; +import java.util.UUID; + +/** + * @author youngjin.kim2 + */ +@Repository +public class HbaseApplicationInfoDao implements ApplicationInfoDao { + private final Logger logger = LogManager.getLogger(this.getClass()); + + private static final HbaseColumnFamily.ApplicationId DESCRIPTOR_FORWARD = HbaseColumnFamily.APPLICATION_ID_FORWARD; + private static final HbaseColumnFamily.ApplicationId DESCRIPTOR_INVERSE = HbaseColumnFamily.APPLICATION_ID_INVERSE; + + private final HbaseOperations hbaseTemplate; + private final TableNameProvider tableNameProvider; + private final RowMapper forwardRowMapper; + private final RowMapper inverseRowMapper; + private final RowMapper applicationRowMapper; + + public HbaseApplicationInfoDao( + HbaseOperations hbaseTemplate, + TableNameProvider tableNameProvider, + @Qualifier("applicationIdForwardMapper") RowMapper forwardRowMapper, + @Qualifier("applicationIdInverseMapper") RowMapper inverseRowMapper, + @Qualifier("applicationForwardMapper") RowMapper applicationRowMapper + ) { + this.hbaseTemplate = Objects.requireNonNull(hbaseTemplate, "hbaseTemplate"); + this.tableNameProvider = Objects.requireNonNull(tableNameProvider, "tableNameProvider"); + this.forwardRowMapper = Objects.requireNonNull(forwardRowMapper, "forwardRowMapper"); + this.inverseRowMapper = Objects.requireNonNull(inverseRowMapper, "inverseRowMapper"); + this.applicationRowMapper = Objects.requireNonNull(applicationRowMapper, "applicationRowMapper"); + } + + @Override + public UUID getApplicationId(String applicationName) { + Objects.requireNonNull(applicationName, "applicationName"); + + if (logger.isDebugEnabled()) { + logger.debug("getApplicationId() applicationName:{}", applicationName); + } + + TableName tableName = this.tableNameProvider.getTableName(DESCRIPTOR_FORWARD.getTable()); + byte[] rowKey = encodeStringAsRowKey(applicationName); + byte[] family = DESCRIPTOR_FORWARD.getName(); + byte[] qualifier = DESCRIPTOR_FORWARD.getName(); + + Get get = new Get(rowKey); + get.addColumn(family, qualifier); + + return hbaseTemplate.get(tableName, get, this.forwardRowMapper); + } + + @Override + public String getApplicationName(UUID applicationId) { + Objects.requireNonNull(applicationId, "applicationId"); + + if (logger.isDebugEnabled()) { + logger.debug("getApplicationName() applicationId:{}", applicationId); + } + + TableName tableName = this.tableNameProvider.getTableName(DESCRIPTOR_INVERSE.getTable()); + byte[] rowKey = UuidUtils.toBytes(applicationId); + byte[] family = DESCRIPTOR_INVERSE.getName(); + byte[] qualifier = DESCRIPTOR_INVERSE.getName(); + + Get get = new Get(rowKey); + get.addColumn(family, qualifier); + + return hbaseTemplate.get(tableName, get, this.inverseRowMapper); + } + + @Override + public List getApplications() { + TableName tableName = this.tableNameProvider.getTableName(DESCRIPTOR_FORWARD.getTable()); + byte[] family = DESCRIPTOR_FORWARD.getName(); + byte[] qualifier = DESCRIPTOR_FORWARD.getName(); + + Scan scan = new Scan(); + scan.setCaching(30); + scan.addColumn(family, qualifier); + + return hbaseTemplate.find(tableName, scan, this.applicationRowMapper); + } + + private static byte[] encodeStringAsRowKey(String str) { + return HashUtils.hashBytes(BytesUtils.toBytes(str)).asBytes(); + } + +} diff --git a/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationTraceIndexDao.java b/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationTraceIndexDao.java index e710f4436b8ef..7bf672e082ec9 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationTraceIndexDao.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationTraceIndexDao.java @@ -369,9 +369,7 @@ public boolean test(Dot dot) { } } if (this.dotStatus != null) { - if (!(this.dotStatus == dot.getStatus())) { - return false; - } + return this.dotStatus == dot.getStatus(); } return true; } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationTraceIndexDaoV2.java b/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationTraceIndexDaoV2.java new file mode 100644 index 0000000000000..b345aa1153fbb --- /dev/null +++ b/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationTraceIndexDaoV2.java @@ -0,0 +1,395 @@ +/* + * Copyright 2019 NAVER Corp. + * + * 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 com.navercorp.pinpoint.web.dao.hbase; + +import com.navercorp.pinpoint.common.PinpointConstants; +import com.navercorp.pinpoint.common.hbase.HbaseColumnFamily; +import com.navercorp.pinpoint.common.hbase.HbaseOperations; +import com.navercorp.pinpoint.common.hbase.LimitEventHandler; +import com.navercorp.pinpoint.common.hbase.RowMapper; +import com.navercorp.pinpoint.common.hbase.TableNameProvider; +import com.navercorp.pinpoint.common.hbase.util.CellUtils; +import com.navercorp.pinpoint.common.profiler.util.TransactionId; +import com.navercorp.pinpoint.common.server.bo.serializer.agent.ApplicationNameRowKeyEncoder; +import com.navercorp.pinpoint.common.server.scatter.FuzzyRowKeyBuilder; +import com.navercorp.pinpoint.common.server.util.DateTimeFormatUtils; +import com.navercorp.pinpoint.common.server.util.time.Range; +import com.navercorp.pinpoint.common.util.BytesUtils; +import com.navercorp.pinpoint.common.util.TimeUtils; +import com.navercorp.pinpoint.web.config.ScatterChartProperties; +import com.navercorp.pinpoint.web.dao.ApplicationTraceIndexDaoV2; +import com.navercorp.pinpoint.web.mapper.TraceIndexMetaScatterMapper; +import com.navercorp.pinpoint.web.mapper.TraceIndexScatterMapper; +import com.navercorp.pinpoint.web.mapper.TransactionIdMapper; +import com.navercorp.pinpoint.web.scatter.DragArea; +import com.navercorp.pinpoint.web.scatter.DragAreaQuery; +import com.navercorp.pinpoint.web.scatter.ElpasedTimeDotPredicate; +import com.navercorp.pinpoint.web.util.ListListUtils; +import com.navercorp.pinpoint.web.vo.LimitedScanResult; +import com.navercorp.pinpoint.web.vo.scatter.Dot; +import com.navercorp.pinpoint.web.vo.scatter.DotMetaData; +import com.sematext.hbase.wd.AbstractRowKeyDistributor; +import org.apache.hadoop.hbase.Cell; +import org.apache.hadoop.hbase.CellUtil; +import org.apache.hadoop.hbase.TableName; +import org.apache.hadoop.hbase.client.Result; +import org.apache.hadoop.hbase.client.Scan; +import org.apache.hadoop.hbase.filter.Filter; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Objects; +import java.util.UUID; +import java.util.function.Predicate; + +/** + * @author emeroad + * @author netspider + */ +@Repository +public class HbaseApplicationTraceIndexDaoV2 implements ApplicationTraceIndexDaoV2 { + + private static final int APPLICATION_TRACE_INDEX_NUM_PARTITIONS = 32; + + private final Logger logger = LogManager.getLogger(this.getClass()); + + private static final HbaseColumnFamily.ApplicationTraceIndexTrace INDEX = HbaseColumnFamily.APPLICATION_TRACE_INDEX_TRACE_VER2; + private static final HbaseColumnFamily.ApplicationTraceIndexTrace META = HbaseColumnFamily.APPLICATION_TRACE_INDEX_META_VER2; + + private final ScatterChartProperties scatterChartProperties; + + private final HbaseOperations hbaseOperations; + private final TableNameProvider tableNameProvider; + + private final FuzzyRowKeyBuilder fuzzyRowKeyBuilder = new FuzzyRowKeyBuilder(); + + private final RowMapper> traceIndexMapper; + + private final RowMapper> traceIndexScatterMapper; + + private final AbstractRowKeyDistributor traceIdRowKeyDistributor; + + private int scanCacheSize = 256; + + private final ApplicationNameRowKeyEncoder rowKeyEncoder = new ApplicationNameRowKeyEncoder(); + + public HbaseApplicationTraceIndexDaoV2(ScatterChartProperties scatterChartProperties, + HbaseOperations hbaseOperations, + TableNameProvider tableNameProvider, + @Qualifier("transactionIdMapper") RowMapper> traceIndexMapper, + @Qualifier("traceIndexScatterMapper") RowMapper> traceIndexScatterMapper, + @Qualifier("applicationTraceIndexDistributor") AbstractRowKeyDistributor traceIdRowKeyDistributor) { + this.scatterChartProperties = Objects.requireNonNull(scatterChartProperties, "scatterChartProperties"); + this.hbaseOperations = Objects.requireNonNull(hbaseOperations, "hbaseOperations"); + this.tableNameProvider = Objects.requireNonNull(tableNameProvider, "tableNameProvider"); + this.traceIndexMapper = Objects.requireNonNull(traceIndexMapper, "traceIndexMapper"); + this.traceIndexScatterMapper = Objects.requireNonNull(traceIndexScatterMapper, "traceIndexScatterMapper"); + this.traceIdRowKeyDistributor = Objects.requireNonNull(traceIdRowKeyDistributor, "traceIdRowKeyDistributor"); + } + + public void setScanCacheSize(int scanCacheSize) { + this.scanCacheSize = scanCacheSize; + } + + @Override + public boolean hasTraceIndex(UUID applicationId, Range range, boolean backwardDirection) { + Objects.requireNonNull(applicationId, "applicationId"); + Objects.requireNonNull(range, "range"); + logger.debug("hasTraceIndex {}", range); + Scan scan = createScan(applicationId, range, backwardDirection, 1); + + LastRowAccessor lastRowAccessor = new LastRowAccessor(); + TableName applicationTraceIndexTableName = tableNameProvider.getTableName(INDEX.getTable()); + List> traceIndexList = hbaseOperations.findParallel(applicationTraceIndexTableName, + scan, traceIdRowKeyDistributor, 1, traceIndexMapper, lastRowAccessor, APPLICATION_TRACE_INDEX_NUM_PARTITIONS); + + List transactionIdSum = ListListUtils.toList(traceIndexList); + return !transactionIdSum.isEmpty(); + } + + @Override + public LimitedScanResult> scanTraceIndex(final UUID applicationId, Range range, int limit, boolean scanBackward) { + Objects.requireNonNull(applicationId, "applicationId"); + Objects.requireNonNull(range, "range"); + if (limit < 0) { + throw new IllegalArgumentException("negative limit:" + limit); + } + logger.debug("scanTraceIndex {}", range); + Scan scan = createScan(applicationId, range, scanBackward, -1); + + LastRowAccessor lastRowAccessor = new LastRowAccessor(); + TableName applicationTraceIndexTableName = tableNameProvider.getTableName(INDEX.getTable()); + List> traceIndexList = hbaseOperations.findParallel(applicationTraceIndexTableName, + scan, traceIdRowKeyDistributor, limit, traceIndexMapper, lastRowAccessor, APPLICATION_TRACE_INDEX_NUM_PARTITIONS); + + List transactionIdSum = ListListUtils.toList(traceIndexList); + final long lastTime = getLastTime(range, limit, lastRowAccessor, transactionIdSum); + + return new LimitedScanResult<>(lastTime, transactionIdSum); + } + + private long getLastTime(Range range, int limit, LastRowAccessor lastRowAccessor, List list) { + if (list.size() >= limit) { + Long lastRowTimestamp = lastRowAccessor.getLastRowTimestamp(); + if (logger.isDebugEnabled()) { + logger.debug("lastRowTimestamp lastTime:{}", DateTimeFormatUtils.format(lastRowTimestamp)); + } + return lastRowTimestamp; + } else { + long from = range.getFrom(); + if (logger.isDebugEnabled()) { + logger.debug("scanner start lastTime:{}", DateTimeFormatUtils.format(from)); + } + return from; + } + } + + + private class LastRowAccessor implements LimitEventHandler { + private Long lastRowTimestamp = -1L; + private TransactionId lastTransactionId = null; + private int lastTransactionElapsed = -1; + + @Override + public void handleLastResult(Result lastResult) { + if (lastResult == null) { + return; + } + + final Cell last = CellUtils.lastCell(lastResult.rawCells(), HbaseColumnFamily.APPLICATION_TRACE_INDEX_TRACE.getName()); + byte[] row = CellUtil.cloneRow(last); + byte[] originalRow = traceIdRowKeyDistributor.getOriginalKey(row); + long reverseStartTime = BytesUtils.bytesToLong(originalRow, PinpointConstants.APPLICATION_NAME_MAX_LEN); + this.lastRowTimestamp = TimeUtils.recoveryTimeMillis(reverseStartTime); + + byte[] qualifier = CellUtil.cloneQualifier(last); + this.lastTransactionId = TransactionIdMapper.parseVarTransactionId(qualifier, 0, qualifier.length); + this.lastTransactionElapsed = BytesUtils.bytesToInt(qualifier, 0); + + if (logger.isDebugEnabled()) { + logger.debug("lastRowTimestamp={}, lastTransactionId={}, lastTransactionElapsed={}", DateTimeFormatUtils.format(lastRowTimestamp), lastTransactionId, lastTransactionElapsed); + } + } + + private Long getLastRowTimestamp() { + return lastRowTimestamp; + } + + public TransactionId getLastTransactionId() { + return lastTransactionId; + } + + public int getLastTransactionElapsed() { + return lastTransactionElapsed; + } + } + + + private Scan createScan(UUID applicationId, Range range, boolean scanBackward, int limit) { + Scan scan = new Scan(); + scan.setCaching(this.scanCacheSize); + applyLimitForScan(scan, limit); + + byte[] traceIndexStartKey = rowKeyEncoder.encodeRowKey(applicationId, range.getFrom()); + byte[] traceIndexEndKey = rowKeyEncoder.encodeRowKey(applicationId, range.getTo()); + + if (scanBackward) { + // start key is replaced by end key because key has been reversed + scan.withStartRow(traceIndexEndKey); + scan.withStopRow(traceIndexStartKey); + } else { + scan.setReversed(true); + scan.withStartRow(traceIndexStartKey); + scan.withStopRow(traceIndexEndKey); + } + + scan.addFamily(INDEX.getName()); + scan.setId("ApplicationTraceIndexScan"); + + // toString() method of Scan converts a message to json format so it is slow for the first time. + logger.trace("create scan:{}", scan); + return scan; + } + + private void applyLimitForScan(Scan scan, int limit) { + if (limit == 1) { + scan.setOneRowLimit(); + } else if (limit > 1) { + scan.setLimit(limit); + } + } + + @Override + public LimitedScanResult> scanTraceScatterData(UUID applicationId, Range range, int limit, boolean scanBackward) { + Objects.requireNonNull(applicationId, "applicationId"); + Objects.requireNonNull(range, "range"); + if (limit < 0) { + throw new IllegalArgumentException("negative limit:" + limit); + } + logger.debug("scanTraceScatterDataMadeOfDotGroup"); + LastRowAccessor lastRowAccessor = new LastRowAccessor(); + + Scan scan = createScan(applicationId, range, scanBackward, -1); + + TableName applicationTraceIndexTableName = tableNameProvider.getTableName(INDEX.getTable()); + List> listList = hbaseOperations.findParallel(applicationTraceIndexTableName, scan, + traceIdRowKeyDistributor, limit, this.traceIndexScatterMapper, APPLICATION_TRACE_INDEX_NUM_PARTITIONS); + List dots = ListListUtils.toList(listList); + + final long lastTime = getLastTime(range, limit, lastRowAccessor, dots); + return new LimitedScanResult<>(lastTime, dots); + } + + @Override + public LimitedScanResult> scanTraceIndex(UUID applicationName, DragArea dragArea, int limit) { + Objects.requireNonNull(applicationName, "applicationName"); + Objects.requireNonNull(dragArea, "dragArea"); + + LastRowAccessor lastRowAccessor = new LastRowAccessor(); + + final Range range = Range.newUncheckedRange(dragArea.getXLow(), dragArea.getXHigh()); + logger.debug("scanTraceIndex range:{}", range); + final Scan scan = newFuzzyScanner(applicationName, dragArea, range); + + + // TODO +// Predicate filter = ElpasedTimeDotPredicate.newDragAreaDotPredicate(dragArea); + + final TableName applicationTraceIndexTableName = tableNameProvider.getTableName(INDEX.getTable()); + List> listList = this.hbaseOperations.findParallel(applicationTraceIndexTableName, + scan, traceIdRowKeyDistributor, limit, traceIndexMapper, lastRowAccessor, APPLICATION_TRACE_INDEX_NUM_PARTITIONS); + + List transactionIdSum = ListListUtils.toList(listList); + + final long lastTime = getLastTime(range, limit, lastRowAccessor, transactionIdSum); + + return new LimitedScanResult<>(lastTime, transactionIdSum); + } + + @Deprecated + @Override + public LimitedScanResult> scanScatterData(UUID applicationId, DragAreaQuery dragAreaQuery, int limit) { + Objects.requireNonNull(applicationId, "applicationId"); + Objects.requireNonNull(dragAreaQuery, "dragAreaQuery"); + + Predicate filter = buildDotPredicate(dragAreaQuery); + + RowMapper> mapper = new TraceIndexScatterMapper(filter); + + return scanScatterData0(applicationId, dragAreaQuery, limit, false, mapper); + } + + private Predicate buildDotPredicate(DragAreaQuery dragAreaQuery) { + DragArea dragArea = dragAreaQuery.getDragArea(); + Predicate filter = ElpasedTimeDotPredicate.newDragAreaDotPredicate(dragArea); + Predicate dotStatusPredicate = buildDotStatusFilter(dragAreaQuery); + if (dotStatusPredicate != null) { + filter = filter.and(dotStatusPredicate); + } + return filter; + } + + @Override + public LimitedScanResult> scanScatterDataV2(UUID applicationId, DragAreaQuery dragAreaQuery, int limit) { + Objects.requireNonNull(applicationId, "applicationId"); + Objects.requireNonNull(dragAreaQuery, "dragAreaQuery"); + + Predicate filter = buildDotPredicate(dragAreaQuery); + + RowMapper> mapper = new TraceIndexMetaScatterMapper(filter); + + return scanScatterData0(applicationId, dragAreaQuery, limit, true, mapper); + } + + private LimitedScanResult> scanScatterData0(UUID applicationId, DragAreaQuery dragAreaQuery, int limit, + boolean metadataScan, RowMapper> mapper) { + Objects.requireNonNull(applicationId, "applicationId"); + Objects.requireNonNull(dragAreaQuery, "dragAreaQuery"); + + DragArea dragArea = dragAreaQuery.getDragArea(); + Range range = Range.newUncheckedRange(dragArea.getXLow(), dragArea.getXHigh()); + logger.debug("scanTraceScatterData-range:{}", range); + + LastRowAccessor lastRowAccessor = new LastRowAccessor(); + + Scan scan = newFuzzyScanner(applicationId, dragArea, range); + if (metadataScan) { + scan.addFamily(META.getName()); + } + + TableName applicationTraceIndexTableName = tableNameProvider.getTableName(INDEX.getTable()); + List> dotListList = hbaseOperations.findParallel(applicationTraceIndexTableName, scan, + traceIdRowKeyDistributor, limit, mapper, lastRowAccessor, APPLICATION_TRACE_INDEX_NUM_PARTITIONS); + List dots = ListListUtils.toList(dotListList); + + final long lastTime = getLastTime(range, limit, lastRowAccessor, dots); + + return new LimitedScanResult<>(lastTime, dots); + } + + private Predicate buildDotStatusFilter(DragAreaQuery dragAreaQuery) { + if (dragAreaQuery.getAgentId() != null || dragAreaQuery.getDotStatus() != null) { + return new DotStatusFilter(dragAreaQuery.getAgentId(), dragAreaQuery.getDotStatus()); + } + return null; + } + + static class DotStatusFilter implements Predicate { + // @Nullable + private final String agentId; + // @Nullable + private final Dot.Status dotStatus; + + public DotStatusFilter(String agentId, Dot.Status dotStatus) { + this.agentId = agentId; + this.dotStatus = dotStatus; + } + + @Override + public boolean test(Dot dot) { + if (agentId != null) { + if (!agentId.equals(dot.getAgentId())) { + return false; + } + } + if (this.dotStatus != null) { + return this.dotStatus == dot.getStatus(); + } + return true; + } + } + + private Scan newFuzzyScanner(UUID applicationId, DragArea dragArea, Range range) { + final Scan scan = createScan(applicationId, range, true, -1); + if (scatterChartProperties.isEnableFuzzyRowFilter()) { + Filter filter = newFuzzyFilter(dragArea); + scan.setFilter(filter); + } + return scan; + } + + private Filter newFuzzyFilter(DragArea dragArea) { + long yHigh = dragArea.getYHigh(); + long yLow = dragArea.getYLow(); + return this.fuzzyRowKeyBuilder.build(yHigh, yLow); + } + + +} diff --git a/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseHostApplicationMapDao.java b/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseHostApplicationMapDao.java index ca4943200918e..af16db1436066 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseHostApplicationMapDao.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseHostApplicationMapDao.java @@ -127,7 +127,7 @@ private Scan createScan(Application parentApplication, Range range) { private byte[] createKey(Application parentApplication, long time) { Buffer buffer = new AutomaticBuffer(); - buffer.putPadString(parentApplication.getName(), HbaseTableConstants.APPLICATION_NAME_MAX_LEN); + buffer.putPadString(parentApplication.name(), HbaseTableConstants.APPLICATION_NAME_MAX_LEN); buffer.putShort(parentApplication.getServiceTypeCode()); buffer.putLong(time); return buffer.getBuffer(); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/mapper/ApplicationForwardMapper.java b/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/mapper/ApplicationForwardMapper.java new file mode 100644 index 0000000000000..f391f6025b69b --- /dev/null +++ b/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/mapper/ApplicationForwardMapper.java @@ -0,0 +1,59 @@ +/* + * Copyright 2024 NAVER Corp. + * + * 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 com.navercorp.pinpoint.web.dao.hbase.mapper; + +import com.navercorp.pinpoint.common.hbase.HbaseColumnFamily; +import com.navercorp.pinpoint.common.hbase.RowMapper; +import com.navercorp.pinpoint.common.trace.ServiceType; +import com.navercorp.pinpoint.common.util.BytesUtils; +import com.navercorp.pinpoint.web.vo.Application; +import org.apache.hadoop.hbase.Cell; +import org.apache.hadoop.hbase.client.Result; +import org.springframework.stereotype.Component; + +import java.util.UUID; + +/** + * @author youngjin.kim2 + */ +@Component +public class ApplicationForwardMapper implements RowMapper { + + private static final HbaseColumnFamily.ApplicationId DESCRIPTOR = HbaseColumnFamily.APPLICATION_ID_FORWARD; + + + // TODO: This value is temporary, and the service type should be removed + private static final ServiceType DEFAULT_SERVICE_TYPE = ServiceType.SERVLET; + + @Override + public Application mapRow(Result result, int rowNum) throws Exception { + byte[] family = DESCRIPTOR.getName(); + byte[] qualifier = DESCRIPTOR.getName(); + Cell cell = result.getColumnLatestCell(family, qualifier); + if (cell == null) { + return null; + } + + if (cell.getValueLength() < 16) { + throw new IllegalArgumentException("Invalid bytes length: " + cell.getValueLength()); + } + + String applicationName = BytesUtils.toString(result.getRow()); + UUID applicationId = BytesUtils.bytesToUUID(cell.getValueArray(), cell.getValueOffset()); + return new Application(applicationId, applicationName, DEFAULT_SERVICE_TYPE); + } + +} diff --git a/web/src/main/java/com/navercorp/pinpoint/web/filter/ApplicationFilter.java b/web/src/main/java/com/navercorp/pinpoint/web/filter/ApplicationFilter.java index 1564fa713ef42..b19d7acfb3acb 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/filter/ApplicationFilter.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/filter/ApplicationFilter.java @@ -18,7 +18,6 @@ import com.navercorp.pinpoint.common.server.bo.SpanBo; import com.navercorp.pinpoint.common.trace.ServiceType; - import com.navercorp.pinpoint.common.util.StringUtils; import com.navercorp.pinpoint.loader.service.ServiceTypeRegistryService; import com.navercorp.pinpoint.web.filter.agent.AgentFilter; @@ -30,8 +29,8 @@ import com.navercorp.pinpoint.web.filter.responsetime.SpanResponseConditionFilter; import com.navercorp.pinpoint.web.filter.transaction.NodeContext; import com.navercorp.pinpoint.web.filter.transaction.SpanContext; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.util.List; import java.util.Objects; diff --git a/web/src/main/java/com/navercorp/pinpoint/web/filter/LinkFilter.java b/web/src/main/java/com/navercorp/pinpoint/web/filter/LinkFilter.java index 7a0bba7d37087..64bd4c7b33390 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/filter/LinkFilter.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/filter/LinkFilter.java @@ -16,16 +16,12 @@ package com.navercorp.pinpoint.web.filter; -import java.util.List; -import java.util.Objects; - - import com.navercorp.pinpoint.common.server.bo.SpanBo; import com.navercorp.pinpoint.common.server.bo.SpanEventBo; +import com.navercorp.pinpoint.common.trace.ServiceType; import com.navercorp.pinpoint.common.util.StringUtils; import com.navercorp.pinpoint.loader.service.AnnotationKeyRegistryService; import com.navercorp.pinpoint.loader.service.ServiceTypeRegistryService; -import com.navercorp.pinpoint.common.trace.ServiceType; import com.navercorp.pinpoint.web.filter.agent.AgentFilter; import com.navercorp.pinpoint.web.filter.agent.AgentFilterFactory; import com.navercorp.pinpoint.web.filter.responsetime.DefaultExecutionTypeFilter; @@ -42,9 +38,11 @@ import com.navercorp.pinpoint.web.filter.transaction.WasToQueueFilter; import com.navercorp.pinpoint.web.filter.transaction.WasToUnknownFilter; import com.navercorp.pinpoint.web.filter.transaction.WasToWasFilter; - -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.List; +import java.util.Objects; /** * @author netspider diff --git a/web/src/main/java/com/navercorp/pinpoint/web/filter/transaction/SpanContext.java b/web/src/main/java/com/navercorp/pinpoint/web/filter/transaction/SpanContext.java index 195fb855e3722..15fdd29d05559 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/filter/transaction/SpanContext.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/filter/transaction/SpanContext.java @@ -44,7 +44,7 @@ public List findNode(String findApplicationName, List findS List findList = null; for (SpanBo span : nodeList) { final ServiceType applicationServiceType = serviceTypeRegistryService.findServiceType(span.getApplicationServiceType()); - if (findApplicationName.equals(span.getApplicationId()) && includeServiceType(findServiceCode, applicationServiceType)) { + if (findApplicationName.equals(span.getApplicationName()) && includeServiceType(findServiceCode, applicationServiceType)) { // apply preAgentFilter if (agentFilter.accept(span.getAgentId())) { if (findList == null) { diff --git a/web/src/main/java/com/navercorp/pinpoint/web/mapper/ApplicationNameMapper.java b/web/src/main/java/com/navercorp/pinpoint/web/mapper/ApplicationNameMapper.java index 9c5ef00a4de14..db864384f8d7a 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/mapper/ApplicationNameMapper.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/mapper/ApplicationNameMapper.java @@ -18,6 +18,7 @@ import com.navercorp.pinpoint.common.hbase.RowMapper; import com.navercorp.pinpoint.common.hbase.util.CellUtils; +import com.navercorp.pinpoint.common.util.BytesUtils; import com.navercorp.pinpoint.web.component.ApplicationFactory; import com.navercorp.pinpoint.web.vo.Application; import org.apache.hadoop.hbase.Cell; @@ -49,7 +50,7 @@ public List mapRow(Result result, int rowNum) throws Exception { return Collections.emptyList(); } Set uniqueTypeCodes = new HashSet<>(); - String applicationName = CellUtils.rowToString(result); + String applicationName = BytesUtils.toString(result.getRow()); Cell[] rawCells = result.rawCells(); for (Cell cell : rawCells) { diff --git a/web/src/main/java/com/navercorp/pinpoint/web/mapper/ApplicationNameMapperV2.java b/web/src/main/java/com/navercorp/pinpoint/web/mapper/ApplicationNameMapperV2.java new file mode 100644 index 0000000000000..95ec0cf9e858b --- /dev/null +++ b/web/src/main/java/com/navercorp/pinpoint/web/mapper/ApplicationNameMapperV2.java @@ -0,0 +1,68 @@ +/* + * Copyright 2014 NAVER Corp. + * + * 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 com.navercorp.pinpoint.web.mapper; + +import com.navercorp.pinpoint.common.hbase.RowMapper; +import com.navercorp.pinpoint.common.hbase.util.CellUtils; +import com.navercorp.pinpoint.common.util.UuidUtils; +import com.navercorp.pinpoint.web.component.ApplicationFactory; +import com.navercorp.pinpoint.web.vo.Application; +import org.apache.hadoop.hbase.Cell; +import org.apache.hadoop.hbase.client.Result; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.UUID; + +/** + * + */ +@Component +public class ApplicationNameMapperV2 implements RowMapper> { + + private final ApplicationFactory applicationFactory; + + public ApplicationNameMapperV2(ApplicationFactory applicationFactory) { + this.applicationFactory = Objects.requireNonNull(applicationFactory, "applicationFactory"); + } + + @Override + public List mapRow(Result result, int rowNum) throws Exception { + if (result.isEmpty()) { + return Collections.emptyList(); + } + Set uniqueTypeCodes = new HashSet<>(); + UUID applicationId = UuidUtils.fromBytes(result.getRow()); + + Cell[] rawCells = result.rawCells(); + for (Cell cell : rawCells) { + short serviceTypeCode = CellUtils.valueToShort(cell); + uniqueTypeCodes.add(serviceTypeCode); + } + List applicationList = new ArrayList<>(); + for (short serviceTypeCode : uniqueTypeCodes) { + final Application application = applicationFactory.createApplication(applicationId, null, serviceTypeCode); + applicationList.add(application); + } + return applicationList; + } +} diff --git a/web/src/main/java/com/navercorp/pinpoint/web/mapper/SpanMapperV2.java b/web/src/main/java/com/navercorp/pinpoint/web/mapper/SpanMapperV2.java index 952891efa3210..4177cacbe0245 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/mapper/SpanMapperV2.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/mapper/SpanMapperV2.java @@ -245,14 +245,14 @@ private boolean isChildSpanChunk(SpanBo spanBo, SpanChunkBo spanChunkBo) { if (!StringUtils.equals(spanBo.getAgentId(), spanChunkBo.getAgentId())) { return false; } - if (!StringUtils.equals(spanBo.getApplicationId(), spanChunkBo.getApplicationId())) { + if (!StringUtils.equals(spanBo.getApplicationName(), spanChunkBo.getApplicationName())) { return false; } return true; } private AgentKey newAgentKey(BasicSpan basicSpan) { - return new AgentKey(basicSpan.getApplicationId(), basicSpan.getAgentId(), basicSpan.getAgentStartTime(), basicSpan.getSpanId()); + return new AgentKey(basicSpan.getApplicationName(), basicSpan.getAgentId(), basicSpan.getAgentStartTime(), basicSpan.getSpanId()); } public static class AgentKey { diff --git a/web/src/main/java/com/navercorp/pinpoint/web/service/AdminServiceImpl.java b/web/src/main/java/com/navercorp/pinpoint/web/service/AdminServiceImpl.java index 2bbdac4ff2c84..09ef432eb1f24 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/service/AdminServiceImpl.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/service/AdminServiceImpl.java @@ -18,7 +18,6 @@ import com.navercorp.pinpoint.common.server.util.time.Range; import com.navercorp.pinpoint.common.util.CollectionUtils; -import com.navercorp.pinpoint.web.dao.ApplicationIndexDao; import com.navercorp.pinpoint.web.vo.Application; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -30,6 +29,7 @@ import java.util.Map; import java.util.Objects; import java.util.TreeMap; +import java.util.UUID; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -42,23 +42,30 @@ public class AdminServiceImpl implements AdminService { private final Logger logger = LogManager.getLogger(this.getClass()); - private final ApplicationIndexDao applicationIndexDao; - + private final ApplicationInfoService applicationInfoService; + private final ApplicationService applicationService; private final AgentInfoService agentInfoService; - public AdminServiceImpl(ApplicationIndexDao applicationIndexDao, AgentInfoService agentInfoService) { - this.applicationIndexDao = Objects.requireNonNull(applicationIndexDao, "applicationIndexDao"); + public AdminServiceImpl( + ApplicationInfoService applicationInfoService, + ApplicationService applicationService, + AgentInfoService agentInfoService + ) { + this.applicationInfoService = Objects.requireNonNull(applicationInfoService, "applicationInfoService"); + this.applicationService = Objects.requireNonNull(applicationService, "applicationService"); this.agentInfoService = Objects.requireNonNull(agentInfoService, "agentInfoService"); } @Override public void removeApplicationName(String applicationName) { - applicationIndexDao.deleteApplicationName(applicationName); + UUID applicationId = this.applicationInfoService.getApplicationId(applicationName); + this.applicationService.deleteApplication(applicationId); } @Override public void removeAgentId(String applicationName, String agentId) { - applicationIndexDao.deleteAgentId(applicationName, agentId); + UUID applicationId = this.applicationInfoService.getApplicationId(applicationName); + this.applicationService.deleteAgent(applicationId, agentId); } @Override @@ -68,9 +75,9 @@ public void removeInactiveAgents(int durationDays) { throw new IllegalArgumentException("duration may not be less than " + MIN_DURATION_DAYS_FOR_INACTIVITY + " days"); } - List applicationNames = this.applicationIndexDao.selectAllApplicationNames() + List applicationNames = this.applicationService.getApplications() .stream() - .map(Application::getName) + .map(Application::name) .distinct() .collect(Collectors.toList()); Collections.shuffle(applicationNames); @@ -85,18 +92,19 @@ public void removeInactiveAgents(int durationDays) { @Override public int removeInactiveAgentInApplication(String applicationName, int durationDays) { try { - return removeInactiveAgentInApplication0(applicationName, durationDays); + UUID applicationId = this.applicationInfoService.getApplicationId(applicationName); + return removeInactiveAgentInApplication0(applicationId, durationDays); } catch (Exception e) { logger.error("Backoff to remove inactive agents in application {}", applicationName, e); } return 0; } - private int removeInactiveAgentInApplication0(String applicationName, int durationDays) { + private int removeInactiveAgentInApplication0(UUID applicationId, int durationDays) { final List agentsToDelete = new ArrayList<>(100); int deleteCount = 0; - final List agentIds = this.applicationIndexDao.selectAgentIds(applicationName); + final List agentIds = this.applicationService.getAgents(applicationId); for (String agentId: agentIds) { if (!isInactiveAgent(agentId, durationDays)) { continue; @@ -106,27 +114,27 @@ private int removeInactiveAgentInApplication0(String applicationName, int durati deleteCount++; if (agentsToDelete.size() >= 100) { - logger.info("Delete {} of {}", agentsToDelete, applicationName); - applicationIndexDao.deleteAgentIds(Map.of(applicationName, agentsToDelete)); + logger.info("Delete {} of {}", agentsToDelete, applicationId); + this.applicationService.deleteAgents(Map.of(applicationId, agentsToDelete)); agentsToDelete.clear(); } } if (!agentsToDelete.isEmpty()) { - logger.info("Delete {} of {}", agentsToDelete, applicationName); - applicationIndexDao.deleteAgentIds(Map.of(applicationName, agentsToDelete)); + logger.info("Delete {} of {}", agentsToDelete, applicationId); + this.applicationService.deleteAgents(Map.of(applicationId, agentsToDelete)); } - logger.info("({}/{}) agents of {} had been cleaned up", deleteCount, agentIds.size(), applicationName); + logger.info("({}/{}) agents of {} had been cleaned up", deleteCount, agentIds.size(), applicationId); return deleteCount; } @Override public Map> getAgentIdMap() { Map> agentIdMap = new TreeMap<>(); - List applications = this.applicationIndexDao.selectAllApplicationNames(); + List applications = this.applicationService.getApplications(); for (Application application : applications) { - List agentIds = this.applicationIndexDao.selectAgentIds(application.getName()); + List agentIds = this.applicationService.getAgents(application.id()); for (String agentId : agentIds) { List applicationList = agentIdMap.computeIfAbsent(agentId, k -> new ArrayList<>()); applicationList.add(application); @@ -156,7 +164,8 @@ public Map> getInactiveAgents(String applicationName, if (durationDays < MIN_DURATION_DAYS_FOR_INACTIVITY) { throw new IllegalArgumentException("duration may not be less than " + MIN_DURATION_DAYS_FOR_INACTIVITY + " days"); } - List agentIds = this.applicationIndexDao.selectAgentIds(applicationName); + UUID applicationId = this.applicationInfoService.getApplicationId(applicationName); + List agentIds = this.applicationService.getAgents(applicationId); if (CollectionUtils.isEmpty(agentIds)) { return Collections.emptyMap(); } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/service/AgentInfoServiceImpl.java b/web/src/main/java/com/navercorp/pinpoint/web/service/AgentInfoServiceImpl.java index b121bccb9bb44..a2926e892056d 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/service/AgentInfoServiceImpl.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/service/AgentInfoServiceImpl.java @@ -22,7 +22,6 @@ import com.navercorp.pinpoint.common.server.util.time.Range; import com.navercorp.pinpoint.web.dao.AgentInfoDao; import com.navercorp.pinpoint.web.dao.AgentLifeCycleDao; -import com.navercorp.pinpoint.web.dao.ApplicationIndexDao; import com.navercorp.pinpoint.web.dao.stat.AgentStatDao; import com.navercorp.pinpoint.web.filter.agent.AgentEventFilter; import com.navercorp.pinpoint.web.hyperlink.HyperLinkFactory; @@ -63,6 +62,7 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.UUID; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -79,28 +79,31 @@ public class AgentInfoServiceImpl implements AgentInfoService { private final AgentWarningStatService agentWarningStatService; - private final ApplicationIndexDao applicationIndexDao; + private final ApplicationService applicationService; private final AgentInfoDao agentInfoDao; private final AgentLifeCycleDao agentLifeCycleDao; private final AgentStatDao jvmGcDao; + private final ApplicationInfoService applicationInfoService; private final HyperLinkFactory hyperLinkFactory; public AgentInfoServiceImpl(AgentEventService agentEventService, AgentWarningStatService agentWarningStatService, - ApplicationIndexDao applicationIndexDao, + ApplicationService applicationService, AgentInfoDao agentInfoDao, AgentLifeCycleDao agentLifeCycleDao, AgentStatDao jvmGcDao, + ApplicationInfoService applicationInfoService, HyperLinkFactory hyperLinkFactory) { this.agentEventService = Objects.requireNonNull(agentEventService, "agentEventService"); this.agentWarningStatService = Objects.requireNonNull(agentWarningStatService, "agentWarningStatService"); - this.applicationIndexDao = Objects.requireNonNull(applicationIndexDao, "applicationIndexDao"); + this.applicationService = Objects.requireNonNull(applicationService, "applicationService"); this.agentInfoDao = Objects.requireNonNull(agentInfoDao, "agentInfoDao"); this.agentLifeCycleDao = Objects.requireNonNull(agentLifeCycleDao, "agentLifeCycleDao"); this.jvmGcDao = Objects.requireNonNull(jvmGcDao, "jvmGcDao"); + this.applicationInfoService = Objects.requireNonNull(applicationInfoService, "applicationInfoService"); this.hyperLinkFactory = Objects.requireNonNull(hyperLinkFactory, "hyperLinkFactory"); } @@ -108,10 +111,10 @@ public AgentInfoServiceImpl(AgentEventService agentEventService, public AgentsMapByApplication getAllAgentsList(AgentStatusFilter filter, Range range) { Objects.requireNonNull(filter, "filter"); - List applications = applicationIndexDao.selectAllApplicationNames(); + List applications = applicationService.getApplications(); List agents = new ArrayList<>(); for (Application application : applications) { - agents.addAll(getAgentsByApplicationName(application.getName(), range.getTo())); + agents.addAll(getAgentsByApplicationName(application.name(), range.getTo())); } return AgentsMapByApplication.newAgentAndStatusMap( @@ -124,10 +127,10 @@ public AgentsMapByApplication getAllAgentsList(AgentStatusFilter public AgentsMapByApplication getAllAgentsStatisticsList(AgentStatusFilter filter, Range range) { Objects.requireNonNull(filter, "filter"); - List applications = applicationIndexDao.selectAllApplicationNames(); + List applications = this.applicationService.getApplications(); List agents = new ArrayList<>(); for (Application application : applications) { - agents.addAll(getDetailedAgentsByApplicationName(application.getName(), range.getTo())); + agents.addAll(getDetailedAgentsByApplicationName(application.name(), range.getTo())); } return AgentsMapByApplication.newDetailedAgentInfoMap( @@ -179,22 +182,23 @@ public ApplicationAgentHostList getApplicationAgentHostList(int offset, int limi } private ApplicationAgentHostList getApplicationAgentHostList0(int offset, int limit, int durationDays) { - List applicationNameList = getApplicationNameList(applicationIndexDao.selectAllApplicationNames()); - if (offset > applicationNameList.size()) { - ApplicationAgentHostList.Builder builder = newBuilder(offset, offset, applicationNameList.size()); + List applications0 = this.applicationService.getApplications(); + List applications = getSortedApplicationList(applications0); + if (offset > applications.size()) { + ApplicationAgentHostList.Builder builder = newBuilder(offset, offset, applications.size()); return builder.build(); } final long timeStamp = System.currentTimeMillis(); final int startIndex = offset - 1; - final int endIndex = Math.min(startIndex + limit, applicationNameList.size()); + final int endIndex = Math.min(startIndex + limit, applications.size()); - ApplicationAgentHostList.Builder builder = newBuilder(offset, endIndex, applicationNameList.size()); + ApplicationAgentHostList.Builder builder = newBuilder(offset, endIndex, applications.size()); for (int i = startIndex; i < endIndex; i++) { - String applicationName = applicationNameList.get(i); - - List agentIdList = getAgentIdList(applicationName, durationDays); + Application application = applications.get(i); + String applicationName = application.name(); + List agentIdList = getAgentIdList(application.id(), durationDays); List agentInfoList = this.agentInfoDao.getSimpleAgentInfos(agentIdList, timeStamp); builder.addAgentInfo(applicationName, agentInfoList); } @@ -205,8 +209,8 @@ private ApplicationAgentHostList.Builder newBuilder(int offset, int endIndex, in return ApplicationAgentHostList.newBuilder(offset, endIndex, totalApplications); } - private List getAgentIdList(String applicationName, int durationDays) { - List agentIds = this.applicationIndexDao.selectAgentIds(applicationName); + private List getAgentIdList(UUID applicationId, int durationDays) { + List agentIds = this.applicationService.getAgents(applicationId); if (CollectionUtils.isEmpty(agentIds)) { return Collections.emptyList(); } @@ -242,17 +246,16 @@ private List getAgentIdList(String applicationName, int durationDays) { return activeAgentIdList; } - private List getApplicationNameList(List applications) { + private List getSortedApplicationList(List applications) { return applications.stream() - .map(Application::getName) - .distinct() - .sorted(Comparator.naturalOrder()) + .sorted(Comparator.comparing(Application::name)) .collect(Collectors.toList()); } @Override public Set getAgentsByApplicationName(String applicationName, long timestamp) { - List agentInfos = this.getAgentsByApplicationNameWithoutStatus0(applicationName, timestamp); + UUID applicationId = this.applicationInfoService.getApplicationId(applicationName); + List agentInfos = this.getAgentsByApplicationNameWithoutStatus0(applicationId, timestamp); List result = new ArrayList<>(agentInfos.size()); @@ -270,17 +273,18 @@ public Set getAgentsByApplicationName(String applicationName, lo @Override public Set getAgentsByApplicationNameWithoutStatus(String applicationName, long timestamp) { - List agentInfos = getAgentsByApplicationNameWithoutStatus0(applicationName, timestamp); + UUID applicationId = this.applicationInfoService.getApplicationId(applicationName); + List agentInfos = getAgentsByApplicationNameWithoutStatus0(applicationId, timestamp); return new HashSet<>(agentInfos); } - public List getAgentsByApplicationNameWithoutStatus0(String applicationName, long timestamp) { - Objects.requireNonNull(applicationName, "applicationName"); + public List getAgentsByApplicationNameWithoutStatus0(UUID applicationId, long timestamp) { + Objects.requireNonNull(applicationId, "applicationId"); if (timestamp < 0) { throw new IllegalArgumentException("timestamp must not be less than 0"); } - List agentIds = this.applicationIndexDao.selectAgentIds(applicationName); + List agentIds = this.applicationService.getAgents(applicationId); List agentInfos = this.agentInfoDao.getSimpleAgentInfos(agentIds, timestamp); return agentInfos.stream() @@ -312,7 +316,8 @@ public List getDetailedAgentsByApplicationNameWithoutStatus0( throw new IllegalArgumentException("timestamp must not be less than 0"); } - List agentIds = this.applicationIndexDao.selectAgentIds(applicationName); + UUID applicationId = this.applicationInfoService.getApplicationId(applicationName); + List agentIds = this.applicationService.getAgents(applicationId); List agentInfos = this.agentInfoDao.getDetailedAgentInfos(agentIds, timestamp, false, true); return agentInfos.stream() diff --git a/web/src/main/java/com/navercorp/pinpoint/web/service/AlarmServiceImpl.java b/web/src/main/java/com/navercorp/pinpoint/web/service/AlarmServiceImpl.java index 8d2a3f620303c..6ad90263cf0e1 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/service/AlarmServiceImpl.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/service/AlarmServiceImpl.java @@ -15,7 +15,7 @@ */ package com.navercorp.pinpoint.web.service; -import com.navercorp.pinpoint.common.server.alram.event.DeleteRuleEvent; +import com.navercorp.pinpoint.common.server.alarm.event.DeleteRuleEvent; import com.navercorp.pinpoint.web.alarm.vo.Rule; import com.navercorp.pinpoint.web.dao.AlarmDao; import com.navercorp.pinpoint.web.vo.UserGroup; @@ -66,11 +66,11 @@ public List selectRuleByUserGroupId(String userGroupId) { @Override @Transactional(readOnly = true) - public List selectRuleByApplicationId(String applicationId) { - List rules = alarmDao.selectRuleByApplicationId(applicationId); + public List selectRuleByApplicationId(String applicationName) { + List rules = alarmDao.selectRuleByApplicationId(applicationName); List result = new ArrayList<>(rules.size()); for (Rule rule : rules) { - if (rule.getApplicationId().equals(applicationId)) { + if (rule.getApplicationName().equals(applicationName)) { result.add(rule); } } 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 a01dfd11ec526..76ee69e0fa774 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 @@ -36,7 +36,7 @@ public ApdexScoreServiceImpl(MapResponseDao mapResponseDao) { @Override public ApdexScore selectApdexScoreData(Application application, Range range) { - ServiceType applicationServiceType = application.getServiceType(); + ServiceType applicationServiceType = application.serviceType(); if (applicationServiceType.isWas()) { List responseTimeList = mapResponseDao.selectResponseTime(application, range); @@ -51,7 +51,7 @@ public ApdexScore selectApdexScoreData(Application application, Range range) { @Override public ApdexScore selectApdexScoreData(Application application, String agentId, Range range) { - ServiceType applicationServiceType = application.getServiceType(); + ServiceType applicationServiceType = application.serviceType(); if (applicationServiceType.isWas()) { List responseTimeList = mapResponseDao.selectResponseTime(application, range); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/service/ApplicationInfoService.java b/web/src/main/java/com/navercorp/pinpoint/web/service/ApplicationInfoService.java new file mode 100644 index 0000000000000..a2ae0216f6fda --- /dev/null +++ b/web/src/main/java/com/navercorp/pinpoint/web/service/ApplicationInfoService.java @@ -0,0 +1,47 @@ +/* + * Copyright 2024 NAVER Corp. + * + * 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 com.navercorp.pinpoint.web.service; + +import com.navercorp.pinpoint.web.dao.ApplicationInfoDao; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Component; + +import java.util.Objects; +import java.util.UUID; + +/** + * @author youngjin.kim2 + */ +@Component +public class ApplicationInfoService { + + private final ApplicationInfoDao applicationInfoDao; + + public ApplicationInfoService(ApplicationInfoDao applicationInfoDao) { + this.applicationInfoDao = Objects.requireNonNull(applicationInfoDao, "applicationInfoDao"); + } + + @Cacheable(value = "applicationNameById", key = "#applicationId") + public String getApplicationName(UUID applicationId) { + return this.applicationInfoDao.getApplicationName(applicationId); + } + + @Cacheable(value = "applicationIdByName", key = "#applicationName") + public UUID getApplicationId(String applicationName) { + return this.applicationInfoDao.getApplicationId(applicationName); + } + +} diff --git a/web/src/main/java/com/navercorp/pinpoint/web/service/ApplicationService.java b/web/src/main/java/com/navercorp/pinpoint/web/service/ApplicationService.java index 8c5e7204d7b31..004666ef056a3 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/service/ApplicationService.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/service/ApplicationService.java @@ -16,8 +16,13 @@ package com.navercorp.pinpoint.web.service; +import com.navercorp.pinpoint.web.vo.Application; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.UUID; + /** * @author Taejin Koo */ @@ -26,4 +31,14 @@ public interface ApplicationService { boolean isExistApplicationName(String applicationName); + List getApplications(); + + List getAgents(UUID applicationId); + + void deleteApplication(UUID applicationId); + + void deleteAgents(Map> applicationAgentIdMap); + + void deleteAgent(UUID applicationId, String agentId); + } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/service/ApplicationServiceImpl.java b/web/src/main/java/com/navercorp/pinpoint/web/service/ApplicationServiceImpl.java index 3464f1da05179..655390269cd67 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/service/ApplicationServiceImpl.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/service/ApplicationServiceImpl.java @@ -17,11 +17,16 @@ package com.navercorp.pinpoint.web.service; import com.navercorp.pinpoint.web.dao.ApplicationIndexDao; +import com.navercorp.pinpoint.web.dao.ApplicationIndexDaoV2; import com.navercorp.pinpoint.web.vo.Application; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; +import java.util.UUID; /** * @author Taejin Koo @@ -30,9 +35,17 @@ public class ApplicationServiceImpl implements ApplicationService { private final ApplicationIndexDao applicationIndexDao; + private final ApplicationIndexDaoV2 applicationIndexDaoV2; + private final ApplicationInfoService applicationInfoService; - public ApplicationServiceImpl(ApplicationIndexDao applicationIndexDao) { + public ApplicationServiceImpl( + ApplicationIndexDao applicationIndexDao, + ApplicationIndexDaoV2 applicationIndexDaoV2, + ApplicationInfoService applicationInfoService + ) { this.applicationIndexDao = Objects.requireNonNull(applicationIndexDao, "applicationIndexDao"); + this.applicationIndexDaoV2 = Objects.requireNonNull(applicationIndexDaoV2, "applicationIndexDaoV2"); + this.applicationInfoService = Objects.requireNonNull(applicationInfoService, "applicationInfoService"); } @Override @@ -41,14 +54,89 @@ public boolean isExistApplicationName(String applicationName) { return false; } - List applications = applicationIndexDao.selectApplicationName(applicationName); + UUID applicationId = this.applicationInfoService.getApplicationId(applicationName); + List applicationsV2 = this.applicationIndexDaoV2.selectApplicationName(applicationId); + List applications = this.applicationIndexDao.selectApplicationName(applicationName); + + return applicationsV2.size() > 0 || applications.size() > 0; + } + @Override + public List getApplications() { + List applications1Origin = this.applicationIndexDao.selectAllApplicationNames(); + List applications1 = augmentApplicationId(applications1Origin); + + List applications2Origin = applicationIndexDaoV2.selectAllApplicationNames(); + List applications2 = augmentApplicationName(applications2Origin); + + List applications = new ArrayList<>(applications1.size() + applications2.size()); + applications.addAll(applications1); + applications.addAll(applications2); + + return applications.stream() + .distinct() + .toList(); + } + + @Override + public List getAgents(UUID applicationId) { + String applicationName = this.applicationInfoService.getApplicationName(applicationId); + + List agents1 = this.applicationIndexDao.selectAgentIds(applicationName); + List agents2 = this.applicationIndexDaoV2.selectAgentIds(applicationId); + + List agents = new ArrayList<>(agents1.size() + agents2.size()); + agents.addAll(agents1); + agents.addAll(agents2); + + return agents.stream() + .distinct() + .toList(); + } + + @Override + public void deleteApplication(UUID applicationId) { + String applicationName = this.applicationInfoService.getApplicationName(applicationId); + this.applicationIndexDao.deleteApplicationName(applicationName); + this.applicationIndexDaoV2.deleteApplication(applicationId); + } + + @Override + public void deleteAgents(Map> applicationAgentIdMap) { + Map> applicationAgentIdMap2 = new HashMap<>(); + for (Map.Entry> entry : applicationAgentIdMap.entrySet()) { + UUID applicationId = entry.getKey(); + String applicationName = this.applicationInfoService.getApplicationName(applicationId); + applicationAgentIdMap2.put(applicationName, entry.getValue()); + } + + this.applicationIndexDao.deleteAgentIds(applicationAgentIdMap2); + this.applicationIndexDaoV2.deleteAgentIds(applicationAgentIdMap); + } + + @Override + public void deleteAgent(UUID applicationId, String agentId) { + String applicationName = this.applicationInfoService.getApplicationName(applicationId); + + this.applicationIndexDao.deleteAgentId(applicationName, agentId); + this.applicationIndexDaoV2.deleteAgentId(applicationId, agentId); + } + + private List augmentApplicationName(List applications) { + List result = new ArrayList<>(applications.size()); for (Application application : applications) { - if (applicationName.equals(application.getName())) { - return true; - } + String applicationName = this.applicationInfoService.getApplicationName(application.id()); + result.add(new Application(application.id(), applicationName, application.serviceType())); } + return result; + } - return false; + private List augmentApplicationId(List applications) { + List result = new ArrayList<>(applications.size()); + for (Application application : applications) { + UUID applicationId = this.applicationInfoService.getApplicationId(application.name()); + result.add(new Application(applicationId, application.name(), application.serviceType())); + } + return result; } } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/service/ApplicationTraceIndexService.java b/web/src/main/java/com/navercorp/pinpoint/web/service/ApplicationTraceIndexService.java new file mode 100644 index 0000000000000..3a8fcb48899f6 --- /dev/null +++ b/web/src/main/java/com/navercorp/pinpoint/web/service/ApplicationTraceIndexService.java @@ -0,0 +1,46 @@ +/* + * Copyright 2024 NAVER Corp. + * + * 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 com.navercorp.pinpoint.web.service; + +import com.navercorp.pinpoint.common.profiler.util.TransactionId; +import com.navercorp.pinpoint.common.server.util.time.Range; +import com.navercorp.pinpoint.web.scatter.DragArea; +import com.navercorp.pinpoint.web.scatter.DragAreaQuery; +import com.navercorp.pinpoint.web.vo.LimitedScanResult; +import com.navercorp.pinpoint.web.vo.scatter.Dot; +import com.navercorp.pinpoint.web.vo.scatter.DotMetaData; + +import java.util.List; + +/** + * @author youngjin.kim2 + */ +public interface ApplicationTraceIndexService { + boolean hasTraceIndex(String applicationName, Range range, boolean backwardDirection); + + LimitedScanResult> scanTraceIndex(String applicationName, Range range, int limit, boolean backwardDirection); + + LimitedScanResult> scanTraceScatterData(String applicationName, Range range, int limit, boolean scanBackward); + + + LimitedScanResult> scanTraceIndex(String applicationName, DragArea dragArea, int limit); + + @Deprecated + LimitedScanResult> scanScatterData(String applicationName, DragAreaQuery dragAreaQuery, int limit); + + LimitedScanResult> scanScatterDataV2(String applicationName, DragAreaQuery dragAreaQuery, int limit); + +} diff --git a/web/src/main/java/com/navercorp/pinpoint/web/service/ApplicationTraceIndexServiceImpl.java b/web/src/main/java/com/navercorp/pinpoint/web/service/ApplicationTraceIndexServiceImpl.java new file mode 100644 index 0000000000000..480edc4516349 --- /dev/null +++ b/web/src/main/java/com/navercorp/pinpoint/web/service/ApplicationTraceIndexServiceImpl.java @@ -0,0 +1,117 @@ +/* + * Copyright 2024 NAVER Corp. + * + * 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 com.navercorp.pinpoint.web.service; + +import com.navercorp.pinpoint.common.profiler.util.TransactionId; +import com.navercorp.pinpoint.common.server.util.time.Range; +import com.navercorp.pinpoint.web.dao.ApplicationTraceIndexDao; +import com.navercorp.pinpoint.web.dao.ApplicationTraceIndexDaoV2; +import com.navercorp.pinpoint.web.scatter.DragArea; +import com.navercorp.pinpoint.web.scatter.DragAreaQuery; +import com.navercorp.pinpoint.web.vo.LimitedScanResult; +import com.navercorp.pinpoint.web.vo.scatter.Dot; +import com.navercorp.pinpoint.web.vo.scatter.DotMetaData; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.UUID; + +/** + * @author youngjin.kim2 + */ +@Component +public class ApplicationTraceIndexServiceImpl implements ApplicationTraceIndexService { + + private final ApplicationTraceIndexDao applicationTraceIndexDao; + private final ApplicationTraceIndexDaoV2 applicationTraceIndexDaoV2; + private final ApplicationInfoService applicationInfoService; + + public ApplicationTraceIndexServiceImpl( + ApplicationTraceIndexDao applicationTraceIndexDao, + ApplicationTraceIndexDaoV2 applicationTraceIndexDaoV2, + ApplicationInfoService applicationInfoService + ) { + this.applicationTraceIndexDao = Objects.requireNonNull(applicationTraceIndexDao, "applicationTraceIndexDao"); + this.applicationTraceIndexDaoV2 = Objects.requireNonNull(applicationTraceIndexDaoV2, "applicationTraceIndexDaoV2"); + this.applicationInfoService = Objects.requireNonNull(applicationInfoService, "applicationInfoService"); + } + + @Override + public boolean hasTraceIndex(String applicationName, Range range, boolean backwardDirection) { + UUID applicationId = getApplicationId(applicationName); + return applicationTraceIndexDao.hasTraceIndex(applicationName, range, backwardDirection) || applicationTraceIndexDaoV2.hasTraceIndex(applicationId, range, backwardDirection); + } + + @Override + public LimitedScanResult> scanTraceIndex(String applicationName, Range range, int limit, boolean backwardDirection) { + UUID applicationId = getApplicationId(applicationName); + LimitedScanResult> r1 = applicationTraceIndexDao.scanTraceIndex(applicationName, range, limit, backwardDirection); + LimitedScanResult> r2 = applicationTraceIndexDaoV2.scanTraceIndex(applicationId, range, limit, backwardDirection); + return merge(r1, r2); + } + + @Override + public LimitedScanResult> scanTraceScatterData(String applicationName, Range range, int limit, boolean scanBackward) { + UUID applicationId = getApplicationId(applicationName); + LimitedScanResult> r1 = applicationTraceIndexDao.scanTraceScatterData(applicationName, range, limit, scanBackward); + LimitedScanResult> r2 = applicationTraceIndexDaoV2.scanTraceScatterData(applicationId, range, limit, scanBackward); + return merge(r1, r2); + } + + @Override + public LimitedScanResult> scanTraceIndex(String applicationName, DragArea dragArea, int limit) { + UUID applicationId = getApplicationId(applicationName); + LimitedScanResult> r1 = applicationTraceIndexDao.scanTraceIndex(applicationName, dragArea, limit); + LimitedScanResult> r2 = applicationTraceIndexDaoV2.scanTraceIndex(applicationId, dragArea, limit); + return merge(r1, r2); + } + + @Override + public LimitedScanResult> scanScatterData(String applicationName, DragAreaQuery dragAreaQuery, int limit) { + UUID applicationId = getApplicationId(applicationName); + LimitedScanResult> r1 = applicationTraceIndexDao.scanScatterData(applicationName, dragAreaQuery, limit); + LimitedScanResult> r2 = applicationTraceIndexDaoV2.scanScatterData(applicationId, dragAreaQuery, limit); + return merge(r1, r2); + } + + @Override + public LimitedScanResult> scanScatterDataV2(String applicationName, DragAreaQuery dragAreaQuery, int limit) { + UUID applicationId = getApplicationId(applicationName); + LimitedScanResult> r1 = applicationTraceIndexDao.scanScatterDataV2(applicationName, dragAreaQuery, limit); + LimitedScanResult> r2 = applicationTraceIndexDaoV2.scanScatterDataV2(applicationId, dragAreaQuery, limit); + return merge(r1, r2); + } + + private UUID getApplicationId(String applicationName) { + return this.applicationInfoService.getApplicationId(applicationName); + } + + private LimitedScanResult> merge(LimitedScanResult> r1, LimitedScanResult> r2) { + long limitedTime = Math.max(r1.limitedTime(), r2.limitedTime()); + List scanData = mergeList(r1.scanData(), r2.scanData()); + return new LimitedScanResult<>(limitedTime, scanData); + } + + private List mergeList(List l1, List l2) { + List result = new ArrayList<>(l1.size() + l2.size()); + result.addAll(l1); + result.addAll(l2); + return result; + } + +} diff --git a/web/src/main/java/com/navercorp/pinpoint/web/service/CommonServiceImpl.java b/web/src/main/java/com/navercorp/pinpoint/web/service/CommonServiceImpl.java index c6925c457cc24..bbdebd5f47431 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/service/CommonServiceImpl.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/service/CommonServiceImpl.java @@ -16,13 +16,11 @@ package com.navercorp.pinpoint.web.service; -import java.util.List; -import java.util.Objects; - +import com.navercorp.pinpoint.web.vo.Application; import org.springframework.stereotype.Service; -import com.navercorp.pinpoint.web.dao.ApplicationIndexDao; -import com.navercorp.pinpoint.web.vo.Application; +import java.util.List; +import java.util.Objects; /** * @author netspider @@ -31,15 +29,15 @@ @Service public class CommonServiceImpl implements CommonService { - private final ApplicationIndexDao applicationIndexDao; + private final ApplicationService applicationService; - public CommonServiceImpl(ApplicationIndexDao applicationIndexDao) { - this.applicationIndexDao = Objects.requireNonNull(applicationIndexDao, "applicationIndexDao"); + public CommonServiceImpl(ApplicationService applicationService) { + this.applicationService = Objects.requireNonNull(applicationService, "applicationService"); } @Override public List selectAllApplicationNames() { - return applicationIndexDao.selectAllApplicationNames(); + return applicationService.getApplications(); } } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/service/HeatMapServiceImpl.java b/web/src/main/java/com/navercorp/pinpoint/web/service/HeatMapServiceImpl.java index 35cc9ac38791a..a0081db70f094 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/service/HeatMapServiceImpl.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/service/HeatMapServiceImpl.java @@ -4,7 +4,6 @@ import com.navercorp.pinpoint.common.server.bo.SpanBo; import com.navercorp.pinpoint.common.server.util.time.Range; import com.navercorp.pinpoint.common.util.CollectionUtils; -import com.navercorp.pinpoint.web.dao.ApplicationTraceIndexDao; import com.navercorp.pinpoint.web.dao.TraceDao; import com.navercorp.pinpoint.web.scatter.DragAreaQuery; import com.navercorp.pinpoint.web.scatter.heatmap.HeatMap; @@ -33,15 +32,15 @@ public class HeatMapServiceImpl implements HeatMapService { private final Logger logger = LogManager.getLogger(this.getClass()); - private final ApplicationTraceIndexDao applicationTraceIndexDao; + private final ApplicationTraceIndexService applicationTraceIndexService; private final TraceDao traceDao; private final SpanService spanService; - public HeatMapServiceImpl(ApplicationTraceIndexDao applicationTraceIndexDao, + public HeatMapServiceImpl(ApplicationTraceIndexService applicationTraceIndexService, SpanService spanService, TraceDao traceDao) { - this.applicationTraceIndexDao = Objects.requireNonNull(applicationTraceIndexDao, "applicationTraceIndexDao"); + this.applicationTraceIndexService = Objects.requireNonNull(applicationTraceIndexService, "applicationTraceIndexService"); this.spanService = Objects.requireNonNull(spanService, "spanService"); this.traceDao = Objects.requireNonNull(traceDao, "traceDao"); } @@ -52,7 +51,7 @@ public LimitedScanResult> dragScatterData(String applicationName, D Objects.requireNonNull(dragAreaQuery, "dragAreaQuery"); - LimitedScanResult> scanResult = applicationTraceIndexDao.scanScatterData(applicationName, dragAreaQuery, limit); + LimitedScanResult> scanResult = applicationTraceIndexService.scanScatterData(applicationName, dragAreaQuery, limit); logger.debug("dragScatterArea applicationName:{} dots:{}", applicationName, scanResult); // boolean requestComplete = scatterData.getDotSize() < limit; @@ -73,7 +72,7 @@ public LimitedScanResult> dragScatterDataV2(String application Objects.requireNonNull(dragAreaQuery, "dragAreaQuery"); - LimitedScanResult> scanResult = applicationTraceIndexDao.scanScatterDataV2(applicationName, dragAreaQuery, limit); + LimitedScanResult> scanResult = applicationTraceIndexService.scanScatterDataV2(applicationName, dragAreaQuery, limit); scanResult = legacyCompatibilityCheck(applicationName, scanResult); logger.debug("dragScatterArea applicationName:{} dots:{}", applicationName, scanResult); @@ -146,7 +145,7 @@ public LimitedScanResult getHeatMap(String applicationName, Range range Objects.requireNonNull(range, "range"); - LimitedScanResult> scanResult = applicationTraceIndexDao.scanTraceScatterData(applicationName, range, limit, true); + LimitedScanResult> scanResult = applicationTraceIndexService.scanTraceScatterData(applicationName, range, limit, true); final int slotSize = 100; HeatMapBuilder builder = HeatMapBuilder.newBuilder(range.getFrom(), range.getTo(), slotSize, 0, maxY, slotSize); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/service/ScatterChartServiceImpl.java b/web/src/main/java/com/navercorp/pinpoint/web/service/ScatterChartServiceImpl.java index 7bb2083680d67..3f78eabef90ed 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/service/ScatterChartServiceImpl.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/service/ScatterChartServiceImpl.java @@ -20,7 +20,6 @@ import com.navercorp.pinpoint.common.server.bo.SpanBo; import com.navercorp.pinpoint.common.server.util.time.Range; import com.navercorp.pinpoint.common.util.CollectionUtils; -import com.navercorp.pinpoint.web.dao.ApplicationTraceIndexDao; import com.navercorp.pinpoint.web.dao.TraceDao; import com.navercorp.pinpoint.web.filter.Filter; import com.navercorp.pinpoint.web.scatter.ScatterData; @@ -48,16 +47,16 @@ public class ScatterChartServiceImpl implements ScatterChartService { private final Logger logger = LogManager.getLogger(this.getClass()); - private final ApplicationTraceIndexDao applicationTraceIndexDao; + private final ApplicationTraceIndexService applicationTraceIndexService; private final TraceDao traceDao; private final SpanService spanService; - public ScatterChartServiceImpl(ApplicationTraceIndexDao applicationTraceIndexDao, + public ScatterChartServiceImpl(ApplicationTraceIndexService applicationTraceIndexService, TraceDao traceDao, SpanService spanService) { - this.applicationTraceIndexDao = Objects.requireNonNull(applicationTraceIndexDao, "applicationTraceIndexDao"); + this.applicationTraceIndexService = Objects.requireNonNull(applicationTraceIndexService, "applicationTraceIndexService"); this.traceDao = Objects.requireNonNull(traceDao, "traceDao"); this.spanService = Objects.requireNonNull(spanService, "spanService"); } @@ -78,7 +77,7 @@ public List selectScatterData(List transactionIdList, String } for (SpanBo span : trace) { - if (applicationName.equals(span.getApplicationId())) { + if (applicationName.equals(span.getApplicationName())) { final TransactionId transactionId = span.getTransactionId(); final Dot dot = new Dot(transactionId, span.getCollectorAcceptTime(), span.getElapsed(), span.getErrCode(), span.getAgentId()); result.add(dot); @@ -113,7 +112,7 @@ public List selectTransactionMetadata(TransactionId transactionId) { public ScatterData selectScatterData(String applicationName, Range range, int xGroupUnit, int yGroupUnit, int limit, boolean backwardDirection) { Objects.requireNonNull(applicationName, "applicationName"); Objects.requireNonNull(range, "range"); - LimitedScanResult> scanResult = applicationTraceIndexDao.scanTraceScatterData(applicationName, range, limit, backwardDirection); + LimitedScanResult> scanResult = applicationTraceIndexService.scanTraceScatterData(applicationName, range, limit, backwardDirection); ScatterDataBuilder builder = new ScatterDataBuilder(range.getFrom(), range.getTo(), xGroupUnit, yGroupUnit); builder.addDot(scanResult.scanData()); @@ -136,7 +135,7 @@ public ScatterData selectScatterData(List transactionIdList, Stri } for (SpanBo span : trace) { - if (applicationName.equals(span.getApplicationId())) { + if (applicationName.equals(span.getApplicationName())) { final TransactionId transactionId = span.getTransactionId(); final Dot dot = new Dot(transactionId, span.getCollectorAcceptTime(), span.getElapsed(), span.getErrCode(), span.getAgentId()); scatterData.addDot(dot); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/service/TransactionInfoServiceImpl.java b/web/src/main/java/com/navercorp/pinpoint/web/service/TransactionInfoServiceImpl.java index e86f4660fd72e..61308180eab93 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/service/TransactionInfoServiceImpl.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/service/TransactionInfoServiceImpl.java @@ -113,7 +113,7 @@ public BusinessTransactions selectBusinessTransactions(List trans for (SpanBo spanBo : trace) { // show application's incoming requests - if (applicationName.equals(spanBo.getApplicationId())) { + if (applicationName.equals(spanBo.getApplicationName())) { businessTransactions.add(spanBo); } } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/view/AgentResponseTimeViewModel.java b/web/src/main/java/com/navercorp/pinpoint/web/view/AgentResponseTimeViewModel.java index ece06c2408dfc..08845f7042095 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/view/AgentResponseTimeViewModel.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/view/AgentResponseTimeViewModel.java @@ -38,7 +38,7 @@ public AgentResponseTimeViewModel(Application agentName, List res } public String getAgentName() { - return agentName.getName(); + return agentName.name(); } public List getResponseTimeViewModel() { diff --git a/web/src/main/java/com/navercorp/pinpoint/web/view/ApplicationScatterScanResultSerializer.java b/web/src/main/java/com/navercorp/pinpoint/web/view/ApplicationScatterScanResultSerializer.java index e3cbf8044ec1f..5462963e89457 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/view/ApplicationScatterScanResultSerializer.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/view/ApplicationScatterScanResultSerializer.java @@ -32,7 +32,7 @@ public class ApplicationScatterScanResultSerializer extends JsonSerializer { @Override public void serialize(Application application, JsonGenerator jgen, SerializerProvider provider) throws IOException { jgen.writeStartObject(); - jgen.writeStringField("applicationName", application.getName()); - jgen.writeStringField("serviceType", application.getServiceType().getDesc()); + if (application.id() != null) { + jgen.writeStringField("applicationId", application.id().toString()); + } else { + jgen.writeNullField("applicationId"); + } + jgen.writeStringField("applicationName", application.name()); + jgen.writeStringField("serviceType", application.serviceType().getDesc()); jgen.writeNumberField("code", application.getServiceTypeCode()); jgen.writeEndObject(); } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/view/LinkSerializer.java b/web/src/main/java/com/navercorp/pinpoint/web/view/LinkSerializer.java index 97f24f3d53d68..72ec36b29cd4e 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/view/LinkSerializer.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/view/LinkSerializer.java @@ -62,9 +62,9 @@ public void serialize(Link link, JsonGenerator jgen, SerializerProvider provider writeSimpleNode("targetInfo", link.getTo(), jgen); Application filterApplication = link.getFilterApplication(); - jgen.writeStringField("filterApplicationName", filterApplication.getName()); + jgen.writeStringField("filterApplicationName", filterApplication.name()); jgen.writeNumberField("filterApplicationServiceTypeCode", filterApplication.getServiceTypeCode()); - jgen.writeStringField("filterApplicationServiceTypeName", filterApplication.getServiceType().getName()); + jgen.writeStringField("filterApplicationServiceTypeName", filterApplication.serviceType().getName()); if (link.isWasToWasLink()) { writeWasToWasTargetRpcList(link, jgen); } @@ -137,7 +137,7 @@ private void writeWasToWasTargetRpcList(Link link, JsonGenerator jgen) throws IO Collection sourceLinkTargetAgentList = link.getSourceLinkTargetAgentList(); for (Application application : sourceLinkTargetAgentList) { jgen.writeStartObject(); - jgen.writeStringField("rpc", application.getName()); + jgen.writeStringField("rpc", application.name()); jgen.writeNumberField("rpcServiceTypeCode", application.getServiceTypeCode()); jgen.writeEndObject(); } @@ -182,10 +182,10 @@ private void writeSimpleNode(String fieldName, Node node, JsonGenerator jgen) th jgen.writeStartObject(); Application application = node.getApplication(); - jgen.writeStringField("applicationName", application.getName()); - jgen.writeStringField("serviceType", application.getServiceType().toString()); + jgen.writeStringField("applicationName", application.name()); + jgen.writeStringField("serviceType", application.serviceType().toString()); jgen.writeNumberField("serviceTypeCode", application.getServiceTypeCode()); - jgen.writeBooleanField("isWas", application.getServiceType().isWas()); + jgen.writeBooleanField("isWas", application.serviceType().isWas()); jgen.writeEndObject(); } } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/view/NodeSerializer.java b/web/src/main/java/com/navercorp/pinpoint/web/view/NodeSerializer.java index 2e80e2f17121c..8ad5d96a461a1 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/view/NodeSerializer.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/view/NodeSerializer.java @@ -51,7 +51,7 @@ public void serialize(Node node, JsonGenerator jgen, SerializerProvider provider jgen.writeStringField("category", node.getServiceType().toString()); // necessary for go.js jgen.writeStringField("serviceType", node.getServiceType().toString()); - final ServiceType serviceType = node.getApplication().getServiceType(); + final ServiceType serviceType = node.getApplication().serviceType(); // if (serviceType.isUser()) { // jgen.writeStringField("fig", "Ellipse"); // } else if(serviceType.isWas()) { diff --git a/web/src/main/java/com/navercorp/pinpoint/web/view/TimeViewModel.java b/web/src/main/java/com/navercorp/pinpoint/web/view/TimeViewModel.java index 067b1db468b7c..756af6cb38f45 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/view/TimeViewModel.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/view/TimeViewModel.java @@ -54,7 +54,7 @@ public List build() { List createViewModelV1() { final List value = new ArrayList<>(9); - ServiceType serviceType = application.getServiceType(); + ServiceType serviceType = application.serviceType(); HistogramSchema schema = serviceType.getHistogramSchema(); value.add(new ResponseTimeViewModel(schema.getFastSlot().getSlotName(), getColumnValue(histogramList, SlotType.FAST))); value.add(new ResponseTimeViewModel(schema.getNormalSlot().getSlotName(), getColumnValue(histogramList, SlotType.NORMAL))); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/vo/Application.java b/web/src/main/java/com/navercorp/pinpoint/web/vo/Application.java index 29dceca891cdb..5819b33a5372b 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/vo/Application.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/vo/Application.java @@ -21,31 +21,24 @@ import com.navercorp.pinpoint.web.view.ApplicationSerializer; import java.util.Objects; +import java.util.UUID; /** - * * @author netspider * @author emeroad * @author jaehong.kim - * */ @JsonSerialize(using = ApplicationSerializer.class) -public final class Application { - private final String name; - private final ServiceType serviceType; +public record Application(UUID id, String name, ServiceType serviceType) { - public Application(String name, ServiceType serviceType) { - this.name = Objects.requireNonNull(name, "name"); + public Application(UUID id, String name, ServiceType serviceType) { + this.id = id; + this.name = name; this.serviceType = Objects.requireNonNull(serviceType, "serviceType"); } - - public String getName() { - return name; - } - - public ServiceType getServiceType() { - return serviceType; + public Application(String name, ServiceType serviceType) { + this(null, name, serviceType); } public short getServiceTypeCode() { @@ -56,18 +49,13 @@ public short getServiceTypeCode() { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - Application that = (Application) o; - - if (!name.equals(that.name)) return false; - return serviceType.equals(that.serviceType); + return Objects.equals(id, that.id) && Objects.equals(name, that.name) && Objects.equals(serviceType, that.serviceType); } @Override public int hashCode() { - int result = name.hashCode(); - result = 31 * result + serviceType.hashCode(); - return result; + return Objects.hash(id, name, serviceType); } @Override diff --git a/web/src/main/java/com/navercorp/pinpoint/web/vo/ResponseHistograms.java b/web/src/main/java/com/navercorp/pinpoint/web/vo/ResponseHistograms.java index 8a6a0cfc839a0..09e99e161d0f0 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/vo/ResponseHistograms.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/vo/ResponseHistograms.java @@ -87,7 +87,7 @@ private ResponseTime getResponseTime(Application application, Long timestamp) { Map responseTimeMap = responseTimeApplicationMap.computeIfAbsent(timestamp, (Long k) -> new HashMap<>()); ResponseTime responseTime = responseTimeMap.get(application); if (responseTime == null) { - responseTime = new ResponseTime(application.getName(), application.getServiceType(), timestamp); + responseTime = new ResponseTime(application.name(), application.serviceType(), timestamp); responseTimeMap.put(application, responseTime); } return responseTime; diff --git a/web/src/test/java/com/navercorp/pinpoint/web/TestTraceUtils.java b/web/src/test/java/com/navercorp/pinpoint/web/TestTraceUtils.java index 972069386d909..3710eed177a05 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/TestTraceUtils.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/TestTraceUtils.java @@ -158,7 +158,7 @@ public SpanBuilder parentSpan(SpanBo parentSpan) { public SpanBo build() { SpanBo spanBo = new SpanBo(); spanBo.setVersion(version); - spanBo.setApplicationId(applicationName); + spanBo.setApplicationName(applicationName); spanBo.setAgentId(agentId); long spanId = this.spanId; if (spanId == SpanId.NULL) { diff --git a/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapBuilderTest.java b/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapBuilderTest.java index 88ab949201049..2092620bcac6f 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapBuilderTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapBuilderTest.java @@ -99,10 +99,10 @@ public void setUp() { @Override public List answer(InvocationOnMock invocation) { Application application = invocation.getArgument(0); - String applicationName = application.getName(); - ServiceType applicationServiceType = application.getServiceType(); + String applicationName = application.name(); + ServiceType applicationServiceType = application.serviceType(); int depth = ApplicationMapBuilderTestHelper.getDepthFromApplicationName(applicationName); - ResponseTime responseTime = new ResponseTime(application.getName(), application.getServiceType(), timestamp); + ResponseTime responseTime = new ResponseTime(application.name(), application.serviceType(), timestamp); responseTime.addResponseTime(ApplicationMapBuilderTestHelper.createAgentIdFromDepth(depth), applicationServiceType.getHistogramSchema().getNormalSlot().getSlotTime(), 1); return List.of(responseTime); } diff --git a/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapBuilderTestHelper.java b/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapBuilderTestHelper.java index f7fce6a8670b7..341e39bd25b23 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapBuilderTestHelper.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapBuilderTestHelper.java @@ -97,7 +97,7 @@ public static LinkData createTargetLinkData(int depth) { Application toApplication = createApplicationFromDepth(toDepth); LinkData targetLinkData = new LinkData(fromApplication, toApplication); targetLinkData.addLinkData( - fromApplication.getName(), WAS_TYPE, + fromApplication.name(), WAS_TYPE, createAgentIdFromDepth(toDepth), WAS_TYPE, System.currentTimeMillis(), WAS_TYPE.getHistogramSchema().getNormalSlot().getSlotTime(), 1); return targetLinkData; @@ -109,7 +109,7 @@ public static LinkData createUserTargetLinkData(int depth) { Application fromApplication = createUserApplication(toApplication); LinkData targetLinkData = new LinkData(fromApplication, toApplication); targetLinkData.addLinkData( - fromApplication.getName(), USER_TYPE, + fromApplication.name(), USER_TYPE, createAgentIdFromDepth(toDepth), WAS_TYPE, System.currentTimeMillis(), WAS_TYPE.getHistogramSchema().getNormalSlot().getSlotTime(), 1); return targetLinkData; @@ -158,18 +158,18 @@ public static Application createApplicationFromDepth(int depth) { } public static Application createUserApplication(Application toApplication) { - String userApplicationName = toApplication.getName() + "_" + toApplication.getServiceType().getName(); + String userApplicationName = toApplication.name() + "_" + toApplication.serviceType().getName(); return new Application(userApplicationName, USER_TYPE); } public static Application createTerminalApplication(Application fromApplication) { - int depth = getDepthFromApplicationName(fromApplication.getName()); + int depth = getDepthFromApplicationName(fromApplication.name()); String terminalApplicationName = "destinationId_" + depth; return new Application(terminalApplicationName, TERMINAL_TYPE); } public static Application createUnknownApplication(Application fromApplication) { - int depth = getDepthFromApplicationName(fromApplication.getName()); + int depth = getDepthFromApplicationName(fromApplication.name()); return new Application(createHostnameFromDepth(depth), UNKNOWN_TYPE); } diff --git a/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/histogram/AgentTimeHistogramTest.java b/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/histogram/AgentTimeHistogramTest.java index b81a9db61e97c..6cf4375d002df 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/histogram/AgentTimeHistogramTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/histogram/AgentTimeHistogramTest.java @@ -118,16 +118,16 @@ public void getApplicationApdexScoreListTest() { private List createResponseTime(Application app, String agentName1, String agentName2) { - ResponseTime one = new ResponseTime(app.getName(), app.getServiceType(), 0); + ResponseTime one = new ResponseTime(app.name(), app.serviceType(), 0); one.addResponseTime(agentName1, (short) 1000, 1); - ResponseTime two = new ResponseTime(app.getName(), app.getServiceType(), 1000 * 60); + ResponseTime two = new ResponseTime(app.name(), app.serviceType(), 1000 * 60); two.addResponseTime(agentName1, (short) 3000, 1); - ResponseTime three = new ResponseTime(app.getName(), app.getServiceType(), 0); + ResponseTime three = new ResponseTime(app.name(), app.serviceType(), 0); three.addResponseTime(agentName2, (short) 1000, 1); - ResponseTime four = new ResponseTime(app.getName(), app.getServiceType(), 1000 * 60); + ResponseTime four = new ResponseTime(app.name(), app.serviceType(), 1000 * 60); four.addResponseTime(agentName2, (short) 3000, 1); return List.of(one, two, three, four); diff --git a/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/histogram/ApplicationTimeHistogramTest.java b/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/histogram/ApplicationTimeHistogramTest.java index ce7277cdb3053..98730374d81b6 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/histogram/ApplicationTimeHistogramTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/histogram/ApplicationTimeHistogramTest.java @@ -63,10 +63,10 @@ public void testViewModel() throws IOException { private List createResponseTime(Application app) { - ResponseTime one = new ResponseTime(app.getName(), app.getServiceType(), 0); + ResponseTime one = new ResponseTime(app.name(), app.serviceType(), 0); one.addResponseTime("test", (short) 1000, 1); - ResponseTime two = new ResponseTime(app.getName(), app.getServiceType(), 1000 * 60); + ResponseTime two = new ResponseTime(app.name(), app.serviceType(), 1000 * 60); two.addResponseTime("test", (short) 3000, 1); return List.of(one, two); @@ -80,7 +80,7 @@ public void testLoadViewModel() { ApplicationTimeHistogramBuilder builder = new ApplicationTimeHistogramBuilder(app, range); - ResponseTime responseTime = new ResponseTime(app.getName(), app.getServiceType(), timestamp); + ResponseTime responseTime = new ResponseTime(app.name(), app.serviceType(), timestamp); responseTime.addResponseTime("test", (short) 1000, 1); List responseHistogramList = List.of(responseTime); diff --git a/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/map/LinkSelectorTestBase.java b/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/map/LinkSelectorTestBase.java index 76418e8c5cbbf..0fa84c190b251 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/map/LinkSelectorTestBase.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/map/LinkSelectorTestBase.java @@ -260,8 +260,8 @@ public void testCaller_rpc() { List callDatas = List.copyOf(linkData_A_B.getLinkCallDataMap().getLinkDataList()); assertThat(callDatas).hasSize(1); LinkCallData callData = callDatas.get(0); - assertEquals(rpcUri, callData.getTarget().getName()); - assertEquals(testRpcServiceType, callData.getTarget().getServiceType()); + assertEquals(rpcUri, callData.getTarget().name()); + assertEquals(testRpcServiceType, callData.getTarget().serviceType()); } @Test @@ -394,14 +394,14 @@ public void testVirtual() { List callData_A_Bs = List.copyOf(linkData_A_B.getLinkCallDataMap().getLinkDataList()); assertThat(callData_A_Bs).hasSize(1); LinkCallData callData_A_B = callData_A_Bs.get(0); - assertEquals(rpcUri, callData_A_B.getTarget().getName()); - assertEquals(testRpcServiceType, callData_A_B.getTarget().getServiceType()); + assertEquals(rpcUri, callData_A_B.getTarget().name()); + assertEquals(testRpcServiceType, callData_A_B.getTarget().serviceType()); List callData_A_Cs = List.copyOf(linkData_A_C.getLinkCallDataMap().getLinkDataList()); assertThat(callData_A_Cs).hasSize(1); LinkCallData callData_A_C = callData_A_Cs.get(0); - assertEquals(rpcUri, callData_A_C.getTarget().getName()); - assertEquals(testRpcServiceType, callData_A_C.getTarget().getServiceType()); + assertEquals(rpcUri, callData_A_C.getTarget().name()); + assertEquals(testRpcServiceType, callData_A_C.getTarget().serviceType()); } @Test diff --git a/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/service/FilteredMapServiceImplTest.java b/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/service/FilteredMapServiceImplTest.java index e7c7cbb4b6380..a006f0d398890 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/service/FilteredMapServiceImplTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/service/FilteredMapServiceImplTest.java @@ -36,11 +36,11 @@ import com.navercorp.pinpoint.web.applicationmap.link.Link; import com.navercorp.pinpoint.web.applicationmap.nodes.Node; import com.navercorp.pinpoint.web.component.ApplicationFactory; -import com.navercorp.pinpoint.web.dao.ApplicationTraceIndexDao; import com.navercorp.pinpoint.web.dao.TraceDao; import com.navercorp.pinpoint.web.filter.Filter; import com.navercorp.pinpoint.web.hyperlink.HyperLinkFactory; import com.navercorp.pinpoint.web.service.AgentInfoService; +import com.navercorp.pinpoint.web.service.ApplicationTraceIndexService; import com.navercorp.pinpoint.web.service.ServerInstanceDatasourceService; import com.navercorp.pinpoint.web.util.TimeWindow; import com.navercorp.pinpoint.web.util.TimeWindowDownSampler; @@ -95,7 +95,7 @@ public class FilteredMapServiceImplTest { private TraceDao traceDao; @Mock - private ApplicationTraceIndexDao applicationTraceIndexDao; + private ApplicationTraceIndexService applicationTraceIndexService; @Mock private ApplicationFactory applicationFactory; @@ -141,7 +141,7 @@ public void init() { return new AgentInfoServerGroupListDataSource(agentInfoService, HyperLinkFactory.empty()); }); - filteredMapService = new FilteredMapServiceImpl(traceDao, applicationTraceIndexDao, + filteredMapService = new FilteredMapServiceImpl(traceDao, applicationTraceIndexService, registry, applicationFactory, serverInstanceDatasourceService, Optional.empty(), applicationMapBuilderFactory); } @@ -214,7 +214,7 @@ public void twoTier() { assertThat(nodes).hasSize(4); for (Node node : nodes) { Application application = node.getApplication(); - if (application.getName().equals("ROOT_APP") && application.getServiceType().getCode() == TestTraceUtils.USER_TYPE_CODE) { + if (application.name().equals("ROOT_APP") && application.serviceType().getCode() == TestTraceUtils.USER_TYPE_CODE) { // USER node NodeHistogram nodeHistogram = node.getNodeHistogram(); // histogram @@ -231,7 +231,7 @@ public void twoTier() { assertTimeHistogram(applicationTimeHistogram, histogramSchema.getFastSlot(), expectedTimeCounts); AgentResponseTimeViewModelList agentTimeHistogram = nodeHistogram.getAgentTimeHistogram(TimeHistogramFormat.V1); Assertions.assertTrue(agentTimeHistogram.getAgentResponseTimeViewModelList().isEmpty()); - } else if (application.getName().equals("ROOT_APP") && application.getServiceType().getCode() == TestTraceUtils.TEST_STAND_ALONE_TYPE_CODE) { + } else if (application.name().equals("ROOT_APP") && application.serviceType().getCode() == TestTraceUtils.TEST_STAND_ALONE_TYPE_CODE) { // ROOT_APP node NodeHistogram nodeHistogram = node.getNodeHistogram(); // histogram @@ -248,7 +248,7 @@ public void twoTier() { assertTimeHistogram(applicationTimeHistogram, histogramSchema.getFastSlot(), expectedTimeCounts); AgentResponseTimeViewModelList agentTimeHistogram = nodeHistogram.getAgentTimeHistogram(TimeHistogramFormat.V1); assertAgentTimeHistogram(agentTimeHistogram.getAgentResponseTimeViewModelList(), "root-agent", histogramSchema.getFastSlot(), expectedTimeCounts); - } else if (application.getName().equals("APP_A") && application.getServiceType().getCode() == TestTraceUtils.TEST_STAND_ALONE_TYPE_CODE) { + } else if (application.name().equals("APP_A") && application.serviceType().getCode() == TestTraceUtils.TEST_STAND_ALONE_TYPE_CODE) { // APP_A node NodeHistogram nodeHistogram = node.getNodeHistogram(); // histogram @@ -265,7 +265,7 @@ public void twoTier() { assertTimeHistogram(applicationTimeHistogram, histogramSchema.getFastSlot(), expectedTimeCounts); AgentResponseTimeViewModelList agentTimeHistogram = nodeHistogram.getAgentTimeHistogram(TimeHistogramFormat.V1); assertAgentTimeHistogram(agentTimeHistogram.getAgentResponseTimeViewModelList(), "app-a", histogramSchema.getFastSlot(), expectedTimeCounts); - } else if (application.getName().equals("CacheName") && application.getServiceType().getCode() == TestTraceUtils.CACHE_TYPE_CODE) { + } else if (application.name().equals("CacheName") && application.serviceType().getCode() == TestTraceUtils.CACHE_TYPE_CODE) { // CACHE node NodeHistogram nodeHistogram = node.getNodeHistogram(); // histogram @@ -292,39 +292,39 @@ public void twoTier() { for (Link link : links) { Application fromApplication = link.getFrom().getApplication(); Application toApplication = link.getTo().getApplication(); - if ((fromApplication.getName().equals("ROOT_APP") && fromApplication.getServiceType().getCode() == TestTraceUtils.USER_TYPE_CODE) && - (toApplication.getName().equals("ROOT_APP") && toApplication.getServiceType().getCode() == TestTraceUtils.TEST_STAND_ALONE_TYPE_CODE)) { + if ((fromApplication.name().equals("ROOT_APP") && fromApplication.serviceType().getCode() == TestTraceUtils.USER_TYPE_CODE) && + (toApplication.name().equals("ROOT_APP") && toApplication.serviceType().getCode() == TestTraceUtils.TEST_STAND_ALONE_TYPE_CODE)) { // histogram Histogram histogram = link.getHistogram(); assertHistogram(histogram, 1, 0, 0, 0, 0); // time histogram List linkApplicationTimeSeriesHistogram = link.getLinkApplicationTimeSeriesHistogram(); - HistogramSchema targetHistogramSchema = toApplication.getServiceType().getHistogramSchema(); + HistogramSchema targetHistogramSchema = toApplication.serviceType().getHistogramSchema(); List expectedTimeCounts = List.of( new ResponseTimeViewModel.TimeCount(timeWindow.refineTimestamp(rootSpanCollectorAcceptTime), 1) ); assertTimeHistogram(linkApplicationTimeSeriesHistogram, targetHistogramSchema.getFastSlot(), expectedTimeCounts); - } else if ((fromApplication.getName().equals("ROOT_APP") && fromApplication.getServiceType().getCode() == TestTraceUtils.TEST_STAND_ALONE_TYPE_CODE) && - (toApplication.getName().equals("APP_A") && toApplication.getServiceType().getCode() == TestTraceUtils.TEST_STAND_ALONE_TYPE_CODE)) { + } else if ((fromApplication.name().equals("ROOT_APP") && fromApplication.serviceType().getCode() == TestTraceUtils.TEST_STAND_ALONE_TYPE_CODE) && + (toApplication.name().equals("APP_A") && toApplication.serviceType().getCode() == TestTraceUtils.TEST_STAND_ALONE_TYPE_CODE)) { // histogram Histogram histogram = link.getHistogram(); assertHistogram(histogram, 1, 0, 0, 0, 0); // time histogram List linkApplicationTimeSeriesHistogram = link.getLinkApplicationTimeSeriesHistogram(); - HistogramSchema targetHistogramSchema = toApplication.getServiceType().getHistogramSchema(); + HistogramSchema targetHistogramSchema = toApplication.serviceType().getHistogramSchema(); List expectedTimeCounts = List.of( new ResponseTimeViewModel.TimeCount(timeWindow.refineTimestamp(appASpanCollectorAcceptTime), 1) ); assertTimeHistogram(linkApplicationTimeSeriesHistogram, targetHistogramSchema.getFastSlot(), expectedTimeCounts); - } else if ((fromApplication.getName().equals("APP_A") && fromApplication.getServiceType().getCode() == TestTraceUtils.TEST_STAND_ALONE_TYPE_CODE) && - (toApplication.getName().equals("CacheName") && toApplication.getServiceType().getCode() == TestTraceUtils.CACHE_TYPE_CODE + } else if ((fromApplication.name().equals("APP_A") && fromApplication.serviceType().getCode() == TestTraceUtils.TEST_STAND_ALONE_TYPE_CODE) && + (toApplication.name().equals("CacheName") && toApplication.serviceType().getCode() == TestTraceUtils.CACHE_TYPE_CODE )) { // histogram Histogram histogram = link.getHistogram(); assertHistogram(histogram, 0, 1, 0, 0, 0); // time histogram List linkApplicationTimeSeriesHistogram = link.getLinkApplicationTimeSeriesHistogram(); - HistogramSchema targetHistogramSchema = toApplication.getServiceType().getHistogramSchema(); + HistogramSchema targetHistogramSchema = toApplication.serviceType().getHistogramSchema(); List expectedTimeCounts = List.of( new ResponseTimeViewModel.TimeCount(timeWindow.refineTimestamp(appASpanStartTime + cacheStartElapsed), 1) ); diff --git a/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/service/ResponseTimeHistogramServiceImplTest.java b/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/service/ResponseTimeHistogramServiceImplTest.java index 577e4bce81468..dacca401e52c8 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/service/ResponseTimeHistogramServiceImplTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/service/ResponseTimeHistogramServiceImplTest.java @@ -137,8 +137,8 @@ public void selectNodeHistogramWASDataTest() { } private ResponseTime createResponseTime(Application application, long timestamp) { - ResponseTime responseTime = new ResponseTime(application.getName(), application.getServiceType(), timestamp); - HistogramSchema schema = application.getServiceType().getHistogramSchema(); + ResponseTime responseTime = new ResponseTime(application.name(), application.serviceType(), timestamp); + HistogramSchema schema = application.serviceType().getHistogramSchema(); responseTime.addResponseTime("agentId", schema.getFastSlot().getSlotTime(), 1L); responseTime.addResponseTime("agentId", schema.getNormalSlot().getSlotTime(), 2L); responseTime.addResponseTime("agentId", schema.getSlowSlot().getSlotTime(), 3L); @@ -581,8 +581,8 @@ public LinkDataDuplexMap select(List sourceApplications, Range rang private LinkData createLinkData(Application fromApplication, Application toApplication, long timestamp) { LinkData linkData = new LinkData(fromApplication, toApplication); - final ServiceType sourceServiceType = fromApplication.getServiceType(); - final ServiceType destinationServiceType = toApplication.getServiceType(); + final ServiceType sourceServiceType = fromApplication.serviceType(); + final ServiceType destinationServiceType = toApplication.serviceType(); final HistogramSchema schema = ServiceTypeCategory.findCategory(destinationServiceType.getCode()).getHistogramSchema(); linkData.addLinkData("sourceAgentId", sourceServiceType, "destinationAgentId", destinationServiceType, timestamp, schema.getFastSlot().getSlotTime(), 1L); diff --git a/web/src/test/java/com/navercorp/pinpoint/web/dao/hbase/SpanQueryBuilderTest.java b/web/src/test/java/com/navercorp/pinpoint/web/dao/hbase/SpanQueryBuilderTest.java index 4a78670a14542..3be4f22a18d1d 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/dao/hbase/SpanQueryBuilderTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/dao/hbase/SpanQueryBuilderTest.java @@ -29,7 +29,7 @@ public void spanQuery_build() { span.setTransactionId(new TransactionId("agent", 1, 2)); span.setCollectorAcceptTime(100); span.setElapsed(200); - span.setApplicationId("appName"); + span.setApplicationName("appName"); span.setAgentId("agentId"); Assertions.assertEquals(spanQuery.getTransactionId(), span.getTransactionId()); @@ -48,7 +48,7 @@ public void spanFilter() { span.setTransactionId(txId); span.setCollectorAcceptTime(100); span.setElapsed(200); - span.setApplicationId("appName"); + span.setApplicationName("appName"); Assertions.assertTrue(filter.test(span)); } diff --git a/web/src/test/java/com/navercorp/pinpoint/web/dao/memory/MemoryAlarmDao.java b/web/src/test/java/com/navercorp/pinpoint/web/dao/memory/MemoryAlarmDao.java index 506698eb83fd9..f6ccfdb3fc034 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/dao/memory/MemoryAlarmDao.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/dao/memory/MemoryAlarmDao.java @@ -90,7 +90,7 @@ public List selectRuleByApplicationId(String applicationId) { List ruleList = new ArrayList<>(); for (Entry entry : alarmRule.entrySet()) { - if (entry.getValue().getApplicationId().equals(applicationId)) { + if (entry.getValue().getApplicationName().equals(applicationId)) { ruleList.add(entry.getValue()); } } @@ -103,7 +103,7 @@ public List selectApplicationId() { Set ids = new HashSet<>(); for (Entry entry : alarmRule.entrySet()) { - ids.add(entry.getValue().getApplicationId()); + ids.add(entry.getValue().getApplicationName()); } return new ArrayList<>(ids); diff --git a/web/src/test/java/com/navercorp/pinpoint/web/filter/LinkFilterTest.java b/web/src/test/java/com/navercorp/pinpoint/web/filter/LinkFilterTest.java index 54c02c4d8cc8f..72e7cfe150156 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/filter/LinkFilterTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/filter/LinkFilterTest.java @@ -74,20 +74,20 @@ public void fromToFilterTest() { logger.debug(linkFilter.toString()); SpanBo fromSpanBo = new SpanBo(); - fromSpanBo.setApplicationId("APP_A"); + fromSpanBo.setApplicationName("APP_A"); fromSpanBo.setServiceType(tomcatServiceType); fromSpanBo.setAgentId("AGENT_A"); fromSpanBo.setSpanId(100); SpanBo toSpanBO = new SpanBo(); - toSpanBO.setApplicationId("APP_B"); + toSpanBO.setApplicationName("APP_B"); toSpanBO.setServiceType(tomcatServiceType); toSpanBO.setAgentId("AGENT_B"); toSpanBO.setParentSpanId(100); SpanBo spanBoC = new SpanBo(); - spanBoC.setApplicationId("APP_C"); + spanBoC.setApplicationName("APP_C"); spanBoC.setServiceType(tomcatServiceType); spanBoC.setAgentId("AGENT_C"); @@ -114,20 +114,20 @@ public void fromToFilterAgentTest() { logger.debug(linkFilter.toString()); SpanBo fromSpanBo = new SpanBo(); - fromSpanBo.setApplicationId("APP_A"); + fromSpanBo.setApplicationName("APP_A"); fromSpanBo.setServiceType(tomcatServiceType); fromSpanBo.setAgentId("AGENT_A"); fromSpanBo.setSpanId(100); SpanBo toSpanBO = new SpanBo(); - toSpanBO.setApplicationId("APP_B"); + toSpanBO.setApplicationName("APP_B"); toSpanBO.setServiceType(tomcatServiceType); toSpanBO.setAgentId("AGENT_B"); toSpanBO.setParentSpanId(100); SpanBo spanBoC = new SpanBo(); - spanBoC.setApplicationId("APP_C"); + spanBoC.setApplicationName("APP_C"); spanBoC.setServiceType(tomcatServiceType); spanBoC.setAgentId("AGENT_C"); @@ -155,17 +155,17 @@ public void userToWasFilter() { SpanBo user_appA = new SpanBo(); user_appA.setSpanId(1); user_appA.setParentSpanId(-1); - user_appA.setApplicationId("APP_A"); + user_appA.setApplicationName("APP_A"); user_appA.setApplicationServiceType(tomcat.getCode()); SpanBo appA_appB = new SpanBo(); appA_appB.setSpanId(2); appA_appB.setParentSpanId(1); - appA_appB.setApplicationId("APP_B"); + appA_appB.setApplicationName("APP_B"); appA_appB.setApplicationServiceType(tomcat.getCode()); SpanBo appB_appA = new SpanBo(); appB_appA.setSpanId(3); appB_appA.setParentSpanId(2); - appB_appA.setApplicationId("APP_A"); + appB_appA.setApplicationName("APP_A"); appB_appA.setApplicationServiceType(tomcat.getCode()); Assertions.assertTrue(linkFilter.include(List.of(user_appA))); @@ -203,7 +203,7 @@ public void wasToUnknownFilter() { SpanBo spanBo = new SpanBo(); spanBo.setSpanId(1); spanBo.setParentSpanId(-1); - spanBo.setApplicationId("APP_A"); + spanBo.setApplicationName("APP_A"); spanBo.setApplicationServiceType(tomcat.getCode()); Assertions.assertFalse(linkFilter.include(List.of(spanBo))); @@ -237,12 +237,12 @@ public void wasToWasFilter_perfectMatch() { SpanBo user_appA = new SpanBo(); user_appA.setSpanId(1); user_appA.setParentSpanId(-1); - user_appA.setApplicationId("APP_A"); + user_appA.setApplicationName("APP_A"); user_appA.setApplicationServiceType(tomcat.getCode()); SpanBo appA_appB = new SpanBo(); appA_appB.setSpanId(2); appA_appB.setParentSpanId(1); - appA_appB.setApplicationId("APP_B"); + appA_appB.setApplicationName("APP_B"); appA_appB.setApplicationServiceType(tomcat.getCode()); Assertions.assertTrue(linkFilter.include(List.of(user_appA, appA_appB))); } @@ -267,12 +267,12 @@ public void wasToWasFilter_noMatch() { SpanBo user_appC = new SpanBo(); user_appC.setSpanId(1); user_appC.setParentSpanId(-1); - user_appC.setApplicationId("APP_C"); + user_appC.setApplicationName("APP_C"); user_appC.setApplicationServiceType(tomcat.getCode()); SpanBo appC_appB = new SpanBo(); appC_appB.setSpanId(2); appC_appB.setParentSpanId(1); - appC_appB.setApplicationId("APP_B"); + appC_appB.setApplicationName("APP_B"); appC_appB.setApplicationServiceType(tomcat.getCode()); Assertions.assertFalse(linkFilter.include(List.of(user_appC, appC_appB))); @@ -280,12 +280,12 @@ public void wasToWasFilter_noMatch() { SpanBo user_appA = new SpanBo(); user_appA.setSpanId(1); user_appA.setParentSpanId(-1); - user_appA.setApplicationId("APP_A"); + user_appA.setApplicationName("APP_A"); user_appA.setApplicationServiceType(tomcat.getCode()); SpanBo appA_appC = new SpanBo(); appA_appC.setSpanId(2); appA_appC.setParentSpanId(1); - appA_appC.setApplicationId("APP_C"); + appA_appC.setApplicationName("APP_C"); appA_appC.setApplicationServiceType(tomcat.getCode()); Assertions.assertFalse(linkFilter.include(List.of(user_appA, appA_appC))); } @@ -323,7 +323,7 @@ public void wasToWasFilter_noMatch_missingReceivingSpan() { SpanBo fromSpan = new SpanBo(); fromSpan.setSpanId(1); fromSpan.setParentSpanId(-1); - fromSpan.setApplicationId("APP_A"); + fromSpan.setApplicationName("APP_A"); fromSpan.setApplicationServiceType(tomcat.getCode()); AnnotationBo rpcAnnotation = AnnotationBo.of(RPC_ANNOTATION_CODE, rpcUrl); SpanEventBo rpcSpanEvent = new SpanEventBo(); @@ -372,7 +372,7 @@ public void wasToBackendFilter() { logger.debug(linkFilter.toString()); SpanBo matchingSpan = new SpanBo(); - matchingSpan.setApplicationId("APP_A"); + matchingSpan.setApplicationName("APP_A"); matchingSpan.setApplicationServiceType(tomcat.getCode()); SpanEventBo spanEventDestinationA = new SpanEventBo(); spanEventDestinationA.setDestinationId(destinationA); @@ -381,7 +381,7 @@ public void wasToBackendFilter() { Assertions.assertTrue(linkFilter.include(List.of(matchingSpan))); SpanBo unmatchingSpan = new SpanBo(); - unmatchingSpan.setApplicationId("APP_A"); + unmatchingSpan.setApplicationName("APP_A"); unmatchingSpan.setApplicationServiceType(tomcat.getCode()); SpanEventBo spanEventDestinationB = new SpanEventBo(); spanEventDestinationB.setDestinationId(destinationB); @@ -392,7 +392,7 @@ public void wasToBackendFilter() { Assertions.assertTrue(linkFilter.include(List.of(matchingSpan, unmatchingSpan))); SpanBo bothSpan = new SpanBo(); - bothSpan.setApplicationId("APP_A"); + bothSpan.setApplicationName("APP_A"); bothSpan.setApplicationServiceType(tomcat.getCode()); bothSpan.addSpanEventBoList(List.of(spanEventDestinationA, spanEventDestinationB)); Assertions.assertTrue(linkFilter.include(List.of(bothSpan))); @@ -419,7 +419,7 @@ public void wasToQueueFilter() { logger.debug(linkFilter.toString()); SpanBo matchingSpan = new SpanBo(); - matchingSpan.setApplicationId("APP_A"); + matchingSpan.setApplicationName("APP_A"); matchingSpan.setApplicationServiceType(tomcat.getCode()); SpanEventBo spanEventDestinationA = new SpanEventBo(); spanEventDestinationA.setDestinationId(messageQueueA); @@ -428,7 +428,7 @@ public void wasToQueueFilter() { Assertions.assertTrue(linkFilter.include(List.of(matchingSpan))); SpanBo unmatchingSpan = new SpanBo(); - unmatchingSpan.setApplicationId("APP_A"); + unmatchingSpan.setApplicationName("APP_A"); unmatchingSpan.setApplicationServiceType(tomcat.getCode()); SpanEventBo spanEventDestinationB = new SpanEventBo(); spanEventDestinationB.setDestinationId(messageQueueB); @@ -439,7 +439,7 @@ public void wasToQueueFilter() { Assertions.assertTrue(linkFilter.include(List.of(matchingSpan, unmatchingSpan))); SpanBo bothSpan = new SpanBo(); - bothSpan.setApplicationId("APP_A"); + bothSpan.setApplicationName("APP_A"); bothSpan.setApplicationServiceType(tomcat.getCode()); bothSpan.addSpanEventBoList(List.of(spanEventDestinationA, spanEventDestinationB)); Assertions.assertTrue(linkFilter.include(List.of(bothSpan))); @@ -466,13 +466,13 @@ public void queueToWasFilter() { logger.debug(linkFilter.toString()); SpanBo matchingSpan = new SpanBo(); - matchingSpan.setApplicationId("APP_A"); + matchingSpan.setApplicationName("APP_A"); matchingSpan.setApplicationServiceType(tomcat.getCode()); matchingSpan.setAcceptorHost(messageQueueA); Assertions.assertTrue(linkFilter.include(List.of(matchingSpan))); SpanBo unmatchingSpan = new SpanBo(); - unmatchingSpan.setApplicationId("APP_A"); + unmatchingSpan.setApplicationName("APP_A"); unmatchingSpan.setApplicationServiceType(tomcat.getCode()); unmatchingSpan.setAcceptorHost(messageQueueB); Assertions.assertFalse(linkFilter.include(List.of(unmatchingSpan))); diff --git a/web/src/test/java/com/navercorp/pinpoint/web/mapper/FilteringSpanDecoderTest.java b/web/src/test/java/com/navercorp/pinpoint/web/mapper/FilteringSpanDecoderTest.java index b7ff32066a7df..8535bbd631dcc 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/mapper/FilteringSpanDecoderTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/mapper/FilteringSpanDecoderTest.java @@ -130,7 +130,7 @@ private GetTraceInfo createGetTraceInfo() { } private GetTraceInfo createGetTraceInfo(SpanBo spanBo) { - return new GetTraceInfo(spanBo.getTransactionId(), new SpanHint(spanBo.getCollectorAcceptTime(), spanBo.getElapsed(), spanBo.getApplicationId())); + return new GetTraceInfo(spanBo.getTransactionId(), new SpanHint(spanBo.getCollectorAcceptTime(), spanBo.getElapsed(), spanBo.getApplicationName())); } private SpanDecoder createMockSpanDecoder() { @@ -157,7 +157,7 @@ private static SpanBo createSpanBo(String applicationId) { spanBo.setElapsed(createElapsed()); if (applicationId != null) { - spanBo.setApplicationId("appName"); + spanBo.setApplicationName("appName"); } return spanBo; diff --git a/web/src/test/java/com/navercorp/pinpoint/web/service/AdminServiceImplTest.java b/web/src/test/java/com/navercorp/pinpoint/web/service/AdminServiceImplTest.java index 68030252e201f..d9aeb934adfcd 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/service/AdminServiceImplTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/service/AdminServiceImplTest.java @@ -1,7 +1,6 @@ package com.navercorp.pinpoint.web.service; import com.navercorp.pinpoint.common.trace.ServiceType; -import com.navercorp.pinpoint.web.dao.ApplicationIndexDao; import com.navercorp.pinpoint.web.vo.Application; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -11,10 +10,10 @@ import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.stream.Collectors; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.verify; @@ -31,64 +30,57 @@ public class AdminServiceImplTest { final String APPLICATION_NAME2 = "TEST_APP2"; final String APPLICATION_NAME3 = "TEST_APP3"; + final UUID APPLICATION_UUID1 = new UUID(1, 1); + final UUID APPLICATION_UUID2 = new UUID(2, 2); + final UUID APPLICATION_UUID3 = new UUID(3, 3); + AdminService adminService; @Mock - ApplicationIndexDao applicationIndexDao; + ApplicationInfoService applicationInfoService; + + @Mock + ApplicationService applicationService; @Mock AgentInfoService agentInfoService; @BeforeEach public void setUp() { - adminService = new AdminServiceImpl(applicationIndexDao, agentInfoService); - } - - @Test - public void constructorRequireNonNullTest() { - - assertThatThrownBy(() -> new AdminServiceImpl(null, agentInfoService)) - .isInstanceOf(NullPointerException.class) - .hasMessage("applicationIndexDao"); - - assertThatThrownBy(() -> new AdminServiceImpl(applicationIndexDao, null)) - .isInstanceOf(NullPointerException.class) - .hasMessage("agentInfoService"); - - assertThatThrownBy(() -> new AdminServiceImpl(null, null)) - .isInstanceOf(NullPointerException.class) - .hasMessage("applicationIndexDao"); + adminService = new AdminServiceImpl(applicationInfoService, applicationService, agentInfoService); } @Test public void removeApplicationName() { // given - doNothing().when(applicationIndexDao).deleteApplicationName(APPLICATION_NAME1); + when(applicationInfoService.getApplicationId(APPLICATION_NAME1)).thenReturn(APPLICATION_UUID1); + doNothing().when(applicationService).deleteApplication(APPLICATION_UUID1); // when adminService.removeApplicationName(APPLICATION_NAME1); // then - verify(applicationIndexDao).deleteApplicationName(APPLICATION_NAME1); + verify(applicationService).deleteApplication(APPLICATION_UUID1); } @Test public void removeAgentId() { // given - doNothing().when(applicationIndexDao).deleteAgentId(APPLICATION_NAME1, AGENT_ID1); + when(applicationInfoService.getApplicationId(APPLICATION_NAME1)).thenReturn(APPLICATION_UUID1); + doNothing().when(applicationService).deleteAgent(APPLICATION_UUID1, AGENT_ID1); // when adminService.removeAgentId(APPLICATION_NAME1, AGENT_ID1); // then - verify(applicationIndexDao).deleteAgentId(APPLICATION_NAME1, AGENT_ID1); + verify(applicationService).deleteAgent(APPLICATION_UUID1, AGENT_ID1); } @Test public void whenApplicationDoesNotHaveAnyAgentIdsGetAgentIdMapReturnsEmptyMap() { // given List emptyApplicationList = List.of(); - when(applicationIndexDao.selectAllApplicationNames()).thenReturn(emptyApplicationList); + when(applicationService.getApplications()).thenReturn(emptyApplicationList); // when Map> agentIdMap = adminService.getAgentIdMap(); @@ -100,17 +92,17 @@ public void whenApplicationDoesNotHaveAnyAgentIdsGetAgentIdMapReturnsEmptyMap() @Test public void testDuplicateAgentIdMap() { // given - when(applicationIndexDao.selectAllApplicationNames()) + when(applicationService.getApplications()) .thenReturn(List.of( - new Application(APPLICATION_NAME1, ServiceType.UNDEFINED), - new Application(APPLICATION_NAME2, ServiceType.UNDEFINED), - new Application(APPLICATION_NAME3, ServiceType.UNDEFINED))); + new Application(APPLICATION_UUID1, APPLICATION_NAME1, ServiceType.UNDEFINED), + new Application(APPLICATION_UUID2, APPLICATION_NAME2, ServiceType.UNDEFINED), + new Application(APPLICATION_UUID3, APPLICATION_NAME3, ServiceType.UNDEFINED))); - when(applicationIndexDao.selectAgentIds(eq(APPLICATION_NAME1))) + when(applicationService.getAgents(eq(APPLICATION_UUID1))) .thenReturn(List.of(AGENT_ID1, AGENT_ID2, AGENT_ID3)); - when(applicationIndexDao.selectAgentIds(eq(APPLICATION_NAME2))) + when(applicationService.getAgents(eq(APPLICATION_UUID2))) .thenReturn(List.of(AGENT_ID2, AGENT_ID3)); - when(applicationIndexDao.selectAgentIds(eq(APPLICATION_NAME3))) + when(applicationService.getAgents(eq(APPLICATION_UUID3))) .thenReturn(List.of(AGENT_ID1)); // then @@ -122,13 +114,13 @@ public void testDuplicateAgentIdMap() { assertThat(duplicateAgentIdMap.get(AGENT_ID3)).hasSize(2); // check the application names - List applicationNamesOfAgentId1 = duplicateAgentIdMap.get(AGENT_ID1).stream().map(Application::getName).collect(Collectors.toList()); + List applicationNamesOfAgentId1 = duplicateAgentIdMap.get(AGENT_ID1).stream().map(Application::name).collect(Collectors.toList()); assertThat(applicationNamesOfAgentId1).containsAll(List.of(APPLICATION_NAME1, APPLICATION_NAME3)); - List applicationNamesOfAgentId2 = duplicateAgentIdMap.get(AGENT_ID2).stream().map(Application::getName).collect(Collectors.toList()); + List applicationNamesOfAgentId2 = duplicateAgentIdMap.get(AGENT_ID2).stream().map(Application::name).collect(Collectors.toList()); assertThat(applicationNamesOfAgentId2).containsAll(List.of(APPLICATION_NAME1, APPLICATION_NAME2)); - List applicationNamesOfAgentId3 = duplicateAgentIdMap.get(AGENT_ID3).stream().map(Application::getName).collect(Collectors.toList()); + List applicationNamesOfAgentId3 = duplicateAgentIdMap.get(AGENT_ID3).stream().map(Application::name).collect(Collectors.toList()); assertThat(applicationNamesOfAgentId3).containsAll(List.of(APPLICATION_NAME1, APPLICATION_NAME2)); } 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 19aea6ee45fc5..3b2210f028329 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 @@ -48,7 +48,7 @@ public void mockResponseDao() { } private ResponseTime createResponseTime(long timeStamp) { - ResponseTime responseTime = new ResponseTime(testApplication.getName(), testApplication.getServiceType(), timeStamp); + ResponseTime responseTime = new ResponseTime(testApplication.name(), testApplication.serviceType(), timeStamp); for (String agentId : agentIdList) { responseTime.addResponseTime(agentId, createTestHistogram(1, 2, 3, 4, 5)); } diff --git a/web/src/test/java/com/navercorp/pinpoint/web/service/HeatMapServiceImplTest.java b/web/src/test/java/com/navercorp/pinpoint/web/service/HeatMapServiceImplTest.java index 3ebafa62a4f5a..3932b530b1722 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/service/HeatMapServiceImplTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/service/HeatMapServiceImplTest.java @@ -2,7 +2,6 @@ import com.navercorp.pinpoint.common.profiler.util.TransactionId; import com.navercorp.pinpoint.common.server.bo.SpanBo; -import com.navercorp.pinpoint.web.dao.ApplicationTraceIndexDao; import com.navercorp.pinpoint.web.dao.TraceDao; import com.navercorp.pinpoint.web.scatter.DragAreaQuery; import com.navercorp.pinpoint.web.vo.LimitedScanResult; @@ -35,57 +34,57 @@ public class HeatMapServiceImplTest { @Test public void legacyCompatibilityCheckPassTest() { - ApplicationTraceIndexDao applicationTraceIndexDao = mock(ApplicationTraceIndexDao.class); + ApplicationTraceIndexService applicationTraceIndexService = mock(ApplicationTraceIndexService.class); TraceDao traceDao = mock(TraceDao.class); LimitedScanResult> scanResult = new LimitedScanResult<>(1, dotMataData()); - when(applicationTraceIndexDao.scanScatterDataV2(APPLICATION_NAME, dragAreaQuery, LIMIT)) + when(applicationTraceIndexService.scanScatterDataV2(APPLICATION_NAME, dragAreaQuery, LIMIT)) .thenReturn(scanResult); - HeatMapService heatMapService = new HeatMapServiceImpl(applicationTraceIndexDao, spanService, traceDao); + HeatMapService heatMapService = new HeatMapServiceImpl(applicationTraceIndexService, spanService, traceDao); Assertions.assertSame(scanResult, heatMapService.dragScatterDataV2(APPLICATION_NAME, dragAreaQuery, LIMIT)); } @Test public void legacyCompatibilityCheckTest() { - ApplicationTraceIndexDao applicationTraceIndexDao = mock(ApplicationTraceIndexDao.class); + ApplicationTraceIndexService applicationTraceIndexService = mock(ApplicationTraceIndexService.class); TraceDao traceDao = mock(TraceDao.class); LimitedScanResult> scanResult = new LimitedScanResult<>(1, legacyDotMataData()); - when(applicationTraceIndexDao.scanScatterDataV2(APPLICATION_NAME, dragAreaQuery, LIMIT)) + when(applicationTraceIndexService.scanScatterDataV2(APPLICATION_NAME, dragAreaQuery, LIMIT)) .thenReturn(scanResult); when(traceDao.selectSpans(any())).thenReturn(matchingSpanData()); - HeatMapService heatMapService = new HeatMapServiceImpl(applicationTraceIndexDao, spanService, traceDao); + HeatMapService heatMapService = new HeatMapServiceImpl(applicationTraceIndexService, spanService, traceDao); heatMapService.dragScatterDataV2(APPLICATION_NAME, dragAreaQuery, LIMIT); Assertions.assertNotSame(scanResult, heatMapService.dragScatterDataV2(APPLICATION_NAME, dragAreaQuery, LIMIT)); } @Test public void legacyCompatibilityCheckMoreSpanTest() { - ApplicationTraceIndexDao applicationTraceIndexDao = mock(ApplicationTraceIndexDao.class); + ApplicationTraceIndexService applicationTraceIndexService = mock(ApplicationTraceIndexService.class); TraceDao traceDao = mock(TraceDao.class); LimitedScanResult> scanResult = new LimitedScanResult<>(1, legacyDotMataData()); - when(applicationTraceIndexDao.scanScatterDataV2(APPLICATION_NAME, dragAreaQuery, LIMIT)) + when(applicationTraceIndexService.scanScatterDataV2(APPLICATION_NAME, dragAreaQuery, LIMIT)) .thenReturn(scanResult); when(traceDao.selectSpans(any())).thenReturn(moreSpanData()); - HeatMapService heatMapService = new HeatMapServiceImpl(applicationTraceIndexDao, spanService, traceDao); + HeatMapService heatMapService = new HeatMapServiceImpl(applicationTraceIndexService, spanService, traceDao); heatMapService.dragScatterDataV2(APPLICATION_NAME, dragAreaQuery, LIMIT); Assertions.assertNotSame(scanResult, heatMapService.dragScatterDataV2(APPLICATION_NAME, dragAreaQuery, LIMIT)); } @Test public void legacyCompatibilityCheckErrorTest() { - ApplicationTraceIndexDao applicationTraceIndexDao = mock(ApplicationTraceIndexDao.class); + ApplicationTraceIndexService applicationTraceIndexService = mock(ApplicationTraceIndexService.class); TraceDao traceDao = mock(TraceDao.class); LimitedScanResult> scanResult = new LimitedScanResult<>(1, legacyDotMataData()); - when(applicationTraceIndexDao.scanScatterDataV2(APPLICATION_NAME, dragAreaQuery, LIMIT)).thenReturn(scanResult); + when(applicationTraceIndexService.scanScatterDataV2(APPLICATION_NAME, dragAreaQuery, LIMIT)).thenReturn(scanResult); when(traceDao.selectSpans(any())).thenReturn(lessSpanData()); - HeatMapService heatMapService = new HeatMapServiceImpl(applicationTraceIndexDao, spanService, traceDao); + HeatMapService heatMapService = new HeatMapServiceImpl(applicationTraceIndexService, spanService, traceDao); Assertions.assertThrows(IllegalStateException.class, () -> heatMapService.dragScatterDataV2(APPLICATION_NAME, dragAreaQuery, LIMIT)); } diff --git a/web/src/test/java/com/navercorp/pinpoint/web/vo/callstacks/RecordFactoryTest.java b/web/src/test/java/com/navercorp/pinpoint/web/vo/callstacks/RecordFactoryTest.java index c7bb0573cac37..d596b4b225d37 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/vo/callstacks/RecordFactoryTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/vo/callstacks/RecordFactoryTest.java @@ -220,7 +220,7 @@ public void testMakeRecord() { .setVersion(1) .setAgentId("express-node-sample-id") .setAgentName("") - .setApplicationId("express-node-sample-name") + .setApplicationName("express-node-sample-name") .setAgentStartTime(1670293953108L) .setTransactionId(new TransactionId("express-node-sample-id", 1670293953108L, 30)) .setParentSpanId(-1) diff --git a/webhook/src/main/java/com/navercorp/pinpoint/web/webhook/service/WebhookAlarmService.java b/webhook/src/main/java/com/navercorp/pinpoint/web/webhook/service/WebhookAlarmService.java index 36ff3694fc71d..fbebd1f38f2f5 100644 --- a/webhook/src/main/java/com/navercorp/pinpoint/web/webhook/service/WebhookAlarmService.java +++ b/webhook/src/main/java/com/navercorp/pinpoint/web/webhook/service/WebhookAlarmService.java @@ -16,7 +16,7 @@ */ package com.navercorp.pinpoint.web.webhook.service; -import com.navercorp.pinpoint.common.server.alram.event.DeleteRuleEvent; +import com.navercorp.pinpoint.common.server.alarm.event.DeleteRuleEvent; import java.util.List; diff --git a/webhook/src/main/java/com/navercorp/pinpoint/web/webhook/service/WebhookAlarmServiceImpl.java b/webhook/src/main/java/com/navercorp/pinpoint/web/webhook/service/WebhookAlarmServiceImpl.java index 6543ccd3f32b0..eedec04217864 100644 --- a/webhook/src/main/java/com/navercorp/pinpoint/web/webhook/service/WebhookAlarmServiceImpl.java +++ b/webhook/src/main/java/com/navercorp/pinpoint/web/webhook/service/WebhookAlarmServiceImpl.java @@ -17,7 +17,7 @@ package com.navercorp.pinpoint.web.webhook.service; -import com.navercorp.pinpoint.common.server.alram.event.DeleteRuleEvent; +import com.navercorp.pinpoint.common.server.alarm.event.DeleteRuleEvent; import com.navercorp.pinpoint.web.webhook.dao.WebhookSendInfoDao; import com.navercorp.pinpoint.web.webhook.model.WebhookSendInfo; import org.apache.logging.log4j.LogManager;