resque-stages 0.0.1

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.
Files changed (62) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +103 -0
  5. data/.rubocop_todo.yml +34 -0
  6. data/.ruby-version +1 -0
  7. data/.travis.yml +6 -0
  8. data/CODE_OF_CONDUCT.md +74 -0
  9. data/Gemfile +9 -0
  10. data/Gemfile.lock +172 -0
  11. data/LICENSE.txt +21 -0
  12. data/README.md +250 -0
  13. data/Rakefile +8 -0
  14. data/bin/console +16 -0
  15. data/bin/setup +8 -0
  16. data/lib/resque-stages.rb +11 -0
  17. data/lib/resque/plugins/stages.rb +110 -0
  18. data/lib/resque/plugins/stages/cleaner.rb +36 -0
  19. data/lib/resque/plugins/stages/redis_access.rb +16 -0
  20. data/lib/resque/plugins/stages/staged_group.rb +181 -0
  21. data/lib/resque/plugins/stages/staged_group_list.rb +79 -0
  22. data/lib/resque/plugins/stages/staged_group_stage.rb +275 -0
  23. data/lib/resque/plugins/stages/staged_job.rb +271 -0
  24. data/lib/resque/plugins/stages/version.rb +9 -0
  25. data/lib/resque/server/public/stages.css +56 -0
  26. data/lib/resque/server/views/_group_stages_list_pagination.erb +67 -0
  27. data/lib/resque/server/views/_group_stages_list_table.erb +25 -0
  28. data/lib/resque/server/views/_stage_job_list_pagination.erb +72 -0
  29. data/lib/resque/server/views/_stage_job_list_table.erb +46 -0
  30. data/lib/resque/server/views/_staged_group_list_pagination.erb +67 -0
  31. data/lib/resque/server/views/_staged_group_list_table.erb +44 -0
  32. data/lib/resque/server/views/group_stages_list.erb +58 -0
  33. data/lib/resque/server/views/groups.erb +40 -0
  34. data/lib/resque/server/views/job_details.erb +91 -0
  35. data/lib/resque/server/views/stage.erb +64 -0
  36. data/lib/resque/stages_server.rb +240 -0
  37. data/read_me/groups_list.png +0 -0
  38. data/read_me/job.png +0 -0
  39. data/read_me/stage.png +0 -0
  40. data/read_me/stages.png +0 -0
  41. data/resque-stages.gemspec +49 -0
  42. data/spec/rails_helper.rb +40 -0
  43. data/spec/resque/plugins/stages/cleaner_spec.rb +82 -0
  44. data/spec/resque/plugins/stages/staged_group_list_spec.rb +96 -0
  45. data/spec/resque/plugins/stages/staged_group_spec.rb +226 -0
  46. data/spec/resque/plugins/stages/staged_group_stage_spec.rb +293 -0
  47. data/spec/resque/plugins/stages/staged_job_spec.rb +324 -0
  48. data/spec/resque/plugins/stages_spec.rb +369 -0
  49. data/spec/resque/server/public/stages.css_spec.rb +18 -0
  50. data/spec/resque/server/views/group_stages_list.erb_spec.rb +67 -0
  51. data/spec/resque/server/views/groups.erb_spec.rb +81 -0
  52. data/spec/resque/server/views/job_details.erb_spec.rb +100 -0
  53. data/spec/resque/server/views/stage.erb_spec.rb +68 -0
  54. data/spec/spec_helper.rb +104 -0
  55. data/spec/support/01_utils/fake_logger.rb +7 -0
  56. data/spec/support/config/redis-auth.yml +12 -0
  57. data/spec/support/fake_logger.rb +7 -0
  58. data/spec/support/jobs/basic_job.rb +17 -0
  59. data/spec/support/jobs/compressed_job.rb +18 -0
  60. data/spec/support/jobs/retry_job.rb +21 -0
  61. data/spec/support/purge_all.rb +15 -0
  62. metadata +297 -0
@@ -0,0 +1,46 @@
1
+ <div class="table_container">
2
+ <table>
3
+ <tr>
4
+ <th><a href="<%= u("stages/stage") %>?<%=
5
+ { group_stage_id: group_stage_id,
6
+ sort: "class_name",
7
+ page_size: page_size,
8
+ page_num: page_num,
9
+ order: staged_group_stage.order_param("class_name", sort_by, sort_order) }.to_param %>">
10
+ Class
11
+ </a></th>
12
+ <th><a href="<%= u("stages/stage") %>?<%=
13
+ { group_stage_id: group_stage_id,
14
+ sort: "status",
15
+ page_size: page_size,
16
+ page_num: page_num,
17
+ order: staged_group_stage.order_param("status", sort_by, sort_order) }.to_param %>">
18
+ Status
19
+ </a></th>
20
+ <th><a href="<%= u("stages/stage") %>?<%=
21
+ { group_stage_id: group_stage_id,
22
+ sort: "status_message",
23
+ page_size: page_size,
24
+ page_num: page_num,
25
+ order: staged_group_stage.order_param("status_message", sort_by, sort_order) }.to_param %>">
26
+ Message
27
+ </a></th>
28
+ <th>Args</th>
29
+ </tr>
30
+
31
+ <% jobs.each do |job| %>
32
+ <tr>
33
+ <td>
34
+ <a href="<%= u("stages") %>/job_details?<%= { job_id: job.job_id }.to_param %>">
35
+ <%= job.class_name %>
36
+ </a>
37
+ </td>
38
+ <td><%= job.status %></td>
39
+ <td><%= job.status_message %></td>
40
+ <td>
41
+ <pre><code><%= "".html_safe + job.uncompressed_args.to_yaml %></code></pre>
42
+ </td>
43
+ </tr>
44
+ <% end %>
45
+ </table>
46
+ </div>
@@ -0,0 +1,67 @@
1
+ <div class="stages_pagination_block">
2
+ <% total_pages = staged_group_list.num_groups / page_size %>
3
+ <% total_pages += 1 if staged_group_list.num_groups % page_size > 0 %>
4
+ <% page_num = 1 if page_num > total_pages || page_num < 1 %>
5
+ <% first_page = [1, page_num - 3].max %>
6
+ <% last_page = [total_pages, page_num + 3].min %>
7
+ <% last_page = page_num < 4 ? [total_pages, last_page + (4 - page_num)].min : last_page %>
8
+ <% first_page = page_num > total_pages - 3 ? [1, first_page + ((total_pages - page_num) - 3)].max : first_page %>
9
+
10
+ <% if total_pages > 1 %>
11
+ <div class="stages_prev_links">
12
+ <a href="<%= u("stages") %>?<%= { sort: @sort_by,
13
+ page_size: page_size,
14
+ page_num: 1,
15
+ order: @sort_order }.to_param %>"
16
+ class="stages_first_page"
17
+ disabled="<%= first_page > 1 %>">
18
+ &lt;&lt; First
19
+ </a>
20
+
21
+ <a href="<%= u("stages") %>?<%= { sort: @sort_by,
22
+ page_size: page_size,
23
+ page_num: [1, page_num - 1].max,
24
+ order: @sort_order }.to_param %>"
25
+ class="stages_prev_page"
26
+ disabled="<%= page_num > 1 %>">
27
+ &lt; Prev
28
+ </a>
29
+ </div>
30
+
31
+ <div class="stages_pages">
32
+ <% (first_page..last_page).each do |page_number| %>
33
+ <% if page_number != page_num %>
34
+ <a href="<%= u("stages") %>?<%= { sort: @sort_by,
35
+ page_size: page_size,
36
+ page_num: page_number,
37
+ order: @sort_order }.to_param %>"
38
+ class="stages_page">
39
+ <%= page_number %>
40
+ </a>
41
+ <% else %>
42
+ <%= page_number %>
43
+ <% end %>
44
+ <% end %>
45
+ </div>
46
+
47
+ <div class="stages_next_links">
48
+ <a href="<%= u("stages") %>?<%= { sort: @sort_by,
49
+ page_size: page_size,
50
+ page_num: [total_pages, page_num + 1].min,
51
+ order: @sort_order }.to_param %>"
52
+ class="stages_next_page"
53
+ disabled="<%= page_num < last_page %>">
54
+ Next &gt;
55
+ </a>
56
+
57
+ <a href="<%= u("stages") %>?<%= { sort: @sort_by,
58
+ page_size: page_size,
59
+ page_num: total_pages,
60
+ order: @sort_order }.to_param %>"
61
+ class="stages_last_page"
62
+ disabled="<%= last_page < total_pages %>">
63
+ Last &gt;&gt;
64
+ </a>
65
+ </div>
66
+ <% end %>
67
+ </div>
@@ -0,0 +1,44 @@
1
+ <div class="table_container">
2
+ <table>
3
+ <tr>
4
+ <th><a href="<%= u("stages") %>?<%=
5
+ { sort: "description",
6
+ page_size: page_size,
7
+ page_num: page_num,
8
+ order: staged_group_list.order_param("description", sort_by, sort_order) }.to_param %>">
9
+ Description
10
+ </a></th>
11
+ <th><a href="<%= u("stages") %>?<%=
12
+ { sort: "num_stages",
13
+ page_size: page_size,
14
+ page_num: page_num,
15
+ order: staged_group_list.order_param("num_stages", sort_by, sort_order) }.to_param %>">
16
+ Num Stages
17
+ </a></th>
18
+ <th><a href="<%= u("stages") %>?<%=
19
+ { sort: "created_at",
20
+ page_size: page_size,
21
+ page_num: page_num,
22
+ order: staged_group_list.order_param("created_at", sort_by, sort_order) }.to_param %>">
23
+ Created
24
+ </a></th>
25
+ </tr>
26
+
27
+ <% groups.each do |group| %>
28
+ <tr>
29
+ <td>
30
+ <a href="<%= u("stages") %>/group_stages_list?<%= { group_id: group.group_id }.to_param %>">
31
+ <%= group.description.presence || "&nbsp;&nbsp;&nbsp;".html_safe %>
32
+ </a>
33
+ </td>
34
+ <td>
35
+ <%= group.num_stages.to_i %>
36
+ </td>
37
+ <td>
38
+ <%= time_ago_in_words(group.created_at) %> ago
39
+ (<%= group.created_at %>)
40
+ </td>
41
+ </tr>
42
+ <% end %>
43
+ </table>
44
+ </div>
@@ -0,0 +1,58 @@
1
+ <link href="<%= u("stages/public/stages.css") %>" media="screen" rel="stylesheet" type="text/css">
2
+
3
+ <% group = Resque::Plugins::Stages::StagedGroup.new(@group_id) %>
4
+
5
+ <h1>
6
+ <%= group.description %>
7
+ </h1>
8
+
9
+ <p>
10
+ <a href="<%= u("stages") %>">
11
+ Groups
12
+ </a>
13
+ </p>
14
+
15
+ <p>
16
+ Num stages in this group = <%= group.num_stages %>
17
+ </p>
18
+
19
+ <% if group.num_stages > 0 %>
20
+ <h1>Stages</h1>
21
+
22
+ <% stages = group.paged_stages(@page_num, @page_size) %>
23
+
24
+ <div class="stages_reset"/>
25
+
26
+ <%= erb(File.read(Resque::StagesServer.erb_path("_group_stages_list_pagination.erb")),
27
+ locals: { group: group,
28
+ group_id: @group_id,
29
+ page_num: @page_num,
30
+ page_size: @page_size }) %>
31
+
32
+ <%= erb(File.read(Resque::StagesServer.erb_path("_group_stages_list_table.erb")),
33
+ locals: { stages: stages, show_class: false }) %>
34
+
35
+ <%= erb(File.read(Resque::StagesServer.erb_path("_group_stages_list_pagination.erb")),
36
+ locals: { group: group,
37
+ group_id: @group_id,
38
+ page_num: @page_num,
39
+ page_size: @page_size }) %>
40
+
41
+ <br/>
42
+ <% end %>
43
+
44
+ <form method="POST" action="<%= u("stages/initiate_group") %>?<%=
45
+ { group_id: group.group_id }.to_param %>">
46
+ <input type="submit" name="" value="Initiate Group"/>
47
+ </form>
48
+ <form method="POST" action="<%= u("stages/delete_group") %>?<%= { group_id: group.group_id }.to_param %>">
49
+ <input type="submit" name="" value="Delete"/>
50
+ </form>
51
+
52
+ <div class="stages_reset"/>
53
+ <br/>
54
+ <div>
55
+ <p>
56
+ Stages v<%= Resque::Plugins::Stages::VERSION %>
57
+ </p>
58
+ </div>
@@ -0,0 +1,40 @@
1
+ <link href="<%= u("stages/public/stages.css") %>" media="screen" rel="stylesheet" type="text/css">
2
+
3
+ <h1>Staged Groups</h1>
4
+
5
+ <% staged_group_list = Resque::Plugins::Stages::StagedGroupList.new %>
6
+
7
+ <div class="stages_reset"/>
8
+
9
+ <%= erb(File.read(Resque::StagesServer.erb_path("_staged_group_list_pagination.erb")),
10
+ locals: { staged_group_list: staged_group_list, page_num: @page_num, page_size: @page_size }) %>
11
+
12
+ <%= erb(File.read(Resque::StagesServer.erb_path("_staged_group_list_table.erb")),
13
+ locals: { groups: staged_group_list.paginated_groups(@sort_by, @sort_order, @page_num, @page_size),
14
+ staged_group_list: staged_group_list,
15
+ sort_by: @sort_by,
16
+ sort_order: @sort_order,
17
+ page_num: @page_num,
18
+ page_size: @page_size }) %>
19
+
20
+ <%= erb(File.read(Resque::StagesServer.erb_path("_staged_group_list_pagination.erb")),
21
+ locals: { staged_group_list: staged_group_list, page_num: @page_num, page_size: @page_size }) %>
22
+
23
+ <br/>
24
+
25
+ <div>
26
+ <form method="POST" action="<%= u("stages/delete_all_groups") %>">
27
+ <input type="submit" name="" value="Delete All Groups"/>
28
+ </form>
29
+ <form method="POST" action="<%= u("stages/cleanup_jobs") %>">
30
+ <input type="submit" name="" value="Cleanup Jobs"/>
31
+ </form>
32
+ <form method="POST" action="<%= u("stages/purge_all") %>">
33
+ <input type="submit" name="" value="Purge"/>
34
+ </form>
35
+ </div>
36
+ <div class="stages_reset"/>
37
+ <br/>
38
+ <div>
39
+ Stages v<%= Resque::Plugins::Stages::VERSION %>
40
+ </div>
@@ -0,0 +1,91 @@
1
+ <link href="<%= u("stages/public/stages.css") %>" media="screen" rel="stylesheet" type="text/css">
2
+
3
+ <% job_details = Resque::Plugins::Stages::StagedJob.new(@job_id) %>
4
+
5
+ <h1>
6
+ <%= job_details.class_name %>
7
+ </h1>
8
+
9
+ <p>
10
+ <a href="<%= u("stages") %>">
11
+ Groups
12
+ </a>
13
+ |
14
+ <% if job_details.staged_group_stage&.staged_group %>
15
+ <a href="<%= u("stages/group_stages_list") %>?<%= { group_id: job_details.staged_group_stage.staged_group.group_id }.to_param %>">
16
+ <%= job_details.staged_group_stage.staged_group&.description %>
17
+ </a>
18
+ <% end %>
19
+ |
20
+ <% if job_details.staged_group_stage %>
21
+ <a href="<%= u("stages/stage") %>?<%= { group_stage_id: job_details.staged_group_stage.group_stage_id }.to_param %>">
22
+ <%= job_details.staged_group_stage.number %>
23
+ </a>
24
+ <% end %>
25
+ </p>
26
+
27
+ <div class="table_container">
28
+ <table>
29
+ <tr>
30
+ <td>
31
+ Enqueued
32
+ </td>
33
+ <td>
34
+ <%= time_ago_in_words(job_details.queue_time) %> ago
35
+ (<%= job_details.queue_time %>)
36
+ </td>
37
+ </tr>
38
+ <tr>
39
+ <td>
40
+ Status
41
+ </td>
42
+ <td>
43
+ <%= job_details.status %>
44
+ </td>
45
+ </tr>
46
+ <tr>
47
+ <td>
48
+ Class
49
+ </td>
50
+ <td>
51
+ <%= job_details.class_name %>
52
+ </td>
53
+ </tr>
54
+ </tr>
55
+ <tr>
56
+ <td>
57
+ Params
58
+ </td>
59
+ <td>
60
+ <pre><code><%= "".html_safe + job_details.uncompressed_args.to_yaml %></code></pre>
61
+ </td>
62
+ </tr>
63
+ <tr>
64
+ <td>
65
+ Message
66
+ </td>
67
+ <td>
68
+ <%= job_details.status_message %>
69
+ </td>
70
+ </tr>
71
+ </table>
72
+ </div>
73
+
74
+ <br/>
75
+
76
+ <% if job_details.pending? %>
77
+ <form method="POST" action="<%= u("stages/queue_job") %>?<%= { job_id: @job_id }.to_param %>">
78
+ <input type="submit" name="" value="Queue Job"/>
79
+ </form>
80
+ <% end %>
81
+
82
+ <form method="POST" action="<%= u("stages/delete_job") %>?<%= { job_id: @job_id }.to_param %>">
83
+ <input type="submit" name="" value="Delete Job"/>
84
+ </form>
85
+
86
+ <div class="stages_reset"/>
87
+
88
+ <br/>
89
+ <div>
90
+ Stages v<%= Resque::Plugins::Stages::VERSION %>
91
+ </div>
@@ -0,0 +1,64 @@
1
+ <link href="<%= u("stages/public/stages.css") %>" media="screen" rel="stylesheet" type="text/css">
2
+
3
+ <% staged_group_stage = Resque::Plugins::Stages::StagedGroupStage.new(params[:group_stage_id]) %>
4
+
5
+ <h1>Stage <%= staged_group_stage.number %></h1>
6
+
7
+ <p>
8
+ <a href="<%= u("stages") %>">
9
+ Groups
10
+ </a>
11
+ |
12
+ <% if staged_group_stage.staged_group %>
13
+ <a href="<%= u("stages/group_stages_list") %>?<%= { group_id: staged_group_stage.staged_group.group_id }.to_param %>">
14
+ <%= staged_group_stage.staged_group&.description %>
15
+ </a>
16
+ <% end %>
17
+ </p>
18
+
19
+ <div class="table_container">
20
+ <table>
21
+ <tr>
22
+ <td>Num jobs</td>
23
+ <td><%= staged_group_stage.num_jobs %></td>
24
+ </tr>
25
+ <tr>
26
+ <td>Status</td>
27
+ <td><%= staged_group_stage.status %></td>
28
+ </tr>
29
+ </table>
30
+ </div>
31
+
32
+ <div class="stages_reset"/>
33
+
34
+ <%= erb(File.read(Resque::StagesServer.erb_path("_stage_job_list_pagination.erb")),
35
+ locals: { staged_group_stage: staged_group_stage, page_num: @page_num, page_size: @page_size }) %>
36
+
37
+ <%= erb(File.read(Resque::StagesServer.erb_path("_stage_job_list_table.erb")),
38
+ locals: { jobs: staged_group_stage.paginated_jobs(@sort_by, @sort_order, @page_num, @page_size),
39
+ staged_group_stage: staged_group_stage,
40
+ group_stage_id: params[:group_stage_id],
41
+ sort_by: @sort_by,
42
+ sort_order: @sort_order,
43
+ page_num: @page_num,
44
+ page_size: @page_size }) %>
45
+
46
+ <%= erb(File.read(Resque::StagesServer.erb_path("_stage_job_list_pagination.erb")),
47
+ locals: { staged_group_stage: staged_group_stage, page_num: @page_num, page_size: @page_size }) %>
48
+
49
+ <br/>
50
+
51
+ <div>
52
+ <form method="POST" action="<%= u("stages/initiate_stage") %>?<%= { group_stage_id: staged_group_stage.group_stage_id }.to_param %>">
53
+ <input type="submit" name="" value="Initiate"/>
54
+ </form>
55
+ <form method="POST" action="<%= u("stages/delete_stage") %>?<%= { group_stage_id: staged_group_stage.group_stage_id }.to_param %>">
56
+ <input type="submit" name="" value="Delete"/>
57
+ </form>
58
+ </div>
59
+
60
+ <div class="stages_reset"/>
61
+ <br/>
62
+ <div>
63
+ Stages v<%= Resque::Plugins::Stages::VERSION %>
64
+ </div>
@@ -0,0 +1,240 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "resque"
4
+ require "resque/server"
5
+ require "resque-stages"
6
+ require "action_view/helpers/output_safety_helper"
7
+ require "action_view/helpers/capture_helper"
8
+ require "action_view/helpers/date_helper"
9
+
10
+ # rubocop:disable Metrics/ModuleLength
11
+
12
+ module Resque
13
+ # Extends Resque Web Based UI.
14
+ # Structure has been borrowed from ResqueHistory.
15
+ module StagesServer
16
+ include ActionView::Helpers::DateHelper
17
+
18
+ class << self
19
+ def erb_path(filename)
20
+ File.join(File.dirname(__FILE__), "server", "views", filename)
21
+ end
22
+
23
+ def public_path(filename)
24
+ File.join(File.dirname(__FILE__), "server", "public", filename)
25
+ end
26
+
27
+ def included(base)
28
+ add_page_views(base)
29
+ add_button_callbacks(base)
30
+ add_static_files(base)
31
+ end
32
+
33
+ private
34
+
35
+ def add_page_views(base)
36
+ groups_list(base)
37
+ group_stages_list(base)
38
+ stage_jobs_list(base)
39
+ job_details(base)
40
+ end
41
+
42
+ def groups_list(base)
43
+ stages_key_params(base)
44
+
45
+ base.class_eval do
46
+ get "/stages" do
47
+ set_stages_key_params
48
+
49
+ erb File.read(Resque::StagesServer.erb_path("groups.erb"))
50
+ end
51
+ end
52
+ end
53
+
54
+ def stages_key_params(base)
55
+ base.class_eval do
56
+ def set_stages_key_params
57
+ @sort_by = params[:sort] || "description"
58
+ @sort_order = params[:order] || "asc"
59
+ @page_num = (params[:page_num] || 1).to_i
60
+ @page_size = (params[:page_size] || 20).to_i
61
+ end
62
+ end
63
+ end
64
+
65
+ def group_stages_list(base)
66
+ group_stages_list_params(base)
67
+
68
+ base.class_eval do
69
+ get "/stages/group_stages_list" do
70
+ set_group_stages_list_params_params
71
+
72
+ erb File.read(Resque::StagesServer.erb_path("group_stages_list.erb"))
73
+ end
74
+ end
75
+ end
76
+
77
+ def group_stages_list_params(base)
78
+ base.class_eval do
79
+ def set_group_stages_list_params_params
80
+ @group_id = params[:group_id]
81
+ @page_num = (params[:page_num] || 1).to_i
82
+ @page_size = (params[:page_size] || 20).to_i
83
+ end
84
+ end
85
+ end
86
+
87
+ def stage_jobs_list(base)
88
+ stage_jobs_key_params(base)
89
+
90
+ base.class_eval do
91
+ get "/stages/stage" do
92
+ set_stage_jobs_key_params
93
+
94
+ erb File.read(Resque::StagesServer.erb_path("stage.erb"))
95
+ end
96
+ end
97
+ end
98
+
99
+ def stage_jobs_key_params(base)
100
+ base.class_eval do
101
+ def set_stage_jobs_key_params
102
+ @group_stage_id = params[:group_stage_id]
103
+ @sort_by = params[:sort] || "status"
104
+ @sort_order = params[:order] || "desc"
105
+ @page_num = (params[:page_num] || 1).to_i
106
+ @page_size = (params[:page_size] || 20).to_i
107
+ end
108
+ end
109
+ end
110
+
111
+ def job_details(base)
112
+ base.class_eval do
113
+ get "/stages/job_details" do
114
+ @job_id = params[:job_id]
115
+
116
+ erb File.read(Resque::StagesServer.erb_path("job_details.erb"))
117
+ end
118
+ end
119
+ end
120
+
121
+ def add_static_files(base)
122
+ base.class_eval do
123
+ get %r{/stages/public/([a-z_]+\.[a-z]+)} do
124
+ send_file Resque::StagesServer.public_path(params[:captures]&.first)
125
+ end
126
+ end
127
+ end
128
+
129
+ def add_button_callbacks(base)
130
+ purge_all(base)
131
+ cleanup_jobs(base)
132
+ delete_all_groups(base)
133
+ initiate_group(base)
134
+ delete_group(base)
135
+ initiate_stage(base)
136
+ delete_stage(base)
137
+ queue_job(base)
138
+ delete_job(base)
139
+ end
140
+
141
+ def purge_all(base)
142
+ base.class_eval do
143
+ post "/stages/purge_all" do
144
+ Resque::Plugins::Stages::Cleaner.purge_all
145
+
146
+ redirect u("stages")
147
+ end
148
+ end
149
+ end
150
+
151
+ def cleanup_jobs(base)
152
+ base.class_eval do
153
+ post "/stages/cleanup_jobs" do
154
+ Resque::Plugins::Stages::Cleaner.cleanup_jobs
155
+
156
+ redirect u("stages")
157
+ end
158
+ end
159
+ end
160
+
161
+ def delete_all_groups(base)
162
+ base.class_eval do
163
+ post "/stages/delete_all_groups" do
164
+ Resque::Plugins::Stages::StagedGroupList.new.delete_all
165
+
166
+ redirect u("stages")
167
+ end
168
+ end
169
+ end
170
+
171
+ def initiate_group(base)
172
+ base.class_eval do
173
+ post "/stages/initiate_group" do
174
+ Resque::Plugins::Stages::StagedGroup.new(params[:group_id]).initiate
175
+
176
+ redirect u("stages")
177
+ end
178
+ end
179
+ end
180
+
181
+ def delete_group(base)
182
+ base.class_eval do
183
+ post "/stages/delete_group" do
184
+ Resque::Plugins::Stages::StagedGroup.new(params[:group_id]).delete
185
+
186
+ redirect u("stages")
187
+ end
188
+ end
189
+ end
190
+
191
+ def initiate_stage(base)
192
+ base.class_eval do
193
+ post "/stages/initiate_stage" do
194
+ Resque::Plugins::Stages::StagedGroupStage.new(params[:group_stage_id]).initiate
195
+
196
+ redirect u("stages")
197
+ end
198
+ end
199
+ end
200
+
201
+ def delete_stage(base)
202
+ base.class_eval do
203
+ post "/stages/delete_stage" do
204
+ Resque::Plugins::Stages::StagedGroupStage.new(params[:group_stage_id]).delete
205
+
206
+ redirect u("stages")
207
+ end
208
+ end
209
+ end
210
+
211
+ def queue_job(base)
212
+ base.class_eval do
213
+ post "/stages/queue_job" do
214
+ Resque::Plugins::Stages::StagedJob.new(params[:job_id]).enqueue_job
215
+
216
+ redirect u("stages")
217
+ end
218
+ end
219
+ end
220
+
221
+ def delete_job(base)
222
+ base.class_eval do
223
+ post "/stages/delete_job" do
224
+ Resque::Plugins::Stages::StagedJob.new(params[:job_id]).delete
225
+
226
+ redirect u("stages")
227
+ end
228
+ end
229
+ end
230
+ end
231
+
232
+ Resque::Server.tabs << "Stages"
233
+ end
234
+ end
235
+
236
+ Resque::Server.class_eval do
237
+ include Resque::StagesServer
238
+ end
239
+
240
+ # rubocop:enable Metrics/ModuleLength