Module: Datadog::Tracing::Sampling::Span::RuleParser

Defined in:
lib/datadog/tracing/sampling/span/rule_parser.rb

Overview

Converts user configuration into Rule objects, handling any parsing errors.

Class Method Summary collapse

Class Method Details

.parse_json(rules) ⇒ Array<Datadog::Tracing::Sampling::Span::Rule>?

Parses the provided JSON string containing the Single Span Sampling configuration list. In case of parsing errors, nil is returned.



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/datadog/tracing/sampling/span/rule_parser.rb', line 24

def parse_json(rules)
  return nil unless rules

  begin
    list = JSON.parse(rules)
  rescue => e
    Datadog.logger.warn(
      "Error parsing Span Sampling Rules `#{rules.inspect}`: " \
      "#{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
    )
    return nil
  end

  parse_list(list)
end

.parse_list(rules) ⇒ Array<Datadog::Tracing::Sampling::Span::Rule>?

Parses a list of Hashes containing the parsed JSON information for Single Span Sampling configuration. In case of parsing errors, nil is returned.



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/datadog/tracing/sampling/span/rule_parser.rb', line 47

def parse_list(rules)
  unless rules.is_a?(Array)
    Datadog.logger.warn("Span Sampling Rules are not an array: #{rules.inspect}")
    return nil
  end

  parsed = rules.map do |hash|
    unless hash.is_a?(Hash)
      Datadog.logger.warn("Span Sampling Rule is not a key-value object: #{hash.inspect}")
      return nil
    end

    begin
      parse_rule(hash)
    rescue => e
      Datadog.logger.warn(
        "Cannot parse Span Sampling Rule #{hash.inspect}: " \
        "#{e.class.name} #{e} at #{Array(e.backtrace).first}"
      )
      return nil
    end
  end

  parsed.compact!
  parsed
end