naf 1.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 (295) hide show
  1. data/.gitignore +16 -0
  2. data/.rspec +1 -0
  3. data/.travis.yml +17 -0
  4. data/Gemfile +17 -0
  5. data/LICENSE +2 -0
  6. data/README.rdoc +22 -0
  7. data/RELEASE_NOTES.rdoc +18 -0
  8. data/Rakefile +43 -0
  9. data/app/assets/images/bg-grad.png +0 -0
  10. data/app/assets/images/clock.png +0 -0
  11. data/app/assets/images/control_play_blue.png +0 -0
  12. data/app/assets/images/down_arrow.gif +0 -0
  13. data/app/assets/images/papertrail_job.png +0 -0
  14. data/app/assets/images/papertrail_machine.png +0 -0
  15. data/app/assets/images/papertrail_machine_runner.png +0 -0
  16. data/app/assets/images/terminate.png +0 -0
  17. data/app/assets/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  18. data/app/assets/images/ui-bg_flat_0_ffffff_40x100.png +0 -0
  19. data/app/assets/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  20. data/app/assets/images/ui-bg_glass_0_f4f4f4_1x400.png +0 -0
  21. data/app/assets/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  22. data/app/assets/images/ui-bg_glass_65_f4f4f4_1x400.png +0 -0
  23. data/app/assets/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  24. data/app/assets/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  25. data/app/assets/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  26. data/app/assets/images/ui-bg_glass_75_f4f4f4_1x400.png +0 -0
  27. data/app/assets/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  28. data/app/assets/images/ui-bg_highlight-soft_0_f4f4f4_1x100.png +0 -0
  29. data/app/assets/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  30. data/app/assets/images/ui-icons_222222_256x240.png +0 -0
  31. data/app/assets/images/ui-icons_2e83ff_256x240.png +0 -0
  32. data/app/assets/images/ui-icons_454545_256x240.png +0 -0
  33. data/app/assets/images/ui-icons_888888_256x240.png +0 -0
  34. data/app/assets/images/ui-icons_cd0a0a_256x240.png +0 -0
  35. data/app/assets/images/up_arrow.gif +0 -0
  36. data/app/assets/javascripts/dataTablesTemplates/applications.js +94 -0
  37. data/app/assets/javascripts/dataTablesTemplates/jobs.js +163 -0
  38. data/app/assets/javascripts/dataTablesTemplates/machine_runner_invocations.js +60 -0
  39. data/app/assets/javascripts/dataTablesTemplates/machine_runners.js +82 -0
  40. data/app/assets/javascripts/dataTablesTemplates/machines.js +93 -0
  41. data/app/assets/javascripts/date.js +104 -0
  42. data/app/assets/javascripts/iso8601.js +41 -0
  43. data/app/assets/javascripts/jquery.dataTables.custom.js +62 -0
  44. data/app/assets/javascripts/jquery.dataTables.js +6862 -0
  45. data/app/assets/javascripts/naf.js +30 -0
  46. data/app/assets/javascripts/underscore.js +713 -0
  47. data/app/assets/stylesheets/jquery_ui/jquery-ui-1.8.5.custom.css.erb +572 -0
  48. data/app/assets/stylesheets/min_naf.css +14 -0
  49. data/app/assets/stylesheets/min_naf/layout.css.scss +355 -0
  50. data/app/assets/stylesheets/naf.css +14 -0
  51. data/app/assets/stylesheets/naf/layout.css.scss +497 -0
  52. data/app/controllers/naf/affinities_controller.rb +61 -0
  53. data/app/controllers/naf/application_controller.rb +43 -0
  54. data/app/controllers/naf/application_schedule_affinity_tabs_controller.rb +75 -0
  55. data/app/controllers/naf/applications_controller.rb +153 -0
  56. data/app/controllers/naf/historical_job_affinity_tabs_controller.rb +65 -0
  57. data/app/controllers/naf/historical_jobs_controller.rb +159 -0
  58. data/app/controllers/naf/janitorial_assignments_controller.rb +77 -0
  59. data/app/controllers/naf/logger_names_controller.rb +58 -0
  60. data/app/controllers/naf/logger_styles_controller.rb +59 -0
  61. data/app/controllers/naf/machine_affinity_slots_controller.rb +69 -0
  62. data/app/controllers/naf/machine_runner_invocations_controller.rb +59 -0
  63. data/app/controllers/naf/machine_runners_controller.rb +26 -0
  64. data/app/controllers/naf/machines_controller.rb +95 -0
  65. data/app/helpers/naf/application_helper.rb +275 -0
  66. data/app/models/log4r/papertrail_outputter.rb +19 -0
  67. data/app/models/logical/naf/application.rb +183 -0
  68. data/app/models/logical/naf/construction_zone/ad_hoc_work_order.rb +22 -0
  69. data/app/models/logical/naf/construction_zone/application_schedule_work_order.rb +15 -0
  70. data/app/models/logical/naf/construction_zone/application_work_order.rb +25 -0
  71. data/app/models/logical/naf/construction_zone/boss.rb +123 -0
  72. data/app/models/logical/naf/construction_zone/foreman.rb +53 -0
  73. data/app/models/logical/naf/construction_zone/proletariat.rb +40 -0
  74. data/app/models/logical/naf/construction_zone/work_order.rb +100 -0
  75. data/app/models/logical/naf/create_infrastructure.rb +48 -0
  76. data/app/models/logical/naf/job.rb +357 -0
  77. data/app/models/logical/naf/job_creator.rb +155 -0
  78. data/app/models/logical/naf/job_fetcher.rb +167 -0
  79. data/app/models/logical/naf/job_statuses/errored.rb +27 -0
  80. data/app/models/logical/naf/job_statuses/finished.rb +26 -0
  81. data/app/models/logical/naf/job_statuses/finished_less_minute.rb +25 -0
  82. data/app/models/logical/naf/job_statuses/queued.rb +32 -0
  83. data/app/models/logical/naf/job_statuses/running.rb +34 -0
  84. data/app/models/logical/naf/job_statuses/terminated.rb +25 -0
  85. data/app/models/logical/naf/job_statuses/waiting.rb +43 -0
  86. data/app/models/logical/naf/machine.rb +85 -0
  87. data/app/models/logical/naf/machine_runner.rb +46 -0
  88. data/app/models/logical/naf/machine_runner_invocation.rb +50 -0
  89. data/app/models/logical/naf/pickler.rb +74 -0
  90. data/app/models/logical/naf/unpickler.rb +98 -0
  91. data/app/models/naf/affinity.rb +145 -0
  92. data/app/models/naf/affinity_classification.rb +44 -0
  93. data/app/models/naf/application.rb +100 -0
  94. data/app/models/naf/application_run_group_restriction.rb +39 -0
  95. data/app/models/naf/application_schedule.rb +181 -0
  96. data/app/models/naf/application_schedule_affinity_tab.rb +86 -0
  97. data/app/models/naf/application_schedule_prerequisite.rb +50 -0
  98. data/app/models/naf/application_type.rb +72 -0
  99. data/app/models/naf/by_historical_job_id.rb +86 -0
  100. data/app/models/naf/historical_job.rb +334 -0
  101. data/app/models/naf/historical_job_affinity_tab.rb +61 -0
  102. data/app/models/naf/historical_job_prerequisite.rb +19 -0
  103. data/app/models/naf/janitorial_archive_assignment.rb +36 -0
  104. data/app/models/naf/janitorial_assignment.rb +37 -0
  105. data/app/models/naf/janitorial_create_assignment.rb +36 -0
  106. data/app/models/naf/janitorial_drop_assignment.rb +36 -0
  107. data/app/models/naf/logger_level.rb +21 -0
  108. data/app/models/naf/logger_name.rb +23 -0
  109. data/app/models/naf/logger_style.rb +58 -0
  110. data/app/models/naf/logger_style_name.rb +28 -0
  111. data/app/models/naf/machine.rb +257 -0
  112. data/app/models/naf/machine_affinity_slot.rb +78 -0
  113. data/app/models/naf/machine_runner.rb +51 -0
  114. data/app/models/naf/machine_runner_invocation.rb +71 -0
  115. data/app/models/naf/naf_base.rb +9 -0
  116. data/app/models/naf/queued_job.rb +164 -0
  117. data/app/models/naf/running_job.rb +80 -0
  118. data/app/models/process/naf/application.rb +164 -0
  119. data/app/models/process/naf/janitor.rb +117 -0
  120. data/app/models/process/naf/machine_manager.rb +150 -0
  121. data/app/models/process/naf/machine_upgrader.rb +112 -0
  122. data/app/models/process/naf/runner.rb +539 -0
  123. data/app/views/naf/affinities/_form.html.erb +50 -0
  124. data/app/views/naf/affinities/edit.html.erb +11 -0
  125. data/app/views/naf/affinities/index.html.erb +57 -0
  126. data/app/views/naf/affinities/new.html.erb +15 -0
  127. data/app/views/naf/affinities/show.html.erb +48 -0
  128. data/app/views/naf/application_schedule_affinity_tabs/_form.html.erb +31 -0
  129. data/app/views/naf/application_schedule_affinity_tabs/edit.html.erb +12 -0
  130. data/app/views/naf/application_schedule_affinity_tabs/new.html.erb +11 -0
  131. data/app/views/naf/applications/_application_schedule.html.erb +80 -0
  132. data/app/views/naf/applications/_application_schedule_prerequisites.html.erb +14 -0
  133. data/app/views/naf/applications/_form.html.erb +109 -0
  134. data/app/views/naf/applications/_search_container.html.erb +94 -0
  135. data/app/views/naf/applications/_show.html.erb +34 -0
  136. data/app/views/naf/applications/edit.html.erb +11 -0
  137. data/app/views/naf/applications/index.html.erb +51 -0
  138. data/app/views/naf/applications/index.json.erb +11 -0
  139. data/app/views/naf/applications/new.html.erb +11 -0
  140. data/app/views/naf/applications/show.html.erb +203 -0
  141. data/app/views/naf/datatable.html.erb +49 -0
  142. data/app/views/naf/historical_job_affinity_tabs/_form.html.erb +36 -0
  143. data/app/views/naf/historical_job_affinity_tabs/edit.html.erb +11 -0
  144. data/app/views/naf/historical_job_affinity_tabs/new.html.erb +11 -0
  145. data/app/views/naf/historical_jobs/_form.html.erb +94 -0
  146. data/app/views/naf/historical_jobs/_runners.html.erb +22 -0
  147. data/app/views/naf/historical_jobs/_search_container.html.erb +140 -0
  148. data/app/views/naf/historical_jobs/edit.html.erb +11 -0
  149. data/app/views/naf/historical_jobs/index.html.erb +48 -0
  150. data/app/views/naf/historical_jobs/index.json.erb +26 -0
  151. data/app/views/naf/historical_jobs/new.html.erb +61 -0
  152. data/app/views/naf/historical_jobs/show.html.erb +201 -0
  153. data/app/views/naf/janitorial_assignments/_form.html.erb +38 -0
  154. data/app/views/naf/janitorial_assignments/_rows.html.erb +17 -0
  155. data/app/views/naf/janitorial_assignments/edit.html.erb +11 -0
  156. data/app/views/naf/janitorial_assignments/index.html.erb +56 -0
  157. data/app/views/naf/janitorial_assignments/index.js.erb +1 -0
  158. data/app/views/naf/janitorial_assignments/new.html.erb +11 -0
  159. data/app/views/naf/layouts/jquery_datatables.json.erb +6 -0
  160. data/app/views/naf/logger_names/_form.html.erb +18 -0
  161. data/app/views/naf/logger_names/edit.html.erb +11 -0
  162. data/app/views/naf/logger_names/new.html.erb +11 -0
  163. data/app/views/naf/logger_names/show.html.erb +44 -0
  164. data/app/views/naf/logger_styles/_form.html.erb +30 -0
  165. data/app/views/naf/logger_styles/_logger_style_names.html.erb +19 -0
  166. data/app/views/naf/logger_styles/edit.html.erb +11 -0
  167. data/app/views/naf/logger_styles/new.html.erb +11 -0
  168. data/app/views/naf/logger_styles/show.html.erb +48 -0
  169. data/app/views/naf/machine_affinity_slots/_form.html.erb +36 -0
  170. data/app/views/naf/machine_affinity_slots/edit.html.erb +11 -0
  171. data/app/views/naf/machine_affinity_slots/new.html.erb +11 -0
  172. data/app/views/naf/machine_runner_invocations/_filter.html.erb +21 -0
  173. data/app/views/naf/machine_runner_invocations/index.html.erb +36 -0
  174. data/app/views/naf/machine_runner_invocations/index.json.erb +16 -0
  175. data/app/views/naf/machine_runner_invocations/show.html.erb +91 -0
  176. data/app/views/naf/machine_runners/index.html.erb +82 -0
  177. data/app/views/naf/machine_runners/index.json.erb +16 -0
  178. data/app/views/naf/machine_runners/show.html.erb +113 -0
  179. data/app/views/naf/machines/_filter.html.erb +26 -0
  180. data/app/views/naf/machines/_form.html.erb +62 -0
  181. data/app/views/naf/machines/_show.html.erb +169 -0
  182. data/app/views/naf/machines/edit.html.erb +11 -0
  183. data/app/views/naf/machines/index.html.erb +51 -0
  184. data/app/views/naf/machines/index.json.erb +23 -0
  185. data/app/views/naf/machines/new.html.erb +11 -0
  186. data/app/views/naf/machines/show.html.erb +92 -0
  187. data/app/views/naf/record.html.erb +46 -0
  188. data/app/views/naf/shared/_application.html.erb +50 -0
  189. data/app/views/naf/shared/_information_container.html.erb +19 -0
  190. data/app/views/naf/shared/_select_per_page.html.erb +72 -0
  191. data/ci/test-build.sh +17 -0
  192. data/ci/travis.sh +26 -0
  193. data/config/initializers/naf.rb +3 -0
  194. data/config/routes.rb +38 -0
  195. data/db/migrate/20120820023848_naf_schema.rb +413 -0
  196. data/doc/README_FOR_APP +2 -0
  197. data/lib/generators/naf_generator.rb +45 -0
  198. data/lib/generators/templates/config/logging/af.yml +26 -0
  199. data/lib/generators/templates/config/logging/naf.yml +22 -0
  200. data/lib/generators/templates/config/logging/nafjob.yml +16 -0
  201. data/lib/generators/templates/config/logging/nafrunner.yml +17 -0
  202. data/lib/generators/templates/naf.rb +11 -0
  203. data/lib/generators/templates/naf_layout.html.erb +15 -0
  204. data/lib/naf.rb +48 -0
  205. data/lib/naf/configuration.rb +23 -0
  206. data/lib/naf/engine.rb +18 -0
  207. data/lib/naf/version.rb +3 -0
  208. data/lib/tasks/naf_tasks.rake +370 -0
  209. data/naf.gemspec +30 -0
  210. data/script/rails +10 -0
  211. data/spec/controllers/naf/affinities_controller_spec.rb +79 -0
  212. data/spec/controllers/naf/application_controller_spec.rb +10 -0
  213. data/spec/controllers/naf/application_schedule_affinity_tabs_controller_spec.rb +106 -0
  214. data/spec/controllers/naf/applications_controller_spec.rb +109 -0
  215. data/spec/controllers/naf/historical_job_affinity_tabs_controller_spec.rb +96 -0
  216. data/spec/controllers/naf/historical_jobs_controller_spec.rb +19 -0
  217. data/spec/controllers/naf/machine_affinity_slots_controller_spec.rb +109 -0
  218. data/spec/controllers/naf/machines_controller_spec.rb +74 -0
  219. data/spec/dummy/.gitignore +12 -0
  220. data/spec/dummy/README +19 -0
  221. data/spec/dummy/Rakefile +7 -0
  222. data/spec/dummy/app/assets/javascripts/application.js +16 -0
  223. data/spec/dummy/app/assets/stylesheets/application.css +14 -0
  224. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  225. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  226. data/spec/dummy/app/models/my_script.rb +8 -0
  227. data/spec/dummy/app/models/other/base.rb.sample +10 -0
  228. data/spec/dummy/app/views/layouts/application.html.erb +15 -0
  229. data/spec/dummy/app/views/layouts/naf_layout.html.erb +15 -0
  230. data/spec/dummy/config.ru +4 -0
  231. data/spec/dummy/config/application.rb +62 -0
  232. data/spec/dummy/config/boot.rb +10 -0
  233. data/spec/dummy/config/database-non_primary.yml +20 -0
  234. data/spec/dummy/config/database-primary.yml +16 -0
  235. data/spec/dummy/config/environment.rb +5 -0
  236. data/spec/dummy/config/environments/development.rb +37 -0
  237. data/spec/dummy/config/environments/production.rb +67 -0
  238. data/spec/dummy/config/environments/test.rb +37 -0
  239. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  240. data/spec/dummy/config/initializers/inflections.rb +15 -0
  241. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  242. data/spec/dummy/config/initializers/naf.rb.non_primary +4 -0
  243. data/spec/dummy/config/initializers/naf.rb.primary +3 -0
  244. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  245. data/spec/dummy/config/initializers/session_store.rb +8 -0
  246. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  247. data/spec/dummy/config/locales/en.yml +5 -0
  248. data/spec/dummy/config/logging/af.yml +26 -0
  249. data/spec/dummy/config/logging/naf.yml +22 -0
  250. data/spec/dummy/config/logging/nafjob.yml +16 -0
  251. data/spec/dummy/config/logging/nafrunner.yml +17 -0
  252. data/spec/dummy/config/routes.rb +5 -0
  253. data/spec/dummy/db/.gitignore +2 -0
  254. data/spec/dummy/lib/tasks/dummy.rake +60 -0
  255. data/spec/dummy/public/404.html +26 -0
  256. data/spec/dummy/public/422.html +26 -0
  257. data/spec/dummy/public/500.html +25 -0
  258. data/spec/dummy/public/favicon.ico +0 -0
  259. data/spec/dummy/script/rails +6 -0
  260. data/spec/factories/naf.rb +433 -0
  261. data/spec/helpers/naf/application_helper_spec.rb +0 -0
  262. data/spec/models/logical/naf/application_spec.rb +69 -0
  263. data/spec/models/logical/naf/job_creator_spec.rb +32 -0
  264. data/spec/models/logical/naf/job_fetcher_spec.rb +140 -0
  265. data/spec/models/logical/naf/job_spec.rb +282 -0
  266. data/spec/models/logical/naf/machine_spec.rb +61 -0
  267. data/spec/models/naf/affinity_classification_spec.rb +56 -0
  268. data/spec/models/naf/affinity_spec.rb +100 -0
  269. data/spec/models/naf/application_run_group_restriction_spec.rb +57 -0
  270. data/spec/models/naf/application_schedule_affinity_tab_spec.rb +85 -0
  271. data/spec/models/naf/application_schedule_prerequisite_spec.rb +35 -0
  272. data/spec/models/naf/application_schedule_spec.rb +166 -0
  273. data/spec/models/naf/application_spec.rb +128 -0
  274. data/spec/models/naf/application_type_spec.rb +104 -0
  275. data/spec/models/naf/historical_job_affinity_tab_spec.rb +59 -0
  276. data/spec/models/naf/historical_job_prerequisite_spec.rb +25 -0
  277. data/spec/models/naf/historical_job_spec.rb +334 -0
  278. data/spec/models/naf/logger_level_spec.rb +34 -0
  279. data/spec/models/naf/logger_name_spec.rb +35 -0
  280. data/spec/models/naf/logger_style_name_spec.rb +39 -0
  281. data/spec/models/naf/logger_style_spec.rb +89 -0
  282. data/spec/models/naf/machine_affinity_slot_spec.rb +77 -0
  283. data/spec/models/naf/machine_runner_invocation_spec.rb +38 -0
  284. data/spec/models/naf/machine_runner_spec.rb +37 -0
  285. data/spec/models/naf/machine_spec.rb +425 -0
  286. data/spec/models/naf/naf_base_spec.rb +14 -0
  287. data/spec/models/naf/queued_job_spec.rb +171 -0
  288. data/spec/models/naf/running_job_spec.rb +107 -0
  289. data/spec/models/process/naf/application_spec.rb +8 -0
  290. data/spec/models/process/naf/janitor_spec.rb +10 -0
  291. data/spec/models/process/naf/runner_spec.rb +10 -0
  292. data/spec/spec_helper.rb +32 -0
  293. data/spec/support/engine_routing.rb +27 -0
  294. data/spec/support/script_spec_helper.rb +58 -0
  295. metadata +590 -0
@@ -0,0 +1,61 @@
1
+ module Naf
2
+ class AffinitiesController < Naf::ApplicationController
3
+
4
+ before_filter :set_cols_and_attributes
5
+
6
+ def index
7
+ @affinities = Naf::Affinity.all
8
+ end
9
+
10
+ def show
11
+ @affinity = Naf::Affinity.find(params[:id])
12
+ end
13
+
14
+ def destroy
15
+ @affinity = Naf::Affinity.find(params[:id])
16
+ @affinity.destroy
17
+ flash[:notice] = "Affinity '#{@affinity.affinity_name}' was successfully deleted."
18
+ redirect_to(action: "index")
19
+ end
20
+
21
+ def new
22
+ @affinity = Naf::Affinity.new
23
+ end
24
+
25
+ def create
26
+ @affinity = Naf::Affinity.new(params[:affinity])
27
+
28
+ if message = @affinity.validate_affinity_name
29
+ flash[:error] = message
30
+ redirect_to :back
31
+ return
32
+ end
33
+
34
+ if @affinity.save
35
+ redirect_to(@affinity, notice: "Affinity '#{@affinity.affinity_name}' was successfully created.")
36
+ else
37
+ render action: "new"
38
+ end
39
+ end
40
+
41
+ def edit
42
+ @affinity = Naf::Affinity.find(params[:id])
43
+ end
44
+
45
+ def update
46
+ @affinity = Naf::Affinity.find(params[:id])
47
+ if @affinity.update_attributes(params[:affinity])
48
+ redirect_to(@affinity, notice: "Affinity '#{@affinity.affinity_name}' was successfully updated.")
49
+ else
50
+ render action: "edit"
51
+ end
52
+ end
53
+
54
+ private
55
+
56
+ def set_cols_and_attributes
57
+ @cols = [:id, :affinity_classification_name, :affinity_name, :affinity_note]
58
+ end
59
+
60
+ end
61
+ end
@@ -0,0 +1,43 @@
1
+ module Naf
2
+ class ApplicationController < Naf.controller_class
3
+ layout Naf.layout
4
+
5
+ require 'will_paginate/array'
6
+
7
+ protect_from_forgery
8
+
9
+ protected
10
+
11
+ # Sets current rows_per_page direction from cookies or params.
12
+ def set_rows_per_page
13
+ if params[:iDisplayLength].present?
14
+ @rows_per_page = (params[:iDisplayLength] or "20").to_i
15
+ elsif cookies[:iDisplayLength].present?
16
+ @rows_per_page = cookies[:iDisplayLength].to_i
17
+ else
18
+ @rows_per_page = 20
19
+ end
20
+ cookies[:iDisplayLength] = @rows_per_page
21
+ end
22
+
23
+ # Sets current page
24
+ def set_page
25
+ @page = (params[:iDisplayStart] ? ( params[:iDisplayStart].to_i / @rows_per_page ) + 1 : 1)
26
+ end
27
+
28
+ def set_search_status
29
+ @search_status = cookies[:search_status]
30
+ end
31
+
32
+ # Sets current search status
33
+ def set_status
34
+ status = params[:search][:status]
35
+ if status.present?
36
+ @search_status = status.to_sym
37
+ else
38
+ @search_status = :all
39
+ end
40
+ cookies[:search_status] = @search_status
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,75 @@
1
+ module Naf
2
+ class ApplicationScheduleAffinityTabsController < Naf::ApplicationController
3
+
4
+ before_filter :set_cols_and_attributes
5
+
6
+ def index
7
+ @rows = []
8
+ if params[:application_schedule_id]
9
+ @rows = Naf::ApplicationScheduleAffinityTab.
10
+ where(application_schedule_id: params[:application_schedule_id])
11
+ end
12
+ render template: 'naf/datatable'
13
+ end
14
+
15
+ def show
16
+ @record = Naf::ApplicationScheduleAffinityTab.find(params[:id])
17
+ @application_schedule = Naf::ApplicationSchedule.find(params[:application_schedule_id])
18
+ @application = @application_schedule.application
19
+ render template: 'naf/record'
20
+ end
21
+
22
+ def destroy
23
+ @tab = Naf::ApplicationScheduleAffinityTab.find(params[:id])
24
+ @tab.destroy
25
+ flash[:notice] = "Application Schedule Affinity Tab '#{@tab.affinity_name}' was successfully deleted."
26
+ redirect_to action: 'index'
27
+ end
28
+
29
+ def new
30
+ @application_schedule = Naf::ApplicationSchedule.find(params[:application_schedule_id])
31
+ @application = @application_schedule.application
32
+ @tab = Naf::ApplicationScheduleAffinityTab.new
33
+ end
34
+
35
+ def create
36
+ route_params = { application_id: params[:application_id],
37
+ application_schedule_id: params[:application_schedule_id] }
38
+ @application_schedule = Naf::ApplicationSchedule.find(params[:application_schedule_id])
39
+ @application = Naf::Application.find(params[:application_id])
40
+ @tab = Naf::ApplicationScheduleAffinityTab.new(params[:application_schedule_affinity_tab])
41
+ if @tab.save
42
+ redirect_to(naf.application_application_schedule_application_schedule_affinity_tab_path(@application, @application_schedule, @tab),
43
+ notice: "Application Schedule Affinity Tab '#{@tab.affinity_name}' was successfully created.")
44
+ else
45
+ render route_params.merge(action: "new")
46
+ end
47
+ end
48
+
49
+ def edit
50
+ @tab = Naf::ApplicationScheduleAffinityTab.find(params[:id])
51
+ @application_schedule = Naf::ApplicationSchedule.find(params[:application_schedule_id])
52
+ @application = @application_schedule.application
53
+ end
54
+
55
+ def update
56
+ @tab = Naf::ApplicationScheduleAffinityTab.find(params[:id])
57
+ @application_schedule = Naf::ApplicationSchedule.find(params[:application_schedule_id])
58
+ @application = Naf::Application.find(params[:application_id])
59
+ if @tab.update_attributes(params[:application_schedule_affinity_tab])
60
+ redirect_to(naf.application_application_schedule_application_schedule_affinity_tab_path(@application, @application_schedule, @tab),
61
+ notice: "Application Schedule Affinity Tab '#{@tab.affinity_name}' was successfully updated.")
62
+ else
63
+ render action: "edit", application_schedule_id: @application_schedule.id, application_id: @application.id
64
+ end
65
+ end
66
+
67
+ private
68
+
69
+ def set_cols_and_attributes
70
+ @cols = [:id, :script_title, :affinity_name, :affinity_classification_name]
71
+ @attributes = Naf::ApplicationScheduleAffinityTab.attribute_names.map(&:to_sym) | @cols
72
+ end
73
+
74
+ end
75
+ end
@@ -0,0 +1,153 @@
1
+ module Naf
2
+ class ApplicationsController < Naf::ApplicationController
3
+
4
+ before_filter :set_cols_and_attributes
5
+ before_filter :set_rows_per_page
6
+
7
+ def index
8
+ respond_to do |format|
9
+ format.html
10
+ format.json do
11
+ set_page
12
+
13
+ applications = []
14
+ application = []
15
+ params[:search][:visible] = params[:search][:visible] ? false : true
16
+ params[:search][:deleted] = params[:search][:deleted] ? false : "false"
17
+ @total_records = Naf::Application.count(:all)
18
+ Logical::Naf::Application.search(params[:search]).map(&:to_hash).map do |hash|
19
+ hash.map do |key, value|
20
+ value = '' if value.nil?
21
+ application << value
22
+ end
23
+ applications << application
24
+ application =[]
25
+ end
26
+ @total_display_records = applications.count
27
+ @applications = applications.paginate(page: @page, per_page: @rows_per_page)
28
+
29
+ render layout: 'naf/layouts/jquery_datatables'
30
+ end
31
+ end
32
+ end
33
+
34
+ def show
35
+ @application = Naf::Application.find(params[:id])
36
+ @logical_application = Logical::Naf::Application.new(@application)
37
+ end
38
+
39
+ def new
40
+ @application = Naf::Application.new
41
+ app_schedule = @application.build_application_schedule
42
+ app_schedule.application_schedule_prerequisites.build
43
+ end
44
+
45
+ def create
46
+ @application = Naf::Application.new(params[:application])
47
+ if @application.save
48
+ app_schedule = @application.application_schedule
49
+ if app_schedule.present?
50
+ prerequisites =
51
+ app_schedule.prerequisites.map do |prerequisite|
52
+ prerequisite.title
53
+ end.join(', ')
54
+ end
55
+ redirect_to(@application,
56
+ notice: "Application #{@application.title} was successfully created. #{'Prerequisites: ' + prerequisites if app_schedule.try(:prerequisites).try(:present?) }")
57
+ else
58
+ set_shown_schedule_and_prerequisite
59
+ @application.build_application_schedule unless params[:application].try(:[], :application_schedule_attributes).try(:[], :_destroy) == "0"
60
+ render action: "new"
61
+ end
62
+ end
63
+
64
+ def edit
65
+ @application = Naf::Application.find(params[:id])
66
+ check_application_run_group_name
67
+ app_schedule = @application.application_schedule
68
+ if app_schedule.blank?
69
+ build_app_schedule = @application.build_application_schedule
70
+ build_app_schedule.application_schedule_prerequisites.build
71
+ else
72
+ @show_app_schedule = true
73
+ if app_schedule.application_schedule_prerequisites.blank?
74
+ app_schedule.application_schedule_prerequisites.build
75
+ else
76
+ @show_prerequisite = true
77
+ end
78
+ end
79
+ end
80
+
81
+ def update
82
+ @application = Naf::Application.find(params[:id])
83
+ set_application_run_group_name
84
+ if @application.update_attributes(params[:application])
85
+ app_schedule = @application.application_schedule
86
+ if app_schedule.present?
87
+ prerequisites =
88
+ app_schedule.prerequisites.map do |prerequisite|
89
+ prerequisite.title
90
+ end.join(', ')
91
+ end
92
+ redirect_to(@application,
93
+ notice: "Application #{@application.title} was successfully updated. #{'Prerequisites: ' + prerequisites if app_schedule.try(:prerequisites).try(:present?) }")
94
+ else
95
+ set_shown_schedule_and_prerequisite
96
+ render action: "edit"
97
+ end
98
+ end
99
+
100
+ private
101
+
102
+ def set_cols_and_attributes
103
+ more_attributes = [:script_type_name,
104
+ :application_run_group_name,
105
+ :application_run_group_restriction_name,
106
+ :run_interval,
107
+ :run_start_minute,
108
+ :priority,
109
+ :application_run_group_limit,
110
+ :visible,
111
+ :enabled,
112
+ :enqueue_backlogs ]
113
+ @attributes = Naf::Application.attribute_names.map(&:to_sym) | more_attributes
114
+ @cols = Logical::Naf::Application::COLUMNS
115
+ end
116
+
117
+ def set_application_run_group_name
118
+ @run_group_name_type = params[:run_group_name_type]
119
+ case @run_group_name_type
120
+ when "command"
121
+ params[:application][:application_schedule_attributes][:application_run_group_name] = params[:application][:command]
122
+ when "not set"
123
+ params[:application][:application_schedule_attributes][:application_run_group_name] = nil
124
+ end
125
+ end
126
+
127
+ def check_application_run_group_name
128
+ case @application.application_schedule.try(:application_run_group_name)
129
+ when @application.command
130
+ @run_group_name_type = "command"
131
+ when nil, ''
132
+ @run_group_name_type = "not set"
133
+ else
134
+ @run_group_name_type = "custom"
135
+ end
136
+ end
137
+
138
+ def set_shown_schedule_and_prerequisite
139
+ if params[:application].try(:[], :application_schedule_attributes).try(:[], :_destroy) == "0"
140
+ @show_app_schedule = true
141
+ unless params[:application].try(:[], :application_schedule_attributes).
142
+ try(:[], :application_schedule_prerequisites_attributes).
143
+ try(:select) do |key, value|
144
+ value.try(:[], :_destroy) == "false"
145
+ end.blank?
146
+ @show_prerequisite = true
147
+ end
148
+ end
149
+ end
150
+
151
+ end
152
+
153
+ end
@@ -0,0 +1,65 @@
1
+ module Naf
2
+ class HistoricalJobAffinityTabsController < Naf::ApplicationController
3
+
4
+ before_filter :set_cols_and_attributes
5
+
6
+ def index
7
+ @rows = []
8
+ if params[:historical_job_id]
9
+ @rows = Naf::HistoricalJobAffinityTab.where(historical_job_id: params[:historical_job_id])
10
+ end
11
+ render template: 'naf/datatable'
12
+ end
13
+
14
+ def show
15
+ @record = Naf::HistoricalJobAffinityTab.find(params[:id])
16
+ @job = Naf::HistoricalJob.find(params[:historical_job_id])
17
+ render template: 'naf/record'
18
+ end
19
+
20
+ def new
21
+ @job = Naf::HistoricalJob.find(params[:historical_job_id])
22
+ @tab = Naf::HistoricalJobAffinityTab.new
23
+
24
+ if @job.present? && @job.finished_at.present?
25
+ flash[:error] = "Can't add an affinity tab to a finished job!"
26
+ redirect_to :back
27
+ end
28
+ end
29
+
30
+ def create
31
+ @job = Naf::HistoricalJob.find(params[:historical_job_id])
32
+ @tab = Naf::HistoricalJobAffinityTab.new(params[:historical_job_affinity_tab])
33
+ if @tab.save
34
+ redirect_to(naf.historical_job_historical_job_affinity_tab_path(@job, @tab),
35
+ notice: "Historical Job Affinity Tab '#{@tab.affinity_name}' was successfully created.")
36
+ else
37
+ render action: "new", historical_job_id: @job.id
38
+ end
39
+ end
40
+
41
+ def edit
42
+ @job = Naf::HistoricalJob.find(params[:historical_job_id])
43
+ @tab = Naf::HistoricalJobAffinityTab.find(params[:id])
44
+ end
45
+
46
+ def update
47
+ @job = Naf::HistoricalJob.find(params[:historical_job_id])
48
+ @tab = Naf::HistoricalJobAffinityTab.find(params[:id])
49
+ if @tab.update_attributes(params[:historical_job_affinity_tab])
50
+ redirect_to(naf.historical_job_historical_job_affinity_tab_path(@job, @tab),
51
+ notice: "Historical Job Affinity Tab '#{@tab.affinity_name}' was successfully updated.")
52
+ else
53
+ render action: "edit", historical_job_id: @job.id
54
+ end
55
+ end
56
+
57
+ private
58
+
59
+ def set_cols_and_attributes
60
+ @cols = [:id, :script_type_name, :command, :affinity_classification_name, :affinity_name]
61
+ @attributes = Naf::HistoricalJobAffinityTab.attribute_names.map(&:to_sym) | @cols << :affinity_short_name
62
+ end
63
+
64
+ end
65
+ end
@@ -0,0 +1,159 @@
1
+ module Naf
2
+ class HistoricalJobsController < Naf::ApplicationController
3
+ include Naf::ApplicationHelper
4
+
5
+ before_filter :set_rows_per_page
6
+ before_filter :set_search_status
7
+
8
+ def index
9
+ respond_to do |format|
10
+ format.html
11
+ format.json do
12
+ set_page
13
+ set_status
14
+
15
+ params[:search][:direction] = params['sSortDir_0']
16
+ params[:search][:order] = Logical::Naf::Job::ORDER[params['iSortCol_0']]
17
+ params[:search][:limit] = params['iDisplayLength']
18
+ params[:search][:offset] = @page - 1
19
+ @total_display_records = Logical::Naf::Job.total_display_records(params[:search])
20
+ @total_records = Naf::HistoricalJob.count(:all)
21
+ @historical_jobs = []
22
+ job =[]
23
+ Logical::Naf::Job.search(params[:search]).map(&:to_hash).map do |hash|
24
+ add_urls(hash).map do |key, value|
25
+ value ||= ''
26
+ job << value
27
+ end
28
+ @historical_jobs << job
29
+ job = []
30
+ end
31
+
32
+ render layout: 'naf/layouts/jquery_datatables'
33
+ end
34
+ end
35
+ end
36
+
37
+ def show
38
+ @historical_job = Naf::HistoricalJob.find(params[:id])
39
+ @logical_job = Logical::Naf::Job.new(@historical_job)
40
+ end
41
+
42
+ def new
43
+ end
44
+
45
+ def create
46
+ @historical_job = Naf::HistoricalJob.new(params[:historical_job])
47
+ if params[:historical_job][:application_id] && app = Naf::Application.find(params[:historical_job][:application_id])
48
+ if schedule = app.application_schedule
49
+ @historical_job = Logical::Naf::JobCreator.new.queue_application_schedule(schedule)
50
+ if @historical_job.blank?
51
+ render json: { success: false,
52
+ title: ::Naf::Application.find_by_id(params[:historical_job][:application_id]).title }.to_json
53
+
54
+ return
55
+ end
56
+ else
57
+ @historical_job.command = app.command
58
+ @historical_job.application_type_id = app.application_type_id
59
+ @historical_job.application_run_group_restriction_id = Naf::ApplicationRunGroupRestriction.no_limit.id
60
+ @queued_job = ::Naf::QueuedJob.new
61
+ end
62
+ else
63
+ @queued_job = ::Naf::QueuedJob.new
64
+ end
65
+
66
+ if @queued_job.present?
67
+ @queued_job.application_type_id = @historical_job.application_type_id
68
+ @queued_job.command = @historical_job.command
69
+ @queued_job.application_run_group_restriction_id = @historical_job.application_run_group_restriction_id
70
+ @queued_job.application_run_group_name = @historical_job.application_run_group_name
71
+ @queued_job.application_run_group_limit = @historical_job.application_run_group_limit
72
+ @queued_job.priority = @historical_job.priority
73
+ end
74
+
75
+ respond_to do |format|
76
+ format.json do
77
+ if @historical_job.save
78
+ if @queued_job.present?
79
+ @queued_job.id = @historical_job.id
80
+ @queued_job.save
81
+ end
82
+
83
+ render json: { success: true,
84
+ title: @historical_job.title,
85
+ command: @historical_job.command }.to_json
86
+ end
87
+ end
88
+
89
+ format.html do
90
+ if @historical_job.save
91
+ if @queued_job.present?
92
+ @queued_job.id = @historical_job.id
93
+ @queued_job.save
94
+ end
95
+
96
+ redirect_to(@historical_job,
97
+ notice: "Job '#{@historical_job.command}' was successfully created.")
98
+ else
99
+ render action: "new"
100
+ end
101
+ end
102
+ end
103
+ end
104
+
105
+ def edit
106
+ @historical_job = Naf::HistoricalJob.find(params[:id])
107
+ end
108
+
109
+ def update
110
+ respond_to do |format|
111
+ @historical_job = Naf::HistoricalJob.find(params[:id])
112
+ if @historical_job.update_attributes(params[:historical_job])
113
+ if params[:historical_job][:request_to_terminate].present?
114
+ if queued_job = ::Naf::QueuedJob.find_by_id(params[:id])
115
+ @historical_job.finished_at = Time.zone.now
116
+ @historical_job.save!
117
+ queued_job.delete
118
+ end
119
+
120
+ if running_job = ::Naf::RunningJob.find_by_id(params[:id])
121
+ running_job.update_attributes(request_to_terminate: true)
122
+ end
123
+ end
124
+
125
+ format.html do
126
+ redirect_to(@historical_job, notice: "Job '#{@historical_job.command}' was successfully updated.")
127
+ end
128
+ format.json do
129
+ render json: { success: true,
130
+ title: @historical_job.title,
131
+ command: @historical_job.command }.to_json
132
+ end
133
+ else
134
+ format.html do
135
+ render action: "edit"
136
+ end
137
+ format.json do
138
+ render json: { success: false }.to_json
139
+ end
140
+ end
141
+ end
142
+ end
143
+
144
+ private
145
+
146
+ def add_urls(hash)
147
+ job = ::Naf::HistoricalJob.find(hash[:id])
148
+ if application = job.application
149
+ hash[:application_url] = url_for(application)
150
+ else
151
+ hash[:application_url] = nil
152
+ end
153
+ hash[:papertrail_url] = naf_papertrail_link(job)
154
+
155
+ return hash
156
+ end
157
+
158
+ end
159
+ end