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,27 @@
1
+ %ul#lg-menu.nav.hidden-xs
2
+ %li
3
+ = link_to(new_dirmon_entry_path) do
4
+ %i.fa.fa-plus
5
+ New Entry
6
+ %li
7
+ = link_to(dirmon_entries_path) do
8
+ %i.fa.fa-list
9
+ All
10
+ - RocketJob::DirmonEntry.aasm.states.map { |s| s.name.to_s }.each do |state|
11
+ %li{class: state}
12
+ = link_to("#{state}_dirmon_entries".to_sym) do
13
+ %i.fa{class: state_icon(state)}
14
+ = state.to_s.capitalize!
15
+ = "(#{dirmon_counts_by_state(state)})"
16
+ / tiny only nav
17
+ %ul#xs-menu.nav.visible-xs
18
+ %li
19
+ = link_to(new_dirmon_entry_path) do
20
+ %i.fa.fa-plus
21
+ %li
22
+ = link_to(dirmon_entries_path) do
23
+ %i.fa.fa-list
24
+ - RocketJob::DirmonEntry.aasm.states.map { |s| s.name.to_s }.each do |state|
25
+ %li{class: state}
26
+ = link_to("#{state}_dirmon_entries".to_sym) do
27
+ %i.fa{class: state_icon(state)}
@@ -7,9 +7,6 @@
7
7
  %div
8
8
  %label Job Class Name:
9
9
  = @dirmon_entry.job_class_name
10
- %div
11
- %label Perform Method:
12
- = @dirmon_entry.perform_method
13
10
  %div
14
11
  %label Archive Directory:
15
12
  = @dirmon_entry.archive_directory
@@ -1,8 +1,4 @@
1
- .row
2
- #queue
3
- = render partial: 'list', locals: { jobs: @jobs }
1
+ .container-fluid
2
+ .lead Edit Dirmon Entry
4
3
 
5
- .col-md-6
6
- .lead Edit Dirmon Entry
7
-
8
- = render partial: 'form', locals: { action: :update }
4
+ = render partial: 'form', locals: { action: :update }
@@ -1,11 +1,18 @@
1
- .row
2
- #queue
3
- = render partial: 'list', locals: { jobs: @jobs }
1
+ .dirmon-list
2
+ .list
3
+ %h2 All Entries
4
+ %table.table.datatable.dirmon-datatable{ style: "width: 100%", data: { source: "#{dirmon_entries_url(format: 'json')}" } }
5
+ %thead
6
+ %tr
7
+ %th Name
8
+ %th Job Class
9
+ %th Pattern
10
+ %tbody
4
11
 
5
- .col-md-8
6
- .job-status
7
- #job
8
- .welcome_screen
9
- = link_to image_tag('rocket_job_mission_control/rocket-icon-512x512.png'), 'http://rocketjob.io'
10
- %h1 Welcome to rocketjob
11
- %p High volume, priority based, Enterprise Batch Processing solution for Ruby
12
+
13
+ :javascript
14
+ jQuery(function() {
15
+ new RjmcDatatable(
16
+ $('.dirmon-datatable'),
17
+ [{data: '0'}, {data: '1'}, {data: '2'}]);
18
+ });
@@ -0,0 +1,17 @@
1
+ .dirmon-list
2
+ .list
3
+ %h2 Disabled Entries
4
+ %table.table.datatable.dirmon-datatable{ style: "width: 100%", data: { source: "#{disabled_dirmon_entries_url(format: 'json')}" } }
5
+ %thead
6
+ %tr
7
+ %th Name
8
+ %th Job Class
9
+ %th Pattern
10
+ %tbody
11
+
12
+ :javascript
13
+ jQuery(function() {
14
+ new RjmcDatatable(
15
+ $('.dirmon-datatable'),
16
+ [{data: '0'}, {data: '1'}, {data: '2'}]);
17
+ });
@@ -0,0 +1,17 @@
1
+ .dirmon-list
2
+ .list
3
+ %h2 Enabled Entries
4
+ %table.table.datatable.dirmon-datatable{ style: "width: 100%", data: { source: "#{enabled_dirmon_entries_url(format: 'json')}" } }
5
+ %thead
6
+ %tr
7
+ %th Name
8
+ %th Job Class
9
+ %th Pattern
10
+ %tbody
11
+
12
+ :javascript
13
+ jQuery(function() {
14
+ new RjmcDatatable(
15
+ $('.dirmon-datatable'),
16
+ [{data: '0'}, {data: '1'}, {data: '2'}]);
17
+ });
@@ -0,0 +1,17 @@
1
+ .dirmon-list
2
+ .list
3
+ %h2 Failed Entries
4
+ %table.table.datatable.dirmon-datatable{ style: "width: 100%", data: { source: "#{failed_dirmon_entries_url(format: 'json')}" } }
5
+ %thead
6
+ %tr
7
+ %th Name
8
+ %th Job Class
9
+ %th Pattern
10
+ %tbody
11
+
12
+ :javascript
13
+ jQuery(function() {
14
+ new RjmcDatatable(
15
+ $('.dirmon-datatable'),
16
+ [{data: '0'}, {data: '1'}, {data: '2'}]);
17
+ });
@@ -0,0 +1,17 @@
1
+ .dirmon-list
2
+ .list
3
+ %h2 Pending Entries
4
+ %table.table.datatable.dirmon-datatable{ style: "width: 100%", data: { source: "#{pending_dirmon_entries_url(format: 'json')}" } }
5
+ %thead
6
+ %tr
7
+ %th Name
8
+ %th Job Class
9
+ %th Pattern
10
+ %tbody
11
+
12
+ :javascript
13
+ jQuery(function() {
14
+ new RjmcDatatable(
15
+ $('.dirmon-datatable'),
16
+ [{data: '0'}, {data: '1'}, {data: '2'}]);
17
+ });
@@ -1,9 +1,6 @@
1
- .row
2
- #queue
1
+ .container-fluid
2
+ .row
3
+ .col-xm-14
4
+ .lead New Dirmon Entry
3
5
 
4
- = render partial: 'list', locals: { jobs: @jobs }
5
-
6
- .col-md-6
7
- .lead New Dirmon Entry
8
-
9
- = render partial: 'form'
6
+ = render partial: 'form'
@@ -1,26 +1,22 @@
1
- .row
2
- #queue
3
- = render partial: 'list', locals: { jobs: @jobs }
1
+ .col-md-12.job-status
2
+ #job
3
+ .lead= @dirmon_entry.job_class_name
4
4
 
5
- .col-md-8.job-status
6
- #job
7
- .lead= @dirmon_entry.job_class_name + "#{'#' + @dirmon_entry.perform_method.to_s unless @dirmon_entry.perform_method == :perform }"
5
+ .job-state.inline-block
6
+ .left status
7
+ .right{ class: @dirmon_entry.state }
8
+ = @dirmon_entry.state
8
9
 
9
- .job-state.inline-block
10
- .left status
11
- .right{ class: @dirmon_entry.state }
12
- = @dirmon_entry.state
10
+ .btn-toolbar.job-actions.pull-right
11
+ .btn-group{ style: 'margin-right: 1em;' }
12
+ = link_to "Destroy", dirmon_entry_path(@dirmon_entry), method: :delete, class: 'btn btn-default', :data => { :confirm => 'Are you sure?' }
13
+ - if @dirmon_entry.disabled? || @dirmon_entry.pending?
14
+ = link_to "Enable", enable_dirmon_entry_path(@dirmon_entry.id), method: :put, class: "btn btn-default"
15
+ - if @dirmon_entry.enabled?
16
+ = link_to "Disable", disable_dirmon_entry_path(@dirmon_entry.id), method: :put, class: "btn btn-default", :data => { :confirm => 'Are you sure?' }
17
+ .btn-group
18
+ = link_to "Edit", edit_dirmon_entry_path(@dirmon_entry), class: "btn btn-default"
13
19
 
14
- .btn-toolbar.job-actions.pull-right
15
- .btn-group{ style: 'margin-right: 1em;' }
16
- = link_to "Destroy", dirmon_entry_path(@dirmon_entry), method: :delete, class: 'btn btn-default', :data => { :confirm => 'Are you sure?' }
17
- - if @dirmon_entry.disabled? || @dirmon_entry.pending?
18
- = link_to "Enable", enable_dirmon_entry_path(@dirmon_entry.id), method: :put, class: "btn btn-default"
19
- - if @dirmon_entry.enabled?
20
- = link_to "Disable", disable_dirmon_entry_path(@dirmon_entry.id), method: :put, class: "btn btn-default", :data => { :confirm => 'Are you sure?' }
21
- .btn-group
22
- = link_to "Edit", edit_dirmon_entry_path(@dirmon_entry), class: "btn btn-default"
20
+ .clearfix
23
21
 
24
- .clearfix
25
-
26
- = render partial: 'status', locals: { dirmon_entry: @job }
22
+ = render partial: 'status', locals: { dirmon_entry: @job }
@@ -0,0 +1,28 @@
1
+ %ul#lg-menu.nav.hidden-xs
2
+ %li.active
3
+ = link_to(jobs_path) do
4
+ %i.fa.fa-list
5
+ All
6
+ %li
7
+ = link_to(scheduled_jobs_path) do
8
+ %i.fa.fa-clock-o
9
+ Scheduled
10
+ = "(#{job_counts_by_state("scheduled")})"
11
+ - job_states.each do |state|
12
+ %li{class: state}
13
+ = link_to("#{state}_jobs".to_sym) do
14
+ %i.fa{class: state_icon(state)}
15
+ = state.capitalize
16
+ = "(#{job_counts_by_state(state)})"
17
+ / tiny only nav
18
+ %ul#xs-menu.nav.visible-xs
19
+ %li
20
+ = link_to(jobs_path) do
21
+ %i.fa.fa-list
22
+ %li
23
+ = link_to(scheduled_jobs_path) do
24
+ %i.fa.fa-clock-o
25
+ - job_states.each do |state|
26
+ %li{class: state}
27
+ = link_to("#{state}_jobs".to_sym) do
28
+ %i.fa{class: state_icon(state)}
@@ -3,7 +3,7 @@
3
3
  .job-list
4
4
  .list-top
5
5
  %ol.breadcrumb
6
- %li= link_to(job_title(@job), job_path(@job))
6
+ %li= link_to(@job.class.name, job_path(@job))
7
7
  %li.active Failures
8
8
  .clearfix
9
9
  .list
@@ -15,7 +15,7 @@
15
15
  = slice_error['_id']['error_class']
16
16
 
17
17
  .description
18
- = "Occurences: #{slice_error['count'].to_i}"
18
+ = "Occurrences: #{slice_error['count'].to_i}"
19
19
 
20
20
  - if @failure_exception
21
21
  .col-md-8
@@ -1,11 +1,24 @@
1
- .row
2
- #queue
3
- = render partial: 'list', locals: { jobs: @jobs }
1
+ .job-list
2
+ .list
3
+ .row
4
+ .col-sm-10
5
+ %h2 Jobs
6
+ .col-sm-2
7
+ .btn.btn-default.pull-right.dt-reload{ data: { behavior: 'reload' } }
8
+ %i.fa.fa-refresh
9
+ %table.table.datatable.jobs-datatable{ style: "width: 100%", data: { source: "#{jobs_url(format: 'json')}" } }
10
+ %thead
11
+ %tr
12
+ %th Class
13
+ %th Description
14
+ %th Completion
15
+ %th Duration
16
+ %tbody
4
17
 
5
- .col-md-8
6
- .job-status
7
- #job
8
- .welcome_screen
9
- = link_to image_tag('rocket_job_mission_control/rocket-icon-512x512.png'), 'http://rocketjob.io'
10
- %h1 Welcome to rocketjob
11
- %p High volume, priority based, Enterprise Batch Processing solution for Ruby
18
+ :javascript
19
+ jQuery(function() {
20
+ new RjmcDatatable(
21
+ $(".jobs-datatable"),
22
+ [{data: '0'}, {data: '1'}, {data: '2'}, {data: '3', orderable: false}]
23
+ );
24
+ });
@@ -0,0 +1,22 @@
1
+ .job-list
2
+ .list
3
+ .row
4
+ .col-sm-10
5
+ %h2 Aborted Jobs
6
+ .col-sm-2
7
+ .btn.btn-default.pull-right.dt-reload{ data: { behavior: 'reload' } }
8
+ %i.fa.fa-refresh
9
+ %table.table.datatable.jobs-datatable{ style: "width: 100%", data: { source: "#{aborted_jobs_url(format: 'json')}" } }
10
+ %thead
11
+ %tr
12
+ %th Class
13
+ %th Description
14
+ %th Aborted
15
+ %tbody
16
+
17
+ :javascript
18
+ jQuery(function() {
19
+ new RjmcDatatable(
20
+ $(".jobs-datatable"),
21
+ [{data: '0'}, {data: '1'}, {data: '2'}]);
22
+ });
@@ -0,0 +1,23 @@
1
+ .job-list
2
+ .list
3
+ .row
4
+ .col-sm-10
5
+ %h2 Completed Jobs
6
+ .col-sm-2
7
+ .btn.btn-default.pull-right.dt-reload{ data: { behavior: 'reload' } }
8
+ %i.fa.fa-refresh
9
+ %table.table.datatable.jobs-datatable{ style: "width: 100%", data: { source: "#{completed_jobs_url(format: 'json')}" } }
10
+ %thead
11
+ %tr
12
+ %th Class
13
+ %th Description
14
+ %th Duration
15
+ %th Completed
16
+ %tbody
17
+
18
+ :javascript
19
+ jQuery(function() {
20
+ new RjmcDatatable(
21
+ $(".jobs-datatable"),
22
+ [{data: '0'}, {data: '1'}, {data: '2', orderable: false}, {data: '3'}]);
23
+ });
@@ -0,0 +1,22 @@
1
+ .job-list
2
+ .list
3
+ .row
4
+ .col-sm-10
5
+ %h2 Failed Jobs
6
+ .col-sm-2
7
+ .btn.btn-default.pull-right.dt-reload{ data: { behavior: 'reload' } }
8
+ %i.fa.fa-refresh
9
+ %table.table.datatable.jobs-datatable{ style: "width: 100%", data: { source: "#{failed_jobs_url(format: 'json')}" } }
10
+ %thead
11
+ %tr
12
+ %th Class
13
+ %th Description
14
+ %th Failed
15
+ %tbody
16
+
17
+ :javascript
18
+ jQuery(function() {
19
+ new RjmcDatatable(
20
+ $(".jobs-datatable"),
21
+ [{data: '0'}, {data: '1'}, {data: '2'}]);
22
+ });
@@ -0,0 +1,22 @@
1
+ .job-list
2
+ .list
3
+ .row
4
+ .col-sm-10
5
+ %h2 Paused Jobs
6
+ .col-sm-2
7
+ .btn.btn-default.pull-right.dt-reload{ data: { behavior: 'reload' } }
8
+ %i.fa.fa-refresh
9
+ %table.table.datatable.jobs-datatable{ style: "width: 100%", data: { source: "#{paused_jobs_url(format: 'json')}" } }
10
+ %thead
11
+ %tr
12
+ %th Class
13
+ %th Description
14
+ %th Paused
15
+ %tbody
16
+
17
+ :javascript
18
+ jQuery(function() {
19
+ new RjmcDatatable(
20
+ $(".jobs-datatable"),
21
+ [{data: '0'}, {data: '1'}, {data: '2'}]);
22
+ });
@@ -0,0 +1,23 @@
1
+ .job-list
2
+ .list
3
+ .row
4
+ .col-sm-10
5
+ %h2 Queued Jobs
6
+ .col-sm-2
7
+ .btn.btn-default.pull-right.dt-reload{ data: { behavior: 'reload' } }
8
+ %i.fa.fa-refresh
9
+ %table.table.datatable.jobs-datatable{ style: "width: 100%", data: { source: "#{queued_jobs_url(format: 'json')}" } }
10
+ %thead
11
+ %tr
12
+ %th Class
13
+ %th Description
14
+ %th Priority
15
+ %th Queued For
16
+ %tbody
17
+
18
+ :javascript
19
+ jQuery(function() {
20
+ new RjmcDatatable(
21
+ $(".jobs-datatable"),
22
+ [{data: '0'}, {data: '1'}, {data: '2'}, {data: '3', orderable: false}]);
23
+ });
@@ -0,0 +1,24 @@
1
+ .job-list
2
+ .list
3
+ .row
4
+ .col-sm-10
5
+ %h2 Running Jobs
6
+ .col-sm-2
7
+ .btn.btn-default.pull-right.dt-reload{ data: { behavior: 'reload' } }
8
+ %i.fa.fa-refresh
9
+ %table.table.datatable.jobs-datatable{ style: "width: 100%", data: { source: "#{running_jobs_url(format: 'json')}" } }
10
+ %thead
11
+ %tr
12
+ %th Class
13
+ %th Description
14
+ %th Progress
15
+ %th Priority
16
+ %th Started
17
+ %tbody
18
+
19
+ :javascript
20
+ jQuery(function() {
21
+ new RjmcDatatable(
22
+ $(".jobs-datatable"),
23
+ [{data: '0'}, {data: '1'}, {data: '2', orderable: false}, {data: '3'}, {data: '4'}]);
24
+ });
@@ -0,0 +1,23 @@
1
+ .job-list
2
+ .list
3
+ .row
4
+ .col-sm-10
5
+ %h2 Scheduled Jobs
6
+ .col-sm-2
7
+ .btn.btn-default.pull-right.dt-reload{ data: { behavior: 'reload' } }
8
+ %i.fa.fa-refresh
9
+ %table.table.datatable.jobs-datatable{ style: "width: 100%", data: { source: "#{scheduled_jobs_url(format: 'json')}" } }
10
+ %thead
11
+ %tr
12
+ %th Class
13
+ %th Description
14
+ %th Runs in
15
+ %th Cron Schedule
16
+ %tbody
17
+
18
+ :javascript
19
+ jQuery(function() {
20
+ new RjmcDatatable(
21
+ $(".jobs-datatable"),
22
+ [{data: '0'}, {data: '1'}, {data: '2', orderable: false}, {data: '3'}]);
23
+ });
@@ -1,10 +1,7 @@
1
1
  .row
2
- #queue
3
- = render partial: 'list', locals: { jobs: @jobs }
4
-
5
- .col-md-8.job-status
2
+ .col-md-14.col-md-offset-1.job-status
6
3
  #job
7
- .lead= job_title(@job)
4
+ .lead= @job.class.name
8
5
 
9
6
  .job-state.inline-block
10
7
  .left state
@@ -15,7 +12,7 @@
15
12
  = form_for(@job, as: :job, url: job_path(@job), html: {method: :patch}) do |f|
16
13
 
17
14
  .input-group.priority-group
18
- = f.text_field(:priority, class: 'form-control')
15
+ = f.text_field(:priority, value: @job.priority, class: 'form-control')
19
16
 
20
17
  .input-group-btn-vertical
21
18
  %button#increase_priority.btn.btn-default.up{ type: 'button' }
@@ -46,8 +43,8 @@
46
43
  - if valid_events.include?(:retry)
47
44
  = job_action_link('retry', rocket_job_mission_control.retry_job_path(@job), :patch)
48
45
 
49
- - if @job.failed? && defined?(RocketJob::SlicedJob) && @job.kind_of?(RocketJob::SlicedJob) && @job.input.failed_count > 0
50
- = link_to("view errors", job_failures_path(@job), class: 'btn btn-default')
46
+ - if @job.respond_to?(:input) && @job.input.failed_count > 0
47
+ = link_to('view errors', job_failures_path(@job), class: 'btn btn-default')
51
48
 
52
49
  .clearfix
53
50
 
@@ -0,0 +1,20 @@
1
+ %ul#lg-menu.nav.hidden-xs
2
+ %li
3
+ = link_to(workers_path) do
4
+ %i.fa.fa-list
5
+ All
6
+ - RocketJob::Worker.aasm.states.map { |s| s.name.to_s }.each do |state|
7
+ %li{class: state}
8
+ = link_to("#{state}_workers".to_sym) do
9
+ %i.fa{class: state_icon(state)}
10
+ = state.to_s.capitalize!
11
+ = "(#{worker_counts_by_state(state)})"
12
+ / tiny only nav
13
+ %ul#xs-menu.nav.visible-xs
14
+ %li
15
+ = link_to(workers_path) do
16
+ %i.fa.fa-list
17
+ - RocketJob::Worker.aasm.states.map { |s| s.name.to_s }.each do |state|
18
+ %li{class: state}
19
+ = link_to("#{state}_workers".to_sym) do
20
+ %i.fa{class: state_icon(state)}
@@ -1,60 +1,37 @@
1
1
  #workers
2
- - if @workers.present?
3
- .row
4
- .col-xs-12
5
- %ol.breadcrumb{ style: 'margin-bottom: 0'}
6
- %li.active Workers
7
- .btn-group.pull-right
8
- - [:stop_all, :pause_all, :resume_all, :destroy_zombies].each do |action|
9
- = link_to("#{action.to_s.humanize.capitalize}",
10
- rocket_job_mission_control.update_all_workers_path(worker_action: action),
11
- method: :patch,
12
- data: { confirm: t(:confirm, scope: [:worker, :update_all], action: action.to_s.singularize.humanize.downcase) },
13
- class: 'btn btn-default')
14
- .clearfix
15
-
16
- .grid
17
- - @workers.each_slice(4) do |workers|
18
- .row
19
- - workers.each do |worker|
20
- .card.col-xs-12.col-sm-6.col-md-3.col-lg-3
21
- .inner.callout-top{ class: worker_card_class(worker) }
22
- .title
23
- %h3
24
- = worker.name
25
-
26
- .state
27
- %b State:
28
- = worker.state
29
-
30
- .threads.max_threads
31
- %b Max Threads:
32
- = worker.max_threads
33
-
34
- .threads.current_threads
35
- %b Current Threads:
36
- = worker.heartbeat.current_threads.to_i
37
-
38
- .time
39
- %b Started:
40
- = "#{RocketJob.seconds_as_duration(Time.now - worker.started_at)} ago"
41
-
42
- .heartbeat
43
- %b Last Heartbeat:
44
- = "#{RocketJob.seconds_as_duration(Time.now - worker.heartbeat.updated_at)} ago"
45
-
46
- .actions
47
- = render partial: 'actions', locals: { worker: worker }
48
-
49
- - else
50
- .row
51
- .col-md-6.col-md-offset-3
52
- .panel.panel-default
53
- .panel-body
54
- .lead
55
- There are currently no workers.
56
- You can start a worker with the following command:
57
-
58
- .code-block
59
- %pre
60
- %code.language-bash bin/rocketjob
2
+ .worker-list
3
+ .list
4
+ .row
5
+ .col-md-6
6
+ %h2 Worker Processes
7
+ .col-md-6
8
+ .col-sm-10
9
+ .worker-collection-actions
10
+ - if @workers.present?
11
+ %ol
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: "#{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 Paused 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, :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: "#{paused_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
+ });