From f949523bbb110ab5b5e289e73062e483477c88ff Mon Sep 17 00:00:00 2001 From: "Matthew K. Fu JuYuan" Date: Tue, 8 May 2012 11:31:35 +0800 Subject: [PATCH] God , Resque, Resque-schedule, is working,but buggy. Need to combine with LDAP and also implement XML calendar sync. --- Gemfile | 1 + Gemfile.lock | 3 ++ Rakefile | 2 ++ app/jobs/fetch_time.rb | 14 +++++---- app/jobs/nccu_calendar.rb | 8 +++++ app/jobs/sync_db.rb | 9 ++++++ config/application.rb | 2 ++ config/initializers/resque.rb | 2 +- config/resque.god | 55 ++++++++++++++++++++++++++++++++++ config/resque_schedule.yml | 18 +++++++++-- dump.rdb | Bin 0 -> 899 bytes 11 files changed, 104 insertions(+), 10 deletions(-) create mode 100644 app/jobs/nccu_calendar.rb create mode 100644 app/jobs/sync_db.rb create mode 100644 config/resque.god create mode 100644 dump.rdb diff --git a/Gemfile b/Gemfile index 6e6bc39c..d6129092 100644 --- a/Gemfile +++ b/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' diff --git a/Gemfile.lock b/Gemfile.lock index 80ce363c..16acce21 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -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) diff --git a/Rakefile b/Rakefile index 9a495de7..e0dc9c5b 100644 --- a/Rakefile +++ b/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' diff --git a/app/jobs/fetch_time.rb b/app/jobs/fetch_time.rb index 7758cace..5fce3036 100644 --- a/app/jobs/fetch_time.rb +++ b/app/jobs/fetch_time.rb @@ -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 diff --git a/app/jobs/nccu_calendar.rb b/app/jobs/nccu_calendar.rb new file mode 100644 index 00000000..724804d4 --- /dev/null +++ b/app/jobs/nccu_calendar.rb @@ -0,0 +1,8 @@ +class NccuCalendar + @queue = :high + + def self.perform() +# sleep 10 + puts "NccuCalendar Sync" + end +end diff --git a/app/jobs/sync_db.rb b/app/jobs/sync_db.rb new file mode 100644 index 00000000..f6458204 --- /dev/null +++ b/app/jobs/sync_db.rb @@ -0,0 +1,9 @@ +class SyncDb + + @queue = :high + + def self.perform() +# sleep 10 + puts "DB Sync" + end +end diff --git a/config/application.rb b/config/application.rb index cef8c446..8460d136 100644 --- a/config/application.rb +++ b/config/application.rb @@ -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 = [] diff --git a/config/initializers/resque.rb b/config/initializers/resque.rb index 69a535f3..f6f08406 100644 --- a/config/initializers/resque.rb +++ b/config/initializers/resque.rb @@ -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 diff --git a/config/resque.god b/config/resque.god new file mode 100644 index 00000000..6c4e4bde --- /dev/null +++ b/config/resque.god @@ -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 \ No newline at end of file diff --git a/config/resque_schedule.yml b/config/resque_schedule.yml index 6c960ede..10f97f5f 100644 --- a/config/resque_schedule.yml +++ b/config/resque_schedule.yml @@ -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 \ No newline at end of file diff --git a/dump.rdb b/dump.rdb new file mode 100644 index 0000000000000000000000000000000000000000..e5b34fe1d130ce07b54b42b5af7c97f58de85954 GIT binary patch literal 899 zcmaizPfNov7{;@@t0JPHAWn1eFde+<+N{gfP4MEuc@qyYjcc*{W70B3{BHG&shJel z35mDzKK(t<19{(@;oxcn0OS*STT1HZLbAn7JxQg#?FrBG4o?*e{XUIYdu`AI)<&mm z2>S~#opY7T_`nC^cOdLQbWDJSl$nn+hyWTVmBUCRGA=TyhA(_F&m=QVOqXo7Xtdt2 z$hg*+;Y*o|1^w??sl5mNeqxLMs=6U87x> zCv|w*HA;F8&aP1sSvgAjC2C;jd$Hw~czCs2*FqE*Jd@LytNMB!u6`N4PQ~D%F1jvY Kc_IH_z}Gj{Qy>=r literal 0 HcmV?d00001