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)