55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/datadog/tracing/sampling/rule_sampler.rb', line 55
def self.parse(rules, rate_limit, default_sample_rate)
parsed_rules = JSON.parse(rules).map do |rule|
sample_rate = rule['sample_rate']
begin
sample_rate = Float(sample_rate)
rescue
raise "Rule '#{rule.inspect}' does not contain a float property `sample_rate`"
end
kwargs = {
name: rule['name'],
service: rule['service'],
resource: rule['resource'],
tags: rule['tags'],
sample_rate: sample_rate,
provenance: if (provenance = rule['provenance'])
provenance.to_sym
else
Rule::PROVENANCE_LOCAL
end,
}
kwargs.compact!
SimpleRule.new(**kwargs)
end
new(parsed_rules, rate_limit: rate_limit, default_sample_rate: default_sample_rate)
rescue => e
Datadog.logger.warn do
"Could not parse trace sampling rules '#{rules}': #{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
end
nil
end
|