Module: RailsMetrics::PayloadParser
- Defined in:
- lib/rails_metrics/payload_parser.rb
Overview
ActiveSupport::Notifications usually comes with extra information as the SQL query, response status and many others. This information is called payload.
By default, RailsMetrics stores the whole payload in the database but it allows you to manipulate it or even ignore some through the add and ignore methods.
For example, “activerecord.sql” has as paylaod a hash with :name (like “Product Load”), the :sql to be performed and the :connection_id. We can remove the connection from the hash by simply providing :except:
RailsMetrics::PayloadParser.add "active_record.sql", :except => :name
Or, we could also:
RailsMetrics::PayloadParser.add "active_record.sql", :slice => [:name, :sql]
Finally, in some cases manipulating the hash is not enough and you might need to customize it further, as in “action_view.render_template”. You can do that by giving a block which will receive the payload as argument:
RailsMetrics::PayloadParser.add "action_view.render_template" do |payload|
payload = payload.dup
payload[:template] = payload[:template].gsub("RAILS_ROOT", Rails.root)
payload
end
ATTENTION: if you need to modify the payload or any of its values, be sure to .dup if first, as in the example above.
If you want to ignore any payload, you can use the ignore method:
RailsMetrics::PayloadParser.ignore "active_record.sql"
Class Method Summary collapse
-
.add(*names, &block) ⇒ Object
Add a new parser.
-
.filter(name, payload) ⇒ Object
Filter the given payload based on the name given and configured parsers.
-
.ignore(*names) ⇒ Object
Delete a previous parser.
-
.mapped_paths ⇒ Object
Holds the mapped paths used in prunning.
-
.parsers ⇒ Object
Holds the parsers used by RailsMetrics.
-
.prune_path(raw_path) ⇒ Object
Prune paths based on the mapped paths set.
Class Method Details
.add(*names, &block) ⇒ Object
Add a new parser.
47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/rails_metrics/payload_parser.rb', line 47 def self.add(*names, &block) = names. names.each do |name| parsers[name.to_s] = if block_given? block elsif .present? .to_a.flatten else true end end end |
.filter(name, payload) ⇒ Object
Filter the given payload based on the name given and configured parsers
67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/rails_metrics/payload_parser.rb', line 67 def self.filter(name, payload) parser = parsers[name] case parser when Array payload.send(*parser) when Proc parser.call(payload) when TrueClass, NilClass payload when FalseClass nil end end |
.ignore(*names) ⇒ Object
Delete a previous parser
62 63 64 |
# File 'lib/rails_metrics/payload_parser.rb', line 62 def self.ignore(*names) names.each { |name| parsers[name.to_s] = false } end |
.mapped_paths ⇒ Object
Holds the mapped paths used in prunning.
42 43 44 |
# File 'lib/rails_metrics/payload_parser.rb', line 42 def self.mapped_paths @mapped_paths ||= {} end |
.parsers ⇒ Object
Holds the parsers used by RailsMetrics.
37 38 39 |
# File 'lib/rails_metrics/payload_parser.rb', line 37 def self.parsers @parsers ||= {} end |
.prune_path(raw_path) ⇒ Object
Prune paths based on the mapped paths set.
82 83 84 85 86 87 |
# File 'lib/rails_metrics/payload_parser.rb', line 82 def self.prune_path(raw_path) mapped_paths.each do |path, replacement| raw_path = raw_path.gsub(path, replacement) end raw_path end |