-
Notifications
You must be signed in to change notification settings - Fork 229
/
internal.rb
66 lines (56 loc) · 1.67 KB
/
internal.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# frozen_string_literal: true
# Copyright The OpenTelemetry Authors
#
# SPDX-License-Identifier: Apache-2.0
module OpenTelemetry
module SDK
# @api private
#
# Internal contains helpers used by the reference implementation.
module Internal
extend self
def boolean?(value)
value.instance_of?(TrueClass) || value.instance_of?(FalseClass)
end
def valid_key?(key)
key.instance_of?(String)
end
def numeric?(value)
value.instance_of?(Integer) || value.instance_of?(Float)
end
def valid_simple_value?(value)
value.instance_of?(String) || boolean?(value) || numeric?(value)
end
def valid_array_value?(value)
return false unless value.is_a?(Array)
return true if value.empty?
case value.first
when String
value.all? { |v| v.instance_of?(String) }
when TrueClass, FalseClass
value.all? { |v| boolean?(v) }
when Numeric
value.all? { |v| numeric?(v) }
else
false
end
end
def valid_value?(value)
valid_simple_value?(value) || valid_array_value?(value)
end
def valid_attributes?(owner, kind, attrs)
attrs.nil? || attrs.all? do |k, v|
if !valid_key?(k)
OpenTelemetry.handle_error(message: "invalid #{kind} attribute key type #{k.class} on span '#{owner}'")
false
elsif !valid_value?(v)
OpenTelemetry.handle_error(message: "invalid #{kind} attribute value type #{v.class} for key '#{k}' on span '#{owner}'")
false
else
true
end
end
end
end
end
end