dj_mon 0.1.1 → 0.1.3
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 +19 -18
- data/Rakefile +28 -7
- data/app/assets/javascripts/dj_mon.js +1 -1
- data/app/assets/stylesheets/dj_mon.css +10 -1
- data/app/controllers/dj_mon/dj_reports_controller.rb +23 -13
- data/app/models/dj_mon/dj_report.rb +19 -28
- data/app/views/dj_mon/dj_reports/index.html.haml +2 -2
- data/app/views/layouts/dj_mon.html.haml +27 -13
- data/config/routes.rb +1 -1
- data/lib/dj_mon/backend/activerecord.rb +33 -0
- data/lib/dj_mon/backend/mongoid.rb +33 -0
- data/lib/dj_mon/backend.rb +21 -0
- data/lib/dj_mon/version.rb +3 -0
- data/lib/dj_mon.rb +1 -0
- metadata +71 -3
data/README.md
CHANGED
@@ -1,14 +1,7 @@
|
|
1
|
-
# DJ Mon
|
1
|
+
# DJ Mon [](http://travis-ci.org/akshayrawat/dj_mon)
|
2
2
|
|
3
3
|
A Rails engine based frontend for Delayed Job.
|
4
4
|
|
5
|
-
## Demo
|
6
|
-
* [Demo URL](http://dj-mon-demo.herokuapp.com/)
|
7
|
-
* Username: `dj_mon`
|
8
|
-
* Password: `password`
|
9
|
-
* [Demo Source](https://github.com/akshayrawat/dj_mon_demo)
|
10
|
-
|
11
|
-
|
12
5
|
## Installation
|
13
6
|
|
14
7
|
Add this line to your application's Gemfile:
|
@@ -24,7 +17,8 @@ Or install it yourself as:
|
|
24
17
|
$ gem install dj_mon
|
25
18
|
|
26
19
|
## Note
|
27
|
-
|
20
|
+
|
21
|
+
Supports only `activerecord` and `mongoid` for now.
|
28
22
|
|
29
23
|
## Usage
|
30
24
|
|
@@ -45,16 +39,23 @@ If the credentials are not set, then the username and password are assumed to be
|
|
45
39
|
|
46
40
|
Now visit `http://localhost:3000/dj_mon` and profit!
|
47
41
|
|
42
|
+
|
48
43
|
## Demo
|
49
|
-
|
50
|
-
*
|
44
|
+
|
45
|
+
* [Demo URL](http://dj-mon-demo.herokuapp.com/)
|
51
46
|
* Username: `dj_mon`
|
52
|
-
* Password: `password`
|
47
|
+
* Password: `password`
|
48
|
+
* [Demo Source](https://github.com/akshayrawat/dj_mon_demo)
|
49
|
+
|
50
|
+

|
51
|
+
|
52
|
+
|
53
|
+
## Running the test suite
|
53
54
|
|
54
|
-
|
55
|
+
To run the test suite, execute the following commands on the project
|
56
|
+
root:
|
55
57
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
5. Create new Pull Request
|
58
|
+
gem install bundler
|
59
|
+
bundle install
|
60
|
+
rake test:prepare
|
61
|
+
rake
|
data/Rakefile
CHANGED
@@ -7,18 +7,38 @@ rescue LoadError
|
|
7
7
|
end
|
8
8
|
|
9
9
|
require 'rake'
|
10
|
-
require '
|
10
|
+
require 'rdoc/task'
|
11
11
|
|
12
12
|
require 'rake/testtask'
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
namespace :test do
|
15
|
+
|
16
|
+
desc "Run all tests for the ActiveRecord backend"
|
17
|
+
Rake::TestTask.new(:active_record) do |t|
|
18
|
+
t.pattern = 'test/**/*_test.rb'
|
19
|
+
t.libs = [ "test/dummy_active_record" ]
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "Run all tests for the Mongoid backend"
|
23
|
+
Rake::TestTask.new(:mongoid) do |t|
|
24
|
+
t.pattern = 'test/**/*_test.rb'
|
25
|
+
t.libs = [ "test/dummy_mongoid" ]
|
26
|
+
end
|
27
|
+
|
28
|
+
desc "Runs all tests"
|
29
|
+
task "all"=> [ :active_record, :mongoid ]
|
30
|
+
|
31
|
+
desc "Prepare environment for tests"
|
32
|
+
task :prepare do
|
33
|
+
FileUtils.cd File.expand_path("../test/dummy_active_record", __FILE__)
|
34
|
+
system("rake db:create:all")
|
35
|
+
system("rake db:migrate")
|
36
|
+
system("rake db:test:clone")
|
37
|
+
end
|
38
|
+
|
19
39
|
end
|
20
40
|
|
21
|
-
task :
|
41
|
+
task default: 'test:all'
|
22
42
|
|
23
43
|
Rake::RDocTask.new(:rdoc) do |rdoc|
|
24
44
|
rdoc.rdoc_dir = 'rdoc'
|
@@ -27,3 +47,4 @@ Rake::RDocTask.new(:rdoc) do |rdoc|
|
|
27
47
|
rdoc.rdoc_files.include('README.rdoc')
|
28
48
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
29
49
|
end
|
50
|
+
|
@@ -39,7 +39,7 @@ $(function(){
|
|
39
39
|
});
|
40
40
|
|
41
41
|
(function refreshCount() {
|
42
|
-
$.getJSON(
|
42
|
+
$.getJSON(dj_counts_dj_reports_url).success(function(data){
|
43
43
|
var template = $('#dj_counts_template').html();
|
44
44
|
var output = Mustache.render(template, data);
|
45
45
|
$('#dj-counts-view').html(output);
|
@@ -4,6 +4,15 @@ body {
|
|
4
4
|
padding: 90px;
|
5
5
|
}
|
6
6
|
|
7
|
+
.container {
|
8
|
+
width: 980px;
|
9
|
+
}
|
10
|
+
|
11
|
+
.navbar .btn#settings {
|
12
|
+
margin: 8px 5px 5px;
|
13
|
+
padding: 1px 10px 1px;
|
14
|
+
}
|
15
|
+
|
7
16
|
table#jobs-table td, table#jobs-table th {
|
8
17
|
text-align: center;
|
9
18
|
}
|
@@ -38,4 +47,4 @@ code.block {
|
|
38
47
|
|
39
48
|
form.form-inline {
|
40
49
|
display: inline;
|
41
|
-
}
|
50
|
+
}
|
@@ -1,9 +1,10 @@
|
|
1
1
|
module DjMon
|
2
2
|
class DjReportsController < ActionController::Base
|
3
|
-
respond_to :json
|
3
|
+
respond_to :json, :html
|
4
4
|
layout 'dj_mon'
|
5
|
-
|
5
|
+
|
6
6
|
before_filter :authenticate
|
7
|
+
after_filter :set_api_version
|
7
8
|
|
8
9
|
def index
|
9
10
|
end
|
@@ -23,27 +24,31 @@ module DjMon
|
|
23
24
|
def queued
|
24
25
|
respond_with DjReport.queued_reports
|
25
26
|
end
|
26
|
-
|
27
|
+
|
27
28
|
def dj_counts
|
28
29
|
respond_with DjReport.dj_counts
|
29
30
|
end
|
30
|
-
|
31
|
+
|
31
32
|
def settings
|
32
33
|
respond_with DjReport.settings
|
33
34
|
end
|
34
|
-
|
35
|
+
|
35
36
|
def retry
|
36
|
-
|
37
|
-
|
38
|
-
|
37
|
+
DjMon::Backend.retry params[:id]
|
38
|
+
respond_to do |format|
|
39
|
+
format.html { redirect_to root_url, notice: "The job has been queued for a re-run" and return }
|
40
|
+
format.json { head(:ok) }
|
41
|
+
end
|
39
42
|
end
|
40
|
-
|
43
|
+
|
41
44
|
def destroy
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
+
DjMon::Backend.destroy params[:id]
|
46
|
+
respond_to do |format|
|
47
|
+
format.html { redirect_to root_url, notice: "The job was deleted" and return }
|
48
|
+
format.json { head(:ok) }
|
49
|
+
end
|
45
50
|
end
|
46
|
-
|
51
|
+
|
47
52
|
protected
|
48
53
|
|
49
54
|
def authenticate
|
@@ -52,6 +57,11 @@ module DjMon
|
|
52
57
|
password == Rails.configuration.dj_mon.password
|
53
58
|
end
|
54
59
|
end
|
60
|
+
|
61
|
+
def set_api_version
|
62
|
+
response.headers['DJ-Mon-Version'] = DjMon::VERSION
|
63
|
+
end
|
64
|
+
|
55
65
|
end
|
56
66
|
|
57
67
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
module DjMon
|
2
2
|
class DjReport
|
3
|
+
TIME_FORMAT = "%b %d %H:%M:%S"
|
3
4
|
|
4
5
|
attr_accessor :delayed_job
|
5
6
|
|
@@ -10,7 +11,7 @@ module DjMon
|
|
10
11
|
def as_json(options={})
|
11
12
|
{
|
12
13
|
id: delayed_job.id,
|
13
|
-
payload: delayed_job
|
14
|
+
payload: payload(delayed_job),
|
14
15
|
priority: delayed_job.priority,
|
15
16
|
attempts: delayed_job.attempts,
|
16
17
|
queue: delayed_job.queue || "global",
|
@@ -23,49 +24,37 @@ module DjMon
|
|
23
24
|
}
|
24
25
|
end
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
Delayed::Job.all
|
30
|
-
end
|
31
|
-
|
32
|
-
def failed
|
33
|
-
Delayed::Job.where('delayed_jobs.failed_at IS NOT NULL')
|
34
|
-
end
|
35
|
-
|
36
|
-
def active
|
37
|
-
Delayed::Job.where('delayed_jobs.failed_at IS NULL AND delayed_jobs.locked_by IS NOT NULL')
|
38
|
-
end
|
39
|
-
|
40
|
-
def queued
|
41
|
-
Delayed::Job.where('delayed_jobs.failed_at IS NULL AND delayed_jobs.locked_by IS NULL')
|
42
|
-
end
|
27
|
+
def payload job
|
28
|
+
job.payload_object.respond_to?(:object) ? job.payload_object.object.to_yaml : job.payload_object.to_yaml
|
29
|
+
end
|
43
30
|
|
31
|
+
class << self
|
44
32
|
def reports_for jobs
|
45
33
|
jobs.collect { |job| DjReport.new(job) }
|
46
34
|
end
|
47
35
|
|
48
36
|
def all_reports
|
49
|
-
reports_for all
|
37
|
+
reports_for DjMon::Backend.all
|
50
38
|
end
|
51
39
|
|
52
40
|
def failed_reports
|
53
|
-
reports_for failed
|
41
|
+
reports_for DjMon::Backend.failed
|
54
42
|
end
|
55
43
|
|
56
44
|
def active_reports
|
57
|
-
reports_for active
|
45
|
+
reports_for DjMon::Backend.active
|
58
46
|
end
|
59
47
|
|
60
48
|
def queued_reports
|
61
|
-
reports_for queued
|
49
|
+
reports_for DjMon::Backend.queued
|
62
50
|
end
|
63
51
|
|
64
52
|
def dj_counts
|
65
53
|
{
|
66
|
-
|
67
|
-
|
68
|
-
|
54
|
+
all: DjMon::Backend.all.size,
|
55
|
+
failed: DjMon::Backend.failed.size,
|
56
|
+
active: DjMon::Backend.active.size,
|
57
|
+
queued: DjMon::Backend.queued.size
|
69
58
|
}
|
70
59
|
end
|
71
60
|
|
@@ -76,14 +65,16 @@ module DjMon
|
|
76
65
|
max_attempts: Delayed::Worker.max_attempts,
|
77
66
|
max_run_time: Delayed::Worker.max_run_time,
|
78
67
|
read_ahead: Delayed::Worker.read_ahead,
|
79
|
-
delay_jobs: Delayed::Worker.delay_jobs
|
68
|
+
delay_jobs: Delayed::Worker.delay_jobs,
|
69
|
+
delayed_job_version: Gem.loaded_specs["delayed_job"].version.version,
|
70
|
+
dj_mon_version: DjMon::VERSION
|
80
71
|
}
|
81
72
|
end
|
82
73
|
end
|
83
74
|
|
84
75
|
private
|
85
|
-
def l_datetime
|
86
|
-
|
76
|
+
def l_datetime time
|
77
|
+
time.present? ? time.strftime(TIME_FORMAT) : ""
|
87
78
|
end
|
88
79
|
end
|
89
80
|
|
@@ -58,10 +58,10 @@
|
|
58
58
|
{{#failed}}
|
59
59
|
{{failed_at}}
|
60
60
|
|
61
|
-
= form_tag
|
61
|
+
= form_tag CGI.unescape(retry_dj_report_url(:id => "{{id}}")), method: :post, class: 'form-inline' do
|
62
62
|
= submit_tag 'Retry', class: 'btn btn-info btn-mini'
|
63
63
|
|
64
|
-
= form_tag
|
64
|
+
= form_tag CGI.unescape(dj_report_url(:id => "{{id}}")), method: :delete, class: 'form-inline' do
|
65
65
|
= submit_tag 'Delete', class: 'btn btn-danger btn-mini'
|
66
66
|
|
67
67
|
{{/failed}}
|
@@ -16,8 +16,8 @@
|
|
16
16
|
|
17
17
|
.pull-right
|
18
18
|
#dj-counts-view
|
19
|
-
|
20
|
-
.container
|
19
|
+
|
20
|
+
.container.centered
|
21
21
|
- if flash[:notice]
|
22
22
|
.alert.alert-success
|
23
23
|
= flash[:notice]
|
@@ -26,15 +26,19 @@
|
|
26
26
|
= yield
|
27
27
|
|
28
28
|
= javascript_include_tag "//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"
|
29
|
-
= javascript_include_tag "dj_mon
|
29
|
+
= javascript_include_tag "dj_mon"
|
30
|
+
%script
|
31
|
+
var dj_counts_dj_reports_url = "#{dj_counts_dj_reports_url}"
|
30
32
|
|
31
33
|
%script#dj_counts_template{ :type=> "text/x-handlebars-template" }
|
32
|
-
%span.badge
|
34
|
+
%span.badge.badge-warning
|
35
|
+
{{failed}} failed
|
36
|
+
%span.badge.badge-info
|
33
37
|
{{queued}} queued
|
34
38
|
%span.badge.badge-info
|
35
39
|
{{active}} active
|
36
|
-
%span.badge.badge-
|
37
|
-
{{
|
40
|
+
%span.badge.badge-info
|
41
|
+
{{all}} all
|
38
42
|
|
39
43
|
%script#dj_settings_template{ :type=> "text/x-handlebars-template" }
|
40
44
|
.modal.hide
|
@@ -42,37 +46,47 @@
|
|
42
46
|
%button{ type: "button", class: "close", 'data-dismiss' => "modal" }
|
43
47
|
×
|
44
48
|
%h3
|
45
|
-
|
49
|
+
Settings
|
46
50
|
.modal-body
|
47
51
|
%table.table.table-bordered.table-striped
|
48
52
|
%tr
|
49
53
|
%td
|
50
|
-
|
54
|
+
Delayed Job version
|
55
|
+
%td
|
56
|
+
<code>{{content.delayed_job_version}}</code>
|
57
|
+
%tr
|
58
|
+
%td
|
59
|
+
DJ Mon version
|
60
|
+
%td
|
61
|
+
<code>{{content.dj_mon_version}}</code>
|
62
|
+
%tr
|
63
|
+
%td
|
64
|
+
Destroy failed jobs
|
51
65
|
%td
|
52
66
|
<code>{{content.destroy_failed_jobs}}</code>
|
53
67
|
%tr
|
54
68
|
%td
|
55
|
-
Sleep delay
|
69
|
+
Sleep delay
|
56
70
|
%td
|
57
71
|
<code>{{content.sleep_delay}}</code> seconds
|
58
72
|
%tr
|
59
73
|
%td
|
60
|
-
Max attempts
|
74
|
+
Max attempts
|
61
75
|
%td
|
62
76
|
<code>{{content.max_attempts}}</code>
|
63
77
|
%tr
|
64
78
|
%td
|
65
|
-
Max run time
|
79
|
+
Max run time
|
66
80
|
%td
|
67
81
|
<code>{{content.max_run_time}}</code> seconds
|
68
82
|
%tr
|
69
83
|
%td
|
70
|
-
Read ahead
|
84
|
+
Read ahead
|
71
85
|
%td
|
72
86
|
<code>{{content.read_ahead}}</code>
|
73
87
|
%tr
|
74
88
|
%td
|
75
|
-
Delay Jobs
|
89
|
+
Delay Jobs
|
76
90
|
%td
|
77
91
|
<code>{{content.delay_jobs}}</code>
|
78
92
|
|
data/config/routes.rb
CHANGED
@@ -0,0 +1,33 @@
|
|
1
|
+
module DjMon
|
2
|
+
module Backend
|
3
|
+
module ActiveRecord
|
4
|
+
class << self
|
5
|
+
def all
|
6
|
+
Delayed::Job.all
|
7
|
+
end
|
8
|
+
|
9
|
+
def failed
|
10
|
+
Delayed::Job.where('delayed_jobs.failed_at IS NOT NULL')
|
11
|
+
end
|
12
|
+
|
13
|
+
def active
|
14
|
+
Delayed::Job.where('delayed_jobs.failed_at IS NULL AND delayed_jobs.locked_by IS NOT NULL')
|
15
|
+
end
|
16
|
+
|
17
|
+
def queued
|
18
|
+
Delayed::Job.where('delayed_jobs.failed_at IS NULL AND delayed_jobs.locked_by IS NULL')
|
19
|
+
end
|
20
|
+
|
21
|
+
def destroy id
|
22
|
+
dj = Delayed::Job.find(id)
|
23
|
+
dj.destroy if dj
|
24
|
+
end
|
25
|
+
|
26
|
+
def retry id
|
27
|
+
dj = Delayed::Job.find(id)
|
28
|
+
dj.update_attributes({ failed_at: nil }) if dj
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module DjMon
|
2
|
+
module Backend
|
3
|
+
module Mongoid
|
4
|
+
class << self
|
5
|
+
def all
|
6
|
+
Delayed::Job.all
|
7
|
+
end
|
8
|
+
|
9
|
+
def failed
|
10
|
+
Delayed::Job.where(:failed_at.ne => nil)
|
11
|
+
end
|
12
|
+
|
13
|
+
def active
|
14
|
+
Delayed::Job.where(:failed_at => nil, :locked_by.ne => nil)
|
15
|
+
end
|
16
|
+
|
17
|
+
def queued
|
18
|
+
Delayed::Job.where(:failed_at => nil, :locked_by => nil)
|
19
|
+
end
|
20
|
+
|
21
|
+
def destroy id
|
22
|
+
dj = Delayed::Job.find(id)
|
23
|
+
dj.destroy if dj
|
24
|
+
end
|
25
|
+
|
26
|
+
def retry id
|
27
|
+
dj = Delayed::Job.find(id)
|
28
|
+
dj.update_attribute :failed_at, nil if dj
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module DjMon
|
2
|
+
module Backend
|
3
|
+
BACKEND_METHODS = [:all, :failed, :active, :queued, :destroy, :retry]
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def used_backend
|
7
|
+
# it's hacky but, based on Delayed::Worker.backend= behavior
|
8
|
+
@@used_backend ||= begin
|
9
|
+
delayed_job_backend = Delayed::Worker.backend
|
10
|
+
backend_name = delayed_job_backend.to_s.split("::")[-2]
|
11
|
+
require "dj_mon/backend/#{backend_name.downcase}"
|
12
|
+
"DjMon::Backend::#{backend_name}".constantize
|
13
|
+
rescue
|
14
|
+
raise "DjMon has no backend for '#{delayed_job_backend}'"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
delegate *BACKEND_METHODS, :to => :used_backend
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/dj_mon.rb
CHANGED
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.1.
|
4
|
+
version: 0.1.3
|
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-
|
12
|
+
date: 2012-08-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -43,6 +43,70 @@ dependencies:
|
|
43
43
|
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '3.1'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: delayed_job_active_record
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: delayed_job_mongoid
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: sqlite3
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: shoulda
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
46
110
|
description: A Rails engine based frontend for Delayed Job
|
47
111
|
email:
|
48
112
|
- projects@akshay.cc
|
@@ -62,14 +126,18 @@ files:
|
|
62
126
|
- app/models/dj_mon/dj_report.rb
|
63
127
|
- app/views/dj_mon/dj_reports/index.html.haml
|
64
128
|
- app/views/layouts/dj_mon.html.haml
|
129
|
+
- lib/dj_mon/backend/activerecord.rb
|
130
|
+
- lib/dj_mon/backend/mongoid.rb
|
131
|
+
- lib/dj_mon/backend.rb
|
65
132
|
- lib/dj_mon/engine.rb
|
133
|
+
- lib/dj_mon/version.rb
|
66
134
|
- lib/dj_mon.rb
|
67
135
|
- config/routes.rb
|
68
136
|
- MIT-LICENSE
|
69
137
|
- Rakefile
|
70
138
|
- Gemfile
|
71
139
|
- README.md
|
72
|
-
homepage:
|
140
|
+
homepage: https://github.com/akshayrawat/dj_mon
|
73
141
|
licenses: []
|
74
142
|
post_install_message:
|
75
143
|
rdoc_options: []
|