class Prometheus::Client::LabelSetValidator
LabelSetValidator
ensures that all used label sets comply with the Prometheus
specification.
Constants
- BASE_RESERVED_LABELS
- LABEL_NAME_REGEX
Attributes
Public Class Methods
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
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
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
Source
# File lib/prometheus/client/label_set_validator.rb, line 51 def keys_match?(labelset) labelset.keys.sort == expected_labels end
Source
# File lib/prometheus/client/label_set_validator.rb, line 61 def validate_name(key) if key.to_s.start_with?('__') raise ReservedLabelError, "label #{key} must not start with __" end unless key.to_s =~ LABEL_NAME_REGEX raise InvalidLabelError, "label name must match /#{LABEL_NAME_REGEX}/" end true end
Source
# File lib/prometheus/client/label_set_validator.rb, line 73 def validate_reserved_key(key) return true unless reserved_labels.include?(key) raise ReservedLabelError, "#{key} is reserved" end
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