Sha256: 12b14f74a6fa1e131a4903150394178c6ecf6247218932916815e780bd6b22b9

Contents?: true

Size: 1.99 KB

Versions: 10

Compression:

Stored size: 1.99 KB

Contents

class WorkLockNagger
  include ActionController::UrlWriter
  
  def initialize(start_delay = 1)
    @start_delay = start_delay
  end
  
  def nag
    sleep @start_delay.minute
    puts "Work Lock Nagger started"
    begin
      if File.exists? APP_CONFIG_FILE
        config = YAML::load(ERB.new(IO.read(APP_CONFIG_FILE)).result) || {}
        app_url = config[:app_url]
      end
      if app_url
        url = app_url + 'works/weekly_work_sheet'
      else      
        host = Socket::gethostname
        port = config && config[:port] || 3000
        url = url_for(:host => host, :port => port, :controller => 'works', :action => :weekly_work_sheet)
      end
    rescue Exception => e
      puts "Work Lock Nagger Exception"
      puts e.message
      puts e.backtrace
      exit 1
    end
    
    loop do
      puts "Nagging"
      begin
        late_work_locks = WorkLock.find(
                                        :all, 
                                        :conditions => ["end_on < ? and not exists (select id from work_locks wl2 where wl2.user_id = work_locks.user_id and wl2.end_on > work_locks.end_on)", 1.week.ago.monday ])
        
        late_users = late_work_locks.map{|wl| wl.user}.uniq
        late_users.each do |u|
          missing_date = (u.work_locks.last.end_on + 7)
          year = missing_date.year
          week = missing_date.cweek
          WorkLockNotify.deliver_nag(u, week, url + "/#{year}/#{week}")
        end
        now = Time.now
        next_nag_time = Time.local(now.year, now.month, now.day, 10, 0, 0)
        next_nag_time += 1.day if next_nag_time <= now
        sleep_duration = next_nag_time - now
        puts "Sleeping #{sleep_duration.to_i / 3600} hours #{(sleep_duration.to_i % 3600) / 60} minutes and #{sleep_duration.to_i % 60} seconds."
        puts "From #{now} to #{next_nag_time}."
        sleep sleep_duration
      rescue Exception => e
        p e
        puts e.backtrace
        sleep 5.minutes
      end
      puts "Nag ends"; STDOUT.flush
    end
  end
  
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
backlog-0.36.2 app/models/work_lock_nagger.rb
backlog-0.34.1 app/models/work_lock_nagger.rb
backlog-0.34.2 app/models/work_lock_nagger.rb
backlog-0.34 app/models/work_lock_nagger.rb
backlog-0.35.0 app/models/work_lock_nagger.rb
backlog-0.35.1 app/models/work_lock_nagger.rb
backlog-0.35.2 app/models/work_lock_nagger.rb
backlog-0.35.4 app/models/work_lock_nagger.rb
backlog-0.35.3 app/models/work_lock_nagger.rb
backlog-0.35.5 app/models/work_lock_nagger.rb