class ProtorClient

Constants

DEFAULT_BUCKET
DEFAULT_CONFIG
VERSION

Attributes

config[R]

Public Class Methods

new() { |config| ... } click to toggle source
Calls superclass method
# File lib/protor_client.rb, line 18
def initialize(&block)
  super(&block)

  @families = []
  @config = DEFAULT_CONFIG.dup
  @conn = nil
  yield(config) if block_given?
end

Public Instance Methods

closeconn() click to toggle source
# File lib/protor_client.rb, line 83
def closeconn
  @conn.close
  @conn = nil
end
counter(metric_name, value, labels = {}) click to toggle source
# File lib/protor_client.rb, line 27
def counter(metric_name, value, labels = {})
  safely do 
    @families << Protomodel::Sample.new(:service => config[:service], :name => metric_name, :kind => "c", :value => value, :label => labels)
  end
  logger.debug("add counter") if logger
end
gauge(metric_name, value, labels = {}) click to toggle source
# File lib/protor_client.rb, line 34
def gauge(metric_name, value, labels = {})
  safely do
    @families << Protomodel::Sample.new(:service => config[:service], :name => metric_name, :kind => "g", :value => value, :label => labels)
  end
  logger.debug("add gauge") if logger
end
histogram(metric_name, value, buckets = DEFAULT_BUCKET, labels = {}) click to toggle source
# File lib/protor_client.rb, line 41
def histogram(metric_name, value, buckets = DEFAULT_BUCKET, labels = {})
  safely do
    @families << Protomodel::Sample.new(:service => config[:service], :name => metric_name, :kind => "h", :value => value, :label => labels, :histogramDef => buckets)
  end
  logger.debug("add histogram") if logger
end
histogram_linear(metric_name, value, buckets, labels = {}) click to toggle source
# File lib/protor_client.rb, line 48
def histogram_linear(metric_name, value, buckets, labels = {})
  safely do
    @families << Protomodel::Sample.new(:service => config[:service], :name => metric_name, :kind => "hl", :value => value, :label => labels, :histogramDef => buckets)
  end
  logger.debug("add histogram linear") if logger
end
publish() click to toggle source
# File lib/protor_client.rb, line 55
def publish
  safely do 
    return unless @families.length
    openconn unless @conn
    msg = Protomodel::Samples.new(:array => @families)
    encoded = Protomodel::Samples.encode(msg)
    begin 
      timeout(5) do
        @conn.write(encoded)
        reset if @conn.gets
      end
    rescue Exception => err # second attempt
      openconn
      begin
        timeout(5) do
          @conn.write(encoded)
          reset if @conn.gets
        end
      rescue Exception => err #raise error and put on logger
        logger.error(err) if logger
        raise err unless silent
        return
      end
    end
  end
  logger.debug("publish") if logger
end

Private Instance Methods

logger() click to toggle source
# File lib/protor_client.rb, line 112
def logger
  config[:logger]
end
openconn() click to toggle source
# File lib/protor_client.rb, line 102
def openconn
  begin 
    @conn = TCPSocket.open(config[:host], config[:port])
  rescue StandardError => err
    logger.error(err) if logger
    raise err unless silent
    return
  end
end
reset() click to toggle source
# File lib/protor_client.rb, line 90
def reset
  @families = []
end
safely(&block) click to toggle source
# File lib/protor_client.rb, line 94
def safely(&block)
  synchronize(&block)
rescue StandardError => err
  logger.error(err) if logger
  raise err unless silent
  return
end
silent() click to toggle source
# File lib/protor_client.rb, line 116
def silent
  config[:silent]
end