Sha256: ed00db759ef5ee0cd32cadd427046c608d0e0180ef628da2f43dd6bfad5c544d
Contents?: true
Size: 1.9 KB
Versions: 1
Compression:
Stored size: 1.9 KB
Contents
require "rubygems" require "sinatra/base" require "rrd" require "active_support/all" class GangliaJSCharts class << self attr_accessor :charts_root end class Server < Sinatra::Base set :public, File.expand_path(File.dirname(__FILE__) + "/../public") set :dump_errors, true get "/clusters.json" do Dir[charts_root + "/*"].select { |f| File.directory?(f) }.map { |f| f.gsub(charts_root, "").delete("/") }.to_json end get "/:cluster/servers.json" do cluster_root = charts_root + "/#{params[:cluster]}" Dir["#{cluster_root}/*"].select { |f| File.directory?(f) }.map { |f| f.gsub(cluster_root, "").delete("/") }.to_json end get "/:cluster/:server/metrics.json" do server_root = charts_root + "/#{params[:cluster]}/#{params[:server]}" Dir["#{server_root}/*"].reject { |f| File.directory?(f) }.map { |f| f.gsub(server_root, "").delete("/").gsub(".rrd", "") }.to_json end get "/:cluster/:server/:metric.json" do # NOTE: This is dangerous, but this isn't designed to be public-facing length, unit = params[:time_window].split(".") start = length.to_i.send(unit).ago rrd = RRD::Base.new(charts_root + "/" + [params[:cluster], params[:server], params[:metric]].join("/") + ".rrd") results = rrd.fetch(:average, :start => start.to_i, :end => Time.new.to_i) results[1..results.length].map { |n| n.last.nan? ? [n.first, 0] : n }.to_json end get "/" do File.read(File.expand_path(File.dirname(__FILE__) + "/../public/index.html")) end get "/graphs.json" do if File.exist?(charts_root + "/graphs.json") File.read(charts_root + "/graphs.json") else "" end end post "/graphs.json" do File.open(charts_root + "/graphs.json", "w") { |f| f << params[:json] } "" end private def charts_root GangliaJSCharts.charts_root end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
ganglia_js_charts-0.0.1 | lib/ganglia_js_charts.rb |