cosmos 4.1.1-java → 4.2.0-java

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 (336) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -2
  3. data/.travis.yml +2 -0
  4. data/.yardopts +1 -0
  5. data/Gemfile +1 -0
  6. data/Manifest.txt +130 -0
  7. data/autohotkey/tools/ConfigEditorAHK +19 -0
  8. data/autohotkey/tools/cmd_extractor.ahk +4 -4
  9. data/autohotkey/tools/cmd_sequence.ahk +9 -5
  10. data/autohotkey/tools/config_editor.ahk +197 -0
  11. data/autohotkey/tools/packet_viewer.ahk +12 -6
  12. data/autohotkey/tools/replay.ahk +29 -29
  13. data/autohotkey/tools/script_runner.ahk +10 -2
  14. data/autohotkey/tools/tlm_extractor.ahk +7 -8
  15. data/autohotkey/tools/tlm_grapher.ahk +21 -9
  16. data/bin/dart_import +2 -0
  17. data/cosmos.gemspec +18 -16
  18. data/data/config/cmd_tlm_server.yaml +9 -0
  19. data/data/config/interface_modifiers.yaml +17 -0
  20. data/data/config/item_modifiers.yaml +3 -3
  21. data/data/crc.txt +184 -90
  22. data/data/dart.png +0 -0
  23. data/demo/Gemfile +1 -0
  24. data/demo/Rakefile +4 -0
  25. data/demo/config/dart/Gemfile +54 -0
  26. data/demo/config/data/crc.txt +28 -21
  27. data/demo/config/system/system.txt +3 -0
  28. data/demo/config/system/system2.txt +3 -0
  29. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +3 -3
  30. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +1 -1
  31. data/demo/config/targets/INST/lib/sim_inst.rb +1 -1
  32. data/demo/config/targets/INST/screens/adcs.txt +2 -1
  33. data/demo/config/targets/INST/screens/array.txt +1 -1
  34. data/demo/config/targets/INST/screens/block.txt +1 -1
  35. data/demo/config/targets/INST/screens/commanding.txt +7 -2
  36. data/demo/config/targets/INST/screens/graphs.txt +1 -1
  37. data/demo/config/targets/INST/screens/ground.txt +1 -1
  38. data/demo/config/targets/INST/screens/hs.txt +2 -1
  39. data/demo/config/targets/INST/screens/latest.txt +1 -1
  40. data/demo/config/targets/INST/screens/limits.txt +1 -1
  41. data/demo/config/targets/INST/screens/other.txt +1 -1
  42. data/demo/config/targets/INST/screens/tabs.txt +1 -1
  43. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  44. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +3 -1
  45. data/demo/config/tools/launcher/launcher.txt +3 -2
  46. data/demo/tools/Dart +16 -0
  47. data/demo/tools/Dart.bat +9 -0
  48. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +0 -0
  49. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +0 -0
  50. data/install/Gemfile +1 -0
  51. data/install/Rakefile +4 -0
  52. data/install/config/dart/Gemfile +54 -0
  53. data/install/config/data/crc.txt +6 -3
  54. data/install/config/system/system.txt +3 -0
  55. data/install/config/tools/launcher/launcher.txt +3 -2
  56. data/install/tools/Dart +16 -0
  57. data/install/tools/Dart.bat +9 -0
  58. data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +0 -0
  59. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +0 -0
  60. data/lib/cosmos/core_ext/time.rb +8 -8
  61. data/lib/cosmos/dart/.rspec +1 -0
  62. data/lib/cosmos/dart/Gemfile +69 -0
  63. data/lib/cosmos/dart/Rakefile +7 -0
  64. data/lib/cosmos/dart/app/assets/config/manifest.js +4 -0
  65. data/lib/cosmos/dart/app/assets/images/.keep +0 -0
  66. data/lib/cosmos/dart/app/assets/javascripts/application.js +13 -0
  67. data/lib/cosmos/dart/app/assets/javascripts/cable.js +13 -0
  68. data/lib/cosmos/dart/app/assets/stylesheets/application.css.scss +15 -0
  69. data/lib/cosmos/dart/app/channels/application_cable/channel.rb +4 -0
  70. data/lib/cosmos/dart/app/channels/application_cable/connection.rb +4 -0
  71. data/lib/cosmos/dart/app/controllers/application_controller.rb +3 -0
  72. data/lib/cosmos/dart/app/helpers/application_helper.rb +2 -0
  73. data/lib/cosmos/dart/app/jobs/application_job.rb +2 -0
  74. data/lib/cosmos/dart/app/mailers/application_mailer.rb +4 -0
  75. data/lib/cosmos/dart/app/models/application_record.rb +3 -0
  76. data/lib/cosmos/dart/app/models/item.rb +6 -0
  77. data/lib/cosmos/dart/app/models/item_to_decom_table_mapping.rb +9 -0
  78. data/lib/cosmos/dart/app/models/packet.rb +4 -0
  79. data/lib/cosmos/dart/app/models/packet_config.rb +7 -0
  80. data/lib/cosmos/dart/app/models/packet_log.rb +3 -0
  81. data/lib/cosmos/dart/app/models/packet_log_entry.rb +41 -0
  82. data/lib/cosmos/dart/app/models/system_config.rb +2 -0
  83. data/lib/cosmos/dart/app/models/target.rb +4 -0
  84. data/lib/cosmos/dart/app/views/layouts/application.html.erb +14 -0
  85. data/lib/cosmos/dart/app/views/layouts/mailer.html.erb +13 -0
  86. data/lib/cosmos/dart/app/views/layouts/mailer.text.erb +1 -0
  87. data/lib/cosmos/dart/bin/bundle +3 -0
  88. data/lib/cosmos/dart/bin/rails +4 -0
  89. data/lib/cosmos/dart/bin/rake +4 -0
  90. data/lib/cosmos/dart/bin/setup +34 -0
  91. data/lib/cosmos/dart/bin/update +29 -0
  92. data/lib/cosmos/dart/config.ru +5 -0
  93. data/lib/cosmos/dart/config/application.rb +29 -0
  94. data/lib/cosmos/dart/config/boot.rb +3 -0
  95. data/lib/cosmos/dart/config/cable.yml +9 -0
  96. data/lib/cosmos/dart/config/database.yml +23 -0
  97. data/lib/cosmos/dart/config/environment.rb +5 -0
  98. data/lib/cosmos/dart/config/environments/development.rb +62 -0
  99. data/lib/cosmos/dart/config/environments/production.rb +84 -0
  100. data/lib/cosmos/dart/config/environments/test.rb +42 -0
  101. data/lib/cosmos/dart/config/initializers/application_controller_renderer.rb +6 -0
  102. data/lib/cosmos/dart/config/initializers/assets.rb +12 -0
  103. data/lib/cosmos/dart/config/initializers/backtrace_silencers.rb +7 -0
  104. data/lib/cosmos/dart/config/initializers/cookies_serializer.rb +5 -0
  105. data/lib/cosmos/dart/config/initializers/filter_parameter_logging.rb +4 -0
  106. data/lib/cosmos/dart/config/initializers/inflections.rb +16 -0
  107. data/lib/cosmos/dart/config/initializers/mime_types.rb +4 -0
  108. data/lib/cosmos/dart/config/initializers/new_framework_defaults.rb +25 -0
  109. data/lib/cosmos/dart/config/initializers/session_store.rb +3 -0
  110. data/lib/cosmos/dart/config/initializers/wrap_parameters.rb +14 -0
  111. data/lib/cosmos/dart/config/locales/en.yml +23 -0
  112. data/lib/cosmos/dart/config/puma.rb +47 -0
  113. data/lib/cosmos/dart/config/routes.rb +3 -0
  114. data/lib/cosmos/dart/config/secrets.yml +22 -0
  115. data/lib/cosmos/dart/db/migrate/20170406172907_create_targets.rb +8 -0
  116. data/lib/cosmos/dart/db/migrate/20170406172927_create_packets.rb +10 -0
  117. data/lib/cosmos/dart/db/migrate/20170406172937_create_packet_logs.rb +9 -0
  118. data/lib/cosmos/dart/db/migrate/20170406172943_create_packet_log_entries.rb +16 -0
  119. data/lib/cosmos/dart/db/migrate/20170406183500_change_packet_log_entries_primary_key.rb +5 -0
  120. data/lib/cosmos/dart/db/migrate/20170407153618_add_unique_requirements.rb +7 -0
  121. data/lib/cosmos/dart/db/migrate/20170511155447_add_meta_id_to_packet_log_entries.rb +6 -0
  122. data/lib/cosmos/dart/db/migrate/20170523185056_rename_received_time_and_add_is_tlm_to_packet_log_entries.rb +7 -0
  123. data/lib/cosmos/dart/db/migrate/20170525201157_create_items.rb +10 -0
  124. data/lib/cosmos/dart/db/migrate/20170525201315_create_system_configs.rb +9 -0
  125. data/lib/cosmos/dart/db/migrate/20170525201624_create_packet_configs.rb +11 -0
  126. data/lib/cosmos/dart/db/migrate/20170525201745_create_item_to_decom_table_mappings.rb +12 -0
  127. data/lib/cosmos/dart/db/migrate/20170525201939_create_decom_tables.rb +12 -0
  128. data/lib/cosmos/dart/db/migrate/20170525202051_add_decom_state_to_packet_log_entry.rb +5 -0
  129. data/lib/cosmos/dart/db/migrate/20170913160409_update_items.rb +6 -0
  130. data/lib/cosmos/dart/db/migrate/20170913160558_update_item_to_decom_table_mapping.rb +11 -0
  131. data/lib/cosmos/dart/db/migrate/20170913160916_udpate_decom_table.rb +6 -0
  132. data/lib/cosmos/dart/db/migrate/20170913212026_add_ready_to_packet_configs.rb +5 -0
  133. data/lib/cosmos/dart/db/migrate/20170913223556_modify_tables.rb +9 -0
  134. data/lib/cosmos/dart/db/migrate/20170914215744_modify_mapping_table.rb +6 -0
  135. data/lib/cosmos/dart/db/migrate/20170919201433_add_system_config_id_to_packet_config.rb +11 -0
  136. data/lib/cosmos/dart/db/migrate/20170919210307_add_max_table_index_to_packet_configs.rb +5 -0
  137. data/lib/cosmos/dart/db/migrate/20171215225546_add_ready_to_packet_log_entries.rb +5 -0
  138. data/lib/cosmos/dart/db/migrate/20180116214338_add_index_for_ple_ready_to_packet_log_entries.rb +5 -0
  139. data/lib/cosmos/dart/db/schema.rb +103 -0
  140. data/lib/cosmos/dart/db/seeds.rb +7 -0
  141. data/lib/cosmos/dart/examples/dart_decom_client.rb +45 -0
  142. data/lib/cosmos/dart/examples/dart_stream_client.rb +93 -0
  143. data/lib/cosmos/dart/lib/dart_common.rb +749 -0
  144. data/lib/cosmos/dart/lib/dart_database_cleaner.rb +172 -0
  145. data/lib/cosmos/dart/lib/dart_decom_query.rb +184 -0
  146. data/lib/cosmos/dart/lib/dart_decommutator.rb +235 -0
  147. data/lib/cosmos/dart/lib/dart_importer.rb +154 -0
  148. data/lib/cosmos/dart/lib/dart_logging.rb +50 -0
  149. data/lib/cosmos/dart/lib/dart_packet_log_writer.rb +139 -0
  150. data/lib/cosmos/dart/lib/dart_reducer_manager.rb +85 -0
  151. data/lib/cosmos/dart/lib/dart_reducer_worker_thread.rb +263 -0
  152. data/lib/cosmos/dart/lib/dart_tcpip_server_interface.rb +142 -0
  153. data/lib/cosmos/dart/processes/dart.rb +145 -0
  154. data/lib/cosmos/dart/processes/dart_decom_server.rb +39 -0
  155. data/lib/cosmos/dart/processes/dart_import.rb +63 -0
  156. data/lib/cosmos/dart/processes/dart_ingester.rb +92 -0
  157. data/lib/cosmos/dart/processes/dart_reducer.rb +27 -0
  158. data/lib/cosmos/dart/processes/dart_stream_server.rb +31 -0
  159. data/lib/cosmos/dart/processes/dart_worker.rb +37 -0
  160. data/lib/cosmos/dart/spec/dart/dart_common_spec.rb +333 -0
  161. data/lib/cosmos/dart/spec/dart/dart_database_cleaner_spec.rb +455 -0
  162. data/lib/cosmos/dart/spec/dart/dart_decom_query_spec.rb +153 -0
  163. data/lib/cosmos/dart/spec/dart/dart_decommutator_spec.rb +336 -0
  164. data/lib/cosmos/dart/spec/dart/dart_importer_spec.rb +83 -0
  165. data/lib/cosmos/dart/spec/dart/dart_logging_spec.rb +30 -0
  166. data/lib/cosmos/dart/spec/dart/dart_packet_log_writer_spec.rb +149 -0
  167. data/lib/cosmos/dart/spec/dart/dart_reducer_manager_spec.rb +289 -0
  168. data/lib/cosmos/dart/spec/dart/dart_tcpip_server_interface_spec.rb +241 -0
  169. data/lib/cosmos/dart/spec/rails_helper.rb +60 -0
  170. data/lib/cosmos/dart/spec/spec_helper.rb +139 -0
  171. data/lib/cosmos/gui/dialogs/about_dialog.rb +1 -1
  172. data/lib/cosmos/gui/dialogs/dart_dialog.rb +60 -0
  173. data/lib/cosmos/gui/dialogs/legal_dialog.rb +1 -0
  174. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +0 -3
  175. data/lib/cosmos/gui/qt.rb +10 -1
  176. data/lib/cosmos/gui/text/completion.rb +10 -9
  177. data/lib/cosmos/gui/text/completion_text_edit.rb +16 -14
  178. data/lib/cosmos/gui/text/ruby_editor.rb +2 -2
  179. data/lib/cosmos/gui/widgets/dart_frame.rb +142 -0
  180. data/lib/cosmos/gui/widgets/dart_meta_frame.rb +119 -0
  181. data/lib/cosmos/gui/widgets/packet_log_frame.rb +42 -12
  182. data/lib/cosmos/interfaces/interface.rb +1 -2
  183. data/lib/cosmos/interfaces/protocols/crc_protocol.rb +26 -8
  184. data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +8 -2
  185. data/lib/cosmos/interfaces/protocols/protocol.rb +2 -1
  186. data/lib/cosmos/interfaces/protocols/template_protocol.rb +1 -1
  187. data/lib/cosmos/interfaces/stream_interface.rb +1 -0
  188. data/lib/cosmos/interfaces/tcpip_server_interface.rb +2 -3
  189. data/lib/cosmos/io/json_drb_object.rb +1 -1
  190. data/lib/cosmos/io/json_rpc.rb +2 -1
  191. data/lib/cosmos/io/win32_serial_driver.rb +2 -9
  192. data/lib/cosmos/packet_logs/packet_log_writer.rb +1 -1
  193. data/lib/cosmos/packets/packet.rb +22 -12
  194. data/lib/cosmos/packets/packet_config.rb +2 -1
  195. data/lib/cosmos/packets/packet_item.rb +26 -24
  196. data/lib/cosmos/packets/parsers/macro_parser.rb +5 -2
  197. data/lib/cosmos/packets/parsers/packet_item_parser.rb +35 -17
  198. data/lib/cosmos/packets/parsers/packet_parser.rb +3 -10
  199. data/lib/cosmos/packets/parsers/xtce_converter.rb +21 -35
  200. data/lib/cosmos/packets/parsers/xtce_parser.rb +54 -46
  201. data/lib/cosmos/packets/structure.rb +10 -2
  202. data/lib/cosmos/packets/structure_item.rb +22 -8
  203. data/lib/cosmos/processors/statistics_processor.rb +2 -0
  204. data/lib/cosmos/script/api_shared.rb +13 -12
  205. data/lib/cosmos/script/cmd_tlm_server.rb +4 -0
  206. data/lib/cosmos/script/commands.rb +3 -15
  207. data/lib/cosmos/script/script.rb +69 -23
  208. data/lib/cosmos/streams/tcpip_client_stream.rb +2 -2
  209. data/lib/cosmos/system/system.rb +42 -25
  210. data/lib/cosmos/system/target.rb +6 -2
  211. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +177 -36
  212. data/lib/cosmos/tools/cmd_sender/cmd_param_table_item_delegate.rb +3 -2
  213. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +34 -8
  214. data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +80 -25
  215. data/lib/cosmos/tools/cmd_tlm_server/api.rb +19 -4
  216. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +15 -14
  217. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +15 -9
  218. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +1 -9
  219. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +1 -6
  220. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +1 -3
  221. data/lib/cosmos/tools/cmd_tlm_server/gui/replay_tab.rb +84 -7
  222. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +0 -1
  223. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +1 -5
  224. data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +3 -2
  225. data/lib/cosmos/tools/cmd_tlm_server/replay_backend.rb +159 -27
  226. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +1 -1
  227. data/lib/cosmos/tools/config_editor/config_editor.rb +17 -52
  228. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +0 -5
  229. data/lib/cosmos/tools/data_viewer/data_viewer.rb +111 -0
  230. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +31 -18
  231. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +12 -3
  232. data/lib/cosmos/tools/script_runner/script_runner.rb +27 -14
  233. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +104 -37
  234. data/lib/cosmos/tools/table_manager/table_config.rb +1 -1
  235. data/lib/cosmos/tools/table_manager/table_item_parser.rb +4 -2
  236. data/lib/cosmos/tools/table_manager/table_manager.rb +0 -5
  237. data/lib/cosmos/tools/table_manager/table_manager_core.rb +0 -1
  238. data/lib/cosmos/tools/test_runner/test.rb +1 -3
  239. data/lib/cosmos/tools/test_runner/test_runner.rb +26 -15
  240. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +290 -137
  241. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +122 -25
  242. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +67 -0
  243. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +28 -0
  244. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +36 -0
  245. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +42 -3
  246. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +88 -14
  247. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +2 -5
  248. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +2 -6
  249. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +74 -18
  250. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +3 -7
  251. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_dart_thread.rb +159 -0
  252. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +49 -2
  253. data/lib/cosmos/tools/tlm_viewer/screen.rb +3 -0
  254. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +0 -2
  255. data/lib/cosmos/tools/tlm_viewer/widgets.rb +1 -0
  256. data/lib/cosmos/tools/tlm_viewer/widgets/backgroundbutton_widget.rb +54 -0
  257. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +5 -5
  258. data/lib/cosmos/top_level.rb +1 -0
  259. data/lib/cosmos/utilities/crc.rb +3 -0
  260. data/lib/cosmos/utilities/csv.rb +1 -0
  261. data/lib/cosmos/utilities/message_log.rb +2 -1
  262. data/lib/cosmos/utilities/simulated_target.rb +8 -8
  263. data/lib/cosmos/version.rb +5 -5
  264. data/lib/cosmos/win32/win32.rb +4 -10
  265. data/run_gui_tests.bat +2 -1
  266. data/spec/config/config_parser_spec.rb +4 -4
  267. data/spec/core_ext/array_spec.rb +1 -1
  268. data/spec/core_ext/exception_spec.rb +12 -12
  269. data/spec/core_ext/file_spec.rb +6 -6
  270. data/spec/core_ext/hash_spec.rb +1 -1
  271. data/spec/core_ext/socket_spec.rb +2 -2
  272. data/spec/core_ext/string_spec.rb +13 -13
  273. data/spec/core_ext/time_spec.rb +0 -2
  274. data/spec/gui/utilities/script_module_gui_spec.rb +3 -3
  275. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +6 -6
  276. data/spec/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +4 -0
  277. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +6 -2
  278. data/spec/interfaces/interface_spec.rb +0 -1
  279. data/spec/interfaces/linc_interface_spec.rb +0 -5
  280. data/spec/interfaces/protocols/crc_protocol_spec.rb +201 -85
  281. data/spec/interfaces/protocols/fixed_protocol_spec.rb +33 -9
  282. data/spec/interfaces/protocols/length_protocol_spec.rb +1 -1
  283. data/spec/interfaces/protocols/override_protocol_spec.rb +6 -2
  284. data/spec/interfaces/protocols/preidentified_protocol_spec.rb +1 -5
  285. data/spec/interfaces/protocols/template_protocol_spec.rb +0 -1
  286. data/spec/interfaces/simulated_target_interface_spec.rb +5 -5
  287. data/spec/interfaces/udp_interface_spec.rb +2 -4
  288. data/spec/io/buffered_file_spec.rb +8 -12
  289. data/spec/io/json_drb_spec.rb +9 -9
  290. data/spec/io/json_rpc_spec.rb +4 -4
  291. data/spec/io/raw_logger_spec.rb +4 -3
  292. data/spec/packet_logs/packet_log_reader_spec.rb +3 -6
  293. data/spec/packet_logs/packet_log_writer_spec.rb +4 -4
  294. data/spec/packets/binary_accessor_spec.rb +5 -8
  295. data/spec/packets/commands_spec.rb +2 -2
  296. data/spec/packets/limits_spec.rb +2 -2
  297. data/spec/packets/packet_config_spec.rb +12 -0
  298. data/spec/packets/packet_item_limits_spec.rb +1 -1
  299. data/spec/packets/packet_item_spec.rb +9 -9
  300. data/spec/packets/packet_spec.rb +15 -5
  301. data/spec/packets/parsers/packet_item_parser_spec.rb +27 -0
  302. data/spec/packets/parsers/xtce_parser_spec.rb +27 -30
  303. data/spec/packets/structure_spec.rb +2 -1
  304. data/spec/packets/telemetry_spec.rb +3 -5
  305. data/spec/processors/statistics_processor_spec.rb +35 -0
  306. data/spec/script/cmd_tlm_server_spec.rb +4 -21
  307. data/spec/script/commands_disconnect_spec.rb +46 -58
  308. data/spec/script/commands_spec.rb +40 -61
  309. data/spec/script/limits_spec.rb +1 -21
  310. data/spec/script/script_spec.rb +32 -41
  311. data/spec/script/scripting_spec.rb +166 -185
  312. data/spec/script/telemetry_spec.rb +10 -5
  313. data/spec/script/tools_spec.rb +2 -24
  314. data/spec/spec_helper.rb +11 -5
  315. data/spec/system/system_spec.rb +17 -12
  316. data/spec/tools/cmd_tlm_server/api_spec.rb +21 -10
  317. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +15 -16
  318. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +0 -1
  319. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +16 -27
  320. data/spec/tools/cmd_tlm_server/commanding_spec.rb +2 -6
  321. data/spec/tools/cmd_tlm_server/connections_spec.rb +0 -4
  322. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +13 -13
  323. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +5 -9
  324. data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +11 -3
  325. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +0 -4
  326. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +5 -5
  327. data/spec/tools/cmd_tlm_server/routers_spec.rb +5 -9
  328. data/spec/tools/table_manager/table_config_spec.rb +0 -1
  329. data/spec/tools/table_manager/tablemanager_core_spec.rb +23 -23
  330. data/spec/tools/tlm_viewer/tlm_viewer_config_spec.rb +6 -4
  331. data/spec/top_level/top_level_spec.rb +9 -9
  332. data/spec/utilities/csv_spec.rb +2 -12
  333. data/spec/utilities/logger_spec.rb +6 -6
  334. data/spec/utilities/message_log_spec.rb +3 -11
  335. data/tasks/gemfile_stats.rake +2 -2
  336. metadata +167 -60
@@ -0,0 +1,142 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2018 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'dart_common'
12
+
13
+ class DartTcpipServerInterface < Cosmos::TcpipServerInterface
14
+ include DartCommon
15
+
16
+ def initialize(write_timeout = 60, read_timeout = 5)
17
+ port = Cosmos::System.ports['DART_STREAM']
18
+ super(port, port, write_timeout, read_timeout, 'PREIDENTIFIED')
19
+ @listen_address = Cosmos::System.listen_hosts['DART_STREAM']
20
+ @plr_cache = {}
21
+ end
22
+
23
+ def connect
24
+ @cancel_threads = false
25
+ @read_queue.clear if @read_queue
26
+ start_listen_thread(@read_port, true, true)
27
+ @write_thread = nil
28
+ @connected = true
29
+ end
30
+
31
+ def read_thread_body(interface)
32
+ packet = interface.read
33
+ return if !packet || @cancel_threads
34
+
35
+ # Expect to receive a packet that is completed composed of a JSON object with the following fields
36
+ # start_time_sec, start_time_usec
37
+ # end_time_sec, end_time_usec
38
+ # cmd_tlm = CMD, or TLM
39
+ # packets [[target_name, packet_name], ...]
40
+ json_data = packet.buffer(false)
41
+ json_object = JSON.parse(json_data)
42
+ Cosmos::Logger.info("Received Request: #{json_data}")
43
+ start_time = Time.at(json_object['start_time_sec'], json_object['start_time_usec'])
44
+ end_time = Time.at(json_object['end_time_sec'], json_object['end_time_usec'])
45
+ cmd_tlm = json_object['cmd_tlm']
46
+ packets = json_object['packets']
47
+ meta_ids = json_object['meta_ids']
48
+ meta_filters = json_object['meta_filters']
49
+ if cmd_tlm and cmd_tlm.to_s.upcase == 'CMD'
50
+ is_tlm = false
51
+ else
52
+ is_tlm = true
53
+ end
54
+
55
+ if meta_filters and (!meta_ids or meta_ids.length <= 0)
56
+ meta_ids = process_meta_filters(meta_filters, is_tlm, end_time)
57
+ end
58
+
59
+ # Retrieve and stream out requested packets here
60
+ pairs = []
61
+ if packets
62
+ packets.each do |target_name, packet_name|
63
+ target = Target.where("name = ?", target_name.to_s.upcase).first
64
+ if target
65
+ packet = Packet.where("target_id = ? and name = ? and is_tlm = #{is_tlm}", target.id, packet_name.to_s.upcase).first
66
+ if packet
67
+ pairs << [target.id, packet.id]
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+ if pairs.length > 0
74
+ where_clause = "("
75
+ index = 0
76
+ pairs.each do |target_id, packet_id|
77
+ where_clause << " or " if index != 0
78
+ where_clause << "(target_id = #{target_id} and packet_id = #{packet_id})"
79
+ index += 1
80
+ end
81
+ where_clause << ")"
82
+ else
83
+ where_clause = "is_tlm = #{is_tlm}"
84
+ end
85
+
86
+ meta_ple = nil
87
+ packet_count = 0
88
+ batch_size = 100
89
+ batch_count = 0
90
+ loop do
91
+ ples = PacketLogEntry.where(where_clause)
92
+ ples = ples.where(:meta_id => meta_ids) if meta_ids
93
+ if start_time <= end_time
94
+ ples = ples.where("time >= ?", start_time)
95
+ ples = ples.where("time <= ?", end_time)
96
+ ples = ples.order(time: :asc)
97
+ else
98
+ ples = ples.where("time >= ?", end_time)
99
+ ples = ples.where("time <= ?", start_time)
100
+ ples = ples.order(time: :desc)
101
+ end
102
+ ples = ples.limit(batch_size).offset(batch_count * batch_size)
103
+ break if ples.length <= 0
104
+
105
+ ples.each do |ple|
106
+ if !meta_ple or ple.meta_id != meta_ple.id
107
+ meta_ple = PacketLogEntry.find(ple.meta_id)
108
+ meta_packet = read_packet_from_ple(meta_ple)
109
+ if meta_packet
110
+ begin
111
+ interface.write(meta_packet)
112
+ packet_count += 1
113
+ rescue Exception
114
+ Cosmos::Logger.error("Request ended with meta packet write error")
115
+ break
116
+ end
117
+ else
118
+ Cosmos::Logger.error("No Meta Packet Read: #{meta_ple.inspect}")
119
+ end
120
+ end
121
+
122
+ if meta_ple.id != ple.id
123
+ packet = read_packet_from_ple(ple)
124
+ if packet
125
+ begin
126
+ interface.write(packet)
127
+ packet_count += 1
128
+ rescue Exception
129
+ Cosmos::Logger.error("Request ended with write error")
130
+ break
131
+ end
132
+ else
133
+ Cosmos::Logger.error("No Packet Read: #{ple.inspect}")
134
+ end
135
+ end
136
+ end
137
+
138
+ batch_count += 1
139
+ end
140
+ Cosmos::Logger.info("Request fully served #{packet_count} packets")
141
+ end
142
+ end
@@ -0,0 +1,145 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2018 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require File.expand_path('../../config/environment', __FILE__)
12
+ require 'dart_common'
13
+ require 'dart_logging'
14
+ require 'childprocess'
15
+ require 'dart_database_cleaner'
16
+
17
+ class Dart
18
+ include DartCommon
19
+
20
+ @@force_cleanup = false
21
+ def self.force_cleanup=(value)
22
+ @@force_cleanup = value
23
+ end
24
+
25
+ # Start all the DART processes:
26
+ # 1. Ingester - writes all packets to the DART log file
27
+ # 2. Reducer - reduces decommutated data by minute, hour, and day
28
+ # 3. Stream Server - TCPIP server which handles requests for raw data
29
+ # streamed from the packet log binary file
30
+ # 4. Decom Server - JSON DRB server which handles requests for decommutated
31
+ # or reduced data from the database
32
+ # 5..n Worker - Decommutates data from the packet log binary file into the DB
33
+ def run
34
+ Cosmos::Logger.level = Cosmos::Logger::INFO
35
+ dart_logging = DartLogging.new('dart')
36
+
37
+ # Cleanup the database before starting processes
38
+ DartDatabaseCleaner.clean(@@force_cleanup)
39
+
40
+ ruby_process_name = ENV['DART_RUBY']
41
+ if RUBY_ENGINE != 'ruby'
42
+ ruby_process_name ||= 'jruby'
43
+ else
44
+ ruby_process_name ||= 'ruby'
45
+ end
46
+
47
+ num_workers = ENV['DART_NUM_WORKERS']
48
+ num_workers ||= 1
49
+ num_workers = num_workers.to_i
50
+
51
+ process_definitions = [
52
+ [ruby_process_name, File.join(__dir__, 'dart_ingester.rb')],
53
+ [ruby_process_name, File.join(__dir__, 'dart_reducer.rb')],
54
+ [ruby_process_name, File.join(__dir__, 'dart_stream_server.rb')],
55
+ [ruby_process_name, File.join(__dir__, 'dart_decom_server.rb')]
56
+ ]
57
+
58
+ num_workers.times do |index|
59
+ process_definitions << [ruby_process_name, File.join(__dir__, 'dart_worker.rb'), index.to_s, num_workers.to_s]
60
+ end
61
+
62
+ processes = []
63
+ p_mutex = Mutex.new
64
+
65
+ # Start all the processes.rb
66
+ Cosmos::Logger.info("Dart starting each process...")
67
+
68
+ process_definitions.each do |p|
69
+ Cosmos::Logger.info("Starting: #{p.join(' ')}")
70
+ processes << ChildProcess.build(*p)
71
+ processes[-1].start
72
+ end
73
+
74
+ # Setup signal handlers to shutdown cleanly
75
+ ["TERM", "INT"].each do |sig|
76
+ Signal.trap(sig) do
77
+ @shutdown = true
78
+ Thread.new do
79
+ p_mutex.synchronize do
80
+ Cosmos::Logger.info("Shutting down processes...")
81
+ processes.each_with_index do |p, index|
82
+ Thread.new do
83
+ Cosmos::Logger.info("Soft Shutting down process: #{process_definitions[index].join(' ')}")
84
+ Process.kill("SIGINT", p.pid)
85
+ end
86
+ end
87
+ sleep(2)
88
+ processes.each_with_index do |p, index|
89
+ unless p.exited?
90
+ Cosmos::Logger.info("Hard Shutting down process: #{process_definitions[index].join(' ')}")
91
+ p.stop
92
+ end
93
+ end
94
+ @shutdown_complete = true
95
+ end
96
+ end
97
+ end
98
+ end
99
+
100
+ # Monitor processes and respawn if died
101
+ @shutdown = false
102
+ @shutdown_complete = false
103
+ Cosmos::Logger.info("Dart Monitoring processes...")
104
+ loop do
105
+ p_mutex.synchronize do
106
+ processes.each_with_index do |p, index|
107
+ break if @shutdown
108
+ unless p.alive?
109
+ # Respawn process
110
+ Cosmos::Logger.error("Unexpected process died... respawning! #{process_definitions[index].join(' ')}")
111
+ processes[index] = ChildProcess.build(*process_definitions[index])
112
+ processes[index].leader = true
113
+ processes[index].start
114
+ end
115
+ end
116
+ end
117
+ break if @shutdown
118
+ sleep(1)
119
+ break if @shutdown
120
+ end
121
+
122
+ loop do
123
+ break if @shutdown_complete
124
+ sleep(1)
125
+ end
126
+
127
+ ensure
128
+ Cosmos::Logger.info("Dart shutdown complete")
129
+ shutdown_cmd_tlm()
130
+ dart_logging.stop
131
+ end
132
+
133
+ def self.run
134
+ Cosmos.catch_fatal_exception do
135
+ a = self.new
136
+ a.run
137
+ end
138
+ end
139
+ end
140
+
141
+ parser = DartCommon.handle_argv(false)
142
+ parser.on("--force-cleanup", "Force database cleanup") do |arg|
143
+ Dart.force_cleanup = true
144
+ end
145
+ parser.parse!
@@ -0,0 +1,39 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2018 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require File.expand_path('../../config/environment', __FILE__)
12
+ require 'dart_common'
13
+ require 'dart_decom_query'
14
+
15
+ Cosmos.catch_fatal_exception do
16
+ DartCommon.handle_argv
17
+
18
+ Cosmos::Logger.level = Cosmos::Logger::INFO
19
+ dart_logging = DartLogging.new('dart_decom_server')
20
+
21
+ json_drb = Cosmos::JsonDRb.new
22
+ json_drb.acl = Cosmos::System.acl if Cosmos::System.acl
23
+ begin
24
+ json_drb.method_whitelist = ['query', 'item_names']
25
+ begin
26
+ json_drb.start_service(Cosmos::System.listen_hosts['DART_DECOM'],
27
+ Cosmos::System.ports['DART_DECOM'], DartDecomQuery.new)
28
+ rescue Exception
29
+ raise Cosmos::FatalError.new("Error starting JsonDRb on port #{Cosmos::System.ports['DART_DECOM']}.\nPerhaps another DART Decom Server is already running?")
30
+ end
31
+ ["TERM", "INT"].each {|sig| Signal.trap(sig) {exit}}
32
+ Cosmos::Logger.info("Dart Decom Server Started...")
33
+ sleep(1) while true
34
+ rescue Interrupt
35
+ Cosmos::Logger.info("Dart Decom Server Closing...")
36
+ json_drb.stop_service
37
+ dart_logging.stop
38
+ end
39
+ end
@@ -0,0 +1,63 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2018 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ # This code must be run on the database server
12
+ # The file to be imported should be placed in its final storage location
13
+ # Note that it is imported in place with algorithms that attempt to prevent
14
+ # duplicate creation of Database entries
15
+
16
+ require 'ostruct'
17
+ require 'optparse'
18
+ require 'cosmos/version'
19
+
20
+ options = OpenStruct.new
21
+ options.force = false
22
+
23
+ parser = OptionParser.new do |option_parser|
24
+ option_parser.banner = "Usage: dart_import filename"
25
+ option_parser.separator("")
26
+
27
+ # Create the help option
28
+ option_parser.on("-h", "--help", "Show this message") do
29
+ puts option_parser
30
+ exit(0)
31
+ end
32
+
33
+ # Create the version option
34
+ option_parser.on("-v", "--version", "Show version") do
35
+ puts "COSMOS Version: #{COSMOS_VERSION}"
36
+ puts "User Version: #{USER_VERSION}" if defined? USER_VERSION
37
+ exit(0)
38
+ end
39
+
40
+ # Create the system option
41
+ option_parser.on("--system FILE", "Use an alternative system.txt file") do |arg|
42
+ System.instance(File.join(USERPATH, 'config', 'system', arg))
43
+ end
44
+
45
+ # Create the force option
46
+ option_parser.on("-f", "--force", "Force parsing entire file") do
47
+ options.force = true
48
+ end
49
+ end
50
+
51
+ parser.parse!(ARGV)
52
+ unless ARGV[0]
53
+ puts parser
54
+ exit(1)
55
+ end
56
+
57
+ require File.expand_path('../../config/environment', __FILE__)
58
+ require 'dart_importer'
59
+
60
+ Cosmos.catch_fatal_exception do
61
+ code = DartImporter.new.import(File.expand_path(ARGV[0]), options.force)
62
+ exit(code)
63
+ end
@@ -0,0 +1,92 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2018 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require File.expand_path('../../config/environment', __FILE__)
12
+ require 'dart_packet_log_writer'
13
+ require 'dart_logging'
14
+
15
+ # Handles packets by writing them to the dart log file. New SYSTEM META packets
16
+ # cause a new log file to be started.
17
+ class DartInterfaceThread < Cosmos::InterfaceThread
18
+ attr_writer :packet_log_writer
19
+ attr_writer :log_type
20
+
21
+ def handle_packet(packet)
22
+ if packet.target_name == 'SYSTEM'.freeze and packet.packet_name == 'META'.freeze
23
+ Cosmos::Logger.info("#{@log_type}: #{packet.target_name} #{packet.packet_name}")
24
+ # Update Current Value Table Used By Packet Log Writer
25
+ cvt_packet = Cosmos::System.telemetry.update!(packet.target_name, packet.packet_name, packet.buffer)
26
+ cvt_packet.received_time = packet.received_time
27
+ @packet_log_writer.start
28
+ @packet_log_writer.write(cvt_packet)
29
+ else
30
+ @packet_log_writer.write(packet)
31
+ end
32
+ end
33
+ end
34
+
35
+ Cosmos.catch_fatal_exception do
36
+ DartCommon.handle_argv
37
+
38
+ Cosmos::Logger.level = Cosmos::Logger::INFO
39
+ dart_logging = DartLogging.new('dart_ingester')
40
+
41
+ tlm_log_writer = DartPacketLogWriter.new(
42
+ :TLM, # Log telemetry
43
+ 'dart_', # Put dart_ in the log file name
44
+ true, # Enable logging
45
+ nil, # Don't cycle on time
46
+ 2_000_000_000, # Cycle the log at 2GB
47
+ Cosmos::System.paths['DART_DATA']) # Log into the DART_DATA dir
48
+
49
+ tlm_interface = Cosmos::TcpipClientInterface.new(
50
+ Cosmos::System.connect_hosts['CTS_PREIDENTIFIED'], # Connect to the CTS machine
51
+ nil, # Don't write commands
52
+ Cosmos::System.ports['CTS_PREIDENTIFIED'], # Read telemetry from the CTS port
53
+ nil, # No write timeout
54
+ nil, # No read timeout
55
+ 'PREIDENTIFIED') # PREIDENTIFIED protocol
56
+
57
+ tlm_thread = DartInterfaceThread.new(tlm_interface)
58
+ tlm_thread.packet_log_writer = tlm_log_writer
59
+ tlm_thread.log_type = :TLM
60
+
61
+ cmd_log_writer = DartPacketLogWriter.new(
62
+ :CMD, # Log commands
63
+ 'dart_', # Put dart_ in the log file name
64
+ true, # Enable logging
65
+ nil, # Don't cycle on time
66
+ 2_000_000_000, # Cycle the log at 2GB
67
+ Cosmos::System.paths['DART_DATA']) # Log into the DART_DATA dir
68
+
69
+ cmd_interface = Cosmos::TcpipClientInterface.new(
70
+ Cosmos::System.connect_hosts['CTS_CMD_ROUTER'], # Connect to the CTS machine
71
+ nil, # Don't write commands
72
+ Cosmos::System.ports['CTS_CMD_ROUTER'], # Read commands from the CMD port
73
+ nil, # No write timeout
74
+ nil, # No read timeout
75
+ 'PREIDENTIFIED') # PREIDENTIFIED protocol
76
+
77
+ cmd_thread = DartInterfaceThread.new(cmd_interface)
78
+ cmd_thread.packet_log_writer = cmd_log_writer
79
+ cmd_thread.log_type = :CMD
80
+
81
+ begin
82
+ tlm_thread.start
83
+ cmd_thread.start
84
+ sleep(1) while true
85
+ rescue Interrupt
86
+ tlm_thread.stop
87
+ cmd_thread.stop
88
+ tlm_log_writer.shutdown
89
+ cmd_log_writer.shutdown
90
+ dart_logging.stop
91
+ end
92
+ end