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 17 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 34 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 22 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 50 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 60 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 66 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 54 def validate_symbol(key) return true if key.is_a?(Symbol) raise InvalidLabelError, "label #{key} is not a symbol" end