rocketjob_mission_control 4.3.0 → 5.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +12 -12
  3. data/app/controllers/rocket_job_mission_control/application_controller.rb +1 -2
  4. data/app/controllers/rocket_job_mission_control/dirmon_entries_controller.rb +20 -19
  5. data/app/controllers/rocket_job_mission_control/jobs_controller.rb +36 -35
  6. data/app/controllers/rocket_job_mission_control/servers_controller.rb +32 -38
  7. data/app/datatables/rocket_job_mission_control/abstract_datatable.rb +8 -6
  8. data/app/datatables/rocket_job_mission_control/active_workers_datatable.rb +5 -5
  9. data/app/datatables/rocket_job_mission_control/dirmon_entries_datatable.rb +4 -4
  10. data/app/datatables/rocket_job_mission_control/jobs_datatable.rb +55 -62
  11. data/app/datatables/rocket_job_mission_control/servers_datatable.rb +13 -14
  12. data/app/helpers/rocket_job_mission_control/application_helper.rb +42 -41
  13. data/app/helpers/rocket_job_mission_control/jobs_helper.rb +9 -10
  14. data/app/helpers/rocket_job_mission_control/pagination_helper.rb +1 -1
  15. data/app/helpers/rocket_job_mission_control/servers_helper.rb +6 -6
  16. data/app/helpers/rocket_job_mission_control/slices_helper.rb +2 -4
  17. data/app/models/rocket_job_mission_control/access_policy.rb +1 -2
  18. data/app/models/rocket_job_mission_control/authorization.rb +3 -2
  19. data/app/models/rocket_job_mission_control/job_sanitizer.rb +14 -17
  20. data/app/models/rocket_job_mission_control/query.rb +2 -5
  21. data/app/views/rocket_job_mission_control/jobs/_exceptions.html.erb +1 -1
  22. data/app/views/rocket_job_mission_control/jobs/edit_slice.html.erb +1 -1
  23. data/app/views/rocket_job_mission_control/servers/index.html.erb +2 -2
  24. data/config/initializers/assets.rb +5 -7
  25. data/config/locales/en.yml +3 -0
  26. data/config/routes.rb +20 -21
  27. data/lib/rocket_job_mission_control/engine.rb +8 -9
  28. data/lib/rocket_job_mission_control/version.rb +1 -1
  29. data/lib/rocketjob_mission_control.rb +1 -1
  30. data/test/compare_hashes.rb +1 -2
  31. data/test/controllers/rocket_job_mission_control/application_controller_test.rb +13 -13
  32. data/test/controllers/rocket_job_mission_control/dirmon_entries_controller_test.rb +107 -108
  33. data/test/controllers/rocket_job_mission_control/jobs_controller_test.rb +89 -93
  34. data/test/controllers/rocket_job_mission_control/servers_controller_test.rb +66 -103
  35. data/test/helpers/rocket_job_mission_control/application_helper_test.rb +13 -14
  36. data/test/helpers/rocket_job_mission_control/jobs_helper_test.rb +31 -31
  37. data/test/helpers/rocket_job_mission_control/pagination_helper_test.rb +7 -9
  38. data/test/helpers/rocket_job_mission_control/servers_helper_test.rb +15 -15
  39. data/test/helpers/rocket_job_mission_control/slices_helper_test.rb +8 -10
  40. data/test/models/rocket_job_mission_control/job_sanitizer_test.rb +39 -40
  41. data/test/models/rocket_job_mission_control/query_test.rb +26 -28
  42. data/test/test_helper.rb +12 -12
  43. metadata +28 -28
@@ -1,9 +1,8 @@
1
- require_relative '../../test_helper'
2
- require_relative '../../compare_hashes'
1
+ require_relative "../../test_helper"
2
+ require_relative "../../compare_hashes"
3
3
 
4
4
  module RocketJobMissionControl
5
5
  class JobsControllerTest < ActionController::TestCase
6
-
7
6
  class PausableJob < RocketJob::Job
8
7
  self.pausable = true
9
8
 
@@ -29,9 +28,9 @@ module RocketJobMissionControl
29
28
  let :failed_job do
30
29
  job = KaboomBatchJob.new(slice_size: 1)
31
30
  job.upload do |stream|
32
- stream << 'first record'
33
- stream << 'second record'
34
- stream << 'third record'
31
+ stream << "first record"
32
+ stream << "second record"
33
+ stream << "third record"
35
34
  end
36
35
  job.save!
37
36
 
@@ -49,29 +48,29 @@ module RocketJobMissionControl
49
48
 
50
49
  let :one_job_for_every_state do
51
50
  job_states.collect do |state|
52
- RocketJob::Jobs::SimpleJob.create!(state: state, worker_name: 'worker', started_at: (Time.now - 0.5))
51
+ RocketJob::Jobs::SimpleJob.create!(state: state, worker_name: "worker", started_at: (Time.now - 0.5))
53
52
  end
54
53
  end
55
54
 
56
- [:pause, :resume, :abort, :retry, :fail].each do |state|
55
+ %i[pause resume abort retry fail].each do |state|
57
56
  describe "PATCH ##{state}" do
58
- describe 'with an invalid job id' do
57
+ describe "with an invalid job id" do
59
58
  before do
60
59
  params = {id: 42, job: {id: 42, priority: 12}}
61
60
  params = {params: params} if Rails.version.to_i >= 5
62
61
  patch state, params
63
62
  end
64
63
 
65
- it 'redirects' do
64
+ it "redirects" do
66
65
  assert_redirected_to jobs_path
67
66
  end
68
67
 
69
- it 'adds a flash alert message' do
70
- assert_equal I18n.t(:failure, scope: [:job, :find], id: 42), flash[:alert]
68
+ it "adds a flash alert message" do
69
+ assert_equal I18n.t(:failure, scope: %i[job find], id: 42), flash[:alert]
71
70
  end
72
71
  end
73
72
 
74
- describe 'with a valid job id' do
73
+ describe "with a valid job id" do
75
74
  before do
76
75
  case state
77
76
  when :pause, :fail, :abort
@@ -86,18 +85,18 @@ module RocketJobMissionControl
86
85
  patch state, params
87
86
  end
88
87
 
89
- it 'redirects to the job' do
88
+ it "redirects to the job" do
90
89
  assert_redirected_to job_path(pausable_job.id)
91
90
  end
92
91
 
93
- it 'transitions the job' do
92
+ it "transitions the job" do
94
93
  refute_equal state, pausable_job.state
95
94
  end
96
95
  end
97
96
  end
98
97
  end
99
98
 
100
- describe 'PATCH #run_now' do
99
+ describe "PATCH #run_now" do
101
100
  let(:scheduled_job) { RocketJob::Jobs::SimpleJob.create!(run_at: 2.days.from_now) }
102
101
 
103
102
  before do
@@ -106,45 +105,44 @@ module RocketJobMissionControl
106
105
  patch :run_now, params
107
106
  end
108
107
 
109
- it 'redirects to the job path' do
108
+ it "redirects to the job path" do
110
109
  assert_redirected_to job_path(scheduled_job.id)
111
110
  end
112
111
 
113
- it 'updates run_at' do
112
+ it "updates run_at" do
114
113
  assert_nil scheduled_job.reload.run_at
115
114
  end
116
115
  end
117
116
 
118
-
119
117
  describe "PATCH #update" do
120
- describe 'with an invalid job id' do
118
+ describe "with an invalid job id" do
121
119
  before do
122
120
  params = {id: 42, job: {id: 42, priority: 12}}
123
121
  params = {params: params} if Rails.version.to_i >= 5
124
122
  patch :update, params
125
123
  end
126
124
 
127
- it 'redirects' do
125
+ it "redirects" do
128
126
  assert_redirected_to jobs_path
129
127
  end
130
128
 
131
- it 'adds a flash alert message' do
132
- assert_equal I18n.t(:failure, scope: [:job, :find], id: 42), flash[:alert]
129
+ it "adds a flash alert message" do
130
+ assert_equal I18n.t(:failure, scope: %i[job find], id: 42), flash[:alert]
133
131
  end
134
132
  end
135
133
 
136
134
  describe "with a valid job id" do
137
135
  before do
138
- params = {id: job.id, job: {id: job.id, priority: 12, blah: 23, description: '', log_level: '', state: 'failed'}}
136
+ params = {id: job.id, job: {id: job.id, priority: 12, blah: 23, description: "", log_level: "", state: "failed"}}
139
137
  params = {params: params} if Rails.version.to_i >= 5
140
138
  patch :update, params
141
139
  end
142
140
 
143
- it 'redirects to the job' do
141
+ it "redirects to the job" do
144
142
  assert_redirected_to job_path(job.id)
145
143
  end
146
144
 
147
- it 'updates the job correctly' do
145
+ it "updates the job correctly" do
148
146
  assert_equal 12, job.reload.priority
149
147
  end
150
148
 
@@ -157,20 +155,20 @@ module RocketJobMissionControl
157
155
  end
158
156
  end
159
157
 
160
- describe 'GET #show' do
161
- describe 'with an invalid job id' do
158
+ describe "GET #show" do
159
+ describe "with an invalid job id" do
162
160
  before do
163
161
  params = {id: 42}
164
162
  params = {params: params} if Rails.version.to_i >= 5
165
163
  get :show, params
166
164
  end
167
165
 
168
- it 'redirects' do
166
+ it "redirects" do
169
167
  assert_redirected_to jobs_path
170
168
  end
171
169
 
172
- it 'adds a flash alert message' do
173
- assert_equal I18n.t(:failure, scope: [:job, :find], id: 42), flash[:alert]
170
+ it "adds a flash alert message" do
171
+ assert_equal I18n.t(:failure, scope: %i[job find], id: 42), flash[:alert]
174
172
  end
175
173
  end
176
174
 
@@ -181,73 +179,73 @@ module RocketJobMissionControl
181
179
  get :show, params
182
180
  end
183
181
 
184
- it 'succeeds' do
182
+ it "succeeds" do
185
183
  assert_response :success
186
184
  end
187
185
 
188
- it 'assigns the job' do
186
+ it "assigns the job" do
189
187
  assert_equal job.id, assigns(:job).id
190
188
  end
191
189
  end
192
190
  end
193
191
 
194
- describe 'GET #exception' do
195
- describe 'with an invalid job id' do
192
+ describe "GET #exception" do
193
+ describe "with an invalid job id" do
196
194
  before do
197
195
  params = {id: 42}
198
196
  params = {params: params} if Rails.version.to_i >= 5
199
197
  get :exception, params
200
198
  end
201
199
 
202
- it 'redirects' do
200
+ it "redirects" do
203
201
  assert_redirected_to jobs_path
204
202
  end
205
203
 
206
- it 'adds a flash alert message' do
207
- assert_equal I18n.t(:failure, scope: [:job, :find], id: 42), flash[:alert]
204
+ it "adds a flash alert message" do
205
+ assert_equal I18n.t(:failure, scope: %i[job find], id: 42), flash[:alert]
208
206
  end
209
207
  end
210
208
 
211
- describe 'with a valid job id' do
212
- describe 'without an exception' do
209
+ describe "with a valid job id" do
210
+ describe "without an exception" do
213
211
  before do
214
- params = {id: failed_job.id, error_type: 'Blah'}
212
+ params = {id: failed_job.id, error_type: "Blah"}
215
213
  params = {params: params} if Rails.version.to_i >= 5
216
214
  get :exception, params
217
215
  end
218
216
 
219
- it 'redirects to job path' do
217
+ it "redirects to job path" do
220
218
  assert_redirected_to job_path(failed_job.id)
221
219
  end
222
220
 
223
- it 'notifies the user' do
224
- assert_equal I18n.t(:no_errors, scope: [:job, :failures]), flash[:notice]
221
+ it "notifies the user" do
222
+ assert_equal I18n.t(:no_errors, scope: %i[job failures]), flash[:notice]
225
223
  end
226
224
  end
227
225
 
228
- describe 'with exception' do
226
+ describe "with exception" do
229
227
  before do
230
- params = {id: failed_job.id, error_type: 'ArgumentError'}
228
+ params = {id: failed_job.id, error_type: "ArgumentError"}
231
229
  params = {params: params} if Rails.version.to_i >= 5
232
230
  get :exception, params
233
231
  end
234
232
 
235
- it 'succeeds' do
233
+ it "succeeds" do
236
234
  assert_response :success
237
235
  end
238
236
 
239
- it 'assigns the job' do
237
+ it "assigns the job" do
240
238
  assert_equal failed_job.id, assigns(:job).id
241
239
  end
242
240
 
243
- it 'paginates' do
241
+ it "paginates" do
244
242
  assert_equal 0, assigns(:pagination)[:offset], assigns(:pagination)
245
243
  assert_equal 1, assigns(:pagination)[:total], assigns(:pagination)
246
244
  end
247
245
 
248
- it 'returns the first exception' do
249
- assert_equal 'ArgumentError', assigns(:failure_exception).class_name
250
- assert_equal 'Blowing up on record: 1', assigns(:failure_exception).message
246
+ it "returns the first exception" do
247
+ assert_equal "ArgumentError", assigns(:failure_exception).class_name
248
+ assert_equal "Blowing up on record: 1", assigns(:failure_exception).message
251
249
  assert assigns(:failure_exception).backtrace.present?
252
250
  end
253
251
  end
@@ -256,17 +254,17 @@ module RocketJobMissionControl
256
254
 
257
255
  ([:index] + job_states).each do |state|
258
256
  describe "GET ##{state}" do
259
- describe 'html' do
257
+ describe "html" do
260
258
  describe "with no #{state} servers" do
261
259
  before do
262
260
  get state
263
261
  end
264
262
 
265
- it 'succeeds' do
263
+ it "succeeds" do
266
264
  assert_response :success
267
265
  end
268
266
 
269
- it 'renders template' do
267
+ it "renders template" do
270
268
  assert_template :index
271
269
  end
272
270
  end
@@ -277,23 +275,23 @@ module RocketJobMissionControl
277
275
  get state
278
276
  end
279
277
 
280
- it 'succeeds' do
278
+ it "succeeds" do
281
279
  assert_response :success
282
280
  end
283
281
 
284
- it 'renders template' do
282
+ it "renders template" do
285
283
  assert_template :index
286
284
  end
287
285
  end
288
286
  end
289
287
 
290
- describe 'json' do
288
+ describe "json" do
291
289
  describe "with no #{state} server" do
292
290
  before do
293
291
  get state, format: :json
294
292
  end
295
293
 
296
- it 'succeeds' do
294
+ it "succeeds" do
297
295
  assert_response :success
298
296
  json = JSON.parse(response.body)
299
297
  expected = {
@@ -313,81 +311,79 @@ module RocketJobMissionControl
313
311
  get state, format: :json
314
312
  end
315
313
 
316
- it 'succeeds' do
314
+ it "succeeds" do
317
315
  assert_response :success
318
316
  json = JSON.parse(response.body)
319
317
  expected_data = {
320
318
  aborted: {
321
319
  "0" => /#{RocketJob::Jobs::SimpleJob.name}/,
322
- "1" => '',
320
+ "1" => "",
323
321
  "2" => /UTC/,
324
322
  "3" => /ms/,
325
- "4" => /\/jobs\/#{RocketJob::Jobs::SimpleJob.aborted.first.id}/,
323
+ "4" => %r{/jobs/#{RocketJob::Jobs::SimpleJob.aborted.first.id}},
326
324
  "DT_RowClass" => "card callout callout-aborted"
327
325
  },
328
326
  failed: {
329
327
  "0" => /#{RocketJob::Jobs::SimpleJob.name}/,
330
- "1" => '',
328
+ "1" => "",
331
329
  "2" => /UTC/,
332
330
  "3" => /ms/,
333
- "4" => /\/jobs\/#{RocketJob::Jobs::SimpleJob.failed.first.id}/,
331
+ "4" => %r{/jobs/#{RocketJob::Jobs::SimpleJob.failed.first.id}},
334
332
  "DT_RowClass" => "card callout callout-failed"
335
333
  },
336
334
  paused: {
337
335
  "0" => /#{RocketJob::Jobs::SimpleJob.name}/,
338
- "1" => '',
336
+ "1" => "",
339
337
  "2" => /UTC/,
340
338
  "3" => /ms/,
341
- "4" => /\/jobs\/#{RocketJob::Jobs::SimpleJob.paused.first.id}/,
339
+ "4" => %r{/jobs/#{RocketJob::Jobs::SimpleJob.paused.first.id}},
342
340
  "DT_RowClass" => "card callout callout-paused"
343
341
  },
344
342
  completed: {
345
343
  "0" => /#{RocketJob::Jobs::SimpleJob.name}/,
346
- "1" => '',
344
+ "1" => "",
347
345
  "2" => /UTC/,
348
346
  "3" => /ms/,
349
- "4" => /\/jobs\/#{RocketJob::Jobs::SimpleJob.completed.first.id}/,
347
+ "4" => %r{/jobs/#{RocketJob::Jobs::SimpleJob.completed.first.id}},
350
348
  "DT_RowClass" => "card callout callout-completed"
351
349
  },
352
350
  running: {
353
351
  "0" => /#{RocketJob::Jobs::SimpleJob.name}/,
354
- "1" => '',
352
+ "1" => "",
355
353
  "2" => /UTC/,
356
354
  "3" => /ms/,
357
- "4" => /\/jobs\/#{RocketJob::Jobs::SimpleJob.running.first.id}/,
355
+ "4" => %r{/jobs/#{RocketJob::Jobs::SimpleJob.running.first.id}},
358
356
  "DT_RowClass" => "card callout callout-running"
359
357
  },
360
358
  queued: {
361
359
  "0" => /#{RocketJob::Jobs::SimpleJob.name}/,
362
- "1" => '',
363
- "2" => /UTC/,
360
+ "1" => "",
361
+ "2" => /0/,
364
362
  "3" => /ms/,
365
- "4" => /\/jobs\/#{RocketJob::Jobs::SimpleJob.queued.first.id}/,
363
+ "4" => %r{/jobs/#{RocketJob::Jobs::SimpleJob.queued.first.id}},
366
364
  "DT_RowClass" => "card callout callout-queued"
367
- },
365
+ }
368
366
  }
369
367
 
370
368
  if state == :index
371
- assert_equal 0, json['draw']
372
- assert_equal 6, json['recordsTotal']
373
- assert_equal 6, json['recordsFiltered']
374
- compare_array_of_hashes expected_data.values, json['data']
369
+ assert_equal 0, json["draw"]
370
+ assert_equal 6, json["recordsTotal"]
371
+ assert_equal 6, json["recordsFiltered"]
372
+ compare_array_of_hashes(expected_data.values, json["data"])
375
373
  else
376
- assert_equal 0, json['draw']
377
- assert_equal 1, json['recordsTotal']
378
- assert_equal 1, json['recordsFiltered']
374
+ assert_equal 0, json["draw"]
375
+ assert_equal 1, json["recordsTotal"]
376
+ assert_equal 1, json["recordsFiltered"]
379
377
  # Columns change by state
380
- #compare_hash expected_data[state], json['data'].first
378
+ # compare_hash expected_data[state], json['data'].first
381
379
  end
382
380
  end
383
381
  end
384
-
385
382
  end
386
-
387
383
  end
388
384
  end
389
385
 
390
- describe 'role base authentication control' do
386
+ describe "role base authentication control" do
391
387
  %i[index aborted completed failed paused queued running scheduled].each do |method|
392
388
  it "#{method} has read access as default" do
393
389
  get method, format: :json
@@ -396,7 +392,7 @@ module RocketJobMissionControl
396
392
  end
397
393
 
398
394
  %i[update abort retry pause resume run_now fail].each do |method|
399
- describe "#{method}" do
395
+ describe method.to_s do
400
396
  before do
401
397
  case method
402
398
  when :pause, :fail, :abort
@@ -431,7 +427,7 @@ module RocketJobMissionControl
431
427
  end
432
428
  end
433
429
 
434
- [:view_slice, :edit_slice].each do |method|
430
+ %i[view_slice edit_slice].each do |method|
435
431
  describe "with a failed slice" do
436
432
  it "access ##{method}" do
437
433
  params = {:error_type => "ArgumentError", "record_number" => "9", "id" => failed_job.id}
@@ -444,25 +440,25 @@ module RocketJobMissionControl
444
440
 
445
441
  describe "#update slice" do
446
442
  before do
447
- params = { "job" => { "records" => [ "1", "2", "3"] }, "error_type" => "CSV::MalformedCSVError", "offset" => "1", "id" => failed_job.id.to_s }
443
+ params = {"job" => {"records" => %w[1 2 3]}, "error_type" => "CSV::MalformedCSVError", "offset" => "1", "id" => failed_job.id.to_s}
448
444
  params = {params: params} if Rails.version.to_i >= 5
449
445
  post :update_slice, params
450
446
  end
451
447
 
452
- it 'redirects' do
448
+ it "redirects" do
453
449
  assert_redirected_to view_slice_job_path(failed_job, error_type: "CSV::MalformedCSVError")
454
450
  end
455
451
 
456
- it 'adds a flash success message' do
457
- assert_equal 'slice updated', flash[:success]
452
+ it "adds a flash success message" do
453
+ assert_equal "slice updated", flash[:success]
458
454
  end
459
455
  end
460
456
  end
461
457
 
462
458
  def set_role(r)
463
- Config.authorization_callback = -> do
459
+ Config.authorization_callback = lambda {
464
460
  {roles: [r]}
465
- end
461
+ }
466
462
  end
467
463
  end
468
464
  end