Sha256: 84fb4b43fea96f2cbd07a140f100e48f94e1b1ca32ac1ee9c8ab114acab22c00
Contents?: true
Size: 1.89 KB
Versions: 1
Compression:
Stored size: 1.89 KB
Contents
# encoding: UTF-8 module Prometheus module Client # LabelSetValidator ensures that all used label sets comply with the # Prometheus specification. class LabelSetValidator # TODO: we might allow setting :instance in the future RESERVED_LABELS = [:job, :instance].freeze class LabelSetError < StandardError; end class InvalidLabelSetError < LabelSetError; end class InvalidLabelError < LabelSetError; end class ReservedLabelError < LabelSetError; end def initialize @validated = {} end def valid?(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 def validate(labels) return labels if @validated.key?(labels.hash) valid?(labels) unless @validated.empty? || match?(labels, @validated.first.last) raise InvalidLabelSetError, "labels must have the same signature " \ "(keys given: #{labels.keys.sort} vs." \ " keys expected: #{@validated.first.last.keys.sort}" end @validated[labels.hash] = labels end private def match?(a, b) a.keys.sort == b.keys.sort end def validate_symbol(key) return true if key.is_a?(Symbol) raise InvalidLabelError, "label #{key} is not a symbol" end def validate_name(key) return true unless key.to_s.start_with?('__') raise ReservedLabelError, "label #{key} must not start with __" end def validate_reserved_key(key) return true unless RESERVED_LABELS.include?(key) raise ReservedLabelError, "#{key} is reserved" end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
prometheus-client-0.9.0 | lib/prometheus/client/label_set_validator.rb |