good_job 1.2.4 → 1.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +42 -7
  3. data/README.md +13 -10
  4. data/engine/app/controllers/good_job/active_jobs_controller.rb +8 -0
  5. data/engine/app/controllers/good_job/base_controller.rb +5 -0
  6. data/engine/app/controllers/good_job/dashboards_controller.rb +50 -0
  7. data/engine/app/helpers/good_job/application_helper.rb +4 -0
  8. data/engine/app/views/assets/_style.css.erb +16 -0
  9. data/engine/app/views/good_job/active_jobs/show.html.erb +1 -0
  10. data/engine/app/views/good_job/dashboards/index.html.erb +19 -0
  11. data/engine/app/views/layouts/good_job/base.html.erb +50 -0
  12. data/engine/app/views/shared/_chart.erb +51 -0
  13. data/engine/app/views/shared/_jobs_table.erb +26 -0
  14. data/engine/app/views/vendor/bootstrap/_bootstrap-native.js.erb +1662 -0
  15. data/engine/app/views/vendor/bootstrap/_bootstrap.css.erb +10258 -0
  16. data/engine/app/views/vendor/chartist/_chartist.css.erb +613 -0
  17. data/engine/app/views/vendor/chartist/_chartist.js.erb +4516 -0
  18. data/engine/config/routes.rb +4 -0
  19. data/engine/lib/good_job/engine.rb +5 -0
  20. data/lib/active_job/queue_adapters/good_job_adapter.rb +3 -2
  21. data/lib/generators/good_job/install_generator.rb +8 -0
  22. data/lib/good_job.rb +40 -24
  23. data/lib/good_job/adapter.rb +38 -0
  24. data/lib/good_job/cli.rb +30 -7
  25. data/lib/good_job/configuration.rb +44 -0
  26. data/lib/good_job/job.rb +116 -20
  27. data/lib/good_job/lockable.rb +119 -6
  28. data/lib/good_job/log_subscriber.rb +70 -4
  29. data/lib/good_job/multi_scheduler.rb +6 -0
  30. data/lib/good_job/notifier.rb +55 -29
  31. data/lib/good_job/performer.rb +38 -0
  32. data/lib/good_job/railtie.rb +1 -0
  33. data/lib/good_job/scheduler.rb +33 -20
  34. data/lib/good_job/version.rb +2 -1
  35. metadata +96 -9
@@ -0,0 +1,613 @@
1
+ .ct-label {
2
+ fill: rgba(0, 0, 0, 0.4);
3
+ color: rgba(0, 0, 0, 0.4);
4
+ font-size: 0.75rem;
5
+ line-height: 1; }
6
+
7
+ .ct-chart-line .ct-label,
8
+ .ct-chart-bar .ct-label {
9
+ display: block;
10
+ display: -webkit-box;
11
+ display: -moz-box;
12
+ display: -ms-flexbox;
13
+ display: -webkit-flex;
14
+ display: flex; }
15
+
16
+ .ct-chart-pie .ct-label,
17
+ .ct-chart-donut .ct-label {
18
+ dominant-baseline: central; }
19
+
20
+ .ct-label.ct-horizontal.ct-start {
21
+ -webkit-box-align: flex-end;
22
+ -webkit-align-items: flex-end;
23
+ -ms-flex-align: flex-end;
24
+ align-items: flex-end;
25
+ -webkit-box-pack: flex-start;
26
+ -webkit-justify-content: flex-start;
27
+ -ms-flex-pack: flex-start;
28
+ justify-content: flex-start;
29
+ text-align: left;
30
+ text-anchor: start; }
31
+
32
+ .ct-label.ct-horizontal.ct-end {
33
+ -webkit-box-align: flex-start;
34
+ -webkit-align-items: flex-start;
35
+ -ms-flex-align: flex-start;
36
+ align-items: flex-start;
37
+ -webkit-box-pack: flex-start;
38
+ -webkit-justify-content: flex-start;
39
+ -ms-flex-pack: flex-start;
40
+ justify-content: flex-start;
41
+ text-align: left;
42
+ text-anchor: start; }
43
+
44
+ .ct-label.ct-vertical.ct-start {
45
+ -webkit-box-align: flex-end;
46
+ -webkit-align-items: flex-end;
47
+ -ms-flex-align: flex-end;
48
+ align-items: flex-end;
49
+ -webkit-box-pack: flex-end;
50
+ -webkit-justify-content: flex-end;
51
+ -ms-flex-pack: flex-end;
52
+ justify-content: flex-end;
53
+ text-align: right;
54
+ text-anchor: end; }
55
+
56
+ .ct-label.ct-vertical.ct-end {
57
+ -webkit-box-align: flex-end;
58
+ -webkit-align-items: flex-end;
59
+ -ms-flex-align: flex-end;
60
+ align-items: flex-end;
61
+ -webkit-box-pack: flex-start;
62
+ -webkit-justify-content: flex-start;
63
+ -ms-flex-pack: flex-start;
64
+ justify-content: flex-start;
65
+ text-align: left;
66
+ text-anchor: start; }
67
+
68
+ .ct-chart-bar .ct-label.ct-horizontal.ct-start {
69
+ -webkit-box-align: flex-end;
70
+ -webkit-align-items: flex-end;
71
+ -ms-flex-align: flex-end;
72
+ align-items: flex-end;
73
+ -webkit-box-pack: center;
74
+ -webkit-justify-content: center;
75
+ -ms-flex-pack: center;
76
+ justify-content: center;
77
+ text-align: center;
78
+ text-anchor: start; }
79
+
80
+ .ct-chart-bar .ct-label.ct-horizontal.ct-end {
81
+ -webkit-box-align: flex-start;
82
+ -webkit-align-items: flex-start;
83
+ -ms-flex-align: flex-start;
84
+ align-items: flex-start;
85
+ -webkit-box-pack: center;
86
+ -webkit-justify-content: center;
87
+ -ms-flex-pack: center;
88
+ justify-content: center;
89
+ text-align: center;
90
+ text-anchor: start; }
91
+
92
+ .ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start {
93
+ -webkit-box-align: flex-end;
94
+ -webkit-align-items: flex-end;
95
+ -ms-flex-align: flex-end;
96
+ align-items: flex-end;
97
+ -webkit-box-pack: flex-start;
98
+ -webkit-justify-content: flex-start;
99
+ -ms-flex-pack: flex-start;
100
+ justify-content: flex-start;
101
+ text-align: left;
102
+ text-anchor: start; }
103
+
104
+ .ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end {
105
+ -webkit-box-align: flex-start;
106
+ -webkit-align-items: flex-start;
107
+ -ms-flex-align: flex-start;
108
+ align-items: flex-start;
109
+ -webkit-box-pack: flex-start;
110
+ -webkit-justify-content: flex-start;
111
+ -ms-flex-pack: flex-start;
112
+ justify-content: flex-start;
113
+ text-align: left;
114
+ text-anchor: start; }
115
+
116
+ .ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start {
117
+ -webkit-box-align: center;
118
+ -webkit-align-items: center;
119
+ -ms-flex-align: center;
120
+ align-items: center;
121
+ -webkit-box-pack: flex-end;
122
+ -webkit-justify-content: flex-end;
123
+ -ms-flex-pack: flex-end;
124
+ justify-content: flex-end;
125
+ text-align: right;
126
+ text-anchor: end; }
127
+
128
+ .ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end {
129
+ -webkit-box-align: center;
130
+ -webkit-align-items: center;
131
+ -ms-flex-align: center;
132
+ align-items: center;
133
+ -webkit-box-pack: flex-start;
134
+ -webkit-justify-content: flex-start;
135
+ -ms-flex-pack: flex-start;
136
+ justify-content: flex-start;
137
+ text-align: left;
138
+ text-anchor: end; }
139
+
140
+ .ct-grid {
141
+ stroke: rgba(0, 0, 0, 0.2);
142
+ stroke-width: 1px;
143
+ stroke-dasharray: 2px; }
144
+
145
+ .ct-grid-background {
146
+ fill: none; }
147
+
148
+ .ct-point {
149
+ stroke-width: 10px;
150
+ stroke-linecap: round; }
151
+
152
+ .ct-line {
153
+ fill: none;
154
+ stroke-width: 4px; }
155
+
156
+ .ct-area {
157
+ stroke: none;
158
+ fill-opacity: 0.1; }
159
+
160
+ .ct-bar {
161
+ fill: none;
162
+ stroke-width: 10px; }
163
+
164
+ .ct-slice-donut {
165
+ fill: none;
166
+ stroke-width: 60px; }
167
+
168
+ .ct-series-a .ct-point, .ct-series-a .ct-line, .ct-series-a .ct-bar, .ct-series-a .ct-slice-donut {
169
+ stroke: #d70206; }
170
+
171
+ .ct-series-a .ct-slice-pie, .ct-series-a .ct-slice-donut-solid, .ct-series-a .ct-area {
172
+ fill: #d70206; }
173
+
174
+ .ct-series-b .ct-point, .ct-series-b .ct-line, .ct-series-b .ct-bar, .ct-series-b .ct-slice-donut {
175
+ stroke: #f05b4f; }
176
+
177
+ .ct-series-b .ct-slice-pie, .ct-series-b .ct-slice-donut-solid, .ct-series-b .ct-area {
178
+ fill: #f05b4f; }
179
+
180
+ .ct-series-c .ct-point, .ct-series-c .ct-line, .ct-series-c .ct-bar, .ct-series-c .ct-slice-donut {
181
+ stroke: #f4c63d; }
182
+
183
+ .ct-series-c .ct-slice-pie, .ct-series-c .ct-slice-donut-solid, .ct-series-c .ct-area {
184
+ fill: #f4c63d; }
185
+
186
+ .ct-series-d .ct-point, .ct-series-d .ct-line, .ct-series-d .ct-bar, .ct-series-d .ct-slice-donut {
187
+ stroke: #d17905; }
188
+
189
+ .ct-series-d .ct-slice-pie, .ct-series-d .ct-slice-donut-solid, .ct-series-d .ct-area {
190
+ fill: #d17905; }
191
+
192
+ .ct-series-e .ct-point, .ct-series-e .ct-line, .ct-series-e .ct-bar, .ct-series-e .ct-slice-donut {
193
+ stroke: #453d3f; }
194
+
195
+ .ct-series-e .ct-slice-pie, .ct-series-e .ct-slice-donut-solid, .ct-series-e .ct-area {
196
+ fill: #453d3f; }
197
+
198
+ .ct-series-f .ct-point, .ct-series-f .ct-line, .ct-series-f .ct-bar, .ct-series-f .ct-slice-donut {
199
+ stroke: #59922b; }
200
+
201
+ .ct-series-f .ct-slice-pie, .ct-series-f .ct-slice-donut-solid, .ct-series-f .ct-area {
202
+ fill: #59922b; }
203
+
204
+ .ct-series-g .ct-point, .ct-series-g .ct-line, .ct-series-g .ct-bar, .ct-series-g .ct-slice-donut {
205
+ stroke: #0544d3; }
206
+
207
+ .ct-series-g .ct-slice-pie, .ct-series-g .ct-slice-donut-solid, .ct-series-g .ct-area {
208
+ fill: #0544d3; }
209
+
210
+ .ct-series-h .ct-point, .ct-series-h .ct-line, .ct-series-h .ct-bar, .ct-series-h .ct-slice-donut {
211
+ stroke: #6b0392; }
212
+
213
+ .ct-series-h .ct-slice-pie, .ct-series-h .ct-slice-donut-solid, .ct-series-h .ct-area {
214
+ fill: #6b0392; }
215
+
216
+ .ct-series-i .ct-point, .ct-series-i .ct-line, .ct-series-i .ct-bar, .ct-series-i .ct-slice-donut {
217
+ stroke: #f05b4f; }
218
+
219
+ .ct-series-i .ct-slice-pie, .ct-series-i .ct-slice-donut-solid, .ct-series-i .ct-area {
220
+ fill: #f05b4f; }
221
+
222
+ .ct-series-j .ct-point, .ct-series-j .ct-line, .ct-series-j .ct-bar, .ct-series-j .ct-slice-donut {
223
+ stroke: #dda458; }
224
+
225
+ .ct-series-j .ct-slice-pie, .ct-series-j .ct-slice-donut-solid, .ct-series-j .ct-area {
226
+ fill: #dda458; }
227
+
228
+ .ct-series-k .ct-point, .ct-series-k .ct-line, .ct-series-k .ct-bar, .ct-series-k .ct-slice-donut {
229
+ stroke: #eacf7d; }
230
+
231
+ .ct-series-k .ct-slice-pie, .ct-series-k .ct-slice-donut-solid, .ct-series-k .ct-area {
232
+ fill: #eacf7d; }
233
+
234
+ .ct-series-l .ct-point, .ct-series-l .ct-line, .ct-series-l .ct-bar, .ct-series-l .ct-slice-donut {
235
+ stroke: #86797d; }
236
+
237
+ .ct-series-l .ct-slice-pie, .ct-series-l .ct-slice-donut-solid, .ct-series-l .ct-area {
238
+ fill: #86797d; }
239
+
240
+ .ct-series-m .ct-point, .ct-series-m .ct-line, .ct-series-m .ct-bar, .ct-series-m .ct-slice-donut {
241
+ stroke: #b2c326; }
242
+
243
+ .ct-series-m .ct-slice-pie, .ct-series-m .ct-slice-donut-solid, .ct-series-m .ct-area {
244
+ fill: #b2c326; }
245
+
246
+ .ct-series-n .ct-point, .ct-series-n .ct-line, .ct-series-n .ct-bar, .ct-series-n .ct-slice-donut {
247
+ stroke: #6188e2; }
248
+
249
+ .ct-series-n .ct-slice-pie, .ct-series-n .ct-slice-donut-solid, .ct-series-n .ct-area {
250
+ fill: #6188e2; }
251
+
252
+ .ct-series-o .ct-point, .ct-series-o .ct-line, .ct-series-o .ct-bar, .ct-series-o .ct-slice-donut {
253
+ stroke: #a748ca; }
254
+
255
+ .ct-series-o .ct-slice-pie, .ct-series-o .ct-slice-donut-solid, .ct-series-o .ct-area {
256
+ fill: #a748ca; }
257
+
258
+ .ct-square {
259
+ display: block;
260
+ position: relative;
261
+ width: 100%; }
262
+ .ct-square:before {
263
+ display: block;
264
+ float: left;
265
+ content: "";
266
+ width: 0;
267
+ height: 0;
268
+ padding-bottom: 100%; }
269
+ .ct-square:after {
270
+ content: "";
271
+ display: table;
272
+ clear: both; }
273
+ .ct-square > svg {
274
+ display: block;
275
+ position: absolute;
276
+ top: 0;
277
+ left: 0; }
278
+
279
+ .ct-minor-second {
280
+ display: block;
281
+ position: relative;
282
+ width: 100%; }
283
+ .ct-minor-second:before {
284
+ display: block;
285
+ float: left;
286
+ content: "";
287
+ width: 0;
288
+ height: 0;
289
+ padding-bottom: 93.75%; }
290
+ .ct-minor-second:after {
291
+ content: "";
292
+ display: table;
293
+ clear: both; }
294
+ .ct-minor-second > svg {
295
+ display: block;
296
+ position: absolute;
297
+ top: 0;
298
+ left: 0; }
299
+
300
+ .ct-major-second {
301
+ display: block;
302
+ position: relative;
303
+ width: 100%; }
304
+ .ct-major-second:before {
305
+ display: block;
306
+ float: left;
307
+ content: "";
308
+ width: 0;
309
+ height: 0;
310
+ padding-bottom: 88.8888888889%; }
311
+ .ct-major-second:after {
312
+ content: "";
313
+ display: table;
314
+ clear: both; }
315
+ .ct-major-second > svg {
316
+ display: block;
317
+ position: absolute;
318
+ top: 0;
319
+ left: 0; }
320
+
321
+ .ct-minor-third {
322
+ display: block;
323
+ position: relative;
324
+ width: 100%; }
325
+ .ct-minor-third:before {
326
+ display: block;
327
+ float: left;
328
+ content: "";
329
+ width: 0;
330
+ height: 0;
331
+ padding-bottom: 83.3333333333%; }
332
+ .ct-minor-third:after {
333
+ content: "";
334
+ display: table;
335
+ clear: both; }
336
+ .ct-minor-third > svg {
337
+ display: block;
338
+ position: absolute;
339
+ top: 0;
340
+ left: 0; }
341
+
342
+ .ct-major-third {
343
+ display: block;
344
+ position: relative;
345
+ width: 100%; }
346
+ .ct-major-third:before {
347
+ display: block;
348
+ float: left;
349
+ content: "";
350
+ width: 0;
351
+ height: 0;
352
+ padding-bottom: 80%; }
353
+ .ct-major-third:after {
354
+ content: "";
355
+ display: table;
356
+ clear: both; }
357
+ .ct-major-third > svg {
358
+ display: block;
359
+ position: absolute;
360
+ top: 0;
361
+ left: 0; }
362
+
363
+ .ct-perfect-fourth {
364
+ display: block;
365
+ position: relative;
366
+ width: 100%; }
367
+ .ct-perfect-fourth:before {
368
+ display: block;
369
+ float: left;
370
+ content: "";
371
+ width: 0;
372
+ height: 0;
373
+ padding-bottom: 75%; }
374
+ .ct-perfect-fourth:after {
375
+ content: "";
376
+ display: table;
377
+ clear: both; }
378
+ .ct-perfect-fourth > svg {
379
+ display: block;
380
+ position: absolute;
381
+ top: 0;
382
+ left: 0; }
383
+
384
+ .ct-perfect-fifth {
385
+ display: block;
386
+ position: relative;
387
+ width: 100%; }
388
+ .ct-perfect-fifth:before {
389
+ display: block;
390
+ float: left;
391
+ content: "";
392
+ width: 0;
393
+ height: 0;
394
+ padding-bottom: 66.6666666667%; }
395
+ .ct-perfect-fifth:after {
396
+ content: "";
397
+ display: table;
398
+ clear: both; }
399
+ .ct-perfect-fifth > svg {
400
+ display: block;
401
+ position: absolute;
402
+ top: 0;
403
+ left: 0; }
404
+
405
+ .ct-minor-sixth {
406
+ display: block;
407
+ position: relative;
408
+ width: 100%; }
409
+ .ct-minor-sixth:before {
410
+ display: block;
411
+ float: left;
412
+ content: "";
413
+ width: 0;
414
+ height: 0;
415
+ padding-bottom: 62.5%; }
416
+ .ct-minor-sixth:after {
417
+ content: "";
418
+ display: table;
419
+ clear: both; }
420
+ .ct-minor-sixth > svg {
421
+ display: block;
422
+ position: absolute;
423
+ top: 0;
424
+ left: 0; }
425
+
426
+ .ct-golden-section {
427
+ display: block;
428
+ position: relative;
429
+ width: 100%; }
430
+ .ct-golden-section:before {
431
+ display: block;
432
+ float: left;
433
+ content: "";
434
+ width: 0;
435
+ height: 0;
436
+ padding-bottom: 61.804697157%; }
437
+ .ct-golden-section:after {
438
+ content: "";
439
+ display: table;
440
+ clear: both; }
441
+ .ct-golden-section > svg {
442
+ display: block;
443
+ position: absolute;
444
+ top: 0;
445
+ left: 0; }
446
+
447
+ .ct-major-sixth {
448
+ display: block;
449
+ position: relative;
450
+ width: 100%; }
451
+ .ct-major-sixth:before {
452
+ display: block;
453
+ float: left;
454
+ content: "";
455
+ width: 0;
456
+ height: 0;
457
+ padding-bottom: 60%; }
458
+ .ct-major-sixth:after {
459
+ content: "";
460
+ display: table;
461
+ clear: both; }
462
+ .ct-major-sixth > svg {
463
+ display: block;
464
+ position: absolute;
465
+ top: 0;
466
+ left: 0; }
467
+
468
+ .ct-minor-seventh {
469
+ display: block;
470
+ position: relative;
471
+ width: 100%; }
472
+ .ct-minor-seventh:before {
473
+ display: block;
474
+ float: left;
475
+ content: "";
476
+ width: 0;
477
+ height: 0;
478
+ padding-bottom: 56.25%; }
479
+ .ct-minor-seventh:after {
480
+ content: "";
481
+ display: table;
482
+ clear: both; }
483
+ .ct-minor-seventh > svg {
484
+ display: block;
485
+ position: absolute;
486
+ top: 0;
487
+ left: 0; }
488
+
489
+ .ct-major-seventh {
490
+ display: block;
491
+ position: relative;
492
+ width: 100%; }
493
+ .ct-major-seventh:before {
494
+ display: block;
495
+ float: left;
496
+ content: "";
497
+ width: 0;
498
+ height: 0;
499
+ padding-bottom: 53.3333333333%; }
500
+ .ct-major-seventh:after {
501
+ content: "";
502
+ display: table;
503
+ clear: both; }
504
+ .ct-major-seventh > svg {
505
+ display: block;
506
+ position: absolute;
507
+ top: 0;
508
+ left: 0; }
509
+
510
+ .ct-octave {
511
+ display: block;
512
+ position: relative;
513
+ width: 100%; }
514
+ .ct-octave:before {
515
+ display: block;
516
+ float: left;
517
+ content: "";
518
+ width: 0;
519
+ height: 0;
520
+ padding-bottom: 50%; }
521
+ .ct-octave:after {
522
+ content: "";
523
+ display: table;
524
+ clear: both; }
525
+ .ct-octave > svg {
526
+ display: block;
527
+ position: absolute;
528
+ top: 0;
529
+ left: 0; }
530
+
531
+ .ct-major-tenth {
532
+ display: block;
533
+ position: relative;
534
+ width: 100%; }
535
+ .ct-major-tenth:before {
536
+ display: block;
537
+ float: left;
538
+ content: "";
539
+ width: 0;
540
+ height: 0;
541
+ padding-bottom: 40%; }
542
+ .ct-major-tenth:after {
543
+ content: "";
544
+ display: table;
545
+ clear: both; }
546
+ .ct-major-tenth > svg {
547
+ display: block;
548
+ position: absolute;
549
+ top: 0;
550
+ left: 0; }
551
+
552
+ .ct-major-eleventh {
553
+ display: block;
554
+ position: relative;
555
+ width: 100%; }
556
+ .ct-major-eleventh:before {
557
+ display: block;
558
+ float: left;
559
+ content: "";
560
+ width: 0;
561
+ height: 0;
562
+ padding-bottom: 37.5%; }
563
+ .ct-major-eleventh:after {
564
+ content: "";
565
+ display: table;
566
+ clear: both; }
567
+ .ct-major-eleventh > svg {
568
+ display: block;
569
+ position: absolute;
570
+ top: 0;
571
+ left: 0; }
572
+
573
+ .ct-major-twelfth {
574
+ display: block;
575
+ position: relative;
576
+ width: 100%; }
577
+ .ct-major-twelfth:before {
578
+ display: block;
579
+ float: left;
580
+ content: "";
581
+ width: 0;
582
+ height: 0;
583
+ padding-bottom: 33.3333333333%; }
584
+ .ct-major-twelfth:after {
585
+ content: "";
586
+ display: table;
587
+ clear: both; }
588
+ .ct-major-twelfth > svg {
589
+ display: block;
590
+ position: absolute;
591
+ top: 0;
592
+ left: 0; }
593
+
594
+ .ct-double-octave {
595
+ display: block;
596
+ position: relative;
597
+ width: 100%; }
598
+ .ct-double-octave:before {
599
+ display: block;
600
+ float: left;
601
+ content: "";
602
+ width: 0;
603
+ height: 0;
604
+ padding-bottom: 25%; }
605
+ .ct-double-octave:after {
606
+ content: "";
607
+ display: table;
608
+ clear: both; }
609
+ .ct-double-octave > svg {
610
+ display: block;
611
+ position: absolute;
612
+ top: 0;
613
+ left: 0; }