Skip to content

Commit ee29d75

Browse files
committed
[RAILS] Refactored and updated the instrumentation support to allow integration with Persistence::Model
When the instrumentation/lograge components are now used with the Persistence::Model models, Rails log prints the relevant info: Article Search (174.8ms) {index: "articles-development", type: "article", body: {size: 50, from: 0, sort: {created_at: "desc"}, query: {filtered: {query: {query_string: {query: "foo*", default_operator: "AND"}}, filter: {bool: {must_not: {term: {deleted: true}}}}}} ... Rendered articles/index.html.erb within layouts/application (57.7ms) Rendered articles/_search_form.html.erb (1.2ms) Completed 200 OK in 861ms (Views: 623.9ms | Elasticsearch: 174.8ms) Closes elastic#238
1 parent 9c1f951 commit ee29d75

File tree

3 files changed

+32
-18
lines changed

3 files changed

+32
-18
lines changed

elasticsearch-rails/lib/elasticsearch/rails/instrumentation/publishers.rb

+18-12
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,28 @@ module Publishers
99
# @see http://api.rubyonrails.org/classes/ActiveSupport/Notifications.html
1010
#
1111
module SearchRequest
12-
extend ActiveSupport::Concern
1312

14-
included do
15-
alias_method_chain :execute!, :instrumentation
16-
end
13+
def self.included(base)
14+
base.class_eval do
15+
alias_method :execute_without_instrumentation!, :execute!
16+
17+
def execute!
18+
execute_with_instrumentation!
19+
end
1720

18-
# Wrap `Search#execute!` and perform instrumentation
19-
#
20-
def execute_with_instrumentation!
21-
ActiveSupport::Notifications.instrument "search.elasticsearch",
22-
name: 'Search',
23-
klass: (self.klass.is_a?(Elasticsearch::Model::Proxy::ClassMethodsProxy) ? self.klass.target.to_s : self.klass.to_s),
24-
search: self.definition do
25-
execute_without_instrumentation!
21+
# Wrap `Search#execute!` and perform instrumentation
22+
#
23+
def execute_with_instrumentation!
24+
ActiveSupport::Notifications.instrument "search.elasticsearch",
25+
name: 'Search',
26+
klass: (self.klass.is_a?(Elasticsearch::Model::Proxy::ClassMethodsProxy) ? self.klass.target.to_s : self.klass.to_s),
27+
search: self.definition do
28+
execute_without_instrumentation!
29+
end
30+
end
2631
end
2732
end
33+
2834
end
2935
end
3036
end

elasticsearch-rails/lib/elasticsearch/rails/instrumentation/railtie.rb

+5-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,11 @@ class Railtie < ::Rails::Railtie
1414

1515
Elasticsearch::Model::Searching::SearchRequest.class_eval do
1616
include Elasticsearch::Rails::Instrumentation::Publishers::SearchRequest
17-
end
17+
end if defined?(Elasticsearch::Model::Searching::SearchRequest)
18+
19+
Elasticsearch::Persistence::Model::Find::SearchRequest.class_eval do
20+
include Elasticsearch::Rails::Instrumentation::Publishers::SearchRequest
21+
end if defined?(Elasticsearch::Persistence::Model::Find::SearchRequest)
1822

1923
ActiveSupport.on_load(:action_controller) do
2024
include Elasticsearch::Rails::Instrumentation::ControllerRuntime

elasticsearch-rails/lib/elasticsearch/rails/lograge.rb

+9-5
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,21 @@ class Railtie < ::Rails::Railtie
2121
require 'elasticsearch/rails/instrumentation/log_subscriber'
2222
require 'elasticsearch/rails/instrumentation/controller_runtime'
2323

24-
config.lograge.custom_options = lambda do |event|
25-
{ es: event.payload[:elasticsearch_runtime].to_f.round(2) }
26-
end
27-
2824
Elasticsearch::Model::Searching::SearchRequest.class_eval do
2925
include Elasticsearch::Rails::Instrumentation::Publishers::SearchRequest
30-
end
26+
end if defined?(Elasticsearch::Model::Searching::SearchRequest)
27+
28+
Elasticsearch::Persistence::Model::Find::SearchRequest.class_eval do
29+
include Elasticsearch::Rails::Instrumentation::Publishers::SearchRequest
30+
end if defined?(Elasticsearch::Persistence::Model::Find::SearchRequest)
3131

3232
ActiveSupport.on_load(:action_controller) do
3333
include Elasticsearch::Rails::Instrumentation::ControllerRuntime
3434
end
35+
36+
config.lograge.custom_options = lambda do |event|
37+
{ es: event.payload[:elasticsearch_runtime].to_f.round(2) }
38+
end
3539
end
3640
end
3741

0 commit comments

Comments
 (0)