rocketjob_mission_control 3.0.3 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +4 -0
- data/app/assets/fonts/webfonts/fa-brands-400.eot +0 -0
- data/app/assets/fonts/webfonts/fa-brands-400.woff +0 -0
- data/app/assets/fonts/webfonts/fa-brands-400.woff2 +0 -0
- data/app/assets/fonts/webfonts/fa-regular-400.eot +0 -0
- data/app/assets/fonts/webfonts/fa-regular-400.woff +0 -0
- data/app/assets/fonts/webfonts/fa-regular-400.woff2 +0 -0
- data/app/assets/fonts/webfonts/fa-solid-900.eot +0 -0
- data/app/assets/fonts/webfonts/fa-solid-900.woff +0 -0
- data/app/assets/fonts/webfonts/fa-solid-900.woff2 +0 -0
- data/app/assets/images/rocket_job_mission_control/android-chrome-192x192.png +0 -0
- data/app/assets/images/rocket_job_mission_control/android-chrome-512x512.png +0 -0
- data/app/assets/images/rocket_job_mission_control/apple-touch-icon.png +0 -0
- data/app/assets/images/rocket_job_mission_control/favicon-16x16.png +0 -0
- data/app/assets/images/rocket_job_mission_control/favicon-32x32.png +0 -0
- data/app/assets/images/rocket_job_mission_control/favicon.ico +0 -0
- data/app/assets/images/rocket_job_mission_control/favicon.png +0 -0
- data/app/assets/images/rocket_job_mission_control/mstile-150x150.png +0 -0
- data/app/assets/images/rocket_job_mission_control/safari-pinned-tab.svg +188 -0
- data/app/assets/javascripts/rocket_job_mission_control/datatable.js +2 -1
- data/app/assets/stylesheets/rocket_job_mission_control/application.scss +5 -4
- data/app/assets/stylesheets/rocket_job_mission_control/base.scss +39 -65
- data/app/assets/stylesheets/rocket_job_mission_control/callout.scss +14 -2
- data/app/datatables/rocket_job_mission_control/active_workers_datatable.rb +1 -1
- data/app/datatables/rocket_job_mission_control/dirmon_entries_datatable.rb +1 -1
- data/app/datatables/rocket_job_mission_control/jobs_datatable.rb +21 -16
- data/app/datatables/rocket_job_mission_control/servers_datatable.rb +1 -1
- data/app/helpers/rocket_job_mission_control/application_helper.rb +18 -16
- data/app/helpers/rocket_job_mission_control/jobs_helper.rb +11 -6
- data/app/views/layouts/rocket_job_mission_control/application.html.erb +30 -28
- data/app/views/layouts/rocket_job_mission_control/partials/_flash.html.erb +5 -4
- data/app/views/layouts/rocket_job_mission_control/partials/_header.html.erb +23 -19
- data/app/views/layouts/rocket_job_mission_control/partials/_sidebar.html.erb +5 -4
- data/app/views/rocket_job_mission_control/active_workers/index.html.erb +13 -8
- data/app/views/rocket_job_mission_control/dirmon_entries/_form.html.erb +31 -21
- data/app/views/rocket_job_mission_control/dirmon_entries/_sidebar.html.erb +12 -9
- data/app/views/rocket_job_mission_control/dirmon_entries/_status.html.erb +5 -2
- data/app/views/rocket_job_mission_control/dirmon_entries/edit.html.erb +4 -3
- data/app/views/rocket_job_mission_control/dirmon_entries/index.html.erb +16 -14
- data/app/views/rocket_job_mission_control/dirmon_entries/new.html.erb +5 -4
- data/app/views/rocket_job_mission_control/dirmon_entries/show.html.erb +19 -14
- data/app/views/rocket_job_mission_control/jobs/_pagination.html.erb +9 -5
- data/app/views/rocket_job_mission_control/jobs/_sidebar.html.erb +9 -8
- data/app/views/rocket_job_mission_control/jobs/_status.html.erb +18 -10
- data/app/views/rocket_job_mission_control/jobs/edit.html.erb +22 -15
- data/app/views/rocket_job_mission_control/jobs/exception.html.erb +14 -10
- data/app/views/rocket_job_mission_control/jobs/exceptions.html.erb +27 -25
- data/app/views/rocket_job_mission_control/jobs/index.html.erb +16 -13
- data/app/views/rocket_job_mission_control/jobs/show.html.erb +25 -20
- data/app/views/rocket_job_mission_control/servers/_sidebar.html.erb +8 -6
- data/app/views/rocket_job_mission_control/servers/index.html.erb +18 -14
- data/config/initializers/assets.rb +13 -0
- data/lib/rocket_job_mission_control/version.rb +1 -1
- data/test/controllers/rocket_job_mission_control/dirmon_entries_controller_test.rb +4 -6
- data/test/controllers/rocket_job_mission_control/jobs_controller_test.rb +18 -15
- data/test/helpers/rocket_job_mission_control/jobs_helper_test.rb +12 -6
- data/test/helpers/rocket_job_mission_control/servers_helper_test.rb +3 -4
- data/vendor/assets/stylesheets/fontawesome-all.min.css +5 -0
- data/vendor/assets/stylesheets/{selectize.default.css → selectize.bootstrap3.css} +134 -113
- metadata +39 -13
@@ -4,9 +4,9 @@
|
|
4
4
|
border-left-width: 0.5em;
|
5
5
|
}
|
6
6
|
.callout-queued {
|
7
|
-
border-left-color:
|
7
|
+
border-left-color: #A29F00;
|
8
8
|
a {
|
9
|
-
color:
|
9
|
+
color: #A29F00;
|
10
10
|
}
|
11
11
|
}
|
12
12
|
.callout-running {
|
@@ -15,6 +15,18 @@
|
|
15
15
|
color: #337ab7;
|
16
16
|
}
|
17
17
|
}
|
18
|
+
.callout-sleeping {
|
19
|
+
border-left-color: darkcyan;
|
20
|
+
a {
|
21
|
+
color: darkcyan;
|
22
|
+
}
|
23
|
+
}
|
24
|
+
.callout-scheduled {
|
25
|
+
border-left-color: #92001B;
|
26
|
+
a {
|
27
|
+
color: #92001B;
|
28
|
+
}
|
29
|
+
}
|
18
30
|
.callout-completed {
|
19
31
|
border-left-color: green;
|
20
32
|
a {
|
@@ -21,7 +21,7 @@ module RocketJobMissionControl
|
|
21
21
|
def worker_name_with_icon(active_worker, job)
|
22
22
|
state = active_worker.zombie? ? :zombie : job.state
|
23
23
|
<<-EOS
|
24
|
-
<i class="
|
24
|
+
<i class="#{state_icon(state)}" style="font-size: 75%" title="#{state}"></i>
|
25
25
|
#{active_worker.name}
|
26
26
|
EOS
|
27
27
|
end
|
@@ -16,7 +16,7 @@ module RocketJobMissionControl
|
|
16
16
|
def name_with_link(dirmon)
|
17
17
|
<<-EOS
|
18
18
|
<a href="#{dirmon_entry_path(dirmon.id)}">
|
19
|
-
<i class="
|
19
|
+
<i class="#{state_icon(dirmon.state)}" style="font-size: 75%" title="#{dirmon.state}"></i>
|
20
20
|
#{dirmon.name}
|
21
21
|
</a>
|
22
22
|
EOS
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module RocketJobMissionControl
|
2
2
|
class JobsDatatable < AbstractDatatable
|
3
|
-
delegate :job_path, :job_icon, :edit_job_path,
|
3
|
+
delegate :job_path, :job_icon, :edit_job_path, :state_icon, :job_state,
|
4
4
|
:abort_job_path, :job_path, :fail_job_path, :run_now_job_path, :pause_job_path,
|
5
5
|
:resume_job_path, :retry_job_path, :exception_job_path, :job_action_link, :exceptions_job_path, to: :@view
|
6
6
|
|
7
|
-
COMMON_FIELDS = [:id, :_type, :description, :completed_at, :created_at, :started_at, :state].freeze
|
7
|
+
COMMON_FIELDS = [:id, :_type, :description, :completed_at, :created_at, :started_at, :state, :worker_name].freeze
|
8
8
|
|
9
9
|
ABORTED_COLUMNS = [
|
10
10
|
{display: 'Class', value: :class_with_link, field: '_type', width: '30%'},
|
@@ -13,15 +13,6 @@ module RocketJobMissionControl
|
|
13
13
|
{display: 'Actions', value: :action_buttons, orderable: false}
|
14
14
|
]
|
15
15
|
|
16
|
-
ALL_COLUMNS = [
|
17
|
-
{display: 'Class', value: :class_with_link, field: '_type'},
|
18
|
-
{display: 'Description', value: :description, field: 'description'},
|
19
|
-
{display: 'Created', value: :created_at, field: 'created_at'},
|
20
|
-
{display: 'Duration', value: :duration, field: 'duration', orderable: false},
|
21
|
-
{display: 'Actions', value: :action_buttons, orderable: false}
|
22
|
-
]
|
23
|
-
ALL_FIELDS = COMMON_FIELDS + [:run_at].freeze
|
24
|
-
|
25
16
|
COMPLETED_COLUMNS = [
|
26
17
|
{display: 'Class', value: :class_with_link, field: '_type', width: '30%'},
|
27
18
|
{display: 'Description', value: :description, field: 'description', width: '30%'},
|
@@ -43,17 +34,18 @@ module RocketJobMissionControl
|
|
43
34
|
{display: 'Queued For', value: :duration, field: 'duration', orderable: false},
|
44
35
|
{display: 'Actions', value: :action_buttons, orderable: false}
|
45
36
|
]
|
46
|
-
QUEUED_FIELDS = COMMON_FIELDS + [:run_at, :priority].freeze
|
37
|
+
QUEUED_FIELDS = (COMMON_FIELDS + [:run_at, :priority]).freeze
|
47
38
|
|
48
39
|
RUNNING_COLUMNS = [
|
49
40
|
{display: 'Class', value: :class_with_link, field: '_type'},
|
50
41
|
{display: 'Description', value: :description, field: 'description'},
|
51
42
|
{display: 'Progress', value: :progress, field: 'percent_complete', orderable: false},
|
43
|
+
{display: 'Workers', value: :worker_count, field: 'worker_count', orderable: false},
|
52
44
|
{display: 'Priority', value: :priority, field: 'priority'},
|
53
45
|
{display: 'Started', value: :started, field: 'started_at'},
|
54
46
|
{display: 'Actions', value: :action_buttons, orderable: false}
|
55
47
|
]
|
56
|
-
RUNNING_FIELDS = COMMON_FIELDS + [:record_count, :collect_output, :input_categories, :output_categories, :encrypt, :compress, :slice_size, :priority, :sub_state, :percent_complete].freeze
|
48
|
+
RUNNING_FIELDS = (COMMON_FIELDS + [:record_count, :collect_output, :input_categories, :output_categories, :encrypt, :compress, :slice_size, :priority, :sub_state, :percent_complete]).freeze
|
57
49
|
|
58
50
|
SCHEDULED_COLUMNS = [
|
59
51
|
{display: 'Class', value: :class_with_link, field: '_type'},
|
@@ -62,7 +54,16 @@ module RocketJobMissionControl
|
|
62
54
|
{display: 'Cron Schedule', value: :cron_schedule, field: 'cron_schedule'},
|
63
55
|
{display: 'Actions', value: :action_buttons, orderable: false}
|
64
56
|
]
|
65
|
-
SCHEDULED_FIELDS = COMMON_FIELDS + [:run_at, :cron_schedule].freeze
|
57
|
+
SCHEDULED_FIELDS = (COMMON_FIELDS + [:run_at, :cron_schedule]).freeze
|
58
|
+
|
59
|
+
ALL_COLUMNS = [
|
60
|
+
{display: 'Class', value: :class_with_link, field: '_type'},
|
61
|
+
{display: 'Description', value: :description, field: 'description'},
|
62
|
+
{display: 'Created', value: :created_at, field: 'created_at'},
|
63
|
+
{display: 'Duration', value: :duration, field: 'duration', orderable: false},
|
64
|
+
{display: 'Actions', value: :action_buttons, orderable: false}
|
65
|
+
]
|
66
|
+
ALL_FIELDS = (QUEUED_FIELDS + RUNNING_FIELDS + SCHEDULED_FIELDS).uniq.freeze
|
66
67
|
|
67
68
|
def initialize(view, query, columns)
|
68
69
|
@columns = columns
|
@@ -83,7 +84,7 @@ module RocketJobMissionControl
|
|
83
84
|
h[index.to_s] = send(column[:value], job)
|
84
85
|
index += 1
|
85
86
|
end
|
86
|
-
h['DT_RowClass'] = "card callout callout-#{job
|
87
|
+
h['DT_RowClass'] = "card callout callout-#{job_state(job)}"
|
87
88
|
h
|
88
89
|
end
|
89
90
|
|
@@ -91,7 +92,7 @@ module RocketJobMissionControl
|
|
91
92
|
def class_with_link(job)
|
92
93
|
<<-EOS
|
93
94
|
<a class='job-link' href="#{job_path(job.id)}">
|
94
|
-
<i class="
|
95
|
+
<i class="#{job_icon(job)}" style="font-size: 75%" title="#{job_state(job)}"></i>
|
95
96
|
#{job.class.name}
|
96
97
|
</a>
|
97
98
|
EOS
|
@@ -113,6 +114,10 @@ module RocketJobMissionControl
|
|
113
114
|
h(job.priority)
|
114
115
|
end
|
115
116
|
|
117
|
+
def worker_count(job)
|
118
|
+
h(job.worker_count)
|
119
|
+
end
|
120
|
+
|
116
121
|
def started(job)
|
117
122
|
"#{RocketJob.seconds_as_duration(Time.now - (job.started_at || Time.now))} ago" if job.started_at
|
118
123
|
end
|
@@ -23,7 +23,7 @@ module RocketJobMissionControl
|
|
23
23
|
|
24
24
|
def name_with_icon(server)
|
25
25
|
<<-EOS
|
26
|
-
<i class="
|
26
|
+
<i class="#{server_icon(server)}" style="font-size: 75%" title="#{server.state}"></i>
|
27
27
|
#{server.name}
|
28
28
|
EOS
|
29
29
|
end
|
@@ -1,19 +1,20 @@
|
|
1
1
|
module RocketJobMissionControl
|
2
2
|
module ApplicationHelper
|
3
3
|
STATE_ICON_MAP = {
|
4
|
-
aborted: 'fa-stop',
|
5
|
-
completed: 'fa-check',
|
6
|
-
disabled: 'fa-stop',
|
7
|
-
enabled: 'fa-check',
|
8
|
-
failed: 'fa-exclamation-triangle',
|
9
|
-
paused: 'fa-pause',
|
10
|
-
pending: 'fa-inbox',
|
11
|
-
queued: 'fa-inbox',
|
12
|
-
running: 'fa-play',
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
4
|
+
aborted: 'fas fa-stop',
|
5
|
+
completed: 'fas fa-check',
|
6
|
+
disabled: 'fas fa-stop',
|
7
|
+
enabled: 'fas fa-check',
|
8
|
+
failed: 'fas fa-exclamation-triangle',
|
9
|
+
paused: 'fas fa-pause',
|
10
|
+
pending: 'fas fa-inbox',
|
11
|
+
queued: 'fas fa-inbox',
|
12
|
+
running: 'fas fa-play',
|
13
|
+
sleeping: 'fas fa-hourglass',
|
14
|
+
scheduled: 'fas fa-clock',
|
15
|
+
starting: 'fas fa-cogs',
|
16
|
+
stopping: 'fas fa-stop',
|
17
|
+
zombie: 'fas fa-hourglass'
|
17
18
|
}
|
18
19
|
|
19
20
|
def state_icon(state)
|
@@ -43,12 +44,14 @@ module RocketJobMissionControl
|
|
43
44
|
# Returns nil when there are no inclusion values for this attribute.
|
44
45
|
def extract_inclusion_values(klass, attribute)
|
45
46
|
values = nil
|
47
|
+
|
46
48
|
klass.validators_on(attribute).each do |validator|
|
47
49
|
case validator
|
48
50
|
when ActiveModel::Validations::InclusionValidator
|
49
51
|
values = validator.options[:in]
|
50
52
|
end
|
51
53
|
end
|
54
|
+
|
52
55
|
values
|
53
56
|
end
|
54
57
|
|
@@ -67,7 +70,7 @@ module RocketJobMissionControl
|
|
67
70
|
options = extract_inclusion_values(klass, field_name)
|
68
71
|
str = "[#{field.type.name}]\n".html_safe
|
69
72
|
if options
|
70
|
-
str + f.select(field_name, options, {include_blank: options.include?(nil) || include_nil_selectors, selected: value}, {class: 'form-control'})
|
73
|
+
str + f.select(field_name, options, { include_blank: options.include?(nil) || include_nil_selectors, selected: value }, { class: 'selectize form-control' })
|
71
74
|
else
|
72
75
|
if field.type.name == 'Integer'
|
73
76
|
str + f.number_field(field_name, value: value, class: 'form-control', placeholder: placeholder)
|
@@ -81,7 +84,7 @@ module RocketJobMissionControl
|
|
81
84
|
when 'Array'
|
82
85
|
options = Array(value)
|
83
86
|
"[Array]\n".html_safe +
|
84
|
-
f.select(field_name, options_for_select(options, options), {include_hidden: false}, {class: 'selectize', multiple: true})
|
87
|
+
f.select(field_name, options_for_select(options, options), { include_hidden: false }, { class: 'selectize form-control', multiple: true })
|
85
88
|
when 'Mongoid::Boolean'
|
86
89
|
name = "#{field_name}_true".to_sym
|
87
90
|
value = value.to_s
|
@@ -102,6 +105,5 @@ module RocketJobMissionControl
|
|
102
105
|
f.text_field(field_name, value: value, class: 'form-control', placeholder: placeholder)
|
103
106
|
end
|
104
107
|
end
|
105
|
-
|
106
108
|
end
|
107
109
|
end
|
@@ -1,15 +1,20 @@
|
|
1
1
|
module RocketJobMissionControl
|
2
2
|
module JobsHelper
|
3
3
|
def job_icon(job)
|
4
|
-
state =
|
5
|
-
if job.scheduled?
|
6
|
-
:scheduled
|
7
|
-
else
|
8
|
-
job.state
|
9
|
-
end
|
4
|
+
state = job_state(job)
|
10
5
|
state_icon(state)
|
11
6
|
end
|
12
7
|
|
8
|
+
def job_state(job)
|
9
|
+
if job.scheduled?
|
10
|
+
:scheduled
|
11
|
+
elsif job.sleeping?
|
12
|
+
:sleeping
|
13
|
+
else
|
14
|
+
job.state
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
13
18
|
def job_states
|
14
19
|
@job_states ||= RocketJob::Job.aasm.states.map { |state| state.name.to_s }
|
15
20
|
end
|
@@ -1,43 +1,45 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
2
|
<html>
|
3
|
-
<head>
|
4
|
-
|
3
|
+
<head>
|
4
|
+
<title><%= title %></title>
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
<link rel="icon" type="image/png" sizes="16x16" href="<%= image_path('rocket_job_mission_control/favicon-16x16.png') %>">
|
7
|
+
<link rel="icon" type="image/png" sizes="32x32" href="<%= image_path('rocket_job_mission_control/favicon-32x32.png') %>">
|
8
|
+
<link rel="apple-touch-icon" sizes="180x180" href="<%= image_path('rocket_job_mission_control/apple-touch-icon.png') %>">
|
9
|
+
<link rel="mask-icon" href="<%= image_path('rocket_job_mission_control/safari-pinned-tab.svg') %>" color="#5bbad5">
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
<meta content="#da532c" name="msapplication-TileColor">
|
12
|
+
<meta content="#ffffff" name="theme-color">
|
13
|
+
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'>
|
14
|
+
<meta content='text/javascript' http-equiv='Content-Script-Type'>
|
15
|
+
<meta content='IE=edge' http-equiv='X-UA-Compatible'>
|
16
|
+
<meta content='width=device-width, initial-scale=1' name='viewport'>
|
14
17
|
|
15
|
-
|
16
|
-
<%= javascript_include_tag "rocket_job_mission_control/application" %>
|
18
|
+
<%= yield :meta %>
|
17
19
|
|
18
|
-
|
20
|
+
<%= stylesheet_link_tag 'rocket_job_mission_control/application', media: 'all' %>
|
21
|
+
<%= javascript_include_tag 'rocket_job_mission_control/application' %>
|
19
22
|
|
20
|
-
|
21
|
-
</head>
|
23
|
+
<%= csrf_meta_tag %>
|
24
|
+
</head>
|
22
25
|
|
23
|
-
<body class=
|
24
|
-
<div id=
|
25
|
-
|
26
|
-
|
27
|
-
|
26
|
+
<body class='rocket_job'>
|
27
|
+
<div id='wrapper'>
|
28
|
+
<div class='container-fluid'>
|
29
|
+
<div class='row row-offcanvas row-offcanvas-left'>
|
30
|
+
<%= render partial: 'layouts/rocket_job_mission_control/partials/sidebar' %>
|
28
31
|
|
29
|
-
|
30
|
-
|
32
|
+
<div class='col-sm-10 col-xs-11 white-background' id='main'>
|
33
|
+
<%= render partial: 'layouts/rocket_job_mission_control/partials/header' %>
|
31
34
|
|
32
|
-
|
33
|
-
|
35
|
+
<div id='content'>
|
36
|
+
<%= render partial: 'layouts/rocket_job_mission_control/partials/flash' %>
|
34
37
|
|
35
|
-
|
38
|
+
<%= yield %>
|
39
|
+
</div>
|
40
|
+
</div>
|
36
41
|
</div>
|
37
42
|
</div>
|
38
43
|
</div>
|
39
|
-
</
|
40
|
-
</div>
|
41
|
-
|
42
|
-
</body>
|
44
|
+
</body>
|
43
45
|
</html>
|
@@ -1,12 +1,13 @@
|
|
1
1
|
<% if flash.present? %>
|
2
|
-
<div class=
|
2
|
+
<div class='flash text-center'>
|
3
3
|
<% flash.each do |key, msg| %>
|
4
|
-
<div class=
|
5
|
-
<button class=
|
4
|
+
<div class='alert alert-alert alert-dismissable' role='alert'>
|
5
|
+
<button class='close' data-dismiss='alert'>
|
6
6
|
<span>×</span>
|
7
7
|
</button>
|
8
|
+
|
8
9
|
<% if msg.kind_of? Array %>
|
9
|
-
<ul class=
|
10
|
+
<ul class='list-unstyled margin-bottom-0'>
|
10
11
|
<% msg.each do |m| %>
|
11
12
|
<li><%= m.html_safe %></li>
|
12
13
|
<% end %>
|
@@ -1,44 +1,48 @@
|
|
1
|
-
<nav class=
|
2
|
-
<div class=
|
3
|
-
<div class=
|
4
|
-
<button aria-expanded=
|
5
|
-
<span class=
|
6
|
-
<span class=
|
7
|
-
<span class=
|
8
|
-
<span class=
|
1
|
+
<nav class='navbar navbar-default' id='header'>
|
2
|
+
<div class='container-fluid'>
|
3
|
+
<div class='navbar-header'>
|
4
|
+
<button aria-expanded='false' class='navbar-toggle collapsed' data-target='.navbar-collapse' data-toggle='collapse' type='button'>
|
5
|
+
<span class='sr-only'>Toggle navigation</span>
|
6
|
+
<span class='icon-bar'></span>
|
7
|
+
<span class='icon-bar'></span>
|
8
|
+
<span class='icon-bar'></span>
|
9
9
|
</button>
|
10
|
-
|
10
|
+
|
11
|
+
<a class='navbar-brand brand' href='http://rocketjob.io' target='_blank'>
|
11
12
|
<%= image_tag('rocket_job_mission_control/rocket-icon-64x64.png') %>
|
12
13
|
Rocket Job
|
13
14
|
</a>
|
14
15
|
</div>
|
15
|
-
|
16
|
-
|
16
|
+
|
17
|
+
<div class='navbar-collapse collapse'>
|
18
|
+
<ul class='nav navbar-nav'>
|
17
19
|
<li>
|
18
20
|
<%= link_to running_jobs_path, class: active_page(running_jobs_path) do %>
|
19
|
-
<i class=
|
21
|
+
<i class='fas fa-home'></i> Jobs
|
20
22
|
<% end %>
|
21
23
|
</li>
|
24
|
+
|
22
25
|
<li>
|
23
26
|
<%= link_to servers_path, class: active_page(servers_path) do %>
|
24
|
-
<i class=
|
27
|
+
<i class='fas fa-database'></i> Servers
|
25
28
|
<% end %>
|
26
29
|
</li>
|
30
|
+
|
27
31
|
<li>
|
28
32
|
<%= link_to active_workers_path, class: active_page(active_workers_path) do %>
|
29
|
-
<i class=
|
33
|
+
<i class='fas fa-circle-notch'></i> Workers
|
30
34
|
<% end %>
|
31
35
|
</li>
|
36
|
+
|
32
37
|
<li>
|
33
38
|
<%= link_to enabled_dirmon_entries_path, class: active_page(enabled_dirmon_entries_path) do %>
|
34
|
-
<i class=
|
39
|
+
<i class='fas fa-folder'></i> Directory Monitoring
|
35
40
|
<% end %>
|
36
41
|
</li>
|
37
42
|
</ul>
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
</li>
|
43
|
+
|
44
|
+
<ul class='nav navbar-nav navbar-right'>
|
45
|
+
<li><a href='/'><i class='fas fa-home'></i> Home</a></li>
|
42
46
|
</ul>
|
43
47
|
</div>
|
44
48
|
</div>
|
@@ -1,11 +1,12 @@
|
|
1
|
-
<div class=
|
2
|
-
<ul class=
|
1
|
+
<div class='col-sm-2 col-xs-1 sidebar-offcanvas' id='sidebar'>
|
2
|
+
<ul class='nav'>
|
3
3
|
<li>
|
4
|
-
<a class=
|
5
|
-
<i class=
|
4
|
+
<a class='visible-xs' data-toggle='offcanvas' href='#'>
|
5
|
+
<i class='fas fa-chevron-right'></i>
|
6
6
|
</a>
|
7
7
|
</li>
|
8
8
|
</ul>
|
9
|
+
|
9
10
|
<%= render partial: 'rocket_job_mission_control/jobs/sidebar' if @jobs_sidebar %>
|
10
11
|
<%= render partial: 'rocket_job_mission_control/dirmon_entries/sidebar' if @dirmon_sidebar %>
|
11
12
|
<%= render partial: 'rocket_job_mission_control/servers/sidebar' if @servers_sidebar %>
|
@@ -1,21 +1,25 @@
|
|
1
|
-
<div class=
|
2
|
-
<div class=
|
3
|
-
<div class=
|
4
|
-
<div class=
|
1
|
+
<div class='job-list'>
|
2
|
+
<div class='list'>
|
3
|
+
<div class='row'>
|
4
|
+
<div class='col-sm-10'>
|
5
5
|
<h2>Active Workers</h2>
|
6
|
+
|
6
7
|
<% if @server_name %>
|
7
8
|
<h4><%= " For Server: #{@server_name}" %></h4>
|
8
9
|
<% end %>
|
10
|
+
|
9
11
|
<% if @job %>
|
10
12
|
<h4> For Job: <%= link_to(@job.class.name, job_path(@job)) %> ID:<%= link_to(@job.id, job_path(@job)) %></h4>
|
11
13
|
<% end %>
|
12
14
|
</div>
|
13
|
-
|
14
|
-
|
15
|
-
|
15
|
+
|
16
|
+
<div class='col-sm-2'>
|
17
|
+
<div class='btn btn-default pull-right dt-reload' data-behavior='reload'>
|
18
|
+
<i class='fas fa-sync'></i>
|
16
19
|
</div>
|
17
20
|
</div>
|
18
21
|
</div>
|
22
|
+
|
19
23
|
<table class='table datatable active-workers-datatable' data-source='<%= active_workers_url(format: 'json') %>' style='width: 100%'>
|
20
24
|
<thead>
|
21
25
|
<tr>
|
@@ -25,6 +29,7 @@
|
|
25
29
|
<th>Started</th>
|
26
30
|
</tr>
|
27
31
|
</thead>
|
32
|
+
|
28
33
|
<tbody></tbody>
|
29
34
|
</table>
|
30
35
|
</div>
|
@@ -35,6 +40,6 @@
|
|
35
40
|
new RjmcDatatable(
|
36
41
|
$('.active-workers-datatable'),
|
37
42
|
[{data: '0'}, {data: '1'}, {data: '2'}, {data: '3'}],
|
38
|
-
{ordering: false, searching: false});
|
43
|
+
{ ordering: false, searching: false });
|
39
44
|
});
|
40
45
|
</script>
|