rocketjob_mission_control 1.2.4 → 2.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +201 -0
  3. data/README.md +85 -0
  4. data/Rakefile +12 -18
  5. data/app/assets/javascripts/rocket_job_mission_control/application.js +3 -0
  6. data/app/assets/javascripts/rocket_job_mission_control/base.js.coffee +9 -12
  7. data/app/assets/javascripts/rocket_job_mission_control/datatable.js.coffee +31 -0
  8. data/app/assets/javascripts/rocket_job_mission_control/dirmon_entries.js.coffee +0 -1
  9. data/app/assets/stylesheets/rocket_job_mission_control/application.scss +2 -0
  10. data/app/assets/stylesheets/rocket_job_mission_control/base.scss +310 -357
  11. data/app/assets/stylesheets/rocket_job_mission_control/bootstrap_and_overrides.scss +474 -3
  12. data/app/assets/stylesheets/rocket_job_mission_control/callout.scss +57 -12
  13. data/app/assets/stylesheets/rocket_job_mission_control/jobs.scss +3 -2
  14. data/app/assets/stylesheets/rocket_job_mission_control/worker_processes.scss +9 -0
  15. data/app/controllers/rocket_job_mission_control/active_processes_controller.rb +26 -0
  16. data/app/controllers/rocket_job_mission_control/dirmon_entries/index_filters_controller.rb +50 -0
  17. data/app/controllers/rocket_job_mission_control/dirmon_entries_controller.rb +11 -14
  18. data/app/controllers/rocket_job_mission_control/jobs/failures_controller.rb +2 -2
  19. data/app/controllers/rocket_job_mission_control/jobs/index_filters_controller.rb +69 -0
  20. data/app/controllers/rocket_job_mission_control/jobs_controller.rb +10 -12
  21. data/app/controllers/rocket_job_mission_control/workers/index_filters_controller.rb +50 -0
  22. data/app/controllers/rocket_job_mission_control/workers_controller.rb +14 -5
  23. data/app/datatables/rocket_job_mission_control/active_processes_datatable.rb +79 -0
  24. data/app/datatables/rocket_job_mission_control/completed_jobs_datatable.rb +26 -0
  25. data/app/datatables/rocket_job_mission_control/dirmon_entries_datatable.rb +95 -0
  26. data/app/datatables/rocket_job_mission_control/interrupted_jobs_datatable.rb +25 -0
  27. data/app/datatables/rocket_job_mission_control/jobs_datatable.rb +95 -0
  28. data/app/datatables/rocket_job_mission_control/queued_jobs_datatable.rb +22 -0
  29. data/app/datatables/rocket_job_mission_control/running_jobs_datatable.rb +35 -0
  30. data/app/datatables/rocket_job_mission_control/scheduled_jobs_datatable.rb +30 -0
  31. data/app/datatables/rocket_job_mission_control/workers_datatable.rb +127 -0
  32. data/app/helpers/rocket_job_mission_control/application_helper.rb +21 -2
  33. data/app/helpers/rocket_job_mission_control/dirmon_entries_helper.rb +7 -0
  34. data/app/helpers/rocket_job_mission_control/jobs_helper.rb +9 -26
  35. data/app/helpers/rocket_job_mission_control/workers_helper.rb +18 -6
  36. data/app/interactors/rocket_job_mission_control/dirmon_entries/search.rb +19 -0
  37. data/app/interactors/rocket_job_mission_control/jobs/search.rb +19 -0
  38. data/app/interactors/rocket_job_mission_control/workers/search.rb +19 -0
  39. data/app/models/job_failures.rb +5 -5
  40. data/app/views/layouts/rocket_job_mission_control/application.html.haml +22 -22
  41. data/app/views/layouts/rocket_job_mission_control/partials/_header.html.haml +33 -18
  42. data/app/views/layouts/rocket_job_mission_control/partials/_sidebar.html.haml +11 -24
  43. data/app/views/rocket_job_mission_control/active_processes/index.html.haml +24 -0
  44. data/app/views/rocket_job_mission_control/dirmon_entries/_form.html.haml +11 -10
  45. data/app/views/rocket_job_mission_control/dirmon_entries/_properties.html.haml +6 -3
  46. data/app/views/rocket_job_mission_control/dirmon_entries/_sidebar.html.haml +27 -0
  47. data/app/views/rocket_job_mission_control/dirmon_entries/_status.html.haml +0 -3
  48. data/app/views/rocket_job_mission_control/dirmon_entries/edit.html.haml +3 -7
  49. data/app/views/rocket_job_mission_control/dirmon_entries/index.html.haml +17 -10
  50. data/app/views/rocket_job_mission_control/dirmon_entries/index_filters/disabled.html.haml +17 -0
  51. data/app/views/rocket_job_mission_control/dirmon_entries/index_filters/enabled.html.haml +17 -0
  52. data/app/views/rocket_job_mission_control/dirmon_entries/index_filters/failed.html.haml +17 -0
  53. data/app/views/rocket_job_mission_control/dirmon_entries/index_filters/pending.html.haml +17 -0
  54. data/app/views/rocket_job_mission_control/dirmon_entries/new.html.haml +5 -8
  55. data/app/views/rocket_job_mission_control/dirmon_entries/show.html.haml +18 -22
  56. data/app/views/rocket_job_mission_control/jobs/_sidebar.html.haml +28 -0
  57. data/app/views/rocket_job_mission_control/jobs/failures/index.html.haml +2 -2
  58. data/app/views/rocket_job_mission_control/jobs/index.html.haml +23 -10
  59. data/app/views/rocket_job_mission_control/jobs/index_filters/aborted.html.haml +22 -0
  60. data/app/views/rocket_job_mission_control/jobs/index_filters/completed.html.haml +23 -0
  61. data/app/views/rocket_job_mission_control/jobs/index_filters/failed.html.haml +22 -0
  62. data/app/views/rocket_job_mission_control/jobs/index_filters/paused.html.haml +22 -0
  63. data/app/views/rocket_job_mission_control/jobs/index_filters/queued.html.haml +23 -0
  64. data/app/views/rocket_job_mission_control/jobs/index_filters/running.html.haml +24 -0
  65. data/app/views/rocket_job_mission_control/jobs/index_filters/scheduled.html.haml +23 -0
  66. data/app/views/rocket_job_mission_control/jobs/show.html.haml +5 -8
  67. data/app/views/rocket_job_mission_control/workers/_sidebar.html.haml +20 -0
  68. data/app/views/rocket_job_mission_control/workers/index.html.haml +36 -59
  69. data/app/views/rocket_job_mission_control/workers/index_filters/paused.html.haml +37 -0
  70. data/app/views/rocket_job_mission_control/workers/index_filters/running.html.haml +37 -0
  71. data/app/views/rocket_job_mission_control/workers/index_filters/starting.html.haml +37 -0
  72. data/app/views/rocket_job_mission_control/workers/index_filters/stopping.html.haml +37 -0
  73. data/config/routes.rb +28 -5
  74. data/lib/rocket_job_mission_control/engine.rb +2 -0
  75. data/lib/rocket_job_mission_control/version.rb +1 -1
  76. data/spec/controllers/application_controller_spec.rb +1 -1
  77. data/spec/controllers/dirmon_entries_controller_spec.rb +35 -97
  78. data/spec/controllers/jobs/failures_controller_spec.rb +4 -4
  79. data/spec/controllers/jobs_controller_spec.rb +10 -80
  80. data/spec/dummy/config/environments/development.rb +7 -7
  81. data/spec/dummy/config/environments/test.rb +9 -9
  82. data/spec/dummy/log/test.log +5446 -23487
  83. data/spec/helpers/application_helper_spec.rb +58 -0
  84. data/spec/helpers/jobs_helper_spec.rb +0 -65
  85. data/spec/helpers/slices_helper_spec.rb +1 -1
  86. data/spec/helpers/workers_helper_spec.rb +1 -1
  87. metadata +64 -44
  88. data/MIT-LICENSE +0 -20
  89. data/app/assets/javascripts/rocket_job_mission_control/jobs.js.coffee +0 -11
  90. data/app/views/rocket_job_mission_control/dirmon_entries/_list.html.haml +0 -31
  91. data/app/views/rocket_job_mission_control/jobs/_list.html.haml +0 -35
  92. data/app/views/rocket_job_mission_control/jobs/running.html.haml +0 -37
  93. data/spec/dummy/log/development.log +0 -0
  94. data/spec/views/workers/index.html.haml_spec.rb +0 -23
@@ -0,0 +1,37 @@
1
+ #workers
2
+ .worker-list
3
+ .list
4
+ .row
5
+ .col-md-6
6
+ %h2 Running Worker Processes
7
+ .col-md-6
8
+ .col-sm-10
9
+ .worker-collection-actions
10
+ - if @workers.present?
11
+ %ol.pull-right
12
+ .btn-group
13
+ - [:stop_all, :pause_all, :resume_all, :destroy_zombies].each do |action|
14
+ = link_to("#{action.to_s.humanize.capitalize}",
15
+ rocket_job_mission_control.update_all_workers_path(worker_action: action),
16
+ method: :patch,
17
+ data: { confirm: t(:confirm, scope: [:worker, :update_all], action: action.to_s.singularize.humanize.downcase) },
18
+ class: 'btn btn-default')
19
+ .col-sm-2.pull-right
20
+ .btn.btn-default.pull-right.dt-reload{ data: { behavior: 'reload' } }
21
+ %i.fa.fa-refresh
22
+ %table.table.datatable.workers-datatable{ style: "width: 100%", data: { source: "#{running_workers_url(format: 'json')}" } }
23
+ %thead
24
+ %tr
25
+ %th Hostname : PID
26
+ %th Workers (Current/Max)
27
+ %th Started
28
+ %th Heartbeat
29
+ %th Actions
30
+ %tbody
31
+
32
+ :javascript
33
+ jQuery(function() {
34
+ new RjmcDatatable(
35
+ $('.workers-datatable'),
36
+ [{data: '0'}, {data: '1', orderable: false}, {data: '2', orderable: false}, {data: '3', orderable: false}, {data: '4', orderable: false}]);
37
+ });
@@ -0,0 +1,37 @@
1
+ #workers
2
+ .worker-list
3
+ .list
4
+ .row
5
+ .col-md-6
6
+ %h2 Starting Worker Processes
7
+ .col-md-6
8
+ .col-sm-10
9
+ .worker-collection-actions
10
+ - if @workers.present?
11
+ %ol.pull-right
12
+ .btn-group
13
+ - [:stop_all, :pause_all, :resume_all, :destroy_zombies].each do |action|
14
+ = link_to("#{action.to_s.humanize.capitalize}",
15
+ rocket_job_mission_control.update_all_workers_path(worker_action: action),
16
+ method: :patch,
17
+ data: { confirm: t(:confirm, scope: [:worker, :update_all], action: action.to_s.singularize.humanize.downcase) },
18
+ class: 'btn btn-default')
19
+ .col-sm-2.pull-right
20
+ .btn.btn-default.pull-right.dt-reload{ data: { behavior: 'reload' } }
21
+ %i.fa.fa-refresh
22
+ %table.table.datatable.workers-datatable{ style: "width: 100%", data: { source: "#{starting_workers_url(format: 'json')}" } }
23
+ %thead
24
+ %tr
25
+ %th Hostname : PID
26
+ %th Workers (Current/Max)
27
+ %th Started
28
+ %th Heartbeat
29
+ %th Actions
30
+ %tbody
31
+
32
+ :javascript
33
+ jQuery(function() {
34
+ new RjmcDatatable(
35
+ $('.workers-datatable'),
36
+ [{data: '0'}, {data: '1', orderable: false}, {data: '2', orderable: false}, {data: '3', orderable: false}, {data: '4', orderable: false}]);
37
+ });
@@ -0,0 +1,37 @@
1
+ #workers
2
+ .worker-list
3
+ .list
4
+ .row
5
+ .col-md-6
6
+ %h2 Stopping Worker Processes
7
+ .col-md-6
8
+ .col-sm-10
9
+ .worker-collection-actions
10
+ - if @workers.present?
11
+ %ol.pull-right
12
+ .btn-group
13
+ - [:pause_all, :resume_all, :destroy_zombies].each do |action|
14
+ = link_to("#{action.to_s.humanize.capitalize}",
15
+ rocket_job_mission_control.update_all_workers_path(worker_action: action),
16
+ method: :patch,
17
+ data: { confirm: t(:confirm, scope: [:worker, :update_all], action: action.to_s.singularize.humanize.downcase) },
18
+ class: 'btn btn-default')
19
+ .col-sm-2.pull-right
20
+ .btn.btn-default.pull-right.dt-reload{ data: { behavior: 'reload' } }
21
+ %i.fa.fa-refresh
22
+ %table.table.datatable.workers-datatable{ style: "width: 100%", data: { source: "#{stopping_workers_url(format: 'json')}" } }
23
+ %thead
24
+ %tr
25
+ %th Hostname : PID
26
+ %th Workers (Current/Max)
27
+ %th Started
28
+ %th Heartbeat
29
+ %th Actions
30
+ %tbody
31
+
32
+ :javascript
33
+ jQuery(function() {
34
+ new RjmcDatatable(
35
+ $('.workers-datatable'),
36
+ [{data: '0'}, {data: '1', orderable: false}, {data: '2', orderable: false}, {data: '3', orderable: false}, {data: '4', orderable: false}]);
37
+ });
data/config/routes.rb CHANGED
@@ -1,6 +1,16 @@
1
1
  RocketJobMissionControl::Engine.routes.draw do
2
2
 
3
3
  resources :jobs, only: [:index, :show, :update, :destroy] do
4
+ collection do
5
+ get :running, to: 'jobs/index_filters#running'
6
+ get :scheduled, to: 'jobs/index_filters#scheduled'
7
+ get :completed, to: 'jobs/index_filters#completed'
8
+ get :queued, to: 'jobs/index_filters#queued'
9
+ get :paused, to: 'jobs/index_filters#paused'
10
+ get :failed, to: 'jobs/index_filters#failed'
11
+ get :aborted, to: 'jobs/index_filters#aborted'
12
+ end
13
+
4
14
  member do
5
15
  patch :abort
6
16
  patch :fail
@@ -8,13 +18,19 @@ RocketJobMissionControl::Engine.routes.draw do
8
18
  patch :resume
9
19
  patch :retry
10
20
  end
11
- collection do
12
- get :running
13
- end
14
- resources :failures, controller: 'jobs/failures', only: [:index]
21
+ resources :failures, controller: 'jobs/failures', only: :index
15
22
  end
16
23
 
24
+ resources :active_processes, only: :index
25
+
17
26
  resources :workers, only: [:index, :destroy] do
27
+ collection do
28
+ get :starting, to: 'workers/index_filters#starting'
29
+ get :running, to: 'workers/index_filters#running'
30
+ get :paused, to: 'workers/index_filters#paused'
31
+ get :stopping, to: 'workers/index_filters#stopping'
32
+ end
33
+
18
34
  member do
19
35
  patch :stop
20
36
  patch :pause
@@ -26,11 +42,18 @@ RocketJobMissionControl::Engine.routes.draw do
26
42
  end
27
43
 
28
44
  resources :dirmon_entries do
45
+ collection do
46
+ get :pending, to: 'dirmon_entries/index_filters#pending'
47
+ get :enabled, to: 'dirmon_entries/index_filters#enabled'
48
+ get :failed, to: 'dirmon_entries/index_filters#failed'
49
+ get :disabled, to: 'dirmon_entries/index_filters#disabled'
50
+ end
51
+
29
52
  member do
30
53
  put :enable
31
54
  put :disable
32
55
  end
33
56
  end
34
57
 
35
- root to: "jobs#index"
58
+ root to: "jobs/index_filters#running"
36
59
  end
@@ -11,5 +11,7 @@ module RocketJobMissionControl
11
11
  require 'bootstrap-sass'
12
12
  require 'sass-rails'
13
13
  require 'coffee-rails'
14
+ require 'kaminari'
15
+ require 'jquery-datatables-rails'
14
16
  end
15
17
  end
@@ -1,3 +1,3 @@
1
1
  module RocketJobMissionControl
2
- VERSION = '1.2.4'
2
+ VERSION = '2.0.0.rc1'
3
3
  end
@@ -29,7 +29,7 @@ module RocketJobMissionControl
29
29
  end
30
30
 
31
31
  context 'that does not contain a time zone' do
32
- let(:session_params) { { 'user_id' => '42' } }
32
+ let(:session_params) { {'user_id' => '42'} }
33
33
 
34
34
  it 'sets the time zone correctly' do
35
35
  expect(assigns(:time_zone).name).to eq(expected_time_zone)
@@ -1,15 +1,15 @@
1
1
  require_relative '../rails_helper'
2
2
 
3
- class FakeButGoodJob < RocketJob::Job
4
-
3
+ class OneParamJob < RocketJob::Job
5
4
  def perform(id)
6
5
  id
7
6
  end
7
+ end
8
8
 
9
- def perform_with_no_params
9
+ class NoParamsJob < RocketJob::Job
10
+ def perform
10
11
  100_000
11
12
  end
12
-
13
13
  end
14
14
 
15
15
  module RocketJobMissionControl
@@ -30,7 +30,7 @@ module RocketJobMissionControl
30
30
  let(:existing_dirmon) do
31
31
  RocketJob::DirmonEntry.create!(
32
32
  name: 'Test',
33
- job_class_name: 'FakeButGoodJob',
33
+ job_class_name: 'OneParamJob',
34
34
  pattern: 'the_path',
35
35
  arguments: ['42'],
36
36
  state: starting_state,
@@ -62,7 +62,7 @@ module RocketJobMissionControl
62
62
  let(:existing_dirmon) do
63
63
  RocketJob::DirmonEntry.create!(
64
64
  name: 'Test',
65
- job_class_name: 'FakeButGoodJob',
65
+ job_class_name: 'OneParamJob',
66
66
  pattern: 'the_path',
67
67
  arguments: ['42'],
68
68
  state: starting_state,
@@ -109,7 +109,7 @@ module RocketJobMissionControl
109
109
  end
110
110
 
111
111
  context 'with form params' do
112
- let(:entry_params) { { rocket_job_dirmon_entry: { name: 'new entry' } } }
112
+ let(:entry_params) { {rocket_job_dirmon_entry: {name: 'new entry'}} }
113
113
 
114
114
  it { expect(response.status).to eq(200) }
115
115
 
@@ -119,18 +119,18 @@ module RocketJobMissionControl
119
119
  end
120
120
 
121
121
  context 'with a valid job_class_name' do
122
- let(:entry_params) { { rocket_job_dirmon_entry: { job_class_name: 'FakeButGoodJob' } } }
122
+ let(:entry_params) { {rocket_job_dirmon_entry: {job_class_name: 'OneParamJob'}} }
123
123
 
124
124
  it { expect(response.status).to eq(200) }
125
125
 
126
126
  it 'assigns the job class' do
127
127
  expect(assigns(:dirmon_entry)).to be_present
128
- expect(assigns(:dirmon_entry).job_class).to eq(FakeButGoodJob)
128
+ expect(assigns(:dirmon_entry).job_class).to eq(OneParamJob)
129
129
  end
130
130
  end
131
131
 
132
132
  context 'with an invalid job_class_name' do
133
- let(:entry_params) { { rocket_job_dirmon_entry: { job_class_name: 'BadJob' } } }
133
+ let(:entry_params) { {rocket_job_dirmon_entry: {job_class_name: 'BadJob'}} }
134
134
 
135
135
  it { expect(response.status).to eq(200) }
136
136
 
@@ -147,7 +147,7 @@ module RocketJobMissionControl
147
147
  let(:existing_dirmon) do
148
148
  RocketJob::DirmonEntry.create!(
149
149
  name: 'Test',
150
- job_class_name: 'FakeButGoodJob',
150
+ job_class_name: 'OneParamJob',
151
151
  pattern: 'the_path',
152
152
  arguments: ['{"argument1":"value1", "argument2":"value2", "argument3":"value3"}']
153
153
  )
@@ -161,7 +161,7 @@ module RocketJobMissionControl
161
161
  let(:dirmon_params) do
162
162
  {
163
163
  pattern: 'the_path2',
164
- job_class_name: 'FakeButGoodJob',
164
+ job_class_name: 'OneParamJob',
165
165
  arguments: ['42']
166
166
  }
167
167
  end
@@ -195,15 +195,11 @@ module RocketJobMissionControl
195
195
  expect(assigns(:dirmon_entry)).to_not be_valid
196
196
  end
197
197
 
198
- it 'loads the other entries' do
199
- expect(dirmon_list).to have_received(:sort)
200
- end
201
-
202
198
  context 'with invalid arguments json' do
203
199
  let(:dirmon_params) do
204
200
  {
205
201
  name: 'Test',
206
- job_class_name: 'FakeButGoodJob',
202
+ job_class_name: 'OneParamJob',
207
203
  arguments: [],
208
204
  }
209
205
  end
@@ -216,10 +212,6 @@ module RocketJobMissionControl
216
212
  it 'has errors on arguments' do
217
213
  expect(assigns(:dirmon_entry).errors[:arguments]).to be_present
218
214
  end
219
-
220
- it 'loads the other entries' do
221
- expect(dirmon_list).to have_received(:sort)
222
- end
223
215
  end
224
216
  end
225
217
  end
@@ -227,20 +219,19 @@ module RocketJobMissionControl
227
219
  describe 'POST #create' do
228
220
  context 'with valid parameters' do
229
221
 
230
- {
231
- perform: {argument: ['42'], expected_value: [42]},
232
- perform: {argument: ['{"argument1":"value1", "argument2":"value2", "argument3":"value3"}'], expected_value: [{"argument1" => "value1", "argument2" => "value2", "argument3" => "value3"}]},
233
- perform_with_no_params: {argument: [], expected_value: []},
234
- }.each_pair do |perform_method, arguments|
222
+ [
223
+ {job_class_name: 'OneParamJob', argument: ['42'], expected_value: [42]},
224
+ {job_class_name: 'OneParamJob', argument: ['{"argument1":"value1", "argument2":"value2", "argument3":"value3"}'], expected_value: [{"argument1" => "value1", "argument2" => "value2", "argument3" => "value3"}]},
225
+ {job_class_name: 'NoParamsJob', argument: [], expected_value: []}
226
+ ].each do |arguments|
235
227
  context "and arguments are '#{arguments}'" do
236
228
  let(:dirmon_params) do
237
229
  {
238
230
  name: 'Test',
239
231
  pattern: '/files/*',
240
- job_class_name: 'FakeButGoodJob',
232
+ job_class_name: arguments[:job_class_name],
241
233
  arguments: arguments[:argument],
242
234
  properties: {description: '', priority: 42},
243
- perform_method: perform_method,
244
235
  }
245
236
  end
246
237
 
@@ -307,17 +298,13 @@ module RocketJobMissionControl
307
298
  it 'has errors on the entry' do
308
299
  expect(assigns(:dirmon_entry)).to_not be_valid
309
300
  end
310
-
311
- it 'loads the other entries' do
312
- expect(dirmon_list).to have_received(:sort)
313
- end
314
301
  end
315
302
 
316
303
  context 'with invalid arguments json' do
317
304
  let(:dirmon_params) do
318
305
  {
319
306
  name: 'Test',
320
- job_class_name: 'FakeButGoodJob',
307
+ job_class_name: 'OneParamJob',
321
308
  arguments: ['{"bad" "json"}'],
322
309
  }
323
310
  end
@@ -330,10 +317,6 @@ module RocketJobMissionControl
330
317
  it 'has errors on arguments' do
331
318
  expect(assigns(:dirmon_entry).errors[:arguments]).to be_present
332
319
  end
333
-
334
- it 'loads the other entries' do
335
- expect(dirmon_list).to have_received(:sort)
336
- end
337
320
  end
338
321
  end
339
322
  end
@@ -343,7 +326,7 @@ module RocketJobMissionControl
343
326
  @entry = RocketJob::DirmonEntry.create(
344
327
  name: 'Test',
345
328
  pattern: '/files/',
346
- job_class_name: 'FakeButGoodJob',
329
+ job_class_name: 'OneParamJob',
347
330
  arguments: [42]
348
331
  )
349
332
  get :edit, id: @entry.id
@@ -386,14 +369,6 @@ module RocketJobMissionControl
386
369
  it 'assigns the entry' do
387
370
  expect(assigns(:dirmon_entry)).to be_present
388
371
  end
389
-
390
- it 'assigns the entries' do
391
- expect(assigns(:dirmons)).to eq([])
392
- end
393
-
394
- it 'grabs a sorted list' do
395
- expect(dirmon_list).to have_received(:sort).with(created_at: :desc)
396
- end
397
372
  end
398
373
  end
399
374
 
@@ -401,7 +376,7 @@ module RocketJobMissionControl
401
376
  let(:existing_dirmon) do
402
377
  RocketJob::DirmonEntry.create!(
403
378
  name: 'Test',
404
- job_class_name: 'FakeButGoodJob',
379
+ job_class_name: 'OneParamJob',
405
380
  pattern: 'the_path',
406
381
  arguments: [42].to_json
407
382
  )
@@ -427,6 +402,7 @@ module RocketJobMissionControl
427
402
  describe 'GET #index' do
428
403
  describe 'with no entries' do
429
404
  before do
405
+ RocketJob::DirmonEntry.destroy_all
430
406
  get :index
431
407
  end
432
408
 
@@ -434,67 +410,29 @@ module RocketJobMissionControl
434
410
  expect(response.status).to be(200)
435
411
  end
436
412
 
437
- it 'grabs a sorted list of entries' do
438
- expect(dirmon_list).to have_received(:sort).with(created_at: :desc)
439
- end
440
-
441
413
  it 'returns no entries' do
442
- expect(assigns(:dirmons)).to eq([])
414
+ expect(assigns(:dirmons).count).to eq(0)
443
415
  end
444
416
  end
445
417
 
446
418
  describe 'with jobs' do
447
- let(:dirmon_list) { spy(sort: dirmons) }
448
419
  let(:dirmons) { ['fake_dirmon1', 'fake_dirmon2'] }
449
420
 
450
- describe 'with no parameters' do
451
- before { get :index }
452
-
453
- it 'succeeds' do
454
- expect(response.status).to be(200)
455
- end
456
-
457
- it 'grabs a sorted list of entries' do
458
- expect(dirmon_list).to have_received(:sort).with(created_at: :desc)
459
- end
460
-
461
- it 'returns the entries' do
462
- expect(assigns(:dirmons)).to match_array(dirmons)
463
- end
421
+ before do
422
+ allow(RocketJob::DirmonEntry).to receive(:where).and_return(dirmons)
423
+ get :index
464
424
  end
465
425
 
466
- describe 'with a state filter' do
467
- before { get :index, states: states }
468
-
469
- context 'that is empty' do
470
- let(:states) { [] }
471
-
472
- it { expect(response.status).to be(200) }
473
-
474
- it 'grabs a sorted list' do
475
- expect(dirmon_list).to have_received(:sort).with(created_at: :desc)
476
- end
477
-
478
- it 'returns the entries' do
479
- expect(assigns(:dirmons)).to match_array(dirmons)
480
- end
481
- end
482
-
483
- context 'with a state' do
484
- let(:query_spy) { spy(where: dirmons) }
485
- let(:dirmon_list) { spy(sort: query_spy) }
486
- let(:states) { ['enabled'] }
487
-
488
- it { expect(response.status).to be(200) }
426
+ it 'succeeds' do
427
+ expect(response.status).to be(200)
428
+ end
489
429
 
490
- it 'grabs a filtered list' do
491
- expect(query_spy).to have_received(:where).with(state: ['enabled'])
492
- end
430
+ it 'grabs all dirmons with empty where' do
431
+ expect(RocketJob::DirmonEntry).to have_received(:where)
432
+ end
493
433
 
494
- it 'returns the entries' do
495
- expect(assigns(:dirmons)).to match_array(dirmons)
496
- end
497
- end
434
+ it 'returns the entries' do
435
+ expect(assigns(:dirmons)).to eq(dirmons)
498
436
  end
499
437
  end
500
438
  end
@@ -10,10 +10,10 @@ module RocketJobMissionControl
10
10
  let(:slice_errors) do
11
11
  [
12
12
  {
13
- '_id' =>
14
- {
15
- 'error_class' => 'BoomError',
16
- },
13
+ '_id' =>
14
+ {
15
+ 'error_class' => 'BoomError',
16
+ },
17
17
  'message' => ['boom'],
18
18
  'count' => '1337',
19
19
  },
@@ -104,40 +104,12 @@ module RocketJobMissionControl
104
104
  it "assigns the job" do
105
105
  expect(assigns(:job)).to be_present
106
106
  end
107
-
108
- it "assigns the jobs" do
109
- expect(assigns(:jobs)).to eq([])
110
- end
111
-
112
- it "grabs a sorted list of rocket jobs" do
113
- expect(result).to have_received(:sort).with(created_at: :desc)
114
- end
115
- end
116
- end
117
-
118
- describe "GET #running" do
119
- before do
120
- allow(RocketJob::Job).to receive(:where).and_return([])
121
- get :running
122
- end
123
-
124
- it { expect(response.status).to be(200) }
125
-
126
- it "queries for running jobs" do
127
- expect(RocketJob::Job).to have_received(:where).with(state: 'running')
128
- end
129
-
130
- it "returns expected jobs" do
131
- expect(assigns[:jobs]).to eq([])
132
107
  end
133
108
  end
134
109
 
135
110
  describe "GET #index" do
136
111
  describe "with no jobs" do
137
- let(:result) { spy(sort: []) }
138
-
139
112
  before do
140
- allow(RocketJob::Job).to receive(:limit).and_return(result)
141
113
  get :index
142
114
  end
143
115
 
@@ -145,71 +117,29 @@ module RocketJobMissionControl
145
117
  expect(response.status).to be(200)
146
118
  end
147
119
 
148
- it "grabs a sorted list of rocket jobs" do
149
- expect(result).to have_received(:sort).with(created_at: :desc)
150
- end
151
-
152
120
  it "returns no jobs" do
153
- expect(assigns(:jobs)).to eq([])
121
+ expect(assigns(:jobs).count).to eq(0)
154
122
  end
155
123
  end
156
124
 
157
125
  describe "with jobs" do
158
- let(:result) { spy(sort: jobs) }
159
126
  let(:jobs) { ['fake_job1', 'fake_job2'] }
160
127
 
161
128
  before do
162
- allow(RocketJob::Job).to receive(:limit).and_return(result)
129
+ allow(RocketJob::Job).to receive(:sort).and_return(jobs)
130
+ get :index
163
131
  end
164
132
 
165
- describe "with no parameters" do
166
- before { get :index }
167
-
168
- it "succeeds" do
169
- expect(response.status).to be(200)
170
- end
171
-
172
- it "grabs a sorted list of rocket jobs" do
173
- expect(result).to have_received(:sort).with(created_at: :desc)
174
- end
175
-
176
- it "returns the jobs" do
177
- expect(assigns(:jobs)).to match_array(jobs)
178
- end
133
+ it "succeeds" do
134
+ expect(response.status).to be(200)
179
135
  end
180
136
 
181
- describe "with a state filter" do
182
- before { get :index, states: states}
183
-
184
- context "that is empty" do
185
- let(:states) { [] }
186
-
187
- it { expect(response.status).to be(200) }
188
-
189
- it "grabs a sorted list of rocket jobs" do
190
- expect(result).to have_received(:sort).with(created_at: :desc)
191
- end
192
-
193
- it "returns the jobs" do
194
- expect(assigns(:jobs)).to match_array(jobs)
195
- end
196
- end
197
-
198
- context "with a state" do
199
- let(:query_spy) { spy(where: jobs) }
200
- let(:result) { spy(sort: query_spy) }
201
- let(:states) { ['completed', 'running'] }
202
-
203
- it { expect(response.status).to be(200) }
204
-
205
- it "grabs a filtered list of rocket jobs" do
206
- expect(query_spy).to have_received(:where).with(state: states)
207
- end
137
+ it "grabs a sorted list of rocket jobs" do
138
+ expect(RocketJob::Job).to have_received(:sort).with(_id: :desc)
139
+ end
208
140
 
209
- it "returns the jobs" do
210
- expect(assigns(:jobs)).to match_array(jobs)
211
- end
212
- end
141
+ it "returns the jobs" do
142
+ expect(assigns(:jobs)).to eq(jobs)
213
143
  end
214
144
  end
215
145
  end
@@ -4,30 +4,30 @@ Rails.application.configure do
4
4
  # In the development environment your application's code is reloaded on
5
5
  # every request. This slows down response time but is perfect for development
6
6
  # since you don't have to restart the web server when you make code changes.
7
- config.cache_classes = false
7
+ config.cache_classes = false
8
8
 
9
9
  # Do not eager load code on boot.
10
- config.eager_load = false
10
+ config.eager_load = false
11
11
 
12
12
  # Show full error reports and disable caching.
13
- config.consider_all_requests_local = true
14
- config.action_controller.perform_caching = false
13
+ config.consider_all_requests_local = true
14
+ config.action_controller.perform_caching = false
15
15
 
16
16
  # Don't care if the mailer can't send.
17
17
  config.action_mailer.raise_delivery_errors = false
18
18
 
19
19
  # Print deprecation notices to the Rails logger.
20
- config.active_support.deprecation = :log
20
+ config.active_support.deprecation = :log
21
21
 
22
22
  # Debug mode disables concatenation and preprocessing of assets.
23
23
  # This option may cause significant delays in view rendering with a large
24
24
  # number of complex assets.
25
- config.assets.debug = true
25
+ config.assets.debug = true
26
26
 
27
27
  # Adds additional error checking when serving assets at runtime.
28
28
  # Checks for improperly declared sprockets dependencies.
29
29
  # Raises helpful error messages.
30
- config.assets.raise_runtime_errors = true
30
+ config.assets.raise_runtime_errors = true
31
31
 
32
32
  # Raises error for missing translations
33
33
  # config.action_view.raise_on_missing_translations = true