use of kieker.common.record.flow.trace.operation.BeforeOperationEvent in project iobserve-analysis by research-iobserve.
the class DynamicEventDispatcherTest method initializeRecordSwitch.
/**
* Initialize the record switch test setup.
*/
@Before
public void initializeRecordSwitch() {
this.kiekerMetadataRecords.add(new KiekerMetadataRecord(DynamicEventDispatcherTest.VERSION, DynamicEventDispatcherTest.CONTROLLER_NAME, DynamicEventDispatcherTest.HOSTNAME, DynamicEventDispatcherTest.EXPERIMENT_ID, DynamicEventDispatcherTest.DEBUG_MODE, DynamicEventDispatcherTest.TIME_OFFSET, DynamicEventDispatcherTest.TIME_UNIT, DynamicEventDispatcherTest.NUMBER_OF_RECORDS));
/**
* allocation.
*/
this.allocationRecords.add(new ContainerAllocationEvent(DynamicEventDispatcherTest.URL));
/**
* declare deployment records.
*/
this.deploymentRecords.add(new ServletDeployedEvent(this.time++, DynamicEventDispatcherTest.SERVICE, DynamicEventDispatcherTest.CONTEXT, DynamicEventDispatcherTest.DEPLOYMENT_ID));
this.deploymentRecords.add(new EJBDeployedEvent(this.time++, DynamicEventDispatcherTest.SERVICE, DynamicEventDispatcherTest.CONTEXT, DynamicEventDispatcherTest.DEPLOYMENT_ID));
/**
* geolocation.
*/
this.geolocationRecords.add(new ServerGeoLocation(this.time++, DynamicEventDispatcherTest.COUNTRY_CODE, DynamicEventDispatcherTest.HOSTNAME, DynamicEventDispatcherTest.ADDRESS));
/**
* session event (start).
*/
final SessionStartEvent sessionStartEvent = new SessionStartEvent(this.time++, DynamicEventDispatcherTest.HOSTNAME, DynamicEventDispatcherTest.SESSION_ID);
this.sessionEventRecords.add(sessionStartEvent);
/**
* start trace.
*/
final TraceMetadata traceMetadata = new TraceMetadata(DynamicEventDispatcherTest.TRACE_ID, DynamicEventDispatcherTest.THREAD_ID, DynamicEventDispatcherTest.SESSION_ID, DynamicEventDispatcherTest.HOSTNAME, 0, -1);
this.traceMetadataRecords.add(traceMetadata);
this.flowRecords.add(traceMetadata);
/**
* flow record.
*/
this.flowRecords.add(new BeforeOperationEvent(this.time++, DynamicEventDispatcherTest.TRACE_ID, DynamicEventDispatcherTest.ORDER_INDEX, DynamicEventDispatcherTest.OPERATION_SIGNATURE, DynamicEventDispatcherTest.CLASS_SIGNATURE));
this.flowRecords.add(new AfterOperationEvent(this.time++, DynamicEventDispatcherTest.TRACE_ID, DynamicEventDispatcherTest.ORDER_INDEX + 1, DynamicEventDispatcherTest.OPERATION_SIGNATURE, DynamicEventDispatcherTest.CLASS_SIGNATURE));
/**
* session event (end).
*/
final SessionEndEvent sessionEndEvent = new SessionEndEvent(this.time++, DynamicEventDispatcherTest.HOSTNAME, DynamicEventDispatcherTest.SESSION_ID);
this.sessionEventRecords.add(sessionEndEvent);
/**
* declare undeployment records.
*/
this.undeploymentRecords.add(new ServletUndeployedEvent(this.time++, DynamicEventDispatcherTest.SERVICE, DynamicEventDispatcherTest.CONTEXT, DynamicEventDispatcherTest.DEPLOYMENT_ID));
this.undeploymentRecords.add(new EJBUndeployedEvent(this.time++, DynamicEventDispatcherTest.SERVICE, DynamicEventDispatcherTest.CONTEXT, DynamicEventDispatcherTest.DEPLOYMENT_ID));
/**
* allocation.
*/
this.deallocationRecords.add(new ContainerDeallocationEvent(DynamicEventDispatcherTest.URL));
/**
* other records.
*/
this.otherRecords.add(new GCRecord(this.time++, DynamicEventDispatcherTest.HOSTNAME, DynamicEventDispatcherTest.VM_NAME, DynamicEventDispatcherTest.GC_NAME, DynamicEventDispatcherTest.COLLECTION_COUNT, DynamicEventDispatcherTest.COLLECTION_TIME_MS));
/**
* declare all input record types.
*/
this.inputRecords.addAll(this.kiekerMetadataRecords);
this.inputRecords.addAll(this.allocationRecords);
this.inputRecords.addAll(this.deploymentRecords);
this.inputRecords.addAll(this.geolocationRecords);
this.inputRecords.add(sessionStartEvent);
this.inputRecords.addAll(this.flowRecords);
this.inputRecords.add(sessionEndEvent);
this.inputRecords.addAll(this.undeploymentRecords);
this.inputRecords.addAll(this.deallocationRecords);
this.inputRecords.addAll(this.otherRecords);
}
use of kieker.common.record.flow.trace.operation.BeforeOperationEvent in project iobserve-analysis by research-iobserve.
the class TranslateCallOperationEventsStage method execute.
@Override
protected void execute(final IFlowRecord event) throws Exception {
if (event instanceof CallOperationEvent) {
final CallOperationEvent call = (CallOperationEvent) event;
this.outputPort.send(new BeforeOperationEvent(call.getTimestamp(), call.getTraceId(), call.getOrderIndex(), call.getCalleeOperationSignature(), call.getCalleeClassSignature()));
this.waitingList.add(new AfterOperationEvent(call.getTimestamp() + 1000 * 1000, call.getTraceId(), call.getOrderIndex(), call.getCalleeOperationSignature(), call.getCalleeClassSignature()));
this.sendWaiting(call.getTimestamp());
} else if (event instanceof IEventRecord) {
this.sendWaiting(((IEventRecord) event).getTimestamp());
this.outputPort.send(event);
} else {
this.outputPort.send(event);
}
}
use of kieker.common.record.flow.trace.operation.BeforeOperationEvent in project iobserve-analysis by research-iobserve.
the class SessionAndTraceRegistrationFilter method doFilter.
/**
* Register thread-local session and trace information, executes the given {@link FilterChain}
* and unregisters the session/trace information. If configured, the execution of this filter is
* also logged to the {@link IMonitoringController}. This method returns immediately if
* monitoring is not enabled.
*
* @param request
* The request.
* @param response
* The response.
* @param chain
* The filter chain to be used.
*
* @throws IOException
* on io errors
* @throws ServletException
* on servlet errors
*/
@Override
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
if (SessionAndTraceRegistrationFilter.CTRLINST.isMonitoringEnabled()) {
// if (CTRLINST.isProbeActivated(this.filterOperationSignatureString)) {
final String operationSignature;
final String componentSignature;
final String method;
final String path;
final String sessionId;
String query;
if (request instanceof HttpServletRequest) {
final HttpServletRequest httpRequest = (HttpServletRequest) request;
method = httpRequest.getMethod();
path = httpRequest.getRequestURI().replace('/', '.').substring(1);
sessionId = httpRequest.getSession().getId();
query = httpRequest.getQueryString();
if (query == null) {
query = "";
}
} else {
method = "POST";
path = request.getServletContext().getContextPath().replace('/', '.').substring(1);
sessionId = "<no session>";
query = "";
}
componentSignature = path.replaceAll("\\.[A-Za-z0-9]*$", "");
TraceMetadata trace = SessionAndTraceRegistrationFilter.TRACEREGISTRY.getTrace();
final boolean newTrace = trace == null;
if (newTrace) {
SessionRegistry.INSTANCE.storeThreadLocalSessionId(sessionId);
trace = SessionAndTraceRegistrationFilter.TRACEREGISTRY.registerTrace();
SessionAndTraceRegistrationFilter.CTRLINST.newMonitoringRecord(trace);
}
if ("GET".equals(method)) {
operationSignature = path + "(" + query.replace(';', ':') + ")";
} else if ("POST".equals(method)) {
operationSignature = path + "()";
} else {
chain.doFilter(request, response);
return;
}
final long traceId = trace.getTraceId();
try {
SessionAndTraceRegistrationFilter.CTRLINST.newMonitoringRecord(new BeforeOperationEvent(SessionAndTraceRegistrationFilter.TIMESOURCE.getTime(), traceId, trace.getNextOrderId(), operationSignature, componentSignature));
chain.doFilter(request, response);
SessionAndTraceRegistrationFilter.CTRLINST.newMonitoringRecord(new AfterOperationEvent(SessionAndTraceRegistrationFilter.TIMESOURCE.getTime(), traceId, trace.getNextOrderId(), operationSignature, componentSignature));
} catch (final Throwable th) {
// NOPMD NOCS (catch throw is ok here)
SessionAndTraceRegistrationFilter.CTRLINST.newMonitoringRecord(new AfterOperationFailedEvent(SessionAndTraceRegistrationFilter.TIMESOURCE.getTime(), traceId, trace.getNextOrderId(), operationSignature, componentSignature, th.toString()));
throw new ServletException(th);
} finally {
// is this correct?
SessionAndTraceRegistrationFilter.SESSION_REGISTRY.unsetThreadLocalSessionId();
// Reset the thread-local trace information
if (newTrace) {
// close the trace
SessionAndTraceRegistrationFilter.TRACEREGISTRY.unregisterTrace();
}
}
// } else {
// chain.doFilter(request, response);
// return;
// }
} else {
chain.doFilter(request, response);
}
}
use of kieker.common.record.flow.trace.operation.BeforeOperationEvent in project iobserve-analysis by research-iobserve.
the class SessionAndTraceRegistrationFilterForJPetstoreAttributeCoding method doFilter.
/**
* Register thread-local session and trace information, executes the given {@link FilterChain}
* and unregisters the session/trace information. If configured, the execution of this filter is
* also logged to the {@link IMonitoringController}. This method returns immediately if
* monitoring is not enabled.
*
* @param request
* The request.
* @param response
* The response.
* @param chain
* The filter chain to be used.
*
* @throws IOException
* on io errors
* @throws ServletException
* on servlet errors
*/
@Override
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
if (SessionAndTraceRegistrationFilterForJPetstoreAttributeCoding.CTRLINST.isMonitoringEnabled()) {
// if (CTRLINST.isProbeActivated(this.filterOperationSignatureString)) {
String operationSignature;
final String componentSignature;
final String method;
final String path;
final String sessionId;
final List<CallInformation> callInformations = new ArrayList<>();
String query = null;
String[] queryParameters = null;
if (request instanceof HttpServletRequest) {
final HttpServletRequest httpRequest = (HttpServletRequest) request;
method = httpRequest.getMethod();
final String requestPath = httpRequest.getRequestURI().replace('/', '.').substring(1);
// remove sessionId from request Path
path = requestPath.indexOf(';') >= 0 ? requestPath.substring(0, requestPath.indexOf(';')) : requestPath;
sessionId = httpRequest.getSession().getId();
query = httpRequest.getQueryString();
if (query == null) {
query = "";
} else {
queryParameters = query.split("&");
}
} else {
method = "POST";
path = request.getServletContext().getContextPath().replace('/', '.').substring(1);
sessionId = "<no session>";
query = "";
}
final String trimmedPath = path.replaceAll("\\.[A-Za-z0-9]*$", "");
// final int lastComponentSignatureIndex = trimmedPath.lastIndexOf("actions.");
// lastComponentSignatureIndex < 0 ?
componentSignature = "jpetstore.actions";
// trimmedPath: trimmedPath.substring(0,
// lastComponentSignatureIndex - 1);
TraceMetadata trace = SessionAndTraceRegistrationFilterForJPetstoreAttributeCoding.TRACEREGISTRY.getTrace();
final boolean newTrace = trace == null;
if (newTrace) {
SessionRegistry.INSTANCE.storeThreadLocalSessionId(sessionId);
trace = SessionAndTraceRegistrationFilterForJPetstoreAttributeCoding.TRACEREGISTRY.registerTrace();
SessionAndTraceRegistrationFilterForJPetstoreAttributeCoding.CTRLINST.newMonitoringRecord(trace);
}
if ("GET".equals(method)) {
if (queryParameters != null && queryParameters.length == 2) {
operationSignature = trimmedPath.replaceAll("jpetstore\\.actions\\.", "") + "." + queryParameters[0].replace("=", "") + // "("
"()";
// +
// queryParameters[0]
// +
// ")";
final String[] queryParameterSplit = queryParameters[1].split("=");
final Long code = SessionAndTraceRegistrationFilterForJPetstoreAttributeCoding.codes.containsKey(queryParameterSplit[1]) ? SessionAndTraceRegistrationFilterForJPetstoreAttributeCoding.codes.get(queryParameterSplit[1]).longValue() : -100L;
callInformations.add(new CallInformation(queryParameterSplit[0], code));
} else {
operationSignature = trimmedPath.replaceAll("jpetstore\\.actions\\.", "") + "(" + query.replace(';', ':') + ")";
}
operationSignature = operationSignature.replaceAll("\\.action\\(", "(");
operationSignature = operationSignature.replaceAll("action\\.", "");
} else if ("POST".equals(method)) {
operationSignature = trimmedPath.replaceAll("jpetstore\\.actions\\.", "") + "()";
operationSignature = operationSignature.replaceAll("\\.action\\(", "(");
operationSignature = operationSignature.replaceAll("action\\.", "");
} else {
chain.doFilter(request, response);
return;
}
final long traceId = trace.getTraceId();
try {
// mapps Object to String
final ObjectMapper objectMapper = new ObjectMapper();
SessionAndTraceRegistrationFilterForJPetstoreAttributeCoding.CTRLINST.newMonitoringRecord(new BeforeOperationEvent(SessionAndTraceRegistrationFilterForJPetstoreAttributeCoding.TIMESOURCE.getTime(), traceId, trace.getNextOrderId(), operationSignature, componentSignature));
chain.doFilter(request, response);
SessionAndTraceRegistrationFilterForJPetstoreAttributeCoding.CTRLINST.newMonitoringRecord(new ExtendedAfterOperationEvent(SessionAndTraceRegistrationFilterForJPetstoreAttributeCoding.TIMESOURCE.getTime(), traceId, trace.getNextOrderId(), operationSignature, componentSignature, objectMapper.writeValueAsString(callInformations)));
} catch (final Throwable th) {
// NOPMD NOCS (catch throw is ok here)
SessionAndTraceRegistrationFilterForJPetstoreAttributeCoding.CTRLINST.newMonitoringRecord(new AfterOperationFailedEvent(SessionAndTraceRegistrationFilterForJPetstoreAttributeCoding.TIMESOURCE.getTime(), traceId, trace.getNextOrderId(), operationSignature, componentSignature, th.toString()));
throw new ServletException(th);
} finally {
// is this correct?
SessionAndTraceRegistrationFilterForJPetstoreAttributeCoding.SESSION_REGISTRY.unsetThreadLocalSessionId();
// Reset the thread-local trace information
if (newTrace) {
// close the trace
SessionAndTraceRegistrationFilterForJPetstoreAttributeCoding.TRACEREGISTRY.unregisterTrace();
}
}
// } else {
// chain.doFilter(request, response);
// return;
// }
} else {
chain.doFilter(request, response);
}
}
use of kieker.common.record.flow.trace.operation.BeforeOperationEvent in project iobserve-analysis by research-iobserve.
the class AbstractOperationExecutionWithParameterAspect method staticOperation.
@Around("monitoredOperation() && !this(java.lang.Object) && notWithinKieker()")
public Object staticOperation(final ProceedingJoinPoint thisJoinPoint) throws Throwable {
// (Throwable)
if (!AbstractOperationExecutionWithParameterAspect.CTRLINST.isMonitoringEnabled()) {
return thisJoinPoint.proceed();
}
final Signature sig = thisJoinPoint.getSignature();
final String operationSignature = this.signatureToLongString(sig);
if (!AbstractOperationExecutionWithParameterAspect.CTRLINST.isProbeActivated(operationSignature)) {
return thisJoinPoint.proceed();
}
// common fields
TraceMetadata trace = AbstractOperationExecutionWithParameterAspect.TRACEREGISTRY.getTrace();
final boolean newTrace = trace == null;
if (newTrace) {
trace = AbstractOperationExecutionWithParameterAspect.TRACEREGISTRY.registerTrace();
AbstractOperationExecutionWithParameterAspect.CTRLINST.newMonitoringRecord(trace);
}
final long traceId = trace.getTraceId();
final String clazz = sig.getDeclaringTypeName();
// measure before execution
AbstractOperationExecutionWithParameterAspect.CTRLINST.newMonitoringRecord(new BeforeOperationEvent(AbstractOperationExecutionWithParameterAspect.TIME.getTime(), traceId, trace.getNextOrderId(), operationSignature, clazz));
// execution of the called method
final Object retval;
try {
retval = thisJoinPoint.proceed();
} catch (final Throwable th) {
// NOPMD NOCS (catch throw might ok here)
// measure after failed execution
AbstractOperationExecutionWithParameterAspect.CTRLINST.newMonitoringRecord(new AfterOperationFailedEvent(AbstractOperationExecutionWithParameterAspect.TIME.getTime(), traceId, trace.getNextOrderId(), operationSignature, clazz, th.toString()));
throw th;
} finally {
if (newTrace) {
// close the trace
AbstractOperationExecutionWithParameterAspect.TRACEREGISTRY.unregisterTrace();
}
}
// measure after successful execution
AbstractOperationExecutionWithParameterAspect.CTRLINST.newMonitoringRecord(new AfterOperationEvent(AbstractOperationExecutionWithParameterAspect.TIME.getTime(), traceId, trace.getNextOrderId(), operationSignature, clazz));
return retval;
}
Aggregations