84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
# File 'lib/appsignal/hooks/active_job.rb', line 84
def execute(job)
enqueued_at = job["enqueued_at"]
queue_start = Time.parse(enqueued_at) if enqueued_at
queue_time =
if queue_start
time_now = Time.now.utc
(time_now - queue_start) * 1_000
end
job_status = nil
has_wrapper_transaction = Appsignal::Transaction.current?
transaction =
if has_wrapper_transaction
Appsignal::Transaction.current
else
Appsignal::Transaction.create(Appsignal::Transaction::BACKGROUND_JOB)
end
begin
transaction.add_params_if_nil(job["arguments"])
transaction_tags = ActiveJobHelpers.transaction_tags_for(job)
transaction.add_tags(transaction_tags)
transaction.set_action(ActiveJobHelpers.action_name(job))
super
rescue Exception => exception
job_status = :failed
transaction_set_error(transaction, exception)
raise exception
ensure
if transaction
transaction.set_queue_start((queue_start.to_f * 1_000).to_i) if queue_start
unless has_wrapper_transaction
Appsignal::Transaction.complete_current!
end
end
metrics = ActiveJobHelpers.metrics_for(job)
metrics.each do |(metric_name, tags)|
if job_status
ActiveJobHelpers.increment_counter metric_name, 1,
tags.merge(:status => job_status)
end
ActiveJobHelpers.increment_counter metric_name, 1,
tags.merge(:status => :processed)
end
queue_name = job["queue_name"]
if queue_time && queue_name
ActiveJobHelpers.add_distribution_value(
"queue_time",
queue_time,
:queue => queue_name
)
end
end
end
|