lib/visage-app/collectd/json.rb in visage-app-0.9.0.pre2 vs lib/visage-app/collectd/json.rb in visage-app-0.9.0

- old
+ new

@@ -34,13 +34,13 @@ host = parts[0] plugin_name = parts[1] instance_name = parts[2].split('.').first rrd = Errand.new(:filename => rrdname) - data << { :plugin => plugin_name, :instance => instance_name, + data << { :plugin => plugin_name, :instance => instance_name, :host => host, - :start => opts[:start] || (Time.now - 3600).to_i, + :start => opts[:start] || (Time.now - 3600).to_i, :finish => opts[:finish] || Time.now.to_i, :rrd => rrd } end encode(data) @@ -52,12 +52,12 @@ def encode(datas) structure = {} datas.each do |data| fetch = data[:rrd].fetch(:function => "AVERAGE", - :start => data[:start], - :finish => data[:finish]) + :start => data[:start], + :finish => data[:finish]) rrd_data = fetch[:data] # A single rrd can have multiple data sets (multiple metrics within # the same file). Separate the metrics. rrd_data.each_pair do |source, metric| @@ -73,18 +73,25 @@ else @last_valid = datapoint end end + # Last value is always wack. Set to 0, so the timescale isn't off by 1. metric[-1] = 0.0 + host = data[:host] + plugin = data[:plugin] + instance = data[:instance] + start = data[:start].to_i + finish = data[:finish].to_i - structure[data[:host]] ||= {} - structure[data[:host]][data[:plugin]] ||= {} - structure[data[:host]][data[:plugin]][data[:instance]] ||= {} - structure[data[:host]][data[:plugin]][data[:instance]][source] ||= {} - structure[data[:host]][data[:plugin]][data[:instance]][source][:start] ||= data[:start] - structure[data[:host]][data[:plugin]][data[:instance]][source][:finish] ||= data[:finish] - structure[data[:host]][data[:plugin]][data[:instance]][source][:data] ||= metric + structure[host] ||= {} + structure[host][plugin] ||= {} + structure[host][plugin][instance] ||= {} + structure[host][plugin][instance][source] ||= {} + structure[host][plugin][instance][source][:start] ||= start + structure[host][plugin][instance][source][:finish] ||= finish + structure[host][plugin][instance][source][:data] ||= metric + end end encoder = Yajl::Encoder.new encoder.encode(structure)