2424
2525class InstanaRecorder (SpanRecorder ):
2626 registered_spans = ("django" , "memcache" , "mysql" , "rabbitmq" , "redis" ,
27- "rpc-client" , "rpc-server" , "sqlalchemy" , "soap" , "urllib3" , "wsgi" )
27+ "rpc-client" , "rpc-server" , "sqlalchemy" , "soap" , "urllib3" , "wsgi" , "log" )
2828 http_spans = ("django" , "wsgi" , "urllib3" , "soap" )
2929
3030 exit_spans = ("memcache" , "mysql" , "rabbitmq" , "redis" , "rpc-client" ,
31- "sqlalchemy" , "soap" , "urllib3" )
31+ "sqlalchemy" , "soap" , "urllib3" , "log" )
3232 entry_spans = ("django" , "wsgi" , "rabbitmq" , "rpc-server" )
3333
3434 entry_kind = ["entry" , "server" , "consumer" ]
@@ -95,6 +95,13 @@ def build_registered_span(self, span):
9595 """ Takes a BasicSpan and converts it into a registered JsonSpan """
9696 data = Data (baggage = span .context .baggage )
9797
98+ kind = 1 # entry
99+ if span .operation_name in self .exit_spans :
100+ kind = 2 # exit
101+ # log is a special case as it is not entry nor exit
102+ if span .operation_name == "log" :
103+ kind = 3 # intermediate span
104+
98105 logs = self .collect_logs (span )
99106 if len (logs ) > 0 :
100107 if data .custom is None :
@@ -116,6 +123,8 @@ def build_registered_span(self, span):
116123 sort = span .tags .pop ('sort' , None ),
117124 address = span .tags .pop ('address' , None ),
118125 key = span .tags .pop ('key' , None ))
126+ if data .rabbitmq .sort == 'consume' :
127+ kind = 1 # entry
119128
120129 if span .operation_name == "redis" :
121130 data .redis = RedisData (connection = span .tags .pop ('connection' , None ),
@@ -152,10 +161,21 @@ def build_registered_span(self, span):
152161 tskey = list (data .custom .logs .keys ())[0 ]
153162 data .mysql .error = data .custom .logs [tskey ]['message' ]
154163
164+ if span .operation_name == "log" :
165+ data .log = {}
166+ # use last special key values
167+ # TODO - logic might need a tweak here
168+ for l in span .logs :
169+ if "message" in l .key_values :
170+ data .log ["message" ] = l .key_values .pop ("message" , None )
171+ if "parameters" in l .key_values :
172+ data .log ["parameters" ] = l .key_values .pop ("parameters" , None )
173+
155174 entity_from = {'e' : instana .singletons .agent .from_ .pid ,
156175 'h' : instana .singletons .agent .from_ .agentUuid }
157176
158177 json_span = JsonSpan (n = span .operation_name ,
178+ k = kind ,
159179 t = span .context .trace_id ,
160180 p = span .parent_id ,
161181 s = span .context .span_id ,
@@ -234,7 +254,8 @@ def get_span_kind(self, span):
234254 elif span .tags ["span.kind" ] in self .exit_kind :
235255 kind = "exit"
236256 else :
237- kind = "local"
257+ kind = "intermediate"
258+
238259 return kind
239260
240261 def collect_logs (self , span ):
0 commit comments