1212import instana .singletons
1313
1414from .json_span import (CustomData , Data , HttpData , JsonSpan , MySQLData ,
15- SDKData , SoapData )
15+ RabbitmqData , SDKData , SoapData )
1616from .log import logger
1717
1818if sys .version_info .major is 2 :
2222
2323
2424class InstanaRecorder (SpanRecorder ):
25- registered_spans = ("django" , "memcache" , "mysql" , "rpc-client" ,
25+ registered_spans = ("django" , "memcache" , "mysql" , "rabbitmq" , " rpc-client" ,
2626 "rpc-server" , "soap" , "urllib3" , "wsgi" )
2727 http_spans = ("django" , "wsgi" , "urllib3" , "soap" )
2828
29- exit_spans = ("memcache" , "mysql" , "rpc-client" , "soap" , "urllib3" )
30- entry_spans = ("django" , "wsgi" , "rpc-server" )
29+ exit_spans = ("memcache" , "mysql" , "rabbitmq" , " rpc-client" , "soap" , "urllib3" )
30+ entry_spans = ("django" , "wsgi" , "rabbitmq" , " rpc-server" )
3131
3232 entry_kind = ["entry" , "server" , "consumer" ]
3333 exit_kind = ["exit" , "client" , "producer" ]
@@ -91,9 +91,13 @@ def record_span(self, span):
9191
9292 def build_registered_span (self , span ):
9393 """ Takes a BasicSpan and converts it into a registered JsonSpan """
94- data = Data (baggage = span .context .baggage ,
95- custom = CustomData (tags = span .tags ,
96- logs = self .collect_logs (span )))
94+ data = Data (baggage = span .context .baggage )
95+
96+ logs = self .collect_logs (span )
97+ if len (logs ) > 0 :
98+ if data .custom is None :
99+ data .custom = CustomData ()
100+ data .custom .logs = logs
97101
98102 if span .operation_name in self .http_spans :
99103 data .http = HttpData (host = self .get_http_host_name (span ),
@@ -102,6 +106,13 @@ def build_registered_span(self, span):
102106 status = span .tags .pop (ext .HTTP_STATUS_CODE , None ),
103107 error = span .tags .pop ('http.error' , None ))
104108
109+ if span .operation_name == "rabbitmq" :
110+ data .rabbitmq = RabbitmqData (exchange = span .tags .pop ('exchange' , None ),
111+ queue = span .tags .pop ('queue' , None ),
112+ sort = span .tags .pop ('sort' , None ),
113+ address = span .tags .pop ('address' , None ),
114+ key = span .tags .pop ('key' , None ))
115+
105116 if span .operation_name == "soap" :
106117 data .soap = SoapData (action = span .tags .pop ('soap.action' , None ))
107118
@@ -110,10 +121,15 @@ def build_registered_span(self, span):
110121 db = span .tags .pop (ext .DATABASE_INSTANCE , None ),
111122 user = span .tags .pop (ext .DATABASE_USER , None ),
112123 stmt = span .tags .pop (ext .DATABASE_STATEMENT , None ))
113- if len (data .custom . logs . keys () ):
124+ if (data .custom is not None ) and ( data . custom . logs is not None ) and len ( data . custom . logs ):
114125 tskey = list (data .custom .logs .keys ())[0 ]
115126 data .mysql .error = data .custom .logs [tskey ]['message' ]
116127
128+ if len (span .tags ) > 0 :
129+ if data .custom is None :
130+ data .custom = CustomData ()
131+ data .custom .tags = span .tags
132+
117133 entityFrom = {'e' : instana .singletons .agent .from_ .pid ,
118134 'h' : instana .singletons .agent .from_ .agentUuid }
119135
0 commit comments