jobbr 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.travis.yml ADDED
@@ -0,0 +1 @@
1
+ services: mongodb
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- jobbr (1.0.1)
4
+ jobbr (1.0.2)
5
5
  chronic_duration
6
6
  mongoid (~> 3.0)
7
7
  rails (~> 3.2)
data/README.rdoc CHANGED
@@ -1,3 +1,79 @@
1
1
  = Jobbr
2
2
 
3
- This project rocks and uses MIT-LICENSE.
3
+ Jobbr is a Rails engine for supervising your delayed jobs and scheduled jobs (think Cron).
4
+
5
+ It provides a framework to abstract creation and execution of such jobs and a user interface to supervise jobs and read their logs.
6
+
7
+ {<img src="https://secure.travis-ci.org/cblavier/jobbr.png?branch=master" />}[http://travis-ci.org/cblavier/jobbr]
8
+
9
+ == Screenshots
10
+
11
+ {<img src="http://f.cl.ly/items/0N0G3A3c2A1X2l2s3b3p/Capture%20d%E2%80%99%C3%A9cran%202013-02-12%20%C3%A0%2010.52.05.png" width='400'>}[http://cl.ly/image/3r320L101c3h]
12
+ {<img src="http://cl.ly/image/21433N411G01/Capture%20d%E2%80%99%C3%A9cran%202013-02-12%20%C3%A0%2010.55.13.png" width='400'>}[http://cl.ly/image/21433N411G01]
13
+
14
+ == Dependencies
15
+
16
+ Jobbr has strong dependencies on following components:
17
+
18
+ * *Mongoid*: all jobs are stored in MongoDB for supervision. May be abstracted out later for ActiveRecord compatibility.
19
+ * *Whenever*: Jobbr uses {Whenever}[https://github.com/javan/whenever] gem to automatically updates Crontab during a Capistrano deployment.
20
+
21
+ == Setup
22
+
23
+ Start by adding Jobbr to your Gemfile:
24
+
25
+ gem 'jobbr'
26
+
27
+ === User interface
28
+
29
+ Then mount Jobbr engine to your `routes.rb` file.
30
+
31
+ mount Jobbr::Engine => "/jobbr"
32
+
33
+ === Scheduled Jobs
34
+
35
+ Use provided generators to create a first scheduled job
36
+
37
+ $> rails g jobbr:scheduled_job dummy
38
+
39
+ It will create a namespaced model as a well as a Whenever configuration file.
40
+
41
+ Provided you fill in description and scheduling attributes in the model, you will be able to see it in rake tasks:
42
+
43
+ $> rake -T | grep jobbr
44
+ rake jobbr:dummy_job # A dummy Job
45
+
46
+ And to see it in your crontab preview:
47
+
48
+ $> whenever
49
+ 30 5 * * * /bin/bash -l -c 'cd /Users/cblavier/code/my_app && RAILS_ENV=production bundle exec rake jobbr:dummy_job >> /Users/cblavier/code/my_app/log/cron.log 2>&1'
50
+
51
+ === Delayed Jobs
52
+
53
+ Use generators to get a new job model:
54
+
55
+ $> rails g jobbr:delayed_job dummy
56
+
57
+ You will get a new model with a perform method. Perform parameters are:
58
+
59
+ * params: is a hash of parameters for your job.
60
+ * run: is the object that will be persisted (and polled) for this job execution. Your delayed job can use it to provide progress information (to display a progress bar) and a final result.
61
+
62
+ run.progress = 100
63
+ run.result = 'my job result'
64
+
65
+ You can now run your delayed job as following:
66
+
67
+ run_id = DelayedJobs::DummyJob.run_delayed(some_param: 37)
68
+
69
+ And then get job status like this:
70
+
71
+ Jobbr::Run.find(run_id).status # returns :waiting / :running / :failure / :success
72
+
73
+ Jobbr also provides a controller to run and poll delayed_jobs :
74
+
75
+ * Post on following url to run your job: <tt>delayed_job_creation_path(DelayedJobs::DummyJob, { some_param: 37 })</tt>
76
+
77
+ * And then poll this url (using the id returned in previous post) to get your job status: <tt>delayed_job_polling_path(run_id)</tt>
78
+
79
+ This project rocks and uses MIT-LICENSE.
@@ -2,11 +2,11 @@ module Jobbr
2
2
  module ApplicationHelper
3
3
 
4
4
  def delayed_job_creation_path(delayed_job_class, params = {})
5
- delayed_jobs_path(params.merge(job_name: delayed_job_class.name.underscore))
5
+ jobbr.delayed_jobs_path(params.merge(job_name: delayed_job_class.name.underscore))
6
6
  end
7
7
 
8
8
  def delayed_job_polling_path(id = ':job_id')
9
- delayed_job_path(id)
9
+ jobbr.delayed_job_path(id)
10
10
  end
11
11
 
12
12
  def status_icon_class(job_status)
@@ -1,5 +1,9 @@
1
1
  en:
2
2
 
3
+ time:
4
+ formats:
5
+ default: "%d %b %Y %H:%M:%S"
6
+
3
7
  layouts:
4
8
  jobbr:
5
9
  application:
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Generates a new delayed job in DelayedJobs namespace.
3
+
4
+ Example:
5
+ rails generate delayed_job MySample
6
+
7
+ This will create:
8
+ Model: app/models/delayed_jobs/my_sample_job.rb
@@ -0,0 +1,10 @@
1
+ class Jobbr::DelayedJobGenerator < Rails::Generators::NamedBase
2
+
3
+ source_root File.expand_path('../templates', __FILE__)
4
+
5
+ def create_delayed_job
6
+ empty_directory "app/models/delayed_jobs"
7
+ template "delayed_job.erb", "app/models/delayed_jobs/#{file_name}_job.rb", name: file_name
8
+ end
9
+
10
+ end
@@ -0,0 +1,11 @@
1
+ module DelayedJobs
2
+
3
+ class <%=name.camelize%>Job < Jobbr::DelayedJob
4
+
5
+ def perform(params, run)
6
+ # put your job code here
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -0,0 +1,10 @@
1
+ Description:
2
+ Generates a new scheduled job in ScheduledJobs namespace.
3
+ Will also create a Whenever configuration file.
4
+
5
+ Example:
6
+ rails generate scheduled_job MySample
7
+
8
+ This will create:
9
+ Model: app/models/scheduled_jobs/my_sample_job.rb
10
+ Config: config/schedule.rb
@@ -0,0 +1,11 @@
1
+ class Jobbr::ScheduledJobGenerator < Rails::Generators::NamedBase
2
+
3
+ source_root File.expand_path('../templates', __FILE__)
4
+
5
+ def create_scheduled_job
6
+ empty_directory "app/models/scheduled_jobs"
7
+ template "scheduled_job.erb", "app/models/scheduled_jobs/#{file_name}_job.rb", name: file_name
8
+ generate 'jobbr:scheduled_job_config'
9
+ end
10
+
11
+ end
@@ -0,0 +1,15 @@
1
+ module ScheduledJobs
2
+
3
+ class <%=name.camelize%>Job < Jobbr::ScheduledJob
4
+
5
+ # description 'Describe your job here'
6
+
7
+ # every 1.day, at: '5am'
8
+
9
+ def perform
10
+ # put your job code here
11
+ end
12
+
13
+ end
14
+
15
+ end
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Generate Whenever schedule.rb config file
3
+
4
+ Example:
5
+ rails generate scheduled_job_config
6
+
7
+ This will create:
8
+ Config: config/schedule.rb
@@ -0,0 +1,8 @@
1
+ class Jobbr::ScheduledJobConfigGenerator < Rails::Generators::Base
2
+ source_root File.expand_path('../templates', __FILE__)
3
+
4
+ def copy_config_file
5
+ copy_file "schedule.rb", "config/schedule.rb"
6
+ end
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ ENV['RAILS_ENV'] = ARGV.first || ENV['RAILS_ENV'] || 'development'
2
+ require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
3
+ require "jobbr/whenever"
4
+
5
+ set :output, "#{path}/log/cron.log"
6
+ job_type :rake, "cd :path && RAILS_ENV=:environment bundle exec rake :task :output"
7
+
8
+ Jobbr::Whenever.schedule_jobs(self)
data/lib/jobbr/engine.rb CHANGED
@@ -3,5 +3,11 @@ module Jobbr
3
3
 
4
4
  isolate_namespace Jobbr
5
5
 
6
+ initializer 'jobbr.action_controller' do |app|
7
+ ActiveSupport.on_load :action_controller do
8
+ helper Jobbr::ApplicationHelper
9
+ end
10
+ end
11
+
6
12
  end
7
13
  end
data/lib/jobbr/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Jobbr
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
@@ -0,0 +1,3 @@
1
+ class HomeController < ApplicationController
2
+
3
+ end
@@ -0,0 +1,11 @@
1
+ module DelayedJobs
2
+
3
+ class DummyJob < Jobbr::DelayedJob
4
+
5
+ def perform(params, run)
6
+ # put your job code here
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -0,0 +1,15 @@
1
+ module ScheduledJobs
2
+
3
+ class DummyJob < Jobbr::ScheduledJob
4
+
5
+ # description 'Describe your job here'
6
+
7
+ # every 1.day, at: '5am'
8
+
9
+ def perform
10
+ # put your job code here
11
+ end
12
+
13
+ end
14
+
15
+ end
@@ -0,0 +1 @@
1
+ = delayed_job_polling_path
@@ -23,11 +23,11 @@ Dummy::Application.configure do
23
23
  config.action_dispatch.best_standards_support = :builtin
24
24
 
25
25
  # Raise exception on mass assignment protection for Active Record models
26
- config.active_record.mass_assignment_sanitizer = :strict
26
+ # config.active_record.mass_assignment_sanitizer = :strict
27
27
 
28
28
  # Log the query plan for queries taking more than this (works
29
29
  # with SQLite, MySQL, and PostgreSQL)
30
- config.active_record.auto_explain_threshold_in_seconds = 0.5
30
+ # config.active_record.auto_explain_threshold_in_seconds = 0.5
31
31
 
32
32
  # Do not compress assets
33
33
  config.assets.compress = false
@@ -1,4 +1,9 @@
1
1
  Rails.application.routes.draw do
2
2
 
3
+ resource :home
4
+
5
+ root to: 'home#index'
6
+
3
7
  mount Jobbr::Engine => "/jobbr"
8
+
4
9
  end
@@ -1,7 +1,5 @@
1
- # loading Rails environment
2
1
  ENV['RAILS_ENV'] = ARGV.first || ENV['RAILS_ENV'] || 'development'
3
2
  require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
4
-
5
3
  require "jobbr/whenever"
6
4
 
7
5
  set :output, "#{path}/log/cron.log"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jobbr
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-11 00:00:00.000000000 Z
12
+ date: 2013-02-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -117,6 +117,7 @@ extra_rdoc_files: []
117
117
  files:
118
118
  - .gitignore
119
119
  - .rspec
120
+ - .travis.yml
120
121
  - Gemfile
121
122
  - Gemfile.lock
122
123
  - MIT-LICENSE
@@ -145,6 +146,15 @@ files:
145
146
  - config/locales/jobbr.en.yml
146
147
  - config/routes.rb
147
148
  - jobbr.gemspec
149
+ - lib/generators/jobbr/delayed_job/USAGE
150
+ - lib/generators/jobbr/delayed_job/delayed_job_generator.rb
151
+ - lib/generators/jobbr/delayed_job/templates/delayed_job.erb
152
+ - lib/generators/jobbr/scheduled_job/USAGE
153
+ - lib/generators/jobbr/scheduled_job/scheduled_job_generator.rb
154
+ - lib/generators/jobbr/scheduled_job/templates/scheduled_job.erb
155
+ - lib/generators/jobbr/scheduled_job_config/USAGE
156
+ - lib/generators/jobbr/scheduled_job_config/scheduled_job_config_generator.rb
157
+ - lib/generators/jobbr/scheduled_job_config/templates/schedule.rb
148
158
  - lib/jobbr.rb
149
159
  - lib/jobbr/engine.rb
150
160
  - lib/jobbr/logger.rb
@@ -158,10 +168,14 @@ files:
158
168
  - spec/dummy/app/assets/javascripts/application.js
159
169
  - spec/dummy/app/assets/stylesheets/application.css
160
170
  - spec/dummy/app/controllers/application_controller.rb
171
+ - spec/dummy/app/controllers/home_controller.rb
161
172
  - spec/dummy/app/helpers/application_helper.rb
162
173
  - spec/dummy/app/mailers/.gitkeep
163
174
  - spec/dummy/app/models/.gitkeep
175
+ - spec/dummy/app/models/delayed_jobs/dummy_job.rb
176
+ - spec/dummy/app/models/scheduled_jobs/dummy_job.rb
164
177
  - spec/dummy/app/models/scheduled_jobs/dummy_scheduled_job.rb
178
+ - spec/dummy/app/views/home/index.html.haml
165
179
  - spec/dummy/app/views/layouts/application.html.erb
166
180
  - spec/dummy/config.ru
167
181
  - spec/dummy/config/application.rb
@@ -216,7 +230,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
216
230
  version: '0'
217
231
  segments:
218
232
  - 0
219
- hash: 4397243311957353951
233
+ hash: -3816807039260850445
220
234
  required_rubygems_version: !ruby/object:Gem::Requirement
221
235
  none: false
222
236
  requirements:
@@ -225,7 +239,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
225
239
  version: '0'
226
240
  segments:
227
241
  - 0
228
- hash: 4397243311957353951
242
+ hash: -3816807039260850445
229
243
  requirements: []
230
244
  rubyforge_project:
231
245
  rubygems_version: 1.8.23
@@ -238,10 +252,14 @@ test_files:
238
252
  - spec/dummy/app/assets/javascripts/application.js
239
253
  - spec/dummy/app/assets/stylesheets/application.css
240
254
  - spec/dummy/app/controllers/application_controller.rb
255
+ - spec/dummy/app/controllers/home_controller.rb
241
256
  - spec/dummy/app/helpers/application_helper.rb
242
257
  - spec/dummy/app/mailers/.gitkeep
243
258
  - spec/dummy/app/models/.gitkeep
259
+ - spec/dummy/app/models/delayed_jobs/dummy_job.rb
260
+ - spec/dummy/app/models/scheduled_jobs/dummy_job.rb
244
261
  - spec/dummy/app/models/scheduled_jobs/dummy_scheduled_job.rb
262
+ - spec/dummy/app/views/home/index.html.haml
245
263
  - spec/dummy/app/views/layouts/application.html.erb
246
264
  - spec/dummy/config.ru
247
265
  - spec/dummy/config/application.rb