public TraceAnalysisService(ServerResource server, EndPointAnalyzer endpointAnalyzer, TraceErrorAnalyzer traceErrorAnalyzer, TraceTagAnalyzer traceTagAnalyzer, TopographyAnalysisService topoAnalysisService, TraceSourceAnalysisService traceSourceAnalysisService) { this.serverResolver = new ServerResourceResolver(server); this.errorAnalyzer = traceErrorAnalyzer; this.tagAnalyzer = traceTagAnalyzer; this.topographyAnalysisService = topoAnalysisService; this.endPointAnalyzer = endpointAnalyzer; this.applicationMetadata = ApplicationMetadataCache.getInstance(); this.sourceAnalysisService = traceSourceAnalysisService; }
private void createTraceForEvent(LifecycleEvent event) { ApplicationName applicationName = applicationName(event); String type = event.getType(); try { if (type.equals("after_start")) { applicationMetaData.setLabel(applicationName, label(event)); } if (type.startsWith("before_")) { beforeEvent(type.substring(type.indexOf("_") + 1)); } else if (type.startsWith("after_")) { afterEvent(applicationName); } } catch(Throwable e) { // This can happen when frameBuilder.exit() throws an exception // (for instance with an imbalanced frame stack) log.log(SEVERE, "Exception while logging trace to dispatcher", e); } }
private void afterEvent(ApplicationName applicationName) { if (insightConfig.isContextIgnored(applicationName)) { frameBuilder.dump(); return; } applicationName = applicationMetaData.getApplicationName(applicationName); String application = applicationMetaData.getLabel(applicationName); frameBuilder.setHintIfRoot(FrameBuilder.HINT_APPNAME, applicationName); Operation operation = frameBuilder.peek(); operation.put("application", application) .label("Application Lifecycle: " + application + " " + operation.get("event")); frameBuilder.exit(); }
private Map<ResourceType, Resource> addResources() { TraceSource traceSource = trace.getTraceSource(); ApplicationName appName=trace.getAppName(); String applicationLabel=applicationMetadata.getLabel(appName); ApplicationResource application = new ApplicationResource(appName.makeKey(), applicationLabel); ApplicationEndPointResource endpoint = new ApplicationEndPointResource(appName, endPointAnalysis.getEndPointName(), endPointAnalysis.getResourceLabel(), traceSource); resources.put(APPLICATION, application); resources.put(SERVER, server); resources.put(APPLICATION_SERVER, new ApplicationServerResource(application, server)); resources.put(APPLICATION_END_POINT, endpoint); resources.put(APPLICATION_SERVER_END_POINT, new ApplicationServerEndPointResource(application, server, endpoint, traceSource)); return resources; }
public TraceAnalysis analyze(TraceInterface traceAccess) { Trace trace=traceAccess.asTrace(); ApplicationName trcName=traceAccess.getAppName(), appName=applicationMetadata.getApplicationName(trcName); TraceSource traceSource = sourceAnalysisService != null ? sourceAnalysisService.locateTraceSource(traceAccess) : null; trace.setTraceSource(traceSource); if (!ObjectUtil.typedEquals(trcName, appName)) { if (logger.isDebugEnabled()) { logger.debug("analyze(" + trace + ") modified application " + trcName + " => " + appName); } trace.setAppName(appName); } EndPointAnalysis endPointAnalysis=locateEndPoint(traceAccess); Collection<Resource> extResources=collectExternalResources(traceAccess, endPointAnalysis); List<TraceError> errors=locateErrors(trace); ServerName serverName=(traceAccess instanceof ServerNameCarrier) ? ((ServerNameCarrier) traceAccess).getServer() : trace.getServer() ; ServerResource server=serverResolver.resolve(serverName); TraceAnalysis res=new TraceAnalysis(trace, server, endPointAnalysis, extResources, errors, null); Set<TraceTag> tags=locateTags(traceAccess, (EndPointAwareResource) res.getResource(ResourceType.APPLICATION_SERVER_END_POINT), ListUtil.size(errors) > 0); res.addTags(tags); return res; }
public TraceAnalysis(Trace traceValue, ServerResource sourceServer, EndPointAnalysis endPoint, Collection<Resource> extResources, Collection<TraceError> traceErrors, Collection<TraceTag> tags) { ServerName srcName=sourceServer.getServer(); ServerName trcName=traceValue.getServer(); if (!ObjectUtil.typedEquals(srcName, trcName)) { throw new IllegalArgumentException("Trace server name (" + trcName + ") does not match the source server (" + srcName + ")"); } this.trace = traceValue; this.server = sourceServer; this.endPointAnalysis = endPoint; this.externalResources = extResources; // Create a new TimeRange from the existing one. If the endPoint has a // SelfTimeRange the additional fields will be culled out as an optimization // for memory. this.responseTime = traceValue.getRange(); this.responseTimePoint = dataPointFromRange(responseTime); this.resources = new HashMap<ResourceType, Resource>(); this.traceTags = (ListUtil.size(tags) > 0) ? new HashSet<TraceTag>(tags) : new HashSet<TraceTag>(); this.errors = (ListUtil.size(traceErrors) > 0) ? new ArrayList<TraceError>(traceErrors) : new ArrayList<TraceError>(); this.applicationMetadata = ApplicationMetadataCache.getInstance(); addResources(); }