diff --git a/src/main/java/com/profiler/Agent.java b/src/main/java/com/profiler/Agent.java index 734c8faac..e76313eb7 100644 --- a/src/main/java/com/profiler/Agent.java +++ b/src/main/java/com/profiler/Agent.java @@ -30,6 +30,8 @@ public class Agent { private final SystemMonitor systemMonitor; private TraceContext traceContext; + + private DataSender priorityDataSender; private DataSender dataSender; private final String agentId; @@ -54,6 +56,7 @@ public class Agent { this.nodeName = getId("hippo.nodeName", machineName); this.applicationName = getId("hippo.applicationName", "UnknownApplicationName"); + this.priorityDataSender = createDataSender(); this.dataSender = createDataSender(); this.startTime = System.currentTimeMillis(); this.identifier = (short) IDENTIFIER_KEY.nextInt(16); @@ -76,6 +79,7 @@ public class Agent { this.traceContext.setAgentId(this.agentId); this.traceContext.setApplicationId(this.applicationName); + this.traceContext.setPriorityDataSender(this.priorityDataSender); if (profilerConfig.isSamplingElapsedTimeBaseEnable()) { TimeBaseStorageFactory timeBaseStorageFactory = new TimeBaseStorageFactory(this.dataSender, this.profilerConfig); @@ -180,9 +184,9 @@ public class Agent { private void send3(AgentInfo agentInfo) { // 특정 collector가 죽더라도 나머지 collector가 받을수 있도록 일부러 중복해서 3번 보낸다. - this.dataSender.send(agentInfo); - this.dataSender.send(agentInfo); - this.dataSender.send(agentInfo); + this.priorityDataSender.send(agentInfo); + this.priorityDataSender.send(agentInfo); + this.priorityDataSender.send(agentInfo); } public void start() { @@ -214,6 +218,8 @@ public class Agent { send3(agentInfo); // 종료 처리 필요. this.dataSender.stop(); + this.priorityDataSender.stop(); + } } diff --git a/src/main/java/com/profiler/context/TraceContext.java b/src/main/java/com/profiler/context/TraceContext.java index 554a921d3..d89727165 100644 --- a/src/main/java/com/profiler/context/TraceContext.java +++ b/src/main/java/com/profiler/context/TraceContext.java @@ -47,6 +47,8 @@ public class TraceContext { private String applicationId; + private DataSender priorityDataSender; + private StorageFactory storageFactory; private LRUCache sqlCache = new LRUCache(1000); @@ -124,8 +126,8 @@ public class TraceContext { apiMetadata.setApiId(result.getId()); apiMetadata.setApiInfo(methodDescriptor.getApiDescriptor()); apiMetadata.setLine(methodDescriptor.getLineNumber()); - DataSender dataSender = storageFactory.getDataSender(); - dataSender.send(apiMetadata); + + this.priorityDataSender.send(apiMetadata); methodDescriptor.setApiId(result.getId()); } return result.getId(); @@ -156,10 +158,14 @@ public class TraceContext { sqlMetaData.setStartTime(Agent.getInstance().getStartTime()); sqlMetaData.setHashCode(normalizedSql.hashCode()); sqlMetaData.setSql(normalizedSql); - // 다른 우선순위가 더 높은 sender가 존재하면 좋을듯 하다. - this.storageFactory.getDataSender().send(sqlMetaData); + + this.priorityDataSender.send(sqlMetaData); } // hashId그냥 return String에서 까보면 됨. return parsingResult; } + + public void setPriorityDataSender(DataSender priorityDataSender) { + this.priorityDataSender = priorityDataSender; + } }