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 'resque' # background jobs | ||||
| gem 'resque-scheduler' # job scheduling | ||||
| gem 'resque-restriction' | ||||
| gem 'ruby-debug19' | ||||
| gem 'rubyzip' | ||||
| gem 'sinatra' | ||||
|  |  | |||
|  | @ -161,6 +161,8 @@ GEM | |||
|       redis-namespace (~> 1.0.2) | ||||
|       sinatra (>= 0.9.2) | ||||
|       vegas (~> 0.1.2) | ||||
|     resque-restriction (0.3.0) | ||||
|       resque (>= 1.7.0) | ||||
|     resque-scheduler (1.9.9) | ||||
|       redis (>= 2.0.1) | ||||
|       resque (>= 1.8.0) | ||||
|  | @ -276,6 +278,7 @@ DEPENDENCIES | |||
|   rails (>= 3.1.0, < 3.2.0) | ||||
|   rake | ||||
|   resque | ||||
|   resque-restriction | ||||
|   resque-scheduler | ||||
|   rspec (~> 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, | ||||
| # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. | ||||
| 
 | ||||
| require File.expand_path('../config/application', __FILE__) | ||||
| require 'resque/tasks' | ||||
| require 'rake/dsl_definition' | ||||
| require 'rake' | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,13 +1,15 @@ | |||
| # require 'open-uri' | ||||
| # require 'nokogiri' | ||||
| module FetchTime | ||||
|   @queue = :my_job_queue | ||||
| class FetchTime < Resque::Plugins::RestrictionJob | ||||
|   restrict :per_300 => 10 | ||||
|    | ||||
|   @queue = :low | ||||
| 
 | ||||
|   def self.perform() | ||||
| #    sleep 10 | ||||
|     # doc = Nokogiri::HTML(open('http://www.timeanddate.com/worldclock/city.html?n=241')) | ||||
|     # CronMail.time_check(doc.at('#ct').children.first.text).deliver | ||||
|     # puts "Mail Sent" | ||||
|     # true | ||||
|     doc = Nokogiri::HTML(open('http://www.timeanddate.com/worldclock/city.html?n=241')) | ||||
|     CronMail.time_check(doc.at('#ct').children.first.text).deliver | ||||
|     puts "Mail Sent" | ||||
|     true | ||||
|   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 | ||||
|      config.assets.enabled = true | ||||
|      #config.time_zone = 'Taipei'   | ||||
|      ENV['TZ'] = 'Asia/Taipei'   | ||||
|   end | ||||
| end | ||||
| Orbit_Apps = [] | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ require 'resque_scheduler' | |||
| # require 'yaml' | ||||
| 
 | ||||
| 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, | ||||
| # 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: | ||||
|   every: 30s | ||||
| do_mail_matt: | ||||
|   every: 10s | ||||
|   class: FetchTime | ||||
|   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