God , Resque, Resque-schedule, is working,but buggy. Need to combine with LDAP and also implement XML calendar sync.

This commit is contained in:
Matthew K. Fu JuYuan 2012-05-08 11:31:35 +08:00
parent a2277d7ea5
commit 8ff36ee76c
11 changed files with 104 additions and 10 deletions

View File

@ -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'

View File

@ -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)

View File

@ -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'

View File

@ -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

View File

@ -0,0 +1,8 @@
class NccuCalendar
@queue = :high
def self.perform()
# sleep 10
puts "NccuCalendar Sync"
end
end

9
app/jobs/sync_db.rb Normal file
View File

@ -0,0 +1,9 @@
class SyncDb
@queue = :high
def self.perform()
# sleep 10
puts "DB Sync"
end
end

View File

@ -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 = []

View File

@ -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

55
config/resque.god Normal file
View File

@ -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

View File

@ -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

BIN
dump.rdb Normal file

Binary file not shown.