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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2b1747cd568048db0cb506ccade13936467232c7
4
- data.tar.gz: 47fe80185455b916f68b39aa6300fc823471efb8
3
+ metadata.gz: a024d8e2555f5bb896f5cbe5f077eee5422a6db8
4
+ data.tar.gz: 4538ff701954c0b3c6cf67520a0363e7c6e3b97c
5
5
  SHA512:
6
- metadata.gz: c36d123758d03d6b9f07e4babc50f818119db18870014043ed4f6d3f89f7d8d46723de81046a5f5ddfba3e04f14f561a34b1b0100f9ede20c3657635275b9698
7
- data.tar.gz: 2e4e047d9d783903e1b8129bfdd5270bdf78cb3ef40619dd529ec72fb7a523695218c9b62bb48124138f16183f4fa93238ed324df236665bf69c0818e354caf9
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
- group :development do
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 a route to your application for accessing the interface
31
+ Add the following route to your application for accessing the interface,
32
+ and retrying failed jobs.
31
33
 
32
34
  ```ruby
33
- get "/delayed_job" => DelayedJobWeb, :anchor => false
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'
@@ -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.2"
5
+ s.version = "1.2.4"
9
6
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
7
+ s.required_rubygems_version = "2.0.14"
11
8
  s.authors = ["Erick Schmitt"]
12
- s.date = "2014-01-14"
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.haml",
38
- "lib/delayed_job_web/application/views/error.haml",
39
- "lib/delayed_job_web/application/views/failed.haml",
40
- "lib/delayed_job_web/application/views/job.haml",
41
- "lib/delayed_job_web/application/views/layout.haml",
42
- "lib/delayed_job_web/application/views/next_more.haml",
43
- "lib/delayed_job_web/application/views/overview.haml",
44
- "lib/delayed_job_web/application/views/pending.haml",
45
- "lib/delayed_job_web/application/views/stats.haml",
46
- "lib/delayed_job_web/application/views/working.haml",
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
- if s.respond_to? :specification_version then
57
- s.specification_version = 4
58
-
59
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
60
- s.add_runtime_dependency(%q<tilt>, ["= 1.4.1"])
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
- set :haml, { :format => :html5 }
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
- alias_method :u, :url_path
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
- haml :overview
60
+ erb :overview
57
61
  else
58
62
  @message = "Unable to connected to Delayed::Job database"
59
- haml :error
63
+ erb :error
60
64
  end
61
65
  end
62
66
 
63
67
  get '/stats' do
64
- haml :stats
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 = delayed_jobs(page.to_sym).order('created_at desc, id desc').offset(start).limit(per_page)
70
- @all_jobs = delayed_jobs(page.to_sym)
71
- haml page.to_sym
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
- case type
108
- when :enqueued
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
- haml(template.to_sym, {:layout => false}, local_vars)
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)}.poll' rel='poll'>Live Poll</a>"
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
- haml(page.to_sym, {:layout => false})
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,2 @@
1
+ <h1>Error</h1>
2
+ <p><%= @message %></p>
@@ -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 %>">&laquo; less</a>
6
+ <% end %>
7
+ <% if start + per_page < total_size %>
8
+ <a class="more" href="<%= current_page %><%= divider %>start=<%= start + per_page %>">more &raquo;</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.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-14 00:00:00.000000000 Z
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.haml
179
- - lib/delayed_job_web/application/views/error.haml
180
- - lib/delayed_job_web/application/views/failed.haml
181
- - lib/delayed_job_web/application/views/job.haml
182
- - lib/delayed_job_web/application/views/layout.haml
183
- - lib/delayed_job_web/application/views/next_more.haml
184
- - lib/delayed_job_web/application/views/overview.haml
185
- - lib/delayed_job_web/application/views/pending.haml
186
- - lib/delayed_job_web/application/views/stats.haml
187
- - lib/delayed_job_web/application/views/working.haml
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: '0'
136
+ version: 2.0.14
208
137
  requirements: []
209
138
  rubyforge_project:
210
- rubygems_version: 2.0.6
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,2 +0,0 @@
1
- %h1 Error
2
- %p= @message
@@ -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'} &laquo; less
5
- - if start + per_page < total_size
6
- %a{:href => "#{current_page}?start=#{start + per_page}", :class => 'more'} more &raquo;
@@ -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