## The Rakefile require 'RRDtool' require 'daemon_temperature' task :default => :test_update_temps desc "Test Update All Disk Temperatures" task(:test_update_temps) do now = Time.now rrds = Hash.new(nil) terms = [ 'hour', 'day', 'week', 'month', 'year' ] RRD_ROOT = File.join(File.dirname(__FILE__),'rrds') IMAGE_OUTPUT_ROOT = File.join(File.dirname(__FILE__),'images','{disk}-{period}') temps = DaemonTemperature.new("localhost",7634) disks = temps.disks disks.each do |d| rrds[d] = RRDtool.new File.join(RRD_ROOT,d+'.rrd') end rrds.each do |name,rrd| next unless File.exists?("/dev/#{name}") unless File.exists?(rrd.rrdname) rrd.create(300, now.to_i - 1,[ "DS:temp:GAUGE:600:0:100", "RRA:AVERAGE:0.5:1:24", "RRA:AVERAGE:0.5:1:576", "RRA:AVERAGE:0.5:6:672", "RRA:AVERAGE:0.5:24:732", "RRA:AVERAGE:0.5:144:1460"]) end temperature = temps.temp(name) rrd.update("temp",[ "N:#{temperature}"]) terms.each do |term| image = IMAGE_OUTPUT_ROOT.gsub('{disk}',name).gsub('{period}',term) + ".png" RRDtool.graph([image, "--lazy", "-A", "-s -1#{term}", "-t hdd temperature :: #{name} (/dev/#{name}; over 1 #{term})", "-h", "80", "-w", "600", "-a", "PNG", "-v degrees C", "DEF:temp=#{rrd.rrdname}:temp:AVERAGE", "LINE2:temp#0000FF:#{name} (/dev/#{name})", "GPRINT:temp:MIN: Min\\: %2.lf", "GPRINT:temp:MAX: Max\\: %2.lf", "GPRINT:temp:AVERAGE: Avg\\: %4.1lf", "GPRINT:temp:LAST: Current\\: %2.lf degrees C\\n" ]) end end terms.each do |term| image = IMAGE_OUTPUT_ROOT.gsub('{disk}','all').gsub('{period}',term) + ".png" opts = [image, "--lazy", "-A", "-s -1#{term}", "-t hdd temperature :: all", "-h", "80", "-w", "600", "-a", "PNG", "-v degrees C"] rrds.each do |disk,rrd| opts << "DEF:#{disk}=#{rrd.rrdname}:temp:AVERAGE" end opts << [ "LINE2:hde#0000FF:hde (/dev/hde)", "LINE2:hdg#FF0000:hdg (/dev/hdg)", "LINE2:hdi#00FF00:hdi (/dev/hdi)", "LINE2:hdk#000000:hdk (/dev/hdk)", "LINE2:hdm#FF00FF:hdm (/dev/hdm)", "LINE2:hdo#00FFFF:hdo (/dev/hdo)", "LINE2:hdq#0FF00F:hdq (/dev/hdq)", "LINE2:hds#F0F0F0:hds (/dev/hds)" ] opts -= [ "LINE2:hdi#00FF00:hdi (/dev/hdi)" ] opts.flatten! RRDtool.graph(opts) end end