44import com .github .benmanes .caffeine .cache .Cache ;
55import com .github .benmanes .caffeine .cache .Caffeine ;
66import kieker .common .record .IMonitoringRecord ;
7- import kieker .common .record .flow .trace .TraceMetadata ;
87import kieker .common .record .flow .trace .operation .AbstractOperationEvent ;
98import kieker .common .record .flow .trace .operation .AfterOperationEvent ;
109import kieker .common .record .flow .trace .operation .BeforeOperationEvent ;
@@ -36,7 +35,6 @@ public class KiekerHelper {
3635 private RecordDescriptor recordDescriptor ;
3736 private Cache <MethodDescriptorKey , MethodDescriptor > methodDescriptorCache ;
3837 private Cache <CallsDescriptorKey , CallsDescriptor > callsDescriptorCache ;
39- private Map <Long , TraceDescriptor > traceCache ;
4038 private Map <String , Stack <BeforeOperationEvent >> timestampCache ;
4139 private final String REGEX_FOR_METHOD_NAME = "([a-zA-Z0-9_]+) *\\ (" ;
4240
@@ -45,7 +43,6 @@ public KiekerHelper(ScannerContext scannerContext, RecordDescriptor recordDescri
4543 this .recordDescriptor = recordDescriptor ;
4644 this .methodDescriptorCache = Caffeine .newBuilder ().maximumSize (100000 ).build ();
4745 this .callsDescriptorCache = Caffeine .newBuilder ().maximumSize (10000000 ).build ();
48- this .traceCache = new HashMap <>();
4946 this .timestampCache = new HashMap <>();
5047 }
5148
@@ -60,17 +57,6 @@ void createRecord(KiekerMetadataRecord record) {
6057 recordDescriptor .setNumberOfRecords (record .getNumberOfRecords ());
6158 }
6259
63- void createTrace (TraceMetadata trace ) {
64- TraceDescriptor traceDescriptor = scannerContext .getStore ().create (TraceDescriptor .class );
65- traceDescriptor .setLoggingTimestamp (trace .getLoggingTimestamp ());
66- traceDescriptor .setTraceId (trace .getTraceId ());
67- traceDescriptor .setThreadId (trace .getThreadId ());
68- traceDescriptor .setSessionId (trace .getSessionId ());
69- traceDescriptor .setHostname (trace .getHostname ());
70- recordDescriptor .getTraces ().add (traceDescriptor );
71- traceCache .put (trace .getTraceId (), traceDescriptor );
72- }
73-
7460 void createEvent (AbstractOperationEvent event ) {
7561 if (event instanceof BeforeOperationEvent || event instanceof AfterOperationEvent ) {
7662 if (event instanceof BeforeOperationEvent ) {
@@ -83,10 +69,6 @@ void createEvent(AbstractOperationEvent event) {
8369 BeforeOperationEvent beforeOperationEvent = popFromTimestampStack (methodDescriptor .getSignature ());
8470 if (beforeOperationEvent != null ) {
8571 methodDescriptor .setDuration (methodDescriptor .getDuration () + (event .getTimestamp () - beforeOperationEvent .getTimestamp ()));
86- // add method to trace if not already done
87- if (!getTraceDescriptor (event ).getMethods ().contains (methodDescriptor )) {
88- getTraceDescriptor (event ).getMethods ().add (methodDescriptor );
89- }
9072 } else {
9173 LOGGER .warn ("BeforeOperationEvent for method " + methodDescriptor .getSignature () + " missing." );
9274 }
@@ -96,12 +78,14 @@ void createEvent(AbstractOperationEvent event) {
9678 CallOperationEvent callOperationEvent = (CallOperationEvent ) event ;
9779 MethodDescriptor caller = getMethodDescriptor (callOperationEvent .getCallerClassSignature (), callOperationEvent .getCallerOperationSignature ());
9880 MethodDescriptor callee = getMethodDescriptor (callOperationEvent .getCalleeClassSignature (), callOperationEvent .getCalleeOperationSignature ());
81+ // update number of incoming and outgoing calls
82+ if (callOperationEvent .getOrderIndex () == 1 ) {
83+ caller .setIncomingCalls (caller .getIncomingCalls () + 1 );
84+ }
85+ caller .setOutgoingCalls (caller .getOutgoingCalls () + 1 );
86+ callee .setIncomingCalls (callee .getIncomingCalls () + 1 );
9987 // add call
10088 addCall (caller , callee );
101- // add caller to trace if not already done
102- if (!getTraceDescriptor (event ).getMethods ().contains (caller )) {
103- getTraceDescriptor (event ).getMethods ().add (caller );
104- }
10589 }
10690 }
10791
@@ -127,27 +111,19 @@ private synchronized BeforeOperationEvent popFromTimestampStack(String signature
127111 }
128112 }
129113
130- private TraceDescriptor getTraceDescriptor (AbstractOperationEvent event ) {
131- TraceDescriptor traceDescriptor ;
132- if (traceCache .containsKey (event .getTraceId ())) {
133- traceDescriptor = traceCache .get (event .getTraceId ());
134- } else {
135- traceDescriptor = scannerContext .getStore ().create (TraceDescriptor .class );
136- traceDescriptor .setTraceId (event .getTraceId ());
137- recordDescriptor .getTraces ().add (traceDescriptor );
138- traceCache .put (event .getTraceId (), traceDescriptor );
139- }
140- return traceDescriptor ;
141- }
142-
143114 private MethodDescriptor getMethodDescriptor (String fqn , String signature ) {
144115 return methodDescriptorCache .get (MethodDescriptorKey .builder ().type (fqn ).signature (signature ).build (), methodDescriptorKey -> {
145116 Map <String , Object > params = new HashMap <>();
146117 params .put ("fqn" , fqn );
147118 params .put ("typeName" , fqn .substring (fqn .lastIndexOf ("." ) + 1 ));
148119 params .put ("signature" , signature );
149- params .put ("methodName" , getMethodNameFromSignature (signature ));
150- return scannerContext .getStore ().executeQuery ("MERGE (t:Kieker:Type{fqn:$fqn}) ON CREATE SET t.name=$typeName MERGE (t)-[:DECLARES]->(m:Kieker:Method{signature:$signature,name:$methodName}) RETURN m" , params ).getSingleResult ().get ("m" , MethodDescriptor .class );
120+ // exclude encoded signature as no method name can be created
121+ if (signature .endsWith (")" )) {
122+ params .put ("methodName" , getMethodNameFromSignature (signature ));
123+ return scannerContext .getStore ().executeQuery ("MERGE (t:Kieker:Type{fqn:$fqn}) ON CREATE SET t.name=$typeName MERGE (t)-[:DECLARES]->(m:Kieker:Method{signature:$signature,name:$methodName}) RETURN m" , params ).getSingleResult ().get ("m" , MethodDescriptor .class );
124+ } else {
125+ return scannerContext .getStore ().executeQuery ("MERGE (t:Kieker:Type{fqn:$fqn}) ON CREATE SET t.name=$typeName MERGE (t)-[:DECLARES]->(m:Kieker:Method{signature:$signature}) RETURN m" , params ).getSingleResult ().get ("m" , MethodDescriptor .class );
126+ }
151127 });
152128 }
153129
@@ -276,4 +252,8 @@ private static class CallsDescriptorKey {
276252 private MethodDescriptor callee ;
277253
278254 }
255+
256+ public void addMethodsToRecord () {
257+ recordDescriptor .getMethods ().addAll (methodDescriptorCache .asMap ().values ());
258+ }
279259}
0 commit comments