Sha256: ba2436eeac353f2004e66b26c380629e271f59971bac3d5eff23668bd7ff89a0
Contents?: true
Size: 1.74 KB
Versions: 6
Compression:
Stored size: 1.74 KB
Contents
# frozen_string_literal: true # The Datagram class parses and inspects a StatsD datagrams # # @note This class is part of the new Client implementation that is intended # to become the new default in the next major release of this library. class StatsD::Instrument::Datagram attr_reader :source def initialize(source) @source = source end # @return [Float] The sample rate at which this datagram was emitted, between 0 and 1. def sample_rate parsed_datagram[:sample_rate] ? Float(parsed_datagram[:sample_rate]) : 1.0 end def type @type ||= parsed_datagram[:type].to_sym end def name parsed_datagram[:name] end def value @value ||= case type when :c Integer(parsed_datagram[:value]) when :g, :h, :d, :kv, :ms Float(parsed_datagram[:value]) when :s String(parsed_datagram[:value]) else parsed_datagram[:value] end end def tags @tags ||= parsed_datagram[:tags] ? parsed_datagram[:tags].split(',') : nil end def inspect "#<#{self.class.name}:\"#{@source}\">" end def hash source.hash end def eql?(other) case other when StatsD::Instrument::Datagram source == other.source when String source == other else false end end alias_method :==, :eql? private PARSER = %r{ \A (?<name>[^\:\|\@]+)\:(?<value>[^\:\|\@]+)\|(?<type>c|ms|g|s|h|d) (?:\|\@(?<sample_rate>\d*(?:\.\d*)?))? (?:\|\#(?<tags>(?:[^\|,]+(?:,[^\|,]+)*)))? \n? # In some implementations, the datagram may include a trailing newline. \z }x def parsed_datagram @parsed ||= if (match_info = PARSER.match(@source)) match_info else raise ArgumentError, "Invalid StatsD datagram: #{@source}" end end end
Version data entries
6 entries across 6 versions & 1 rubygems