God , Resque, Resque-schedule, is working,but buggy. Need to combine with LDAP and also implement XML calendar sync.
This commit is contained in:
		
							parent
							
								
									69f2f6a716
								
							
						
					
					
						commit
						f949523bbb
					
				
							
								
								
									
										1
									
								
								Gemfile
								
								
								
								
							
							
						
						
									
										1
									
								
								Gemfile
								
								
								
								
							| 
						 | 
					@ -21,6 +21,7 @@ gem 'radius'
 | 
				
			||||||
gem 'rake'
 | 
					gem 'rake'
 | 
				
			||||||
gem 'resque' # background jobs
 | 
					gem 'resque' # background jobs
 | 
				
			||||||
gem 'resque-scheduler' # job scheduling
 | 
					gem 'resque-scheduler' # job scheduling
 | 
				
			||||||
 | 
					gem 'resque-restriction'
 | 
				
			||||||
gem 'ruby-debug19'
 | 
					gem 'ruby-debug19'
 | 
				
			||||||
gem 'rubyzip'
 | 
					gem 'rubyzip'
 | 
				
			||||||
gem 'sinatra'
 | 
					gem 'sinatra'
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -161,6 +161,8 @@ GEM
 | 
				
			||||||
      redis-namespace (~> 1.0.2)
 | 
					      redis-namespace (~> 1.0.2)
 | 
				
			||||||
      sinatra (>= 0.9.2)
 | 
					      sinatra (>= 0.9.2)
 | 
				
			||||||
      vegas (~> 0.1.2)
 | 
					      vegas (~> 0.1.2)
 | 
				
			||||||
 | 
					    resque-restriction (0.3.0)
 | 
				
			||||||
 | 
					      resque (>= 1.7.0)
 | 
				
			||||||
    resque-scheduler (1.9.9)
 | 
					    resque-scheduler (1.9.9)
 | 
				
			||||||
      redis (>= 2.0.1)
 | 
					      redis (>= 2.0.1)
 | 
				
			||||||
      resque (>= 1.8.0)
 | 
					      resque (>= 1.8.0)
 | 
				
			||||||
| 
						 | 
					@ -276,6 +278,7 @@ DEPENDENCIES
 | 
				
			||||||
  rails (>= 3.1.0, < 3.2.0)
 | 
					  rails (>= 3.1.0, < 3.2.0)
 | 
				
			||||||
  rake
 | 
					  rake
 | 
				
			||||||
  resque
 | 
					  resque
 | 
				
			||||||
 | 
					  resque-restriction
 | 
				
			||||||
  resque-scheduler
 | 
					  resque-scheduler
 | 
				
			||||||
  rspec (~> 2.0)
 | 
					  rspec (~> 2.0)
 | 
				
			||||||
  rspec-rails (~> 2.0)
 | 
					  rspec-rails (~> 2.0)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								Rakefile
								
								
								
								
							
							
						
						
									
										2
									
								
								Rakefile
								
								
								
								
							| 
						 | 
					@ -1,7 +1,9 @@
 | 
				
			||||||
 | 
					# /usr/bin/ruby -Ku
 | 
				
			||||||
# Add your own tasks in files placed in lib/tasks ending in .rake,
 | 
					# Add your own tasks in files placed in lib/tasks ending in .rake,
 | 
				
			||||||
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
 | 
					# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require File.expand_path('../config/application', __FILE__)
 | 
					require File.expand_path('../config/application', __FILE__)
 | 
				
			||||||
 | 
					require 'resque/tasks'
 | 
				
			||||||
require 'rake/dsl_definition'
 | 
					require 'rake/dsl_definition'
 | 
				
			||||||
require 'rake'
 | 
					require 'rake'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,13 +1,15 @@
 | 
				
			||||||
# require 'open-uri'
 | 
					# require 'open-uri'
 | 
				
			||||||
# require 'nokogiri'
 | 
					# require 'nokogiri'
 | 
				
			||||||
module FetchTime
 | 
					class FetchTime < Resque::Plugins::RestrictionJob
 | 
				
			||||||
  @queue = :my_job_queue
 | 
					  restrict :per_300 => 10
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  @queue = :low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def self.perform()
 | 
					  def self.perform()
 | 
				
			||||||
#    sleep 10
 | 
					#    sleep 10
 | 
				
			||||||
    # doc = Nokogiri::HTML(open('http://www.timeanddate.com/worldclock/city.html?n=241'))
 | 
					    doc = Nokogiri::HTML(open('http://www.timeanddate.com/worldclock/city.html?n=241'))
 | 
				
			||||||
    # CronMail.time_check(doc.at('#ct').children.first.text).deliver
 | 
					    CronMail.time_check(doc.at('#ct').children.first.text).deliver
 | 
				
			||||||
    # puts "Mail Sent"
 | 
					    puts "Mail Sent"
 | 
				
			||||||
    # true
 | 
					    true
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,8 @@
 | 
				
			||||||
 | 
					class NccuCalendar 
 | 
				
			||||||
 | 
					  @queue = :high
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def self.perform()
 | 
				
			||||||
 | 
					#    sleep 10
 | 
				
			||||||
 | 
					    puts "NccuCalendar Sync"
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,9 @@
 | 
				
			||||||
 | 
					class SyncDb 
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  @queue = :high
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def self.perform()
 | 
				
			||||||
 | 
					#    sleep 10
 | 
				
			||||||
 | 
					    puts "DB Sync"
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -62,6 +62,8 @@ module Orbit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Enable the asset pipeline
 | 
					    # Enable the asset pipeline
 | 
				
			||||||
     config.assets.enabled = true
 | 
					     config.assets.enabled = true
 | 
				
			||||||
 | 
					     #config.time_zone = 'Taipei'  
 | 
				
			||||||
 | 
					     ENV['TZ'] = 'Asia/Taipei'  
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
Orbit_Apps = []
 | 
					Orbit_Apps = []
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,7 +3,7 @@ require 'resque_scheduler'
 | 
				
			||||||
# require 'yaml'
 | 
					# require 'yaml'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Resque.redis = 'localhost:6379'
 | 
					Resque.redis = 'localhost:6379'
 | 
				
			||||||
Resque.redis.namespace = "resque:SchedulerExample"
 | 
					#Resque.redis.namespace = "resque:SchedulerExample"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# If you want to be able to dynamically change the schedule,
 | 
					# If you want to be able to dynamically change the schedule,
 | 
				
			||||||
# uncomment this line.  A dynamic schedule can be updated via the
 | 
					# uncomment this line.  A dynamic schedule can be updated via the
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,55 @@
 | 
				
			||||||
 | 
					rails_env   =  'development' #ENV['RAILS_ENV']  || "production"
 | 
				
			||||||
 | 
					rails_root  = ENV['RAILS_ROOT'] || "/Users/kaito/Documents/MyWorkspeace/orbit/orbit"
 | 
				
			||||||
 | 
					num_workers = rails_env == 'production' ? 5 : 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					num_workers.times do |num|
 | 
				
			||||||
 | 
					  God.watch do |w|
 | 
				
			||||||
 | 
					    w.dir      = "#{rails_root}"
 | 
				
			||||||
 | 
					    w.name     = "resque-#{num}"
 | 
				
			||||||
 | 
					    w.group    = 'resque'
 | 
				
			||||||
 | 
					    w.interval = 30.seconds
 | 
				
			||||||
 | 
					    p "/usr/bin/rake -f #{rails_root}/Rakefile resque:work  QUEUE=* RAILS_ENV=#{rails_env}"
 | 
				
			||||||
 | 
					#    w.env      = {"QUEUE"=>"critical,high,low", "RAILS_ENV"=>rails_env}
 | 
				
			||||||
 | 
					    w.start    = "rake -f #{rails_root}/Rakefile resque:work  QUEUE=* RAILS_ENV=#{rails_env}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    w.uid = 'kaito'
 | 
				
			||||||
 | 
					    w.gid = 'staff'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # restart if memory gets too high
 | 
				
			||||||
 | 
					    w.transition(:up, :restart) do |on|
 | 
				
			||||||
 | 
					      on.condition(:memory_usage) do |c|
 | 
				
			||||||
 | 
					        c.above = 350.megabytes
 | 
				
			||||||
 | 
					        c.times = 2
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # determine the state on startup
 | 
				
			||||||
 | 
					    w.transition(:init, { true => :up, false => :start }) do |on|
 | 
				
			||||||
 | 
					      on.condition(:process_running) do |c|
 | 
				
			||||||
 | 
					        c.running = true
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # determine when process has finished starting
 | 
				
			||||||
 | 
					    w.transition([:start, :restart], :up) do |on|
 | 
				
			||||||
 | 
					      on.condition(:process_running) do |c|
 | 
				
			||||||
 | 
					        c.running = true
 | 
				
			||||||
 | 
					        c.interval = 5.seconds
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # failsafe
 | 
				
			||||||
 | 
					      on.condition(:tries) do |c|
 | 
				
			||||||
 | 
					        c.times = 5
 | 
				
			||||||
 | 
					        c.transition = :start
 | 
				
			||||||
 | 
					        c.interval = 5.seconds
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # start if process is not running
 | 
				
			||||||
 | 
					    w.transition(:up, :start) do |on|
 | 
				
			||||||
 | 
					      on.condition(:process_running) do |c|
 | 
				
			||||||
 | 
					        c.running = false
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,17 @@
 | 
				
			||||||
do_my_job:
 | 
					do_mail_matt:
 | 
				
			||||||
  every: 30s
 | 
					  every: 10s
 | 
				
			||||||
  class: FetchTime
 | 
					  class: FetchTime
 | 
				
			||||||
  args: 
 | 
					  args: 
 | 
				
			||||||
  description: Runs the perform method in MyJob
 | 
					  description: Runs the perform method in FetchTime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					nccu_daily_ldap_sync:
 | 
				
			||||||
 | 
					  cron: 30 * * * * *
 | 
				
			||||||
 | 
					  class: SyncDb
 | 
				
			||||||
 | 
					  args:
 | 
				
			||||||
 | 
					  description: Runs the perform method in SnycDB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					nccu_claender_sync:
 | 
				
			||||||
 | 
					  every: 1m
 | 
				
			||||||
 | 
					  class: NccuCalendar
 | 
				
			||||||
 | 
					  args:
 | 
				
			||||||
 | 
					  description: Runs the perform method in NccuCalendar
 | 
				
			||||||
		Loading…
	
		Reference in New Issue