Skip to content

Commit bf05e17

Browse files
authored
Merge pull request #129 from hennevogel/feature/action_mailer
Introduces ActionMailer subscriber
2 parents 8ade32a + 3d34e2a commit bf05e17

File tree

14 files changed

+131
-22
lines changed

14 files changed

+131
-22
lines changed

.travis.yml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,16 @@ rvm:
1010
- "2.7"
1111
- "2.6"
1212
- "2.5"
13-
- "2.4"
1413
gemfile:
1514
- gemfiles/Gemfile.rails-6.0.x
1615
- gemfiles/Gemfile.rails-5.2.x
17-
- gemfiles/Gemfile.rails-5.1.x
18-
- gemfiles/Gemfile.rails-5.0.x
1916
env:
2017
- TEST_TASK=spec
2118
matrix:
2219
allow_failures:
2320
- rvm: ruby-head
2421
include:
2522
- { rvm: "2.6", gemfile: "Gemfile", env: [TEST_TASK=rubocop] }
26-
exclude:
27-
# Rails > 5 not on MRI 2.4+
28-
- { rvm: "2.4", gemfile: "gemfiles/Gemfile.rails-6.0.x" }
2923
addons:
3024
apt:
3125
packages:

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
For the full commit log, [see here](https://github.com/influxdata/influxdb-rails/commits/master).
44

5+
## v1.0.1.beta2
6+
- Implement [`deliver.action_mailer`](https://guides.rubyonrails.org/active_support_instrumentation.html#deliver-action-mailer) subscriber
7+
- Add missing Active Job documentation
8+
- Drop support for Ruby 2.4
9+
- Drop support for Rails < 5.2
10+
511
## v1.0.1.beta1, released 2020-08-21
612
- Drop support for Ruby 2.3
713
- Drop support for Rails 4.x

README.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,27 @@ Reported tags:
158158
*Note*: Only the measurements with the hook `perform` report a duration in the value.
159159
The other hooks are counters and always report a value of `1`.
160160

161+
### Action Mailer
162+
163+
Reported ActiveSupport instrumentation hooks:
164+
165+
- [deliver.action\_mailer](https://guides.rubyonrails.org/active_support_instrumentation.html#deliver-action-mailer)
166+
167+
Reported values:
168+
169+
```ruby
170+
value: 1
171+
```
172+
173+
Reported tags:
174+
175+
```ruby
176+
hook: "deliver",
177+
mailer: "SomeMailerClassName"
178+
```
179+
180+
*Note*: The hook is just a counter and always report a value of `1`.
181+
161182
## Configuration
162183

163184
The only setting you actually need to configure is the name of the database

gemfiles/Gemfile.rails-5.0.x

Lines changed: 0 additions & 9 deletions
This file was deleted.

gemfiles/Gemfile.rails-5.1.x

Lines changed: 0 additions & 7 deletions
This file was deleted.

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 "actionmailer"
3031
spec.add_development_dependency "activejob"
3132
spec.add_development_dependency "activerecord"
3233
spec.add_development_dependency "bundler", ">= 1.0.0"

lib/influxdb-rails.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
require "influxdb/rails/middleware/sql_subscriber"
99
require "influxdb/rails/middleware/active_record_subscriber"
1010
require "influxdb/rails/middleware/active_job_subscriber"
11+
require "influxdb/rails/middleware/action_mailer_subscriber"
1112
require "influxdb/rails/sql/query"
1213
require "influxdb/rails/version"
1314
require "influxdb/rails/configuration"
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
require "influxdb/rails/middleware/subscriber"
2+
3+
module InfluxDB
4+
module Rails
5+
module Middleware
6+
class ActionMailerSubscriber < Subscriber # :nodoc:
7+
private
8+
9+
def values
10+
{ value: 1 }
11+
end
12+
13+
def tags
14+
{
15+
hook: "deliver",
16+
mailer: payload[:mailer],
17+
}
18+
end
19+
end
20+
end
21+
end
22+
end

lib/influxdb/rails/railtie.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class Railtie < ::Rails::Railtie # :nodoc:
3434
"enqueue.active_job" => Middleware::ActiveJobSubscriber,
3535
"perform_start.active_job" => Middleware::ActiveJobSubscriber,
3636
"perform.active_job" => Middleware::ActiveJobSubscriber,
37+
"deliver.action_mailer" => Middleware::ActionMailerSubscriber,
3738
"block_instrumentation.influxdb_rails" => Middleware::BlockInstrumentationSubscriber,
3839
}.each do |hook_name, subscriber|
3940
ActiveSupport::Notifications.subscribe(hook_name, subscriber)
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
require File.dirname(__FILE__) + "/../spec_helper"
2+
3+
RSpec.describe "ActionMailer deliver metrics", type: :request do
4+
let(:tags_middleware) do
5+
lambda do |tags|
6+
tags.merge(tags_middleware: :tags_middleware)
7+
end
8+
end
9+
before do
10+
allow_any_instance_of(InfluxDB::Rails::Configuration).to receive(:ignored_environments).and_return(%w[development])
11+
allow_any_instance_of(ActionDispatch::Request).to receive(:request_id).and_return(:request_id)
12+
allow_any_instance_of(InfluxDB::Rails::Configuration).to receive(:application_name).and_return(:app_name)
13+
allow_any_instance_of(InfluxDB::Rails::Configuration).to receive(:tags_middleware).and_return(tags_middleware)
14+
end
15+
16+
it "writes metric" do
17+
get "/metrics"
18+
19+
expect_metric(
20+
tags: a_hash_including(
21+
hook: "deliver",
22+
mailer: "MetricMailer",
23+
location: "MetricsController#index",
24+
additional_tag: :value,
25+
server: Socket.gethostname,
26+
app_name: :app_name,
27+
tags_middleware: :tags_middleware
28+
),
29+
values: a_hash_including(
30+
additional_value: :value,
31+
request_id: :request_id,
32+
value: 1
33+
)
34+
)
35+
end
36+
37+
it "does not write metric when hook is ignored" do
38+
allow_any_instance_of(InfluxDB::Rails::Configuration).to receive(:ignored_hooks).and_return(["deliver.action_mailer"])
39+
40+
get "/metrics"
41+
42+
expect_no_metric(
43+
tags: a_hash_including(
44+
hook: "deliver",
45+
mailer: "MetricMailer"
46+
)
47+
)
48+
end
49+
end

0 commit comments

Comments
 (0)