Merge branch 'jobs_and_mail' into ldap

Conflicts:
	config/environments/development.rb
	config/routes.rb
This commit is contained in:
Christophe Vilayphiou 2012-05-08 11:45:34 +08:00
commit 65a0998080
16 changed files with 213 additions and 12 deletions

View File

@ -21,6 +21,9 @@ gem 'mysql2'
gem 'nokogiri'
gem 'radius'
gem 'rake'
gem 'resque' # background jobs
gem 'resque-scheduler' # job scheduling
gem 'resque-restriction'
gem 'ruby-debug19'
gem 'rubyzip'
gem 'therubyracer'

View File

@ -154,6 +154,20 @@ GEM
rake (0.9.2.2)
rdoc (3.12)
json (~> 1.4)
redis (2.2.2)
redis-namespace (1.0.3)
redis (< 3.0.0)
resque (1.20.0)
multi_json (~> 1.0)
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)
rufus-scheduler
rspec (2.8.0)
rspec-core (~> 2.8.0)
rspec-expectations (~> 2.8.0)
@ -183,6 +197,8 @@ GEM
ruby_parser (2.3.1)
sexp_processor (~> 3.0)
rubyzip (0.9.6.1)
rufus-scheduler (2.0.16)
tzinfo (>= 0.3.23)
ruport (1.6.3)
fastercsv
pdf-writer (= 1.1.8)
@ -223,6 +239,8 @@ GEM
uglifier (1.2.3)
execjs (>= 0.3.0)
multi_json (>= 1.0.2)
vegas (0.1.11)
rack (>= 1.0.0)
warden (1.1.1)
rack (>= 1.0)
watchr (0.7)
@ -262,6 +280,9 @@ DEPENDENCIES
radius
rails (>= 3.1.0, < 3.2.0)
rake
resque
resque-restriction
resque-scheduler
rspec (~> 2.0)
rspec-rails (~> 2.0)
ruby-debug19

View File

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

15
app/jobs/fetch_time.rb Normal file
View File

@ -0,0 +1,15 @@
# require 'open-uri'
# require 'nokogiri'
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
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

8
app/mailer/cron_mail.rb Normal file
View File

@ -0,0 +1,8 @@
class CronMail < ActionMailer::Base
default :from => "orbit_test@rulingcom.com"
def time_check(msg)
#attachments["rails.png"] = File.read("#{Rails.root}/public/images/rails.png")
mail(:to => "Matt <matt@rulingcom.com>", :subject => msg)
end
end

View File

@ -61,6 +61,8 @@ module Orbit
# Enable the asset pipeline
config.assets.enabled = true
#config.time_zone = 'Taipei'
ENV['TZ'] = 'Asia/Taipei'
end
end
Orbit_Apps = []

View File

@ -28,17 +28,16 @@ Orbit::Application.configure do
# :email_prefix => "[R4_error]",
# :sender_address => %{"notifier" <redmine@rulingcom.com>},
# :exception_recipients => %w{chris@rulingcom.com}
# config.action_mailer.delivery_method = :smtp
# config.action_mailer.smtp_settings = {
# :tls => true,
# :enable_starttls_auto => true,
# :address => "smtp.gmail.com",
# :port => '587',
# :domain => "smtp.gmail.com",
# :authentication => "plain",
# :user_name => "redmine@rulingcom.com",
# :password => "rulingredmine" }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:tls => true,
:enable_starttls_auto => true,
:address => "smtp.gmail.com",
:port => '587',
:domain => "smtp.gmail.com",
:authentication => "plain",
:user_name => "redmine@rulingcom.com",
:password => "rulingredmine" }
end

View File

@ -0,0 +1,20 @@
require 'resque_scheduler'
# require 'resque_scheduler/server'
# require 'yaml'
Resque.redis = 'localhost:6379'
#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
# Resque::Scheduler.set_schedule (and remove_schedule) methods.
# When dynamic is set to true, the scheduler process looks for
# schedule changes and applies them on the fly.
# Note: This feature is only available in >=2.0.0.
#Resque::Scheduler.dynamic = true
Dir["#{Rails.root}/app/jobs/*.rb"].each { |file| require file }
# The schedule doesn't need to be stored in a YAML, it just needs to
# be a hash. YAML is usually the easiest.
Resque.schedule = YAML.load_file(Rails.root.join('config', 'resque_schedule.yml'))

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

@ -0,0 +1,17 @@
do_mail_matt:
every: 10s
class: FetchTime
args:
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

View File

@ -1,6 +1,7 @@
Orbit::Application.routes.draw do
devise_for :users,:controllers => {:sessions => 'sessions'}
mount Resque::Server, :at => "/admin/resque"
# routes for sinatra app
match '/site/set_registered', :to => CentralServerExchangeApp
@ -12,6 +13,7 @@ Orbit::Application.routes.draw do
# routes for admin
namespace :admin do
mount Resque::Server.new, :at => "/resque"
resources :assets
resources :app_auths
resources :object_auths do

BIN
dump.rdb Normal file

Binary file not shown.

View File

@ -1,3 +1,4 @@
require 'resque_scheduler/tasks'
# encoding: utf-8
namespace :anc do

39
lib/tasks/resque.rake Normal file
View File

@ -0,0 +1,39 @@
# require "resque/tasks"
# require 'resque/scheduler'
# require 'resque/scheduler'
#
# task "resque:setup" => :environment
# Resque tasks
require 'resque/tasks'
require 'resque_scheduler/tasks'
namespace :resque do
task :setup => :environment do
require 'resque'
require 'resque_scheduler'
require 'resque/scheduler'
# you probably already have this somewhere
Resque.redis = 'localhost:6379'
# If you want to be able to dynamically change the schedule,
# uncomment this line. A dynamic schedule can be updated via the
# Resque::Scheduler.set_schedule (and remove_schedule) methods.
# When dynamic is set to true, the scheduler process looks for
# schedule changes and applies them on the fly.
# Note: This feature is only available in >=2.0.0.
#Resque::Scheduler.dynamic = true
# The schedule doesn't need to be stored in a YAML, it just needs to
# be a hash. YAML is usually the easiest.
Resque.schedule = YAML.load_file('config/resque_schedule.yml')
# If your schedule already has +queue+ set for each job, you don't
# need to require your jobs. This can be an advantage since it's
# less code that resque-scheduler needs to know about. But in a small
# project, it's usually easier to just include you job classes here.
# So, someting like this:
#require 'jobs'
end
end