/** * Indicates that application activity has ended. * * @param ex * exception associated with the activity or null if none. * @see ActivityStatus */ public void stop(Throwable ex) { stop((ex != null ? ActivityStatus.EXCEPTION : ActivityStatus.END), (ex != null ? OpCompCode.WARNING : OpCompCode.SUCCESS), ex, 0); }
/** * Track and Trace a given event and associate it with this activity * * @param severity * severity level of the reported message * @param opName * operation name associated with the event message * @param msg * event string message * @param args * argument list, exception passed along side given message * @see OpLevel */ public void tnt(OpLevel severity, String opName, String msg, Object... args) { tnt(severity, OpType.EVENT, opName, null, null, 0, msg, args); }
/** * Track and Trace given {@link com.jkoolcloud.tnt4j.core.Snapshot} instance correlated with current activity * * @param snapshot * snapshot instance to be tracked */ public void tnt(Snapshot snapshot) { if (isStopped()) { throw new IllegalStateException( "Activity already stopped: name=" + getName() + ", id=" + this.getTrackingId()); } add(snapshot); tracker.tnt(snapshot); }
if (!Utils.isEmpty(activity.getGUID())) { jsonString.append(JSON_GUID_LABEL).append(ATTR_SEP); Utils.quote(activity.getGUID(), jsonString).append(ATTR_JSON); if (!Utils.isEmpty(activity.getTrackingId())) { jsonString.append(JSON_TRACK_ID_LABEL).append(ATTR_SEP); Utils.quote(activity.getTrackingId(), jsonString).append(ATTR_JSON); if (!Utils.isEmpty(activity.getSignature())) { jsonString.append(JSON_TRACK_SIGN_LABEL).append(ATTR_SEP); Utils.quote(activity.getSignature(), jsonString).append(ATTR_JSON); if (!Utils.isEmpty(activity.getParentId())) { jsonString.append(JSON_PARENT_TRACK_ID_LABEL).append(ATTR_SEP); Utils.quote(activity.getParentId(), jsonString).append(ATTR_JSON); Utils.quote(StringEscapeUtils.escapeJson(activity.getSource().getName()), jsonString).append(ATTR_JSON); String ssn = getSSN(activity.getSource()); if (!Utils.isEmpty(ssn)) { Utils.quote(StringEscapeUtils.escapeJson(activity.getSource().getFQName()), jsonString).append(ATTR_JSON); if (!Utils.isEmpty(activity.getSource().getUrl())) { String escaped = StringEscapeUtils.escapeJson(activity.getSource().getUrl()); // escape double quote chars jsonString.append(JSON_SOURCE_URL_LABEL).append(ATTR_SEP); Utils.quote(escaped, jsonString).append(ATTR_JSON); Utils.quote(activity.getStatus(), jsonString).append(ATTR_JSON); jsonString.append(JSON_SEVERITY_LABEL).append(ATTR_SEP);
curActivity.setTTL(TNT4JSimulator.getTTL()); curActivity.setSource(source); curActivity.setUser(user == null ? source.getUser() : user); curActivity.setStatus(status == null ? ActivityStatus.BEGIN : status); curActivity.setSeverity(sev == null ? OpLevel.INFO : sev); curActivity.setCompCode(cc == null ? OpCompCode.SUCCESS : cc); if (pid > 0L) { curActivity.setPID(pid); curActivity.setTID(tid); curActivity.setName(name); curActivity.setLocation(loc); curActivity.setResource(res); curActivity.setStatus(status); curActivity.setReasonCode(rc); curActivity.setException(exc); curActivity.setCorrelator(corrs); curActivity.start(curActivityStart); parentActivity.add(curActivity);
String value = entry.getValue(); if (key.equalsIgnoreCase(PARAM_CORRELATOR_LABEL)) { activity.setCorrelator(value); } else if (key.equalsIgnoreCase(PARAM_LOCATION_LABEL)) { activity.setLocation(value); } else if (key.equalsIgnoreCase(PARAM_RESOURCE_LABEL)) { activity.setResource(value); } else if (key.equalsIgnoreCase(PARAM_USER_LABEL)) { activity.setUser(value); } else if (key.equalsIgnoreCase(PARAM_SEVERITY_LABEL)) { activity.setSeverity(OpLevel.valueOf(value)); } else if (key.equalsIgnoreCase(PARAM_EXCEPTION_LABEL)) { activity.setException(value); } else if (key.equalsIgnoreCase(PARAM_BEGIN_LABEL) || key.equals(PARAM_END_LABEL) || key.equals(PARAM_APPL_LABEL)) { snapshot = logger.newSnapshot(category, activity.getName()); activity.addSnapshot(snapshot); if (attrs.get(PARAM_END_LABEL) != null && !activity.isNoop()) { activity.setStatus(ex != null ? ActivityStatus.EXCEPTION : ActivityStatus.END); activity.stop(ex); logger.tnt(activity); } else if (activityName != null) { activity = logger.newActivity(level, activityName.toString()); activity.start(); Object appl = attrs.get(PARAM_APPL_LABEL); if (appl != null) { activity.setSource(logger.getConfiguration().getSourceFactory().newSource(appl.toString()));
@Override public String format(TrackingActivity activity) { StringBuilder msg = new StringBuilder(1024); msg.append("{status: '").append(activity.getStatus()).append("'").append(separator); msg.append("time: '").append(UsecTimestamp.getTimeStamp(timeZone)).append("'").append(separator); msg.append("sev: '").append(activity.getSeverity()).append("'").append(separator); msg.append("type: '").append(activity.getType()).append("'").append(separator); if (!Utils.isEmpty(activity.getResolvedName())) { msg.append("name: '").append(activity.getResolvedName()).append("'"); if (!Utils.isEmpty(activity.getResource())) { msg.append(separator); msg.append("resource: '").append(activity.getResource()).append("'"); if (activity.getElapsedTimeUsec() != 0) { msg.append(separator); msg.append("usec: '").append(activity.getElapsedTimeUsec()).append("'"); if (activity.getWaitTimeUsec() != 0) { msg.append(separator); msg.append("wait.usec: '").append(activity.getWaitTimeUsec()).append("'"); if (activity.getStartTime() != null) { msg.append(separator); msg.append("start.time: '").append(activity.getStartTime()).append("'"); if (activity.getEndTime() != null) { msg.append(separator); msg.append("end.time: '").append(activity.getEndTime()).append("'");
TrackingEvent tev = processEventMessage(attrs, activity, event, frame, eventMsg, ex); boolean reportMetrics = activity.isNoop() && ((ex != null && metricsOnException) || ((lastReport - lastSnapshot) > (metricsFrequency * 1000))); activity.start(tev.getOperation().getStartTime().getTimeUsec()); activity.setResource(frame.getClassName()); activity.setSource(tev.getSource()); // use event's source name for this activity activity.setException(ex); activity.setStatus(ex != null ? ActivityStatus.EXCEPTION : ActivityStatus.END); activity.tnt(tev); activity.stop(tev.getOperation().getEndTime().getTimeUsec(), 0); logger.tnt(activity); lastSnapshot = lastReport; } else if (activity.isNoop()) { activity.tnt(tev); if (activity.getIdCount() >= maxActivitySize) { activity.setException(ex); activity.setStatus(ex != null ? ActivityStatus.EXCEPTION : ActivityStatus.END); activity.stop(); logger.tnt(activity);
private void stopActivity() throws SAXException { long elapsed = simCurrTime.difference(curActivity.getStartTime()); curActivity.stop(simCurrTime, elapsed); TNT4JSimulator.debug(simCurrTime, "Stopped activity " + curActivity.getName() + ", elapsed.usec: " + elapsed); if (curActivity.getStatus() == ActivityStatus.BEGIN) { curActivity.setStatus(ActivityStatus.END); } Tracker tracker = trackers.get(curActivity.getSource().getFQName()); if (tracker != null) { tracker.tnt(curActivity); try { tracker.getEventSink().flush(); } catch (IOException e) { TNT4JSimulator.warn("Failed flushing event sink on stop of activity " + curActivity.getName(), e); } } curActivity = activeActivities.pop(); curActivityStart = null; curTracker = null; }
source = (curEvent != null ? curEvent.getSource() : null); if (source == null) { source = (curActivity != null ? curActivity.getSource() : null); curEvent.setLocation(curActivity.getLocation()); curEvent.getOperation().setPID(curActivity.getPID()); curEvent.getOperation().setTID(curActivity.getTID()); curEvent.getOperation().setResource(curActivity.getResource()); curEvent.getOperation().setUser(curActivity.getUser());
/** * Indicates that application activity has ended. * * @param status * status with which activity ended. * @param ccode * completion code of the activity. * @param ex * exception associated with the activity or null if none. * @param elapsedUsec * elapsed time in microseconds * @see ActivityStatus * @see OpCompCode */ public void stop(ActivityStatus status, OpCompCode ccode, Throwable ex, long elapsedUsec) { setException(ex); setStatus(status); setCompCode(ccode); super.stop(Useconds.CURRENT.get(), elapsedUsec); }
Utils.quote(StringEscapeUtils.escapeJson(activity.getSource().getName()), jsonString).append(ATTR_JSON); String ssn = getSSN(activity.getSource()); if (!Utils.isEmpty(ssn)) { Utils.quote(StringEscapeUtils.escapeJson(activity.getSource().getFQName()), jsonString).append(ATTR_JSON); if (!Utils.isEmpty(activity.getResolvedName())) { String escaped = StringEscapeUtils.escapeJson(activity.getResolvedName()); // escape double quote chars jsonString.append(JSON_OPERATION_LABEL).append(ATTR_SEP); Utils.quote(escaped, jsonString).append(ATTR_JSON); Utils.quote(activity.getType(), jsonString).append(ATTR_JSON); selfSnapshot.add(JSON_ID_COUNT_FIELD, activity.getIdCount()); activity.addSnapshot(selfSnapshot); if (activity.getPropertyCount() > 0) { jsonString.append(JSON_PROPERTIES_LABEL).append(ATTR_SEP).append(ARRAY_START_JSON) .append(itemsToJSON(getProperties(activity))).append(ARRAY_END); if (activity.getSnapshotCount() > 0) { jsonString.append(JSON_SNAPSHOTS_LABEL).append(ATTR_SEP).append(ARRAY_START_JSON) .append(itemsToJSON(getSnapshots(activity))).append(ARRAY_END);
@Override public StackTraceElement[] getStackTrace() { StackTraceElement[] activityTrace = null; LightStack<TrackingActivity> stack = ACTIVITY_STACK.get(); if ((stack != null) && (!stack.isEmpty())) { activityTrace = new StackTraceElement[stack.size()]; int index = 0; for (int i = (stack.size() - 1); i >= 0; i--) { TrackingActivity act = stack.get(i); activityTrace[index++] = new StackTraceElement(act.getSource().getName(), act.getResolvedName(), act.getTrackingId() + ":" + act.getParentId(), act.getIdCount()); } } return activityTrace; }
private void reportActivity(TrackingActivity activity) throws IOException, URISyntaxException { try { if (!eventSink.isOpen()) { eventSink.open(); } } finally { if (!activity.isStopped()) { activity.stop(); } eventSink.log(activity); snapCount.addAndGet(activity.getSnapshotCount()); activityCount.incrementAndGet(); } }
/** * {@inheritDoc} */ @Override public void endElement(String uri, String localName, String name) throws SAXException { if (name.equals(SIM_XML_MSG)) { recordMsgData(); curMsg = null; } else if (name.equals(SIM_XML_SNAPSHOT)) { if (curEvent != null) { curEvent.getOperation().addSnapshot(curSnapshot); } else { curActivity.add(curSnapshot); } curSnapshot = null; } else if (name.equals(SIM_XML_ACTIVITY)) { stopActivity(); } else if (name.equals(SIM_XML_EVENT)) { if (curActivity != null) { curActivity.tnt(curEvent); } else { Tracker tracker = trackers.get(curEvent.getSource().getFQName()); if (tracker != null) { tracker.tnt(curEvent); } } curEvent = null; } curElement = activeElements.pop(); }
/** * Track and Trace a given event and associate it with this activity * * @param severity * severity level of the reported message * @param type * operation type * @param opName * operation name associated with the event message * @param cid * event correlator * @param tag * message tag * @param elapsed * elapsed time of the event in microseconds. * @param msg * event binary message * @param args * argument list, exception passed along side given message * @see OpLevel */ public void tnt(OpLevel severity, OpType type, String opName, String cid, String tag, long elapsed, byte[] msg, Object... args) { TrackingEvent event = tracker.newEvent(severity, type, opName, cid, tag, msg, args); Throwable ex = Utils.getThrowable(args); long elapsedUsec = elapsed > 0 ? elapsed : getLastElapsedUsec(); event.stop(ex != null ? OpCompCode.WARNING : OpCompCode.SUCCESS, 0, ex, Useconds.CURRENT.get(), elapsedUsec); tnt(event); }
/** * This method is called when activity ends Override this method to change behavior when activity ends. This method * also reports activity via configured {@code TrackingLogger} instance conditional upon {{@link #doSample()} * returning true. * * @return elapsed time of the activity in microseconds. */ protected long endActivity() { activity.stop(); if (doSample()) { logger.tnt(activity); } return activity.getElapsedTimeUsec(); }
/** * This method is called when activity is started Override this method to change behavior when activity starts */ protected void startActvity() { activity = logger.newActivity(level, activityName); activity.start(); }
/** * Push an instance of {@link TrackingActivity} on top of the stack. Invoke this when activity starts. The stack is * maintained per thread in thread local. * * @param item * activity to be pushed on the current stack * @return current tracker instance */ protected Tracker push(TrackingActivity item) { if (!keepContext) { return this; } LightStack<TrackingActivity> stack = ACTIVITY_STACK.get(); if (stack == null) { stack = new LightStack<>(); ACTIVITY_STACK.set(stack); } // associate with the parent activity if there is any TrackingActivity parent = stack.peek(null); if (parent != null) { parent.add(item); } stack.push(item); pushCount.incrementAndGet(); return this; }
/** * Track and Trace a given event and associate it with this activity * * @param severity * severity level of the reported message * @param type * operation type * @param opName * operation name associated with the event message * @param cid * event correlator * @param tag * message tag * @param elapsed * elapsed time of the event in microseconds. * @param msg * event string message * @param args * argument list, exception passed along side given message * @see OpLevel */ public void tnt(OpLevel severity, OpType type, String opName, String cid, String tag, long elapsed, String msg, Object... args) { TrackingEvent event = tracker.newEvent(severity, type, opName, cid, tag, msg, args); Throwable ex = Utils.getThrowable(args); long elapsedUsec = elapsed > 0 ? elapsed : getLastElapsedUsec(); event.stop(ex != null ? OpCompCode.WARNING : OpCompCode.SUCCESS, 0, ex, Useconds.CURRENT.get(), elapsedUsec); tnt(event); }