Class: OneApm::Support::RulesEngine

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Enumerable
Defined in:
lib/one_apm/support/rules_engine.rb,
lib/one_apm/support/rules_engine/replacement_rule.rb,
lib/one_apm/support/rules_engine/segment_terms_rule.rb

Defined Under Namespace

Classes: ReplacementRule, SegmentTermsRule

Constant Summary collapse

OA_SEGMENT_SEPARATOR =
'/'.freeze
OA_LEADING_SLASH_REGEX =
%r{^/}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(rules = [], segment_term_rules = []) ⇒ RulesEngine

Returns a new instance of RulesEngine.



34
35
36
37
# File 'lib/one_apm/support/rules_engine.rb', line 34

def initialize(rules=[], segment_term_rules=[])
  @rules = rules.sort
  @segment_term_rules = segment_term_rules
end

Class Method Details

.create_metric_rules(connect_response) ⇒ Object



18
19
20
21
22
# File 'lib/one_apm/support/rules_engine.rb', line 18

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) ⇒ Object



24
25
26
27
28
29
30
31
32
# File 'lib/one_apm/support/rules_engine.rb', line 24

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.map { |s| SegmentTermsRule.new(s) }

  self.new(txn_name_rules, segment_rules)
end

Instance Method Details

#apply_rules(rules, string) ⇒ Object



39
40
41
42
43
44
45
46
47
# File 'lib/one_apm/support/rules_engine.rb', line 39

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) ⇒ Object



49
50
51
52
53
54
# File 'lib/one_apm/support/rules_engine.rb', line 49

def rename(original_string)
  renamed = apply_rules(@rules, original_string)
  return nil unless renamed
  renamed = apply_rules(@segment_term_rules, renamed)
  renamed
end