delayed_job_web 1.2.2 → 1.2.4
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of delayed_job_web might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Gemfile +1 -12
- data/README.markdown +27 -2
- data/Rakefile +0 -14
- data/delayed_job_web.gemspec +18 -56
- data/lib/delayed_job_web/application/app.rb +31 -23
- data/lib/delayed_job_web/application/views/enqueued.erb +13 -0
- data/lib/delayed_job_web/application/views/error.erb +2 -0
- data/lib/delayed_job_web/application/views/failed.erb +21 -0
- data/lib/delayed_job_web/application/views/job.erb +61 -0
- data/lib/delayed_job_web/application/views/layout.erb +41 -0
- data/lib/delayed_job_web/application/views/next_more.erb +11 -0
- data/lib/delayed_job_web/application/views/overview.erb +45 -0
- data/lib/delayed_job_web/application/views/pending.erb +18 -0
- data/lib/delayed_job_web/application/views/stats.erb +36 -0
- data/lib/delayed_job_web/application/views/working.erb +13 -0
- metadata +16 -86
- data/VERSION +0 -1
- data/lib/delayed_job_web/application/views/enqueued.haml +0 -10
- data/lib/delayed_job_web/application/views/error.haml +0 -2
- data/lib/delayed_job_web/application/views/failed.haml +0 -14
- data/lib/delayed_job_web/application/views/job.haml +0 -44
- data/lib/delayed_job_web/application/views/layout.haml +0 -23
- data/lib/delayed_job_web/application/views/next_more.haml +0 -6
- data/lib/delayed_job_web/application/views/overview.haml +0 -25
- data/lib/delayed_job_web/application/views/pending.haml +0 -12
- data/lib/delayed_job_web/application/views/stats.haml +0 -20
- data/lib/delayed_job_web/application/views/working.haml +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a024d8e2555f5bb896f5cbe5f077eee5422a6db8
|
4
|
+
data.tar.gz: 4538ff701954c0b3c6cf67520a0363e7c6e3b97c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5811906545e849a206af0911ba0cbf0ab5a5cb67840420e8985758507dcc1dd045d75e492eb079be75e59d5fc1c1551fc28df974f1a9dffb1aaa36f8d36edbde
|
7
|
+
data.tar.gz: 3207d0809ed97d6607d37d0a2d28848406ad11c0ac8d599890709ba05d2be1179adb19064670d8c0ab38b737a50e6c75e93c3c6b2d6a31dc047de68100721f24
|
data/Gemfile
CHANGED
@@ -1,14 +1,3 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
|
-
gem "tilt", "1.4.1"
|
3
|
-
gem "sinatra", '>= 0.9.2'
|
4
|
-
gem "haml", '>= 3.1.3'
|
5
|
-
gem 'activerecord', '> 3.0.0'
|
6
|
-
gem 'delayed_job', '> 2.0.3'
|
7
|
-
gem 'rdoc'
|
8
2
|
|
9
|
-
|
10
|
-
gem "shoulda", ">= 0"
|
11
|
-
gem "bundler", "> 1.0.0"
|
12
|
-
gem "jeweler"
|
13
|
-
gem "rack-test", ">= 0"
|
14
|
-
end
|
3
|
+
gemspec
|
data/README.markdown
CHANGED
@@ -11,6 +11,7 @@ Some features:
|
|
11
11
|
* Queue any single job. or all pending jobs, to run immediately.
|
12
12
|
* Remove a failed job, or easily remove all failed jobs.
|
13
13
|
* Watch delayed_job operation with live ajax polling.
|
14
|
+
* Filter delayed_jobs by queue name
|
14
15
|
|
15
16
|
Quick Start For Rails 3 and 4 Applications
|
16
17
|
------------------------------------
|
@@ -27,10 +28,11 @@ Install it...
|
|
27
28
|
bundle
|
28
29
|
```
|
29
30
|
|
30
|
-
Add
|
31
|
+
Add the following route to your application for accessing the interface,
|
32
|
+
and retrying failed jobs.
|
31
33
|
|
32
34
|
```ruby
|
33
|
-
|
35
|
+
match "/delayed_job" => DelayedJobWeb, :anchor => false, via: [:get, :post]
|
34
36
|
```
|
35
37
|
|
36
38
|
You probably want to password protect the interface, an easy way is to add something like this your config.ru file
|
@@ -45,6 +47,29 @@ end
|
|
45
47
|
|
46
48
|
`delayed_job_web` runs as a Sinatra application within the rails application. Visit it at `/delayed_job_web`.
|
47
49
|
|
50
|
+
## Serving static assets
|
51
|
+
|
52
|
+
If you mount the app on another route, you may encounter the CSS not working anymore. To work around this you can leverage a special HTTP header. Install it, activate it and configure it -- see below.
|
53
|
+
|
54
|
+
### Apache
|
55
|
+
|
56
|
+
XSendFile On
|
57
|
+
XSendFilePath /path/to/shared/bundle
|
58
|
+
|
59
|
+
[`XSendFilePath`](https://tn123.org/mod_xsendfile/) white-lists a directory from which static files are allowed to be served. This should be at least the path to where delayed_job_web is installed.
|
60
|
+
|
61
|
+
Using Rails you'll have to set `config.action_dispatch.x_sendfile_header = "X-Sendfile"`.
|
62
|
+
|
63
|
+
### Nginx
|
64
|
+
|
65
|
+
Nginx uses an equivalent that's called `X-Accel-Redirect`, further instructions can be found [in their wiki](http://wiki.nginx.org/XSendfile).
|
66
|
+
|
67
|
+
Rails' will need to be configured to `config.action_dispatch.x_sendfile_header = "X-Accel-Redirect"`.
|
68
|
+
|
69
|
+
### Lighttpd
|
70
|
+
|
71
|
+
Lighty is more `X-Sendfile`, like [outlined](http://redmine.lighttpd.net/projects/1/wiki/X-LIGHTTPD-send-file) in their wiki.
|
72
|
+
|
48
73
|
The Interface - Yea, a ripoff of resque-web
|
49
74
|
------------------------------------
|
50
75
|
|
data/Rakefile
CHANGED
@@ -11,20 +11,6 @@ rescue Bundler::BundlerError => e
|
|
11
11
|
end
|
12
12
|
require 'rake'
|
13
13
|
|
14
|
-
require 'jeweler'
|
15
|
-
Jeweler::Tasks.new do |gem|
|
16
|
-
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
|
-
gem.name = "delayed_job_web"
|
18
|
-
gem.homepage = "http://github.com/ejschmitt/delayed_job_web"
|
19
|
-
gem.license = "MIT"
|
20
|
-
gem.summary = "Web interface for delayed_job"
|
21
|
-
gem.description = "Web interface for delayed_job inspired by resque"
|
22
|
-
gem.email = "ejschmitt@gmail.com"
|
23
|
-
gem.authors = ["Erick Schmitt"]
|
24
|
-
# dependencies defined in Gemfile
|
25
|
-
end
|
26
|
-
Jeweler::RubygemsDotOrgTasks.new
|
27
|
-
|
28
14
|
require 'rake/testtask'
|
29
15
|
Rake::TestTask.new(:test) do |test|
|
30
16
|
test.libs << 'lib' << 'test'
|
data/delayed_job_web.gemspec
CHANGED
@@ -1,15 +1,12 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
1
|
# -*- encoding: utf-8 -*-
|
5
2
|
|
6
3
|
Gem::Specification.new do |s|
|
7
4
|
s.name = "delayed_job_web"
|
8
|
-
s.version = "1.2.
|
5
|
+
s.version = "1.2.4"
|
9
6
|
|
10
|
-
s.required_rubygems_version =
|
7
|
+
s.required_rubygems_version = "2.0.14"
|
11
8
|
s.authors = ["Erick Schmitt"]
|
12
|
-
s.date = "2014-01-
|
9
|
+
s.date = "2014-01-29"
|
13
10
|
s.description = "Web interface for delayed_job inspired by resque"
|
14
11
|
s.email = "ejschmitt@gmail.com"
|
15
12
|
s.executables = ["delayed_job_web"]
|
@@ -23,7 +20,6 @@ Gem::Specification.new do |s|
|
|
23
20
|
"LICENSE.txt",
|
24
21
|
"README.markdown",
|
25
22
|
"Rakefile",
|
26
|
-
"VERSION",
|
27
23
|
"bin/delayed_job_web",
|
28
24
|
"delayed_job_web.gemspec",
|
29
25
|
"lib/delayed_job_web.rb",
|
@@ -34,62 +30,28 @@ Gem::Specification.new do |s|
|
|
34
30
|
"lib/delayed_job_web/application/public/javascripts/jquery.relatize_date.js",
|
35
31
|
"lib/delayed_job_web/application/public/stylesheets/reset.css",
|
36
32
|
"lib/delayed_job_web/application/public/stylesheets/style.css",
|
37
|
-
"lib/delayed_job_web/application/views/enqueued.
|
38
|
-
"lib/delayed_job_web/application/views/error.
|
39
|
-
"lib/delayed_job_web/application/views/failed.
|
40
|
-
"lib/delayed_job_web/application/views/job.
|
41
|
-
"lib/delayed_job_web/application/views/layout.
|
42
|
-
"lib/delayed_job_web/application/views/next_more.
|
43
|
-
"lib/delayed_job_web/application/views/overview.
|
44
|
-
"lib/delayed_job_web/application/views/pending.
|
45
|
-
"lib/delayed_job_web/application/views/stats.
|
46
|
-
"lib/delayed_job_web/application/views/working.
|
33
|
+
"lib/delayed_job_web/application/views/enqueued.erb",
|
34
|
+
"lib/delayed_job_web/application/views/error.erb",
|
35
|
+
"lib/delayed_job_web/application/views/failed.erb",
|
36
|
+
"lib/delayed_job_web/application/views/job.erb",
|
37
|
+
"lib/delayed_job_web/application/views/layout.erb",
|
38
|
+
"lib/delayed_job_web/application/views/next_more.erb",
|
39
|
+
"lib/delayed_job_web/application/views/overview.erb",
|
40
|
+
"lib/delayed_job_web/application/views/pending.erb",
|
41
|
+
"lib/delayed_job_web/application/views/stats.erb",
|
42
|
+
"lib/delayed_job_web/application/views/working.erb",
|
47
43
|
"test/helper.rb",
|
48
44
|
"test/test_delayed_job_web.rb"
|
49
45
|
]
|
50
46
|
s.homepage = "http://github.com/ejschmitt/delayed_job_web"
|
51
47
|
s.licenses = ["MIT"]
|
52
48
|
s.require_paths = ["lib"]
|
53
|
-
s.rubygems_version = "2.0.6"
|
54
49
|
s.summary = "Web interface for delayed_job"
|
55
50
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
s.add_runtime_dependency(%q<sinatra>, [">= 0.9.2"])
|
62
|
-
s.add_runtime_dependency(%q<haml>, [">= 3.1.3"])
|
63
|
-
s.add_runtime_dependency(%q<activerecord>, ["> 3.0.0"])
|
64
|
-
s.add_runtime_dependency(%q<delayed_job>, ["> 2.0.3"])
|
65
|
-
s.add_runtime_dependency(%q<rdoc>, [">= 0"])
|
66
|
-
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
67
|
-
s.add_development_dependency(%q<bundler>, ["> 1.0.0"])
|
68
|
-
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
69
|
-
s.add_development_dependency(%q<rack-test>, [">= 0"])
|
70
|
-
else
|
71
|
-
s.add_dependency(%q<tilt>, ["= 1.4.1"])
|
72
|
-
s.add_dependency(%q<sinatra>, [">= 0.9.2"])
|
73
|
-
s.add_dependency(%q<haml>, [">= 3.1.3"])
|
74
|
-
s.add_dependency(%q<activerecord>, ["> 3.0.0"])
|
75
|
-
s.add_dependency(%q<delayed_job>, ["> 2.0.3"])
|
76
|
-
s.add_dependency(%q<rdoc>, [">= 0"])
|
77
|
-
s.add_dependency(%q<shoulda>, [">= 0"])
|
78
|
-
s.add_dependency(%q<bundler>, ["> 1.0.0"])
|
79
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
80
|
-
s.add_dependency(%q<rack-test>, [">= 0"])
|
81
|
-
end
|
82
|
-
else
|
83
|
-
s.add_dependency(%q<tilt>, ["= 1.4.1"])
|
84
|
-
s.add_dependency(%q<sinatra>, [">= 0.9.2"])
|
85
|
-
s.add_dependency(%q<haml>, [">= 3.1.3"])
|
86
|
-
s.add_dependency(%q<activerecord>, ["> 3.0.0"])
|
87
|
-
s.add_dependency(%q<delayed_job>, ["> 2.0.3"])
|
88
|
-
s.add_dependency(%q<rdoc>, [">= 0"])
|
89
|
-
s.add_dependency(%q<shoulda>, [">= 0"])
|
90
|
-
s.add_dependency(%q<bundler>, ["> 1.0.0"])
|
91
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
92
|
-
s.add_dependency(%q<rack-test>, [">= 0"])
|
93
|
-
end
|
51
|
+
s.add_runtime_dependency(%q<sinatra>, [">= 0.9.2"])
|
52
|
+
s.add_runtime_dependency(%q<activerecord>, ["> 3.0.0"])
|
53
|
+
s.add_runtime_dependency(%q<delayed_job>, ["> 2.0.3"])
|
54
|
+
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
55
|
+
s.add_development_dependency(%q<rack-test>, [">= 0"])
|
94
56
|
end
|
95
57
|
|
@@ -2,14 +2,16 @@ require 'sinatra/base'
|
|
2
2
|
require 'active_support'
|
3
3
|
require 'active_record'
|
4
4
|
require 'delayed_job'
|
5
|
-
require 'haml'
|
6
5
|
|
7
6
|
class DelayedJobWeb < Sinatra::Base
|
8
7
|
set :root, File.dirname(__FILE__)
|
9
8
|
set :static, true
|
10
9
|
set :public_folder, File.expand_path('../public', __FILE__)
|
11
10
|
set :views, File.expand_path('../views', __FILE__)
|
12
|
-
|
11
|
+
|
12
|
+
before do
|
13
|
+
@queues = (params[:queues] || "").split(",").map{|queue| queue.strip}.uniq.compact
|
14
|
+
end
|
13
15
|
|
14
16
|
def current_page
|
15
17
|
url_path request.path_info.sub('/','')
|
@@ -22,11 +24,13 @@ class DelayedJobWeb < Sinatra::Base
|
|
22
24
|
def per_page
|
23
25
|
20
|
24
26
|
end
|
25
|
-
|
27
|
+
|
26
28
|
def url_path(*path_parts)
|
27
|
-
[ path_prefix, path_parts ].join("/").squeeze('/')
|
29
|
+
url = [ path_prefix, path_parts ].join("/").squeeze('/')
|
30
|
+
url += "?queues=#{@queues.join(",")}" unless @queues.empty?
|
31
|
+
url
|
28
32
|
end
|
29
|
-
|
33
|
+
alias_method :u, :url_path
|
30
34
|
|
31
35
|
def path_prefix
|
32
36
|
request.env['SCRIPT_NAME']
|
@@ -53,22 +57,22 @@ class DelayedJobWeb < Sinatra::Base
|
|
53
57
|
|
54
58
|
get '/overview' do
|
55
59
|
if delayed_job
|
56
|
-
|
60
|
+
erb :overview
|
57
61
|
else
|
58
62
|
@message = "Unable to connected to Delayed::Job database"
|
59
|
-
|
63
|
+
erb :error
|
60
64
|
end
|
61
65
|
end
|
62
66
|
|
63
67
|
get '/stats' do
|
64
|
-
|
68
|
+
erb :stats
|
65
69
|
end
|
66
70
|
|
67
71
|
%w(enqueued working pending failed).each do |page|
|
68
72
|
get "/#{page}" do
|
69
|
-
@jobs
|
70
|
-
@all_jobs = delayed_jobs(page.to_sym)
|
71
|
-
|
73
|
+
@jobs = delayed_jobs(page.to_sym, @queues).order('created_at desc, id desc').offset(start).limit(per_page)
|
74
|
+
@all_jobs = delayed_jobs(page.to_sym, @queues)
|
75
|
+
erb page.to_sym
|
72
76
|
end
|
73
77
|
end
|
74
78
|
|
@@ -90,23 +94,23 @@ class DelayedJobWeb < Sinatra::Base
|
|
90
94
|
end
|
91
95
|
|
92
96
|
post "/failed/clear" do
|
93
|
-
delayed_job.destroy_all(delayed_job_sql(:failed))
|
97
|
+
delayed_job.destroy_all(delayed_job_sql(:failed, @queues))
|
94
98
|
redirect u('failed')
|
95
99
|
end
|
96
100
|
|
97
101
|
post "/requeue/all" do
|
98
|
-
delayed_jobs(:failed).update_all(:run_at => Time.now, :failed_at => nil)
|
102
|
+
delayed_jobs(:failed, @queues).update_all(:run_at => Time.now, :failed_at => nil)
|
99
103
|
redirect back
|
100
104
|
end
|
101
105
|
|
102
|
-
def delayed_jobs(type)
|
103
|
-
delayed_job.where(delayed_job_sql(type))
|
106
|
+
def delayed_jobs(type, queues = [])
|
107
|
+
delayed_job.where(delayed_job_sql(type, queues))
|
104
108
|
end
|
105
109
|
|
106
|
-
def delayed_job_sql(type)
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
+
def delayed_job_sql(type, queues = [])
|
111
|
+
conditions = []
|
112
|
+
|
113
|
+
conditions << case type
|
110
114
|
when :working
|
111
115
|
'locked_at is not null'
|
112
116
|
when :failed
|
@@ -114,6 +118,10 @@ class DelayedJobWeb < Sinatra::Base
|
|
114
118
|
when :pending
|
115
119
|
'attempts = 0'
|
116
120
|
end
|
121
|
+
|
122
|
+
conditions << "queue IN ('#{queues.join("','")}')" unless queues.empty?
|
123
|
+
|
124
|
+
conditions.compact.join(" AND ")
|
117
125
|
end
|
118
126
|
|
119
127
|
get "/?" do
|
@@ -122,7 +130,7 @@ class DelayedJobWeb < Sinatra::Base
|
|
122
130
|
|
123
131
|
def partial(template, local_vars = {})
|
124
132
|
@partial = true
|
125
|
-
|
133
|
+
erb(template.to_sym, {:layout => false}, local_vars)
|
126
134
|
ensure
|
127
135
|
@partial = false
|
128
136
|
end
|
@@ -141,7 +149,7 @@ class DelayedJobWeb < Sinatra::Base
|
|
141
149
|
if @polling
|
142
150
|
text = "Last Updated: #{Time.now.strftime("%H:%M:%S")}"
|
143
151
|
else
|
144
|
-
text = "<a href='#{u(request.path_info)}
|
152
|
+
text = "<a href='#{u(request.path_info + ".poll")}' rel='poll'>Live Poll</a>"
|
145
153
|
end
|
146
154
|
"<p class='poll'>#{text}</p>"
|
147
155
|
end
|
@@ -150,8 +158,8 @@ class DelayedJobWeb < Sinatra::Base
|
|
150
158
|
content_type "text/html"
|
151
159
|
@polling = true
|
152
160
|
# show(page.to_sym, false).gsub(/\s{1,}/, ' ')
|
153
|
-
@jobs = delayed_jobs(page.to_sym)
|
154
|
-
|
161
|
+
@jobs = delayed_jobs(page.to_sym, @queues)
|
162
|
+
erb(page.to_sym, {:layout => false})
|
155
163
|
end
|
156
164
|
|
157
165
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<h1>Enqueued</h1>
|
2
|
+
<p class="sub">
|
3
|
+
The list below contains all jobs currently in the delayed_job queue.
|
4
|
+
</p>
|
5
|
+
<p class="sub">
|
6
|
+
<%= "Showing #{start} to #{start + per_page} of #{@all_jobs.count} enqueued jobs." %>
|
7
|
+
</p>
|
8
|
+
<ul class="job">
|
9
|
+
<% @jobs.each do |job| %>
|
10
|
+
<%= partial :job, {:job => job} %>
|
11
|
+
<% end %>
|
12
|
+
</ul>
|
13
|
+
<%= partial :next_more, :start => start, :total_size => @all_jobs.count, :per_page => per_page %>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<h1>Failed Jobs</h1>
|
2
|
+
<% if @jobs.any? %>
|
3
|
+
<form action="<%= u('failed/clear') %>" method="POST">
|
4
|
+
<input type="submit" value="Clear Failed Jobs"></input>
|
5
|
+
</form>
|
6
|
+
<form action="<%= u('requeue/all') %>" method="POST">
|
7
|
+
<input type="submit" value="Retry Failed Jobs"></input>
|
8
|
+
</form>
|
9
|
+
<% end %>
|
10
|
+
<p class="sub">
|
11
|
+
The list below contains all jobs that have a last_error message set.
|
12
|
+
</p>
|
13
|
+
<p class="sub">
|
14
|
+
<%= "Showing #{start} to #{start + per_page} of #{@all_jobs.count} failed jobs." %>
|
15
|
+
</p>
|
16
|
+
<ul class="failed job">
|
17
|
+
<% @jobs.each do |job| %>
|
18
|
+
<%= partial :job, {:job => job} %>
|
19
|
+
<% end %>
|
20
|
+
</ul>
|
21
|
+
<%= partial :next_more, :start => start, :total_size => @all_jobs.count, :per_page => per_page %>
|
@@ -0,0 +1,61 @@
|
|
1
|
+
<li class="job">
|
2
|
+
<dl>
|
3
|
+
<dt>ID</dt>
|
4
|
+
<dd>
|
5
|
+
<a name="<%= job.id %>"></a>
|
6
|
+
<a href="#<%= job.id %>"><%= job.id %></a>
|
7
|
+
<div class="controls">
|
8
|
+
<a href="<%= u("requeue/#{job.id}") %>" rel="retry">Retry</a>
|
9
|
+
or
|
10
|
+
<a href="<%= u("remove/#{job.id}") %>" rel="remove">Remove</a>
|
11
|
+
or
|
12
|
+
<a href="<%= u("reload/#{job.id}") %>" rel="reload_job">Reload Job</a>
|
13
|
+
</div>
|
14
|
+
</dd>
|
15
|
+
<dt>Priority</dt>
|
16
|
+
<dd><%= job.priority %></dd>
|
17
|
+
<dt>Attempts</dt>
|
18
|
+
<dd><%= job.attempts %></dd>
|
19
|
+
<% if job.respond_to?(:queue) && job.queue %>
|
20
|
+
<dt>Queue</dt>
|
21
|
+
<dd><%= job.queue %></dd>
|
22
|
+
<% end %>
|
23
|
+
<dt>Handler</dt>
|
24
|
+
<dd>
|
25
|
+
<pre><%= job.handler %></pre>
|
26
|
+
</dd>
|
27
|
+
<% if job.last_error %>
|
28
|
+
<dt>Last Error</dt>
|
29
|
+
<dd>
|
30
|
+
<div class="backtrace">
|
31
|
+
<pre><%= job.last_error[0..100] + '...' %></pre>
|
32
|
+
</div>
|
33
|
+
<a class="backtrace" href="#">Toggle full message</a>
|
34
|
+
<div class="backtrace full hide">
|
35
|
+
<pre><%= job.last_error %></pre>
|
36
|
+
</div>
|
37
|
+
</dd>
|
38
|
+
<% end %>
|
39
|
+
<% if job.run_at %>
|
40
|
+
<dt>Run At</dt>
|
41
|
+
<dd class="time">
|
42
|
+
<%= job.run_at.rfc822 %>
|
43
|
+
</dd>
|
44
|
+
<% end %>
|
45
|
+
<% if job.locked_at %>
|
46
|
+
<dt>Locked At</dt>
|
47
|
+
<dd class="time">
|
48
|
+
<%= job.locked_at.rfc822 %>
|
49
|
+
</dd>
|
50
|
+
<% end %>
|
51
|
+
<% if job.locked_by %>
|
52
|
+
<dt>Locked By</dt>
|
53
|
+
<dd>
|
54
|
+
<%= job.locked_by %>
|
55
|
+
</dd>
|
56
|
+
<% end %>
|
57
|
+
<% if job.failed_at %>
|
58
|
+
<dt>Failed At</dt>
|
59
|
+
<% end %>
|
60
|
+
</dl>
|
61
|
+
</li>
|
@@ -0,0 +1,41 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Delayed Job Web</title>
|
5
|
+
<link rel="stylesheet" type="text/css" href="stylesheets/reset.css" />
|
6
|
+
<link rel="stylesheet" type="text/css" href="stylesheets/style.css" />
|
7
|
+
</head>
|
8
|
+
<body>
|
9
|
+
<div class="header">
|
10
|
+
<ul class="nav">
|
11
|
+
<% tabs.each do |tab| %>
|
12
|
+
<li class="<%= request.path_info == tab[:path] ? 'current' : '' %>">
|
13
|
+
<a class="tab" href="<%= u(tab[:path]) %>">
|
14
|
+
<%= tab[:name] %>
|
15
|
+
</a>
|
16
|
+
</li>
|
17
|
+
<% end %>
|
18
|
+
<li>
|
19
|
+
<form method="get" action="" style="display:inline; width: 100%;">
|
20
|
+
<input name="queues" type="text" value="<%= @queues.join(", ") %>" style="width: 300px;" placeholder="Filter jobs by queue name (e.g. queue1, queue2)" />
|
21
|
+
<input type="submit" value="Filter" />
|
22
|
+
</form>
|
23
|
+
</li>
|
24
|
+
</ul>
|
25
|
+
</div>
|
26
|
+
<div id="main">
|
27
|
+
<%= yield %>
|
28
|
+
</div>
|
29
|
+
<div id="footer">
|
30
|
+
<p>
|
31
|
+
Powered by
|
32
|
+
<a href="https://github.com/collectiveidea/delayed_job">delayed_job</a>
|
33
|
+
&
|
34
|
+
<a href="https://github.com/ejschmitt/delayed_job_web">delayed_job_web</a>
|
35
|
+
</p>
|
36
|
+
</div>
|
37
|
+
<script src="<%= u("javascripts/jquery-1.7.1.min.js") %>" type="text/javascript"></script>
|
38
|
+
<script src="<%= u("javascripts/jquery.relatize_date.js") %>" type="text/javascript"></script>
|
39
|
+
<script src="<%= u("javascripts/application.js") %>" type="text/javascript"></script>
|
40
|
+
</body>
|
41
|
+
</html>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<% if start - per_page >= 0 || start + per_page <= total_size %>
|
2
|
+
<% divider = @queues.empty? ? "?" : "&" %>
|
3
|
+
<p class="pagination">
|
4
|
+
<% if start - per_page >= 0 %>
|
5
|
+
<a class="less" href="<%= current_page %><%= divider %>start=<%= start - per_page %>">« less</a>
|
6
|
+
<% end %>
|
7
|
+
<% if start + per_page < total_size %>
|
8
|
+
<a class="more" href="<%= current_page %><%= divider %>start=<%= start + per_page %>">more »</a>
|
9
|
+
<% end %>
|
10
|
+
</p>
|
11
|
+
<% end %>
|
@@ -0,0 +1,45 @@
|
|
1
|
+
<h1>
|
2
|
+
Overview
|
3
|
+
</h1>
|
4
|
+
<p class="sub">
|
5
|
+
The list below shows an overview of the jobs in the delayed_job queue.
|
6
|
+
</p>
|
7
|
+
<table class="overview">
|
8
|
+
<tr>
|
9
|
+
<th>Status</th>
|
10
|
+
<th>Count</th>
|
11
|
+
</tr>
|
12
|
+
<tr>
|
13
|
+
<td class="status">
|
14
|
+
<a href="<%= u('/enqueued') %>">Enqueued Jobs</a>
|
15
|
+
</td>
|
16
|
+
<td>
|
17
|
+
<%= delayed_jobs(:enqueued, @queues).count %>
|
18
|
+
</td>
|
19
|
+
</tr>
|
20
|
+
<tr>
|
21
|
+
<td class="status">
|
22
|
+
<a href="<%= u('/working') %>">Working Jobs</a>
|
23
|
+
</td>
|
24
|
+
<td>
|
25
|
+
<%= delayed_jobs(:working, @queues).count %>
|
26
|
+
</td>
|
27
|
+
</tr>
|
28
|
+
<tr>
|
29
|
+
<td class="status">
|
30
|
+
<a href="<%= u('/pending') %>">Pending Jobs</a>
|
31
|
+
</td>
|
32
|
+
<td>
|
33
|
+
<%= delayed_jobs(:pending, @queues).count %>
|
34
|
+
</td>
|
35
|
+
</tr>
|
36
|
+
<tr class="<%= delayed_jobs(:failed, @queues).count > 0 ? 'failure' : '' %>">
|
37
|
+
<td class="status">
|
38
|
+
<a href="<%= u('/failed') %>">Failed Jobs</a>
|
39
|
+
</td>
|
40
|
+
<td>
|
41
|
+
<%= delayed_jobs(:failed, @queues).count %>
|
42
|
+
</td>
|
43
|
+
</tr>
|
44
|
+
</table>
|
45
|
+
<%= poll %>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<h1>Pending</h1>
|
2
|
+
<% if @jobs.any? %>
|
3
|
+
<form action="<%= u('requeue/all') %>" method="POST">
|
4
|
+
<input type="submit" value="Enqueue All Immediately"></input>
|
5
|
+
</form>
|
6
|
+
<% end %>
|
7
|
+
<p class="sub">
|
8
|
+
The list below contains jobs currently being processed.
|
9
|
+
</p>
|
10
|
+
<p class="sub">
|
11
|
+
<%= "Showing #{start} to #{start + per_page} of #{@all_jobs.count} pending jobs." %>
|
12
|
+
</p>
|
13
|
+
<ul class="job">
|
14
|
+
<% @jobs.each do |job| %>
|
15
|
+
<%= partial :job, {:job => job} %>
|
16
|
+
<% end %>
|
17
|
+
</ul>
|
18
|
+
<%= partial :next_more, :start => start, :total_size => @all_jobs.count, :per_page => per_page %>
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<h1>Stats</h1>
|
2
|
+
<table class="stats">
|
3
|
+
<tr>
|
4
|
+
<th class="status">
|
5
|
+
environment
|
6
|
+
</th>
|
7
|
+
<th>
|
8
|
+
<%= Sinatra::Application.environment.to_s %>
|
9
|
+
</th>
|
10
|
+
</tr>
|
11
|
+
<tr>
|
12
|
+
<th class="status">
|
13
|
+
failed
|
14
|
+
</th>
|
15
|
+
<th>
|
16
|
+
<%= delayed_jobs(:failed, @queues).count %>
|
17
|
+
</th>
|
18
|
+
</tr>
|
19
|
+
<tr>
|
20
|
+
<th class="status">
|
21
|
+
pending
|
22
|
+
</th>
|
23
|
+
<th>
|
24
|
+
<%= delayed_jobs(:pending, @queues).count %>
|
25
|
+
</th>
|
26
|
+
</tr>
|
27
|
+
<tr>
|
28
|
+
<th class="status">
|
29
|
+
working
|
30
|
+
</th>
|
31
|
+
<th>
|
32
|
+
<%= delayed_jobs(:working, @queues).count %>
|
33
|
+
</th>
|
34
|
+
</tr>
|
35
|
+
</table>
|
36
|
+
<%= poll %>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<h1>Working</h1>
|
2
|
+
<p class="sub">
|
3
|
+
The list below contains jobs currently being processed.
|
4
|
+
</p>
|
5
|
+
<p class="sub">
|
6
|
+
<%= "Showing #{start} to #{start + per_page} of #{@all_jobs.count} working jobs." %>
|
7
|
+
</p>
|
8
|
+
<ul class="job">
|
9
|
+
<% @jobs.each do |job| %>
|
10
|
+
<%= partial :job, {:job => job} %>
|
11
|
+
<% end %>
|
12
|
+
</ul>
|
13
|
+
<%= partial :next_more, :start => start, :total_size => @all_jobs.count, :per_page => per_page %>
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: delayed_job_web
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Erick Schmitt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: tilt
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - '='
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 1.4.1
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - '='
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 1.4.1
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: sinatra
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,20 +24,6 @@ dependencies:
|
|
38
24
|
- - '>='
|
39
25
|
- !ruby/object:Gem::Version
|
40
26
|
version: 0.9.2
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: haml
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - '>='
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 3.1.3
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - '>='
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 3.1.3
|
55
27
|
- !ruby/object:Gem::Dependency
|
56
28
|
name: activerecord
|
57
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,20 +52,6 @@ dependencies:
|
|
80
52
|
- - '>'
|
81
53
|
- !ruby/object:Gem::Version
|
82
54
|
version: 2.0.3
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rdoc
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - '>='
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :runtime
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - '>='
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
55
|
- !ruby/object:Gem::Dependency
|
98
56
|
name: shoulda
|
99
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,34 +66,6 @@ dependencies:
|
|
108
66
|
- - '>='
|
109
67
|
- !ruby/object:Gem::Version
|
110
68
|
version: '0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: bundler
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - '>'
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: 1.0.0
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - '>'
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: 1.0.0
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: jeweler
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - '>='
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - '>='
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
139
69
|
- !ruby/object:Gem::Dependency
|
140
70
|
name: rack-test
|
141
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,7 +94,6 @@ files:
|
|
164
94
|
- LICENSE.txt
|
165
95
|
- README.markdown
|
166
96
|
- Rakefile
|
167
|
-
- VERSION
|
168
97
|
- bin/delayed_job_web
|
169
98
|
- delayed_job_web.gemspec
|
170
99
|
- lib/delayed_job_web.rb
|
@@ -175,16 +104,16 @@ files:
|
|
175
104
|
- lib/delayed_job_web/application/public/javascripts/jquery.relatize_date.js
|
176
105
|
- lib/delayed_job_web/application/public/stylesheets/reset.css
|
177
106
|
- lib/delayed_job_web/application/public/stylesheets/style.css
|
178
|
-
- lib/delayed_job_web/application/views/enqueued.
|
179
|
-
- lib/delayed_job_web/application/views/error.
|
180
|
-
- lib/delayed_job_web/application/views/failed.
|
181
|
-
- lib/delayed_job_web/application/views/job.
|
182
|
-
- lib/delayed_job_web/application/views/layout.
|
183
|
-
- lib/delayed_job_web/application/views/next_more.
|
184
|
-
- lib/delayed_job_web/application/views/overview.
|
185
|
-
- lib/delayed_job_web/application/views/pending.
|
186
|
-
- lib/delayed_job_web/application/views/stats.
|
187
|
-
- lib/delayed_job_web/application/views/working.
|
107
|
+
- lib/delayed_job_web/application/views/enqueued.erb
|
108
|
+
- lib/delayed_job_web/application/views/error.erb
|
109
|
+
- lib/delayed_job_web/application/views/failed.erb
|
110
|
+
- lib/delayed_job_web/application/views/job.erb
|
111
|
+
- lib/delayed_job_web/application/views/layout.erb
|
112
|
+
- lib/delayed_job_web/application/views/next_more.erb
|
113
|
+
- lib/delayed_job_web/application/views/overview.erb
|
114
|
+
- lib/delayed_job_web/application/views/pending.erb
|
115
|
+
- lib/delayed_job_web/application/views/stats.erb
|
116
|
+
- lib/delayed_job_web/application/views/working.erb
|
188
117
|
- test/helper.rb
|
189
118
|
- test/test_delayed_job_web.rb
|
190
119
|
homepage: http://github.com/ejschmitt/delayed_job_web
|
@@ -202,13 +131,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
202
131
|
version: '0'
|
203
132
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
204
133
|
requirements:
|
205
|
-
- - '
|
134
|
+
- - '='
|
206
135
|
- !ruby/object:Gem::Version
|
207
|
-
version:
|
136
|
+
version: 2.0.14
|
208
137
|
requirements: []
|
209
138
|
rubyforge_project:
|
210
|
-
rubygems_version: 2.0.
|
139
|
+
rubygems_version: 2.0.14
|
211
140
|
signing_key:
|
212
141
|
specification_version: 4
|
213
142
|
summary: Web interface for delayed_job
|
214
143
|
test_files: []
|
144
|
+
has_rdoc:
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
1.2.2
|
@@ -1,10 +0,0 @@
|
|
1
|
-
%h1
|
2
|
-
Enqueued
|
3
|
-
%p.sub
|
4
|
-
The list below contains all jobs currently in the delayed_job queue.
|
5
|
-
%p.sub
|
6
|
-
= "Showing #{start} to #{start + per_page} of #{@all_jobs.count} enqueued jobs."
|
7
|
-
%ul.job
|
8
|
-
- @jobs.each do |job|
|
9
|
-
= partial :job, {:job => job}
|
10
|
-
= partial :next_more, :start => start, :total_size => @all_jobs.count, :per_page => per_page
|
@@ -1,14 +0,0 @@
|
|
1
|
-
%h1 Failed Jobs
|
2
|
-
- if @jobs.any?
|
3
|
-
%form{:method => 'POST', :action => u('failed/clear')}
|
4
|
-
%input{:type => 'submit', :value => 'Clear Failed Jobs'}
|
5
|
-
%form{:method => 'POST', :action => u('requeue/all')}
|
6
|
-
%input{:type => 'submit', :value => 'Retry Failed Jobs'}
|
7
|
-
|
8
|
-
%p.sub
|
9
|
-
The list below contains all jobs that have a last_error message set.
|
10
|
-
%p.sub= "Showing #{start} to #{start + per_page} of #{@all_jobs.count} failed jobs."
|
11
|
-
%ul.failed.job
|
12
|
-
- @jobs.each do |job|
|
13
|
-
= partial :job, {:job => job}
|
14
|
-
= partial :next_more, :start => start, :total_size => @all_jobs.count, :per_page => per_page
|
@@ -1,44 +0,0 @@
|
|
1
|
-
%li.job
|
2
|
-
%dl
|
3
|
-
%dt ID
|
4
|
-
%dd
|
5
|
-
%a{:name => job.id}
|
6
|
-
%a{:href => "##{job.id}"}=job.id
|
7
|
-
%div.controls
|
8
|
-
%a{:rel => 'retry', :href => u("requeue/#{job.id}")}Retry
|
9
|
-
or
|
10
|
-
%a{:rel => 'remove', :href => u("remove/#{job.id}")}Remove
|
11
|
-
or
|
12
|
-
%a{:rel => 'reload_job', :href => u("reload/#{job.id}")}Reload Job
|
13
|
-
%dt Priority
|
14
|
-
%dd= job.priority
|
15
|
-
%dt Attempts
|
16
|
-
%dd= job.attempts
|
17
|
-
- if job.respond_to?(:queue) && job.queue
|
18
|
-
%dt Queue
|
19
|
-
%dd= job.queue
|
20
|
-
%dt Handler
|
21
|
-
%dd
|
22
|
-
%pre&= job.handler
|
23
|
-
- if job.last_error
|
24
|
-
%dt Last Error
|
25
|
-
%dd
|
26
|
-
%div.backtrace
|
27
|
-
%pre&= job.last_error[0..100] + '...'
|
28
|
-
%a{:href => '#', :class => 'backtrace'} Toggle full message
|
29
|
-
%div.backtrace.full.hide
|
30
|
-
%pre&= job.last_error
|
31
|
-
- if job.run_at
|
32
|
-
%dt Run At
|
33
|
-
%dd.time= job.run_at.rfc822
|
34
|
-
- if job.locked_at
|
35
|
-
%dt Locked At
|
36
|
-
%dd.time= job.locked_at.rfc822
|
37
|
-
- if job.locked_by
|
38
|
-
%dt Locked By
|
39
|
-
%dd= job.locked_by
|
40
|
-
- if job.failed_at
|
41
|
-
%dt Failed At
|
42
|
-
%dd.time= job.failed_at.rfc822
|
43
|
-
%dt Created At
|
44
|
-
%dd.time= job.created_at.rfc822
|
@@ -1,23 +0,0 @@
|
|
1
|
-
!!!
|
2
|
-
%html
|
3
|
-
%head
|
4
|
-
%title Delayed Job Web
|
5
|
-
%link(rel="stylesheet" type="text/css" href="#{u 'stylesheets/reset.css'}")
|
6
|
-
%link(rel="stylesheet" type="text/css" href="#{u 'stylesheets/style.css'}")
|
7
|
-
%body
|
8
|
-
%div.header
|
9
|
-
%ul.nav
|
10
|
-
- tabs.each do |tab|
|
11
|
-
%li{:class => request.path_info == tab[:path] ? 'current' : ''}
|
12
|
-
%a.tab{:href => u(tab[:path])}= tab[:name]
|
13
|
-
%div#main
|
14
|
-
= yield
|
15
|
-
%div#footer
|
16
|
-
%p
|
17
|
-
Powered by
|
18
|
-
%a{:href => 'https://github.com/collectiveidea/delayed_job'} delayed_job
|
19
|
-
&
|
20
|
-
%a{:href => 'https://github.com/ejschmitt/delayed_job_web'} delayed_job_web
|
21
|
-
%script{:type => "text/javascript", :src => u("javascripts/jquery-1.7.1.min.js")}
|
22
|
-
%script{:type => "text/javascript", :src => u("javascripts/jquery.relatize_date.js")}
|
23
|
-
%script{:type => "text/javascript", :src => u("javascripts/application.js")}
|
@@ -1,6 +0,0 @@
|
|
1
|
-
- if start - per_page >= 0 || start + per_page <= total_size
|
2
|
-
%p.pagination
|
3
|
-
- if start - per_page >= 0
|
4
|
-
%a{:href => "#{current_page}?start=#{start - per_page}", :class => 'less'} « less
|
5
|
-
- if start + per_page < total_size
|
6
|
-
%a{:href => "#{current_page}?start=#{start + per_page}", :class => 'more'} more »
|
@@ -1,25 +0,0 @@
|
|
1
|
-
%h1
|
2
|
-
Overview
|
3
|
-
%p.sub
|
4
|
-
The list below shows an overview of the jobs in the delayed_job queue.
|
5
|
-
%table.overview
|
6
|
-
%tr
|
7
|
-
%th Status
|
8
|
-
%th Count
|
9
|
-
%tr
|
10
|
-
%td.status
|
11
|
-
%a{:href => u('/enqueued')} Enqueued Jobs
|
12
|
-
%td= delayed_job.count
|
13
|
-
%tr
|
14
|
-
%td.status
|
15
|
-
%a{:href => u('/working')} Working Jobs
|
16
|
-
%td= delayed_jobs(:working).count
|
17
|
-
%tr
|
18
|
-
%td.status
|
19
|
-
%a{:href => u('/pending')} Pending Jobs
|
20
|
-
%td= delayed_jobs(:pending).count
|
21
|
-
%tr{:class => delayed_jobs(:failed).count > 0 ? 'failure' : ''}
|
22
|
-
%td.status
|
23
|
-
%a{:href => u('/failed')} Failed Jobs
|
24
|
-
%td= delayed_jobs(:failed).count
|
25
|
-
= poll
|
@@ -1,12 +0,0 @@
|
|
1
|
-
%h1
|
2
|
-
Pending
|
3
|
-
- if @jobs.any?
|
4
|
-
%form{:method => 'POST', :action => u('requeue/all')}
|
5
|
-
%input{:type => 'submit', :value => 'Enqueue All Immediately'}
|
6
|
-
%p.sub
|
7
|
-
The list below contains jobs currently being processed.
|
8
|
-
%p.sub= "Showing #{start} to #{start + per_page} of #{@all_jobs.count} pending jobs."
|
9
|
-
%ul.job
|
10
|
-
- @jobs.each do |job|
|
11
|
-
= partial :job, {:job => job}
|
12
|
-
= partial :next_more, :start => start, :total_size => @all_jobs.count, :per_page => per_page
|
@@ -1,20 +0,0 @@
|
|
1
|
-
%h1
|
2
|
-
Stats
|
3
|
-
%table.stats
|
4
|
-
%tr
|
5
|
-
%th.status
|
6
|
-
environment
|
7
|
-
%th= Sinatra::Application.environment.to_s
|
8
|
-
%tr
|
9
|
-
%th.status
|
10
|
-
failed
|
11
|
-
%th= delayed_jobs(:failed).count
|
12
|
-
%tr
|
13
|
-
%th.status
|
14
|
-
pending
|
15
|
-
%th= delayed_jobs(:pending).count
|
16
|
-
%tr
|
17
|
-
%th.status
|
18
|
-
working
|
19
|
-
%th= delayed_jobs(:working).count
|
20
|
-
= poll
|
@@ -1,9 +0,0 @@
|
|
1
|
-
%h1
|
2
|
-
Working
|
3
|
-
%p.sub
|
4
|
-
The list below contains jobs currently being processed.
|
5
|
-
%p.sub= "Showing #{start} to #{start + per_page} of #{@all_jobs.count} working jobs."
|
6
|
-
%ul.job
|
7
|
-
- @jobs.each do |job|
|
8
|
-
= partial :job, {:job => job}
|
9
|
-
= partial :next_more, :start => start, :total_size => @all_jobs.count, :per_page => per_page
|