Skip to content

Commit 12f630c

Browse files
authored
Merge pull request #102 from hennevogel/feature/activejob-instrumentation
Introduces ActiveJobSubscriber
2 parents a149317 + ead1125 commit 12f630c

18 files changed

+306
-10
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ For the full commit log, [see here](https://github.com/influxdata/influxdb-rails
1010
`ignored_environments` do disable instrumentation
1111
- Simplified spec with a PORO test client
1212
- Implement `instantiation.active_record` subscriber (https://guides.rubyonrails.org/active_support_instrumentation.html#instantiation-active-record)
13+
- Implement `enqueue.active_job` subscriber (https://guides.rubyonrails.org/active_support_instrumentation.html#enqueue-active-job)
14+
- Implement `perform_start.active_job` subscriber (https://guides.rubyonrails.org/active_support_instrumentation.html#perform-start-active-job)
15+
- Implement `perform.active_job` subscriber (https://guides.rubyonrails.org/active_support_instrumentation.html#perform-active-job)
1316

1417
## v1.0.0, released 2019-10-23
1518
The Final release, no code changes.

influxdb-rails.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
2727
spec.add_runtime_dependency "influxdb", "~> 0.6", ">= 0.6.4"
2828
spec.add_runtime_dependency "railties", ">= 5.0"
2929

30+
spec.add_development_dependency "activejob"
3031
spec.add_development_dependency "activerecord"
3132
spec.add_development_dependency "bundler", ">= 1.0.0"
3233
spec.add_development_dependency "fakeweb"

lib/influxdb-rails.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
require "influxdb/rails/middleware/request_subscriber"
77
require "influxdb/rails/middleware/sql_subscriber"
88
require "influxdb/rails/middleware/active_record_subscriber"
9+
require "influxdb/rails/middleware/active_job_subscriber"
910
require "influxdb/rails/sql/query"
1011
require "influxdb/rails/version"
1112
require "influxdb/rails/configuration"
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
require "influxdb/rails/middleware/subscriber"
2+
3+
module InfluxDB
4+
module Rails
5+
module Middleware
6+
class ActiveJobSubscriber < Subscriber # :nodoc:
7+
private
8+
9+
def values(_start, duration, _payload)
10+
value = measure_performance? ? duration : 1
11+
{
12+
value: value,
13+
}
14+
end
15+
16+
def tags(payload)
17+
{
18+
hook: short_hook_name,
19+
state: job_state(payload),
20+
job: payload[:job].class.name,
21+
queue: payload[:job].queue_name,
22+
}
23+
end
24+
25+
def short_hook_name
26+
return "enqueue" if hook_name.include?("enqueue")
27+
return "perform_start" if hook_name.include?("perform_start")
28+
return "perform" if hook_name.include?("perform")
29+
end
30+
31+
def job_state(payload)
32+
return "failed" if payload[:exception_object]
33+
34+
case short_hook_name
35+
when "enqueue"
36+
"queued"
37+
when "perform_start"
38+
"running"
39+
when "perform"
40+
"succeeded"
41+
end
42+
end
43+
44+
def measure_performance?
45+
short_hook_name == "perform"
46+
end
47+
end
48+
end
49+
end
50+
end

lib/influxdb/rails/middleware/active_record_subscriber.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ module Middleware
77
class ActiveRecordSubscriber < Subscriber # :nodoc:
88
private
99

10-
def values(started, finished, payload)
10+
def values(_start, duration, payload)
1111
{
12-
value: ((finished - started) * 1000).ceil,
12+
value: duration,
1313
record_count: payload[:record_count],
1414
}
1515
end

lib/influxdb/rails/middleware/render_subscriber.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ def short_hook_name
1212

1313
private
1414

15-
def values(started, finished, payload)
15+
def values(_start, duration, payload)
1616
{
17-
value: ((finished - started) * 1000).ceil,
17+
value: duration,
1818
count: payload[:count],
1919
cache_hits: payload[:cache_hits],
2020
}

lib/influxdb/rails/middleware/request_subscriber.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ def tags(payload)
2222
}
2323
end
2424

25-
def values(started, finished, payload)
25+
def values(start, duration, payload)
2626
{
27-
controller: ((finished - started) * 1000).ceil,
27+
controller: duration,
2828
view: (payload[:view_runtime] || 0).ceil,
2929
db: (payload[:db_runtime] || 0).ceil,
3030
started: InfluxDB.convert_timestamp(
31-
started.utc,
31+
start.utc,
3232
configuration.client.time_precision
3333
),
3434
}

lib/influxdb/rails/middleware/sql_subscriber.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ def call(_name, started, finished, _unique_id, payload)
1111

1212
private
1313

14-
def values(started, finished, payload)
14+
def values(_start, duration, payload)
1515
{
16-
value: ((finished - started) * 1000).ceil,
16+
value: duration,
1717
sql: InfluxDB::Rails::Sql::Normalizer.new(payload[:sql]).perform,
1818
}
1919
end

lib/influxdb/rails/middleware/subscriber.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def call(_name, start, finish, _id, payload)
2525

2626
def write_metric(start, finish, payload)
2727
InfluxDB::Rails::Metric.new(
28-
values: values(start, finish, payload),
28+
values: values(start, ((finish - start) * 1000).ceil, payload),
2929
tags: tags(payload),
3030
configuration: configuration,
3131
timestamp: finish,

lib/influxdb/rails/railtie.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
module InfluxDB
55
module Rails
66
class Railtie < ::Rails::Railtie # :nodoc:
7+
# rubocop:disable Metrics/BlockLength
78
config.after_initialize do
89
InfluxDB::Rails.configure do |config|
910
config.environment ||= ::Rails.env
@@ -30,10 +31,14 @@ class Railtie < ::Rails::Railtie # :nodoc:
3031
"render_collection.action_view" => Middleware::RenderSubscriber,
3132
"sql.active_record" => Middleware::SqlSubscriber,
3233
"instantiation.active_record" => Middleware::ActiveRecordSubscriber,
34+
"enqueue.active_job" => Middleware::ActiveJobSubscriber,
35+
"perform_start.active_job" => Middleware::ActiveJobSubscriber,
36+
"perform.active_job" => Middleware::ActiveJobSubscriber,
3337
}.each do |hook_name, subscriber_class|
3438
subscribe_to(hook_name, subscriber_class)
3539
end
3640
end
41+
# rubocop:enable Metrics/BlockLength
3742

3843
def subscribe_to(hook_name, subscriber_class)
3944
subscriber = subscriber_class.new(InfluxDB::Rails.configuration, hook_name)

0 commit comments

Comments
 (0)