class NewRelic::Agent::RulesEngine
Constants
- LEADING_SLASH_REGEX
- SEGMENT_SEPARATOR
Public Class Methods
create_metric_rules(connect_response)
click to toggle source
# File lib/new_relic/agent/rules_engine.rb, line 20 def self.create_metric_rules(connect_response) specs = connect_response['metric_name_rules'] || [] rules = specs.map { |spec| ReplacementRule.new(spec) } self.new(rules) end
create_transaction_rules(connect_response)
click to toggle source
# File lib/new_relic/agent/rules_engine.rb, line 26 def self.create_transaction_rules(connect_response) txn_name_specs = connect_response['transaction_name_rules'] || [] segment_rule_specs = connect_response['transaction_segment_terms'] || [] txn_name_rules = txn_name_specs.map { |s| ReplacementRule.new(s) } segment_rules = [] segment_rule_specs.each do |spec| if spec[SegmentTermsRule::PREFIX_KEY] && SegmentTermsRule.valid?(spec) # Build segment_rules in reverse order from which they're provided, # so that when we eliminate duplicates with #uniq!, we retain the last # instances of repeated rules. segment_rules.unshift(SegmentTermsRule.new(spec)) end end reject_rules_with_duplicate_prefixes!(segment_rules) segment_rules.reverse! # Reset the rules to their original order. self.new(txn_name_rules, segment_rules) end
new(rules = [], segment_term_rules = [])
click to toggle source
# File lib/new_relic/agent/rules_engine.rb, line 57 def initialize(rules = [], segment_term_rules = []) @rules = rules.sort @segment_term_rules = segment_term_rules end
reject_rules_with_duplicate_prefixes!(rules)
click to toggle source
When multiple rules share the same prefix, only apply the rule with the last instance of the prefix. Note that the incoming rules are in reverse order to facilitate this.
# File lib/new_relic/agent/rules_engine.rb, line 53 def self.reject_rules_with_duplicate_prefixes!(rules) rules.uniq! { |rule| rule.prefix } end
Public Instance Methods
apply_rules(rules, string)
click to toggle source
# File lib/new_relic/agent/rules_engine.rb, line 62 def apply_rules(rules, string) rules.each do |rule| if rule.matches?(string) string = rule.apply(string) break if rule.terminal? end end string end
rename(original_string)
click to toggle source
# File lib/new_relic/agent/rules_engine.rb, line 72 def rename(original_string) renamed = apply_rules(@rules, original_string) return nil unless renamed renamed = apply_rules(@segment_term_rules, renamed) renamed end