4
4
5
5
module Sentry
6
6
module Sidekiq
7
+ module Helpers
8
+ def set_span_data ( span , id :, queue :, latency : nil , retry_count : nil )
9
+ if span
10
+ span . set_data ( "messaging.message.id" , id )
11
+ span . set_data ( "messaging.destination.name" , queue )
12
+ span . set_data ( "messaging.message.receive.latency" , latency ) if latency
13
+ span . set_data ( "messaging.message.retry.count" , retry_count ) if retry_count
14
+ end
15
+ end
16
+ end
17
+
7
18
class SentryContextServerMiddleware
8
- OP_NAME = "queue.sidekiq"
19
+ include Sentry ::Sidekiq ::Helpers
20
+
21
+ OP_NAME = "queue.process"
9
22
SPAN_ORIGIN = "auto.queue.sidekiq"
10
23
11
- def call ( _worker , job , queue )
24
+ def call ( worker , job , queue )
12
25
return yield unless Sentry . initialized?
13
26
14
27
context_filter = Sentry ::Sidekiq ::ContextFilter . new ( job )
@@ -23,7 +36,12 @@ def call(_worker, job, queue)
23
36
scope . set_contexts ( sidekiq : job . merge ( "queue" => queue ) )
24
37
scope . set_transaction_name ( context_filter . transaction_name , source : :task )
25
38
transaction = start_transaction ( scope , job [ "trace_propagation_headers" ] )
26
- scope . set_span ( transaction ) if transaction
39
+
40
+ if transaction
41
+ scope . set_span ( transaction )
42
+
43
+ set_span_data ( transaction , id : job [ "jid" ] , queue : queue , latency : ( ( Time . now . to_f - job [ "enqueued_at" ] ) * 1000 ) . to_i , retry_count : job [ "retry_count" ] || 0 )
44
+ end
27
45
28
46
begin
29
47
yield
@@ -63,13 +81,20 @@ def finish_transaction(transaction, status)
63
81
end
64
82
65
83
class SentryContextClientMiddleware
66
- def call ( _worker_class , job , _queue , _redis_pool )
84
+ include Sentry ::Sidekiq ::Helpers
85
+
86
+ def call ( worker_class , job , queue , _redis_pool )
67
87
return yield unless Sentry . initialized?
68
88
69
89
user = Sentry . get_current_scope . user
70
90
job [ "sentry_user" ] = user unless user . empty?
71
91
job [ "trace_propagation_headers" ] ||= Sentry . get_trace_propagation_headers
72
- yield
92
+
93
+ Sentry . with_child_span ( op : "queue.publish" , description : worker_class . to_s ) do |span |
94
+ set_span_data ( span , id : job [ "jid" ] , queue : queue )
95
+
96
+ yield
97
+ end
73
98
end
74
99
end
75
100
end
0 commit comments