dj_mon 0.0.1 → 0.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/README.md ADDED
@@ -0,0 +1,51 @@
1
+ # DJ Mon
2
+
3
+ A Rails engine based frontend for Delayed Job.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'dj_mon'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install dj_mon
18
+
19
+ ## Usage
20
+
21
+ If you are using Rails =< 3.1, or if `config.assets.initialize_on_precompile` is set to false, then add this to `config/environments/production.rb`.
22
+
23
+ config.assets.precompile += %w( dj_mon.js dj_mon.css)
24
+
25
+ Mount it in `routes.rb`
26
+
27
+ mount DjMon::Engine => 'dj_mon'
28
+
29
+ This uses http basic auth for authentication. Set the credentials in an initializer - `config/initializers/dj_mon.rb`
30
+
31
+ YourApp::Application.config.dj_mon.username = "dj_mon"
32
+ YourApp::Application.config.dj_mon.password = "password"
33
+
34
+ If the credentials are not set, then the username and password are assumed to be the above mentioned.
35
+
36
+ Now visit `http://localhost:3000/dj_mon` and profit!
37
+
38
+ ## ROADMAP
39
+
40
+ * Filter by queue.
41
+ * Option to periodically auto refresh views.
42
+ * `rake` tasks to know job status from command line.
43
+
44
+
45
+ ## Contributing
46
+
47
+ 1. Fork it
48
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
49
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
50
+ 4. Push to the branch (`git push origin my-new-feature`)
51
+ 5. Create new Pull Request
@@ -10,16 +10,26 @@ $(function(){
10
10
  var dataUrl = tabContent.data('url');
11
11
 
12
12
  $.getJSON(dataUrl).success(function(data){
13
- var template = $('#delayed_jobs_template').html();
13
+ var template = $('#dj_reports_template').html();
14
14
  if(data.length > 0)
15
15
  var output = Mustache.render(template, data);
16
16
  else
17
17
  var output = "<div class='alert alert-info centered'>No Jobs</div>";
18
18
  tabContent.html(output);
19
19
  });
20
+
20
21
  })
21
22
 
22
23
  $('.nav.nav-tabs li.active a[data-toggle="tab"]').trigger('shown');
23
24
 
25
+ (function refreshCount() {
26
+ $.getJSON('/dj_mon/dj_reports/dj_counts/').success(function(data){
27
+ var template = $('#dj_counts_template').html();
28
+ var output = Mustache.render(template, data);
29
+ $('#dj-counts-view').html(output);
30
+ setTimeout(refreshCount, 5000);
31
+ });
32
+ })();
33
+
24
34
  })
25
35
 
@@ -19,3 +19,13 @@ table.table {
19
19
  .centered {
20
20
  text-align: center;
21
21
  }
22
+
23
+ #dj-counts-view {
24
+ position: relative;
25
+ top: 10px;
26
+ width: 400px;
27
+ .badge {
28
+ float: right;
29
+ margin: 0 2px;
30
+ }
31
+ }
@@ -1,28 +1,31 @@
1
1
  module DjMon
2
- class DelayedJobsController < ActionController::Base
2
+ class DjReportsController < ActionController::Base
3
3
  respond_to :json
4
4
  layout 'dj_mon'
5
5
 
6
6
  before_filter :authenticate
7
7
 
8
8
  def index
9
- @delayed_jobs = []
10
9
  end
11
10
 
12
11
  def all
13
- respond_with Delayed::Job.all
12
+ respond_with DjReport.all
14
13
  end
15
14
 
16
15
  def failed
17
- respond_with Delayed::Job.where('delayed_jobs.failed_at IS NOT NULL')
16
+ respond_with DjReport.failed
18
17
  end
19
18
 
20
19
  def active
21
- respond_with Delayed::Job.where('delayed_jobs.locked_by IS NOT NULL')
20
+ respond_with DjReport.active
22
21
  end
23
22
 
24
23
  def queued
25
- respond_with Delayed::Job.where('delayed_jobs.failed_at IS NULL AND delayed_jobs.locked_by IS NULL')
24
+ respond_with DjReport.queued
25
+ end
26
+
27
+ def dj_counts
28
+ respond_with DjReport.dj_counts
26
29
  end
27
30
 
28
31
  protected
@@ -0,0 +1,75 @@
1
+ module DjMon
2
+ class DjReport
3
+ attr_accessor :delayed_job
4
+
5
+ def initialize delayed_job
6
+ self.delayed_job = delayed_job
7
+ end
8
+
9
+ def as_json(options={})
10
+ {
11
+ id: delayed_job.id,
12
+ priority: delayed_job.priority,
13
+ attempts: delayed_job.attempts,
14
+ queue: delayed_job.queue,
15
+ last_error: delayed_job.last_error,
16
+ failed_at: l_date(delayed_job.failed_at),
17
+ run_at: l_date(delayed_job.run_at),
18
+ created_at: l_date(delayed_job.created_at)
19
+ }
20
+ end
21
+
22
+ class << self
23
+
24
+ def all_reports
25
+ reports_for all
26
+ end
27
+
28
+ def failed_reports
29
+ reports_for failed
30
+ end
31
+
32
+ def active_reports
33
+ reports_for active
34
+ end
35
+
36
+ def queued_reports
37
+ reports_for queued
38
+ end
39
+
40
+ def dj_counts
41
+ {
42
+ failed: failed.size,
43
+ active: active.size,
44
+ queued: queued.size
45
+ }
46
+ end
47
+
48
+ def all
49
+ Delayed::Job.all
50
+ end
51
+
52
+ def failed
53
+ Delayed::Job.where('delayed_jobs.failed_at IS NOT NULL')
54
+ end
55
+
56
+ def active
57
+ Delayed::Job.where('delayed_jobs.locked_by IS NOT NULL')
58
+ end
59
+
60
+ def queued
61
+ Delayed::Job.where('delayed_jobs.failed_at IS NULL AND delayed_jobs.locked_by IS NULL')
62
+ end
63
+
64
+ def reports_for jobs
65
+ jobs.collect { |job| DjReport.new(job) }
66
+ end
67
+ end
68
+
69
+ private
70
+
71
+ def l_date date
72
+ date.present? ? I18n.l(date) : ""
73
+ end
74
+ end
75
+ end
@@ -12,13 +12,13 @@
12
12
  = link_to "Active", "#active", "data-toggle" => "tab"
13
13
 
14
14
  .tab-content
15
- .tab-pane#all.active{ 'data-url' => all_delayed_jobs_url }
16
- .tab-pane#failed{ 'data-url'=> failed_delayed_jobs_url }
17
- .tab-pane#active{ 'data-url'=> active_delayed_jobs_url }
18
- .tab-pane#queued{ 'data-url'=> queued_delayed_jobs_url }
15
+ .tab-pane#all.active{ 'data-url' => all_dj_reports_url }
16
+ .tab-pane#failed{ 'data-url'=> failed_dj_reports_url }
17
+ .tab-pane#active{ 'data-url'=> active_dj_reports_url }
18
+ .tab-pane#queued{ 'data-url'=> queued_dj_reports_url }
19
19
 
20
- %script#delayed_jobs_template{ :type=> "text/x-handlebars-template" }
21
- %table.table.table-striped#delayed-jobs-table
20
+ %script#dj_reports_template{ :type=> "text/x-handlebars-template" }
21
+ %table.table.table-striped
22
22
  %thead
23
23
  %tr
24
24
  %th
@@ -56,4 +56,4 @@
56
56
  {{job.run_at}}
57
57
  %td.date
58
58
  {{created_at}}
59
- {{/.}}
59
+ {{/.}}
@@ -9,9 +9,20 @@
9
9
  .navbar.navbar-fixed-top
10
10
  .navbar-inner
11
11
  .container
12
- = link_to "DJ Mon", delayed_jobs_url, class: "brand"
12
+ .pull-left
13
+ = link_to "DJ Mon", dj_reports_url, class: "brand"
14
+ .pull-right
15
+ #dj-counts-view
13
16
 
14
17
  .container
15
18
  = yield
16
19
 
17
20
  = javascript_include_tag "dj_mon.js"
21
+
22
+ %script#dj_counts_template{ :type=> "text/x-handlebars-template" }
23
+ %span.badge.badge-warning
24
+ {{active}} active
25
+ %span.badge.badge-info
26
+ {{queued}} queued
27
+ %span.badge.badge-important
28
+ {{failed}} failed
data/config/routes.rb CHANGED
@@ -1,13 +1,14 @@
1
1
  DjMon::Engine.routes.draw do
2
2
 
3
- resources :delayed_jobs, :only=> [ :index ] do
3
+ resources :dj_reports, :only=> [ :index ] do
4
4
  collection do
5
5
  get :all
6
6
  get :failed
7
7
  get :active
8
8
  get :queued
9
+ get :dj_counts
9
10
  end
10
11
  end
11
12
 
12
- root :to => 'delayed_jobs#index', :as => :delayed_jobs
13
+ root :to => 'dj_reports#index'
13
14
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dj_mon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.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: 2012-05-23 00:00:00.000000000 Z
12
+ date: 2012-05-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -101,8 +101,9 @@ files:
101
101
  - app/assets/javascripts/dj_mon.js
102
102
  - app/assets/javascripts/mustache.js
103
103
  - app/assets/stylesheets/dj_mon.css.scss
104
- - app/controllers/dj_mon/delayed_jobs_controller.rb
105
- - app/views/dj_mon/delayed_jobs/index.html.haml
104
+ - app/controllers/dj_mon/dj_reports_controller.rb
105
+ - app/models/dj_mon/dj_report.rb
106
+ - app/views/dj_mon/dj_reports/index.html.haml
106
107
  - app/views/layouts/dj_mon.html.haml
107
108
  - lib/dj_mon/engine.rb
108
109
  - lib/dj_mon.rb
@@ -110,8 +111,8 @@ files:
110
111
  - MIT-LICENSE
111
112
  - Rakefile
112
113
  - Gemfile
113
- - README.rdoc
114
- homepage:
114
+ - README.md
115
+ homepage: http://portfolio.akshay.cc/dj_mon/
115
116
  licenses: []
116
117
  post_install_message:
117
118
  rdoc_options: []
data/README.rdoc DELETED
@@ -1,14 +0,0 @@
1
- = DJ Mon
2
-
3
- A Rails engine based frontend for Delayed Job.
4
-
5
- Coming very soon.
6
-
7
- = Notes
8
-
9
- - app.config.assets.precompile += ['dj_mon.js', 'dj_mon.css'] for apps <= 3.1 or if config.assets.initialize_on_precompile is set to false
10
- - gem install dj_mon
11
- - mount DjMon::Engine => 'dj_mon'
12
- - basic auth using initializers
13
- --MyApp::Application.config.dj_mon.username = "foo"
14
- --MyApp::Application.config.dj_mon.password = "bar"