namespace :heart do
namespace :metrics do desc "Fetches all metrics for a particular date" task :fetch_all => :environment do unless ENV.include?("todate") raise "usage: rake heart:metrics:fetch_all fromdate=2011-01-01 todate=2011-01-30" end todate = Date.parse(ENV['todate']) fromdate = Date.parse(ENV['fromdate']) fromdate.upto(todate) do |date| metric = Heart::Metric.find_or_create(date,0) metric.fetch_all end end desc "Fetch a specific metric for all days between dates" task :fetch_between => :environment do unless ENV.include?("todate") && ENV.include?("fromdate") && ENV.include?("metric") raise "usage: rake heart:metrics:fetch_between todate=2011-01-01 fromdate=2010-12-01 metric=metricName" end todate = Date.parse(ENV['todate']) fromdate = Date.parse(ENV['fromdate']) metric_name = ENV['metric'] method = "fetch_" + metric_name.to_s fromdate.upto(todate) do |date| #first for the global metrics / all users metric = Heart::Metric.find_or_create(date,0) isometric = Heart::Isometric.find_or_create(date,0) metric.send(method) metric.save isometric.send(metric_name+"=", Time.now) unless method == "fetch_all" isometric.save unless method == "fetch_all" end end desc "Fetch metrics that were not previously fetched between specific dates." task :fetch_missing => :environment do unless ENV.include?("todate") && ENV.include?("fromdate") raise "usage: rake heart:metrics:fetch_missing todate=2011-01-01 fromdate=2010-12-01" end todate = Date.parse(ENV['todate']) fromdate = Date.parse(ENV['fromdate']) fromdate.upto(todate) do |date| missing_metrics = [] isometric = Heart::Isometric.where("fulldate = ? and movingaverage = 0", date).first isometric.attributes.each { |key,value| missing_metrics.push(key) if value.nil? } metric = Heart::Metric.where("fulldate = ? and movingaverage = 0", date).first missing_metrics.each do |missing| fetch_method = "fetch_#{missing}" if metric.respond_to?(fetch_method) puts "#{fetch_method} for #{date}" begin metric.send(fetch_method) metric.save isometric.send("#{missing}=", Time.now) isometric.save rescue e puts "#{fetch_method} exception on #{date}" puts e.message end end end end end desc "Cache a moving average for a range of dates" task :moving_average => :environment do unless ENV.include?("todate") && ENV.include?("fromdate") && ENV.include?("average") raise "usage: rake heart:metrics:moving_average todate=2011-01-01 fromdate=2010-12-01 average=30" end todate = Date.parse(ENV['todate']) fromdate = Date.parse(ENV['fromdate']) movingaverage = (ENV['average'].nil?) ? 30 : ENV['average'].to_i fromdate.upto(todate) do |date| metric = Heart::Metric.find_or_create(date,movingaverage) metric.save! metric.moving_averages!(movingaverage) metric.save end end end #end metrics namespace
end end heart namespace