1010
1111 if ((redis .VERSION >= (2 , 10 , 6 )) and (redis .VERSION < (3 , 0 , 0 ))):
1212
13+ def collect_tags (span , instance , args , kwargs ):
14+ try :
15+ ckw = instance .connection_pool .connection_kwargs
16+
17+ span .set_tag ("driver" , "redis-py" )
18+
19+ host = ckw .get ('host' , None )
20+ port = ckw .get ('port' , '6379' )
21+ db = ckw .get ('db' , None )
22+
23+ if host is not None :
24+ url = "redis://%s:%s" % (host , port )
25+ if db is not None :
26+ url = url + "/%s" % db
27+ span .set_tag ('connection' , url )
28+
29+ except :
30+ logger .debug ("redis.collect_tags non-fatal error" , exc_info = True )
31+ finally :
32+ return span
33+
1334 @wrapt .patch_function_wrapper ('redis.client' ,'StrictRedis.execute_command' )
1435 def execute_command_with_instana (wrapped , instance , args , kwargs ):
1536 parent_span = tracer .active_span
1637
1738 # If we're not tracing, just return
18- if parent_span is None :
39+ if parent_span is None or parent_span . operation_name == "redis" :
1940 return wrapped (* args , ** kwargs )
2041
2142 with tracer .start_active_span ("redis" , child_of = parent_span ) as scope :
22-
2343 try :
24- ckw = instance .connection_pool .connection_kwargs
25- url = "redis://%s:%d/%d" % (ckw ['host' ], ckw ['port' ], ckw ['db' ])
26- scope .span .set_tag ("connection" , url )
27- scope .span .set_tag ("driver" , "redis-py" )
28- scope .span .set_tag ("command" , args [0 ])
44+ collect_tags (scope .span , instance , args , kwargs )
45+ if (len (args ) > 0 ):
46+ scope .span .set_tag ("command" , args [0 ])
2947
3048 rv = wrapped (* args , ** kwargs )
3149 except Exception as e :
32- scope .span .set_tag ("redis.error" , str (e ))
33- scope .span .set_tag ("error" , True )
34- ec = scope .span .tags .get ('ec' , 0 )
35- scope .span .set_tag ("ec" , ec + 1 )
50+ scope .span .log_exception (e )
3651 raise
3752 else :
3853 return rv
@@ -42,34 +57,26 @@ def execute_with_instana(wrapped, instance, args, kwargs):
4257 parent_span = tracer .active_span
4358
4459 # If we're not tracing, just return
45- if parent_span is None :
60+ if parent_span is None or parent_span . operation_name == "redis" :
4661 return wrapped (* args , ** kwargs )
4762
4863 with tracer .start_active_span ("redis" , child_of = parent_span ) as scope :
49-
5064 try :
51- ckw = instance .connection_pool .connection_kwargs
52- url = "redis://%s:%d/%d" % (ckw ['host' ], ckw ['port' ], ckw ['db' ])
53- scope .span .set_tag ("connection" , url )
54- scope .span .set_tag ("driver" , "redis-py" )
65+ collect_tags (scope .span , instance , args , kwargs )
5566 scope .span .set_tag ("command" , 'PIPELINE' )
5667
57- try :
58- pipe_cmds = []
59- for e in instance .command_stack :
60- pipe_cmds .append (e [0 ][0 ])
61- scope .span .set_tag ("subCommands" , pipe_cmds )
62- except Exception as e :
63- # If anything breaks during cmd collection, just log a
64- # debug message
65- logger .debug ("Error collecting pipeline commands" )
68+ pipe_cmds = []
69+ for e in instance .command_stack :
70+ pipe_cmds .append (e [0 ][0 ])
71+ scope .span .set_tag ("subCommands" , pipe_cmds )
72+ except Exception as e :
73+ # If anything breaks during K/V collection, just log a debug message
74+ logger .debug ("Error collecting pipeline commands" , exc_info = True )
6675
76+ try :
6777 rv = wrapped (* args , ** kwargs )
6878 except Exception as e :
69- scope .span .set_tag ("redis.error" , str (e ))
70- scope .span .set_tag ("error" , True )
71- ec = scope .span .tags .get ('ec' , 0 )
72- scope .span .set_tag ("ec" , ec + 1 )
79+ scope .span .log_exception (e )
7380 raise
7481 else :
7582 return rv
0 commit comments