module Ocular::DSL::Graphite
Public Instance Methods
graphite(target, options = {})
click to toggle source
add_help “graphite”, “what?”
# File lib/ocular/dsl/graphite.rb, line 11 def graphite(target, options = {}) datasources = ::Ocular::Settings::get(:datasources) if !datasources or !datasources[:graphite] raise "No graphite client settings" end settings = datasources[:graphite] uri = URI.parse(settings[:url]) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = uri.instance_of?(URI::HTTPS) if !options[:from] options[:from] = "-1min" end if options[:format] options.delete(:format) end query = "/render?target=#{CGI.escape(target)}&format=json" options.each do |k, v| query += "&#{k}=#{CGI.escape(v)}" end request = Net::HTTP::Get.new(query) response = http.request(request) if !response raise "error, no response from post request" end if response.code.to_i != 200 raise "Invalid response from graphite for query #{query}. Response code: #{response.code}, response body: #{response.body}" end begin return JSON.parse(response.body) rescue return nil end end
graphite_get_latests(target, options = {})
click to toggle source
# File lib/ocular/dsl/graphite.rb, line 51 def graphite_get_latests(target, options = {}) values = {} response = graphite(target, options) response.each do |reply| if reply and reply["datapoints"] and reply["datapoints"].length > 0 # Discard null replies not_null = reply["datapoints"].select {|x| x and x[0] } # sort in descending order not_null.sort! {|a,b| b[1] <=> a[1]} if not_null.length > 0 # pick latests datapoint # from that pick the value values[reply["target"]] = not_null.first[0] end end end return values end