delayed_job_web 1.2.2 → 1.2.4

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.

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