class Prometheus::Client::LabelSetValidator
LabelSetValidator
ensures that all used label sets comply with the Prometheus
specification.
Constants
- BASE_RESERVED_LABELS
TODO: we might allow setting :instance in the future
Attributes
expected_labels[R]
reserved_labels[R]
Public Class Methods
new(expected_labels:, reserved_labels: [])
click to toggle source
# File lib/prometheus/client/label_set_validator.rb, line 18 def initialize(expected_labels:, reserved_labels: []) @expected_labels = expected_labels.sort @reserved_labels = BASE_RESERVED_LABELS + reserved_labels end
Public Instance Methods
validate_labelset!(labelset)
click to toggle source
# File lib/prometheus/client/label_set_validator.rb, line 35 def validate_labelset!(labelset) begin return labelset if keys_match?(labelset) rescue ArgumentError # If labelset contains keys that are a mixture of strings and symbols, this will # raise when trying to sort them, but the error should be the same: # InvalidLabelSetError end raise InvalidLabelSetError, "labels must have the same signature " \ "(keys given: #{labelset.keys} vs." \ " keys expected: #{expected_labels}" end
validate_symbols!(labels)
click to toggle source
# File lib/prometheus/client/label_set_validator.rb, line 23 def validate_symbols!(labels) unless labels.respond_to?(:all?) raise InvalidLabelSetError, "#{labels} is not a valid label set" end labels.all? do |key, _| validate_symbol(key) validate_name(key) validate_reserved_key(key) end end
Private Instance Methods
keys_match?(labelset)
click to toggle source
# File lib/prometheus/client/label_set_validator.rb, line 51 def keys_match?(labelset) labelset.keys.sort == expected_labels end
validate_name(key)
click to toggle source
# File lib/prometheus/client/label_set_validator.rb, line 61 def validate_name(key) return true unless key.to_s.start_with?('__') raise ReservedLabelError, "label #{key} must not start with __" end
validate_reserved_key(key)
click to toggle source
# File lib/prometheus/client/label_set_validator.rb, line 67 def validate_reserved_key(key) return true unless reserved_labels.include?(key) raise ReservedLabelError, "#{key} is reserved" end
validate_symbol(key)
click to toggle source
# File lib/prometheus/client/label_set_validator.rb, line 55 def validate_symbol(key) return true if key.is_a?(Symbol) raise InvalidLabelError, "label #{key} is not a symbol" end