class Metrics::Reporters::Librato
Constants
- API_URL
Attributes
api_token[R]
user[R]
Public Class Methods
new(options = {})
click to toggle source
# File lib/ruby-metrics/reporters/librato.rb, line 13 def initialize(options = {}) @api_token = options[:api_token] @user = options[:user] @headers = { 'User-Agent' => "ruby-metrics #{Metrics::VERSION}" } end
Public Instance Methods
report(agent)
click to toggle source
# File lib/ruby-metrics/reporters/librato.rb, line 45 def report(agent) agent.instruments.each do |name, instrument| measure_time = Time.now.to_i case instrument when Metrics::Instruments::Counter send_data "#{API_URL}/counters/#{name}.json", :measure_time => measure_time, :value => instrument.to_i when Metrics::Instruments::Gauge post_url = "#{API_URL}/gauges/#{name}.json" if instrument.get.is_a? Hash instrument.get.each do |key, value| send_data post_url, :measure_time => measure_time, :source => key, :value => value end else send_data post_url, :measure_time => measure_time, :value => instrument.get end when Metrics::Instruments::Timer [:count, :fifteen_minute_rate, :five_minute_rate, :one_minute_rate, :min, :max, :mean].each do |attribute| send_data "#{API_URL}/gauges/#{name}.json", :measure_time => measure_time, :source => attribute, :value => instrument.send(attribute) end else puts "Unhandled instrument" end end end
send_data(post_url, post_data)
click to toggle source
# File lib/ruby-metrics/reporters/librato.rb, line 21 def send_data(post_url, post_data) url = URI.parse(post_url) req = Net::HTTP::Post.new(url.path) req.basic_auth @user, @api_token @headers.each do |k,v| req.add_field(k, v) end req.set_form_data(post_data) https = Net::HTTP.new(url.host, url.port) https.use_ssl = true #https.set_debug_output($stdout) https.start do |http| result = http.request(req) case result when Net::HTTPCreated # OK puts "SENT!" else puts "FAILED TO SEND: #{https.inspect}" end end end