naf 2.0.4 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. data/README.rdoc +28 -4
  2. data/RELEASE_NOTES.rdoc +8 -0
  3. data/app/assets/javascripts/dataTablesTemplates/application_schedules.js +72 -0
  4. data/app/assets/javascripts/dataTablesTemplates/applications.js +12 -21
  5. data/app/controllers/naf/application_schedule_affinity_tabs_controller.rb +5 -8
  6. data/app/controllers/naf/application_schedules_controller.rb +98 -0
  7. data/app/controllers/naf/applications_controller.rb +6 -98
  8. data/app/controllers/naf/historical_jobs_controller.rb +18 -8
  9. data/app/helpers/naf/application_helper.rb +47 -22
  10. data/app/models/logical/naf/application.rb +9 -126
  11. data/app/models/logical/naf/application_schedule.rb +186 -0
  12. data/app/models/logical/naf/construction_zone/boss.rb +4 -5
  13. data/app/models/logical/naf/construction_zone/foreman.rb +34 -13
  14. data/app/models/logical/naf/construction_zone/proletariat.rb +1 -0
  15. data/app/models/logical/naf/construction_zone/work_order.rb +11 -4
  16. data/app/models/logical/naf/job_fetcher.rb +1 -0
  17. data/app/models/naf/application.rb +5 -16
  18. data/app/models/naf/application_schedule.rb +117 -43
  19. data/app/models/naf/historical_job.rb +6 -3
  20. data/app/models/naf/queued_job.rb +3 -0
  21. data/app/models/naf/run_interval_style.rb +20 -0
  22. data/app/models/naf/running_job.rb +3 -0
  23. data/app/models/process/naf/data_migration/backfill_application_schedule_run_interval.rb +85 -0
  24. data/app/models/process/naf/log_archiver.rb +1 -1
  25. data/app/models/process/naf/log_reader.rb +141 -0
  26. data/app/models/process/naf/runner.rb +6 -49
  27. data/app/views/naf/application_schedule_affinity_tabs/_form.html.erb +1 -1
  28. data/app/views/naf/{applications → application_schedules}/_application_schedule_prerequisites.html.erb +1 -1
  29. data/app/views/naf/application_schedules/_form.html.erb +120 -0
  30. data/app/views/naf/application_schedules/edit.html.erb +11 -0
  31. data/app/views/naf/application_schedules/index.html.erb +47 -0
  32. data/app/views/naf/application_schedules/index.json.erb +8 -0
  33. data/app/views/naf/application_schedules/new.html.erb +11 -0
  34. data/app/views/naf/application_schedules/show.html.erb +130 -0
  35. data/app/views/naf/applications/_form.html.erb +44 -106
  36. data/app/views/naf/applications/_search_container.html.erb +29 -29
  37. data/app/views/naf/applications/index.html.erb +1 -10
  38. data/app/views/naf/applications/index.json.erb +22 -6
  39. data/app/views/naf/applications/show.html.erb +47 -97
  40. data/app/views/naf/logger_styles/_form.html.erb +0 -3
  41. data/app/views/naf/machines/_form.html.erb +3 -4
  42. data/config/routes.rb +3 -4
  43. data/db/migrate/20131219195439_add_run_interval_styles_table.rb +49 -0
  44. data/db/migrate/20140113183243_drop_run_start_minute_from_application_schedules.rb +18 -0
  45. data/lib/naf/version.rb +1 -1
  46. data/naf.gemspec +1 -1
  47. data/spec/controllers/naf/application_schedule_affinity_tabs_controller_spec.rb +34 -27
  48. data/spec/controllers/naf/applications_controller_spec.rb +0 -48
  49. data/spec/factories/naf.rb +14 -8
  50. data/spec/models/logical/naf/application_spec.rb +9 -37
  51. data/spec/models/logical/naf/machine_spec.rb +1 -1
  52. data/spec/models/naf/application_schedule_spec.rb +38 -50
  53. data/spec/models/naf/application_spec.rb +3 -3
  54. data/spec/models/naf/historical_job_spec.rb +4 -2
  55. data/spec/models/naf/queued_job_spec.rb +2 -0
  56. data/spec/models/naf/run_interval_style_spec.rb +28 -0
  57. data/spec/models/naf/running_job_spec.rb +2 -0
  58. metadata +19 -7
  59. data/app/models/logical/naf/job_creator.rb +0 -151
  60. data/app/views/naf/applications/_application_schedule.html.erb +0 -80
  61. data/spec/models/logical/naf/job_creator_spec.rb +0 -102
@@ -0,0 +1,11 @@
1
+ <% content_for :body do %>
2
+ <div id='record'>
3
+ <%= link_to 'Back', @application_schedule %>
4
+
5
+ <h3 id='record_name'>Editing an Application Schedule</h3>
6
+
7
+ <%= render 'form' %>
8
+ </div>
9
+ <% end %>
10
+
11
+ <%= render partial: 'naf/shared/application' %>
@@ -0,0 +1,47 @@
1
+ <% content_for :body do %>
2
+ <div id='page-label'>
3
+ <h3 id="record_name">Application Schedules</h3>
4
+ </div>
5
+ <%= render partial: 'naf/shared/select_per_page' %>
6
+ </br></br>
7
+
8
+ <div id="flash_message">
9
+ <% unless notice.blank? %>
10
+ <script type='text/javascript'>
11
+ jQuery("<p id='notice'><%= notice %></p>")
12
+ .appendTo('#flash_message')
13
+ .slideDown().delay(5000).slideUp();
14
+ </script>
15
+ <% end %>
16
+ </div>
17
+
18
+ <table id='datatable'>
19
+ <thead>
20
+ <tr>
21
+ <th>Id</th>
22
+ <th>Application</th>
23
+ <th>Run Group Name</th>
24
+ <th>Run Group Restriction</th>
25
+ <th>Run Interval Style</th>
26
+ <th>Run Interval</th>
27
+ <th>Run Group Quantum</th>
28
+ <th>Run Group Limit</th>
29
+ <th>Enqueue</th>
30
+ <th>Affinities</th>
31
+ <th>Prerequisites</th>
32
+ </tr>
33
+ </thead>
34
+ <tbody>
35
+ <tr></tr>
36
+ </tbody>
37
+ </table>
38
+
39
+ <% content_for :javascripts do %>
40
+ <%= javascript_include_tag("dataTablesTemplates/application_schedules.js") %>
41
+ <script type='text/javascript'>
42
+ var sAjaxSource = "<%= naf.application_schedules_path(:json) %>";
43
+ </script>
44
+ <% end %>
45
+ <% end %>
46
+
47
+ <%= render partial: 'naf/shared/application' %>
@@ -0,0 +1,8 @@
1
+ <%
2
+ rows = @application_schedules.each do |schedule|
3
+ app = Naf::ApplicationSchedule.find(schedule.first)
4
+ schedule[0] = link_to schedule[0], naf.application_schedule_path(schedule[0])
5
+ schedule[1] = link_to schedule[1].title, naf.application_path(schedule[1])
6
+ end
7
+ %>
8
+ <%= raw rows %>
@@ -0,0 +1,11 @@
1
+ <% content_for :body do %>
2
+ <div id='record'>
3
+ <%= link_to 'Back', { controller: 'application_schedules', action: 'index' } %>
4
+
5
+ <h3 id='record_name'>Create a new Application Schedule</h3>
6
+
7
+ <%= render 'form' %>
8
+ </div>
9
+ <% end %>
10
+
11
+ <%= render partial: 'naf/shared/application' %>
@@ -0,0 +1,130 @@
1
+ <% content_for :body do %>
2
+ <div id="flash_message">
3
+ <% unless notice.blank? %>
4
+ <script type='text/javascript'>
5
+ jQuery("<p id='notice'><%= notice %></p>")
6
+ .appendTo('#flash_message')
7
+ .slideDown().delay(5000).slideUp();
8
+ </script>
9
+ <% end %>
10
+ </div>
11
+
12
+ <div id="record">
13
+ <h2>Application</h2>
14
+ <%= link_to 'Back to Application Schedules', application_schedules_path %>
15
+ &nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
16
+ <%= link_to 'Edit', controller: 'application_schedules',
17
+ action: 'edit',
18
+ id: @application_schedule.id,
19
+ application_id: @application_schedule.application.id %>
20
+ &nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
21
+ <%= link_to "Add Affinity", new_application_schedule_application_schedule_affinity_tab_path(@application_schedule.id) %>
22
+ </br>
23
+ </br>
24
+
25
+ <table id="naf_table_show">
26
+ <thead>
27
+ <tr>
28
+ <th>Attribute</th>
29
+ <th>Value</th>
30
+ </tr>
31
+ </thead>
32
+ <tbody>
33
+ <tr>
34
+ <td>ID</td>
35
+ <td><%= @application_schedule.id %></td>
36
+ </tr>
37
+ <tr>
38
+ <td>Created At</td>
39
+ <td><%= @application_schedule.created_at %></td>
40
+ </tr>
41
+ <tr>
42
+ <td>Updated At</td>
43
+ <td><%= @application_schedule.updated_at %></td>
44
+ </tr>
45
+ <tr>
46
+ <td>Application</td>
47
+ <td style="white-space: pre-wrap;"><%= @application_schedule.application.title %></td>
48
+ </tr>
49
+ <tr>
50
+ <td>Title</td>
51
+ <td><%= @application_schedule.title %></td>
52
+ </tr>
53
+ <tr>
54
+ <td>Application Run Group Name</td>
55
+ <td style="white-space: pre-wrap;"><%= @application_schedule.application_run_group_name %></td>
56
+ </tr>
57
+ <tr>
58
+ <td>Application Run Group Limit</td>
59
+ <td><%= @application_schedule.application_run_group_limit %></td>
60
+ </tr>
61
+ <tr>
62
+ <td>Application Run Group Quantum</td>
63
+ <td><%= @application_schedule.application_run_group_quantum %></td>
64
+ </tr>
65
+ <tr>
66
+ <td>Application Run Group Restriction Name</td>
67
+ <td><%= @application_schedule.application_run_group_restriction_name %></td>
68
+ </tr>
69
+ <tr>
70
+ <td>Run Interval</td>
71
+ <td><%= @application_schedule.run_interval %></td>
72
+ </tr>
73
+ <tr>
74
+ <td>Run Interval Style</td>
75
+ <td><%= @application_schedule.run_interval_style %></td>
76
+ </tr>
77
+ <tr>
78
+ <td>Priority</td>
79
+ <td><%= @application_schedule.priority %></td>
80
+ </tr>
81
+ <tr>
82
+ <td>Visible</td>
83
+ <td><%= @application_schedule.visible %></td>
84
+ </tr>
85
+ <tr>
86
+ <td>Enabled</td>
87
+ <td><%= @application_schedule.enabled %></td>
88
+ </tr>
89
+ <tr>
90
+ <td>Enqueue Backlogs</td>
91
+ <td><%= @application_schedule.enqueue_backlogs %></td>
92
+ </tr>
93
+ <tr>
94
+ <td><%= link_to "Application Schedule Affinity Tabs",
95
+ application_schedule_application_schedule_affinity_tabs_path(@application_schedule.id) %>
96
+ </td>
97
+ <td><%= @application_schedule.affinities %></td>
98
+ </tr>
99
+ </tbody>
100
+ </table>
101
+ </br>
102
+
103
+ <%= link_to "Destroy", @application_schedule.schedule,
104
+ { confirm: "Are you sure you want to destroy this Application Schedule?",
105
+ method: :delete,
106
+ class: 'destroy' } %>
107
+
108
+ <h2>Prerequisites</h2>
109
+ <table id="naf_table_show">
110
+ <thead>
111
+ <tr>
112
+ <th width="10%">ID</th>
113
+ <th>Command</th>
114
+ </tr>
115
+ </thead>
116
+ <tbody>
117
+ <% @application_schedule.application_schedule_prerequisites.each do |prereq| -%>
118
+ <tr>
119
+ <td><%= link_to prereq.prerequisite_application_schedule.id, application_path(prereq.prerequisite_application_schedule.application) %></td>
120
+ <td style="white-space: pre-wrap;"><%= prereq.prerequisite_application_schedule.application.command %></td>
121
+ </tr>
122
+ <% end -%>
123
+ </tbody>
124
+ </table>
125
+ </br>
126
+
127
+ </div>
128
+ <% end %>
129
+
130
+ <%= render partial: 'naf/shared/application' %>
@@ -1,109 +1,47 @@
1
1
  <%= form_for @application do |f| %>
2
-
3
- <% if @application.errors.any? %>
4
- <div id="errorExplanation">
5
- <h2><%= pluralize(@application.errors.count, "error") %> prohibited this application from being saved:</h2>
6
- </div>
7
- <% end %>
8
-
9
- <div class="field">
10
- <%= f.label :title, "Title*" %>
11
- <%= f.text_field :title %>
12
- </div>
13
-
14
- <div class="field">
15
- <%= f.label :short_name %>
16
- <%= f.text_field :short_name %>
17
- </div>
18
-
19
- <div class="field">
20
- <%= f.label :command, "Command*" %>
21
- <%= f.text_area :command, rows: 4, cols: 60 %>
22
- </div>
23
-
24
- <div class="field">
25
- <%= f.label :application_type_id, "Application type*" %>
26
- <%= f.select(:application_type_id,
27
- ::Naf::ApplicationType.all.map { |a| [a.script_type_name, a.id] },
28
- { include_blank: true }) %>
29
- </div>
30
-
31
- <div class="field">
32
- <%= f.label :log_level %>
33
- <%= f.text_field :log_level %>
34
- </div>
2
+ <% if @application.errors.any? %>
3
+ <div id="errorExplanation">
4
+ <h2><%= pluralize(@application.errors.count, "error") %> prohibited this application from being saved:</h2>
5
+ </div>
6
+ <% end %>
7
+
8
+ <div class="field">
9
+ <%= f.label :title, "Title*" %>
10
+ <%= f.text_field :title %>
11
+ </div>
12
+
13
+ <div class="field">
14
+ <%= f.label :short_name %>
15
+ <%= f.text_field :short_name %>
16
+ </div>
17
+
18
+ <div class="field">
19
+ <%= f.label :command, "Command*" %>
20
+ <%= f.text_area :command, rows: 4, cols: 60 %>
21
+ </div>
22
+
23
+ <div class="field">
24
+ <%= f.label :application_type_id, "Application type*" %>
25
+ <%= f.select(:application_type_id,
26
+ ::Naf::ApplicationType.all.map { |a| [a.script_type_name, a.id] },
27
+ { include_blank: true }) %>
28
+ </div>
29
+
30
+ <div class="field">
31
+ <%= f.label :log_level %>
32
+ <%= f.text_field :log_level %>
33
+ </div>
34
+ <br/>
35
+
36
+ <div class="field">
37
+ <%= f.label :deleted %>
38
+ <%= f.check_box :deleted %>
39
+ <br/><br/>
40
+ </div>
41
+ <br/>
42
+
43
+ <div class="actions">
35
44
  <br/>
36
-
37
- <div class="field">
38
- <%= f.label :deleted %>
39
- <%= f.check_box :deleted %>
40
- <br/><br/>
41
- </div>
42
- <br/>
43
-
44
- <div id="application_schedule">
45
- <%= f.fields_for :application_schedule do |builder| %>
46
- <%= render "application_schedule", :f => builder %>
47
- <% end %>
48
- </div>
49
- <%= link_to "Add Application Schedule", "#" , :id => "add_application_schedule"%>
50
-
51
- <div class="actions">
52
- <br/>
53
- <%= f.submit %>
54
- </div>
55
- <% end %>
56
-
57
- <% content_for :javascripts do %>
58
- <script type='text/javascript'>
59
- jQuery(document).ready(function() {
60
-
61
- <% if @show_app_schedule %>
62
- addSchedule();
63
- <% else %>
64
- removeSchedule();
65
- <% end %>
66
-
67
- var run_group = jQuery("#application_application_schedule_attributes_application_run_group_name");
68
-
69
- if(jQuery("#run_group_name_type").val() != 'custom') {
70
- run_group.hide();
71
- run_group.val(null);
72
- }
73
-
74
- jQuery("#run_group_name_type").change(function () {
75
- var type = jQuery("#run_group_name_type").val();
76
- if(type == 'command') {
77
- run_group.hide();
78
- run_group.val(null);
79
- } else if(type == 'not set') {
80
- run_group.hide();
81
- run_group.val(null);
82
- } else {
83
- run_group.slideToggle("slow");
84
- }
85
- });
86
-
87
- jQuery("#add_application_schedule").click(function() {
88
- addSchedule();
89
- });
90
-
91
- jQuery("#remove_application_schedule").click(function() {
92
- removeSchedule();
93
- });
94
-
95
- });
96
-
97
- function addSchedule(){
98
- jQuery("#application_schedule").css("display", "block");
99
- jQuery("#application_application_schedule_attributes__destroy").val("0");
100
- jQuery("#add_application_schedule").hide();
101
- }
102
-
103
- function removeSchedule(){
104
- jQuery("#application_schedule").hide();
105
- jQuery("#application_application_schedule_attributes__destroy").val("1");
106
- jQuery("#add_application_schedule").css("display", "block");
107
- }
108
- </script>
45
+ <%= f.submit %>
46
+ </div>
109
47
  <% end %>
@@ -19,40 +19,40 @@
19
19
  </div>
20
20
  <div id="search_container">
21
21
  <%= form_tag(naf.applications_path, method: "get", id: 'application_search', class: 'search_select_input') do %>
22
- <div style="width:30%;" class="display-inline-block">
23
- <div class="field">
24
- <%= label(:title, "Title:") %>
25
- <%= text_field(:search, :title, { class: 'datatable_variable' }) %>
26
- </div>
27
- <br/>
22
+ <div style="width:30%;" class="display-inline-block">
23
+ <div class="field">
24
+ <%= label(:title, "Title:") %>
25
+ <%= text_field(:search, :title, { class: 'datatable_variable' }) %>
26
+ </div>
27
+ <br/>
28
28
 
29
- <div class="field">
30
- <%= label(:application_run_group_name, "Run Group:") %>
31
- <%= text_field(:search, :application_run_group_name, { class: 'datatable_variable' }) %>
32
- </div>
33
- <br/>
29
+ <div class="field">
30
+ <%= label(:application_run_group_name, "Run Group:") %>
31
+ <%= text_field(:search, :application_run_group_name, { class: 'datatable_variable' }) %>
32
+ </div>
33
+ <br/>
34
+ </div>
35
+ <div style="width:30%; padding-left:40px;" class="display-inline-block">
36
+ <div class="field">
37
+ <%= label(:command, "Command:") %>
38
+ <%= text_field(:search, :command, { class: 'datatable_variable' }) %>
34
39
  </div>
35
- <div style="width:30%; padding-left:40px;" class="display-inline-block">
36
- <div class="field">
37
- <%= label(:command, "Command:") %>
38
- <%= text_field(:search, :command, { class: 'datatable_variable' }) %>
39
- </div>
40
- <br/>
40
+ <br/>
41
41
 
42
- <div class="field">
43
- <%= label(:short_name, "Short name:") %>
44
- <%= text_field(:search, :short_name, { class: 'datatable_variable' }) %>
45
- </div>
46
- <br/>
42
+ <div class="field">
43
+ <%= label(:short_name, "Short name:") %>
44
+ <%= text_field(:search, :short_name, { class: 'datatable_variable' }) %>
47
45
  </div>
48
- <div style="width:30%; padding-left:40px;" class="display-inline-block">
49
- <div class="field">
50
- <%= label(:enabled, "App schedules enabled:") %>
51
- <%= select(:search, :enabled, [["Ignore", nil], ["True", true], ["False", false]], {}, { class: 'datatable_variable' }) %>
52
- </div>
46
+ <br/>
47
+ </div>
48
+ <div style="width:30%; padding-left:40px;" class="display-inline-block">
49
+ <div class="field">
50
+ <%= label(:enabled, "App schedules enabled:") %>
51
+ <%= select(:search, :enabled, [["Ignore", nil], ["True", true], ["False", false]], {}, { class: 'datatable_variable' }) %>
53
52
  </div>
54
- <br/><br/><br/>
55
- <%= submit_tag("Search") %>
53
+ </div>
54
+ <br/><br/><br/>
55
+ <%= submit_tag("Search") %>
56
56
  <% end %>
57
57
  </div>
58
58
 
@@ -20,18 +20,9 @@
20
20
  <th>Title</th>
21
21
  <th>Short Name</th>
22
22
  <th>Type</th>
23
- <th>Run Group Name</th>
24
- <th>Restriction</th>
25
- <th>Run Group Limit</th>
26
- <th>Enabled</th>
27
- <th>Enqueue</th>
28
- <th>Run Time</th>
23
+ <th>Application Schedules</th>
29
24
  <th>Last Queued At</th>
30
- <th>Affinities</th>
31
- <th>Prerequisites</th>
32
25
  <th>Actions</th>
33
- <th></th>
34
- <th></th>
35
26
  </tr>
36
27
  </thead>
37
28
  <tbody>