Sha256: 6543be1175c547cd54e0405ed3f5e00739bf7a33e629aaf757dc0b8cde4365c2

Contents?: true

Size: 1.95 KB

Versions: 1

Compression:

Stored size: 1.95 KB

Contents

require 'uri'
require 'net/http'

module Harness
  class LibratoAdapter
    class Config 
      attr_accessor :email, :token
    end

    def self.config
      @config ||= Config.new
    end

    def log_gauge(gauge)
      raise Harness::LoggingError if gauge.id.length > 63

      post({:gauges => [{
        :name => sanitize(gauge.id),
        :display_name => gauge.name,
        :value => gauge.value,
        :measure_time => gauge.time.to_i,
        :source => gauge.source,
        :attributes => { :display_units_short => gauge.units }
      }]})
    end

    def log_counter(counter)
      raise Harness::LoggingError if counter.id.length > 63

      post({:counters => [{
        :name => sanitize(counter.id),
        :display_name => counter.name,
        :value => counter.value,
        :measure_time => counter.time.to_i,
        :source => counter.source,
        :attributes => { :display_units_short => counter.units }
      }]})
    end

    private
    def post(params)
      unless config.email && config.token
        raise "Adapter not configured. Ensure email and token are set."
      end

      uri = URI.parse('https://metrics-api.librato.com/v1/metrics')

      Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
        request = Net::HTTP::Post.new uri.request_uri

        request.basic_auth config.email, config.token
        request['Content-Type'] = 'application/json'
        request.body = MultiJson.dump params

        response = http.request request

        unless response.code.to_i == 200
          text = %Q{
          Server Said: #{response.body}
          Sent: #{params.inspect}
          }

          raise Harness::LoggingError, text
        end
      end

      true
    end

    def config
      self.class.config
    end

    def sanitize(name)
      if Harness.config.namespace
        key = "#{name}.#{Harness.config.namespace}"
      else
        key = name
      end

      key.gsub('/', '.')
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
harness-0.8.0 lib/harness/adapters/librato_adapter.rb