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
@@ -137,6 +137,7 @@ module Cosmos
137
137
  'replay_move_index',
138
138
  'get_screen_list',
139
139
  'get_screen_definition',
140
+ 'get_saved_config',
140
141
  ]
141
142
  @tlm_viewer_config_filename = nil
142
143
  @tlm_viewer_config = nil
@@ -390,7 +391,7 @@ module Cosmos
390
391
  end
391
392
  else
392
393
  commands = System.commands.all
393
- commands.each do |target_name, target_commands|
394
+ commands.each do |_, target_commands|
394
395
  target_commands.each do |packet_name, command|
395
396
  last_command = command if !last_command and command.received_time
396
397
  if command.received_time and command.received_time > last_command.received_time
@@ -825,7 +826,7 @@ module Cosmos
825
826
  end
826
827
 
827
828
  # (see Cosmos::Limits#overall_limits_state)
828
- def get_overall_limits_state (ignored_items = nil)
829
+ def get_overall_limits_state(ignored_items = nil)
829
830
  return System.limits.overall_limits_state(ignored_items)
830
831
  end
831
832
 
@@ -1250,8 +1251,7 @@ module Cosmos
1250
1251
 
1251
1252
  # Get the list of packet loggers.
1252
1253
  #
1253
- # @param packet_logger_name [String] Name of the packet logger
1254
- # @return [<Array<String>] Array containing the names of all packet loggers
1254
+ # @return [Array<String>] Array containing the names of all packet loggers
1255
1255
  def get_packet_loggers
1256
1256
  return CmdTlmServer.packet_logging.all.keys
1257
1257
  end
@@ -1566,6 +1566,21 @@ module Cosmos
1566
1566
  return screen_definition
1567
1567
  end
1568
1568
 
1569
+ # Get a saved configuration zip file
1570
+ def get_saved_config(configuration_name = nil)
1571
+ configuration_name ||= System.initial_config.name if System.initial_config
1572
+ if configuration_name
1573
+ configuration = System.instance.find_configuration(configuration_name)
1574
+ if configuration and File.exist?(configuration) and configuration[-4..-1] == ".zip"
1575
+ filename = File.basename(configuration)
1576
+ data = ''
1577
+ File.open(configuration, 'rb') {|file| data = file.read}
1578
+ return [filename, data]
1579
+ end
1580
+ end
1581
+ return nil
1582
+ end
1583
+
1569
1584
  private
1570
1585
 
1571
1586
  def cmd_implementation(range_check, hazardous_check, raw, method_name, *args)
@@ -109,7 +109,7 @@ module Cosmos
109
109
  end
110
110
 
111
111
  # Set the meta callback
112
- def self.meta_callback= (meta_callback)
112
+ def self.meta_callback=(meta_callback)
113
113
  @@meta_callback = meta_callback
114
114
  end
115
115
 
@@ -130,7 +130,8 @@ module Cosmos
130
130
  config_file = DEFAULT_CONFIG_FILE,
131
131
  production = false,
132
132
  disconnect = false,
133
- mode = :CMD_TLM_SERVER)
133
+ mode = :CMD_TLM_SERVER,
134
+ replay_routers = false)
134
135
 
135
136
  @@instance = self
136
137
  @packet_logging = nil # Removes warnings
@@ -217,7 +218,7 @@ module Cosmos
217
218
  @routers.add_preidentified('PREIDENTIFIED_ROUTER', System.ports['CTS_PREIDENTIFIED'])
218
219
  @routers.add_cmd_preidentified('PREIDENTIFIED_CMD_ROUTER', System.ports['CTS_CMD_ROUTER'])
219
220
  else
220
- @routers.all.clear
221
+ @routers.all.clear unless replay_routers
221
222
  @routers.add_preidentified('PREIDENTIFIED_ROUTER', System.ports['REPLAY_PREIDENTIFIED'])
222
223
  @routers.add_cmd_preidentified('PREIDENTIFIED_CMD_ROUTER', System.ports['REPLAY_CMD_ROUTER'])
223
224
  end
@@ -235,17 +236,17 @@ module Cosmos
235
236
  def stop
236
237
  # Break long pollers
237
238
  @limits_event_queues.dup.each do |id, data|
238
- queue, queue_size = @limits_event_queues.delete(id)
239
+ queue, _ = @limits_event_queues.delete(id)
239
240
  queue << nil if queue
240
241
  end
241
242
 
242
243
  @server_message_queues.dup.each do |id, data|
243
- queue, queue_size = @server_message_queues.delete(id)
244
+ queue, _ = @server_message_queues.delete(id)
244
245
  queue << nil if queue
245
246
  end
246
247
 
247
248
  @packet_data_queues.dup.each do |id, data|
248
- queue, packets, queue_size = @packet_data_queues.delete(id)
249
+ queue, _, _ = @packet_data_queues.delete(id)
249
250
  queue << nil if queue
250
251
  end
251
252
 
@@ -268,7 +269,7 @@ module Cosmos
268
269
  end
269
270
 
270
271
  # Set a stop callback
271
- def stop_callback= (stop_callback)
272
+ def stop_callback=(stop_callback)
272
273
  @stop_callback = stop_callback
273
274
  end
274
275
 
@@ -283,7 +284,7 @@ module Cosmos
283
284
  end
284
285
 
285
286
  # Set a reload callback
286
- def reload_callback= (reload_callback)
287
+ def reload_callback=(reload_callback)
287
288
  @reload_callback = reload_callback
288
289
  end
289
290
 
@@ -367,7 +368,7 @@ module Cosmos
367
368
  queues_to_drop.each do |id|
368
369
  # Remove the queue to stop servicing it. Nil is added to unblock any client threads
369
370
  # that might otherwise be left blocking forever for something on the queue
370
- queue, queue_size = @limits_event_queues.delete(id)
371
+ queue, _ = @limits_event_queues.delete(id)
371
372
  queue << nil if queue
372
373
  end
373
374
  end
@@ -409,7 +410,7 @@ module Cosmos
409
410
  @@instance.limits_event_queue_mutex.synchronize do
410
411
  # Remove the queue to stop servicing it. Nil is added to unblock any client threads
411
412
  # that might otherwise be left blocking forever for something on the queue
412
- queue, queue_size = @@instance.limits_event_queues.delete(id)
413
+ queue, _ = @@instance.limits_event_queues.delete(id)
413
414
  queue << nil if queue
414
415
  end
415
416
  end
@@ -470,7 +471,7 @@ module Cosmos
470
471
  queues_to_drop.each do |id|
471
472
  # Remove the queue to stop servicing it. Nil is added to unblock any client threads
472
473
  # that might otherwise be left blocking forever for something on the queue
473
- queue, packets, queue_size = @packet_data_queues.delete(id)
474
+ queue, _, _ = @packet_data_queues.delete(id)
474
475
  queue << nil if queue
475
476
  end
476
477
  end
@@ -542,7 +543,7 @@ module Cosmos
542
543
  @@instance.packet_data_queue_mutex.synchronize do
543
544
  # Remove the queue to stop servicing it. Nil is added to unblock any client threads
544
545
  # that might otherwise be left blocking forever for something on the queue
545
- queue, packets, queue_size = @@instance.packet_data_queues.delete(id)
546
+ queue, _, _ = @@instance.packet_data_queues.delete(id)
546
547
  queue << nil if queue
547
548
  end
548
549
  return nil
@@ -605,7 +606,7 @@ module Cosmos
605
606
  queues_to_drop.each do |id|
606
607
  # Remove the queue to stop servicing it. Nil is added to unblock any client threads
607
608
  # that might otherwise be left blocking forever for something on the queue
608
- queue, queue_size = @server_message_queues.delete(id)
609
+ queue, _ = @server_message_queues.delete(id)
609
610
  queue << nil if queue
610
611
  end
611
612
  end
@@ -644,7 +645,7 @@ module Cosmos
644
645
  @@instance.server_message_queue_mutex.synchronize do
645
646
  # Remove the queue to stop servicing it. Nil is added to unblock any client threads
646
647
  # that might otherwise be left blocking forever for something on the queue
647
- queue, queue_size = @@instance.server_message_queues.delete(id)
648
+ queue, _ = @@instance.server_message_queues.delete(id)
648
649
  queue << nil if queue
649
650
  end
650
651
  end
@@ -123,6 +123,7 @@ module Cosmos
123
123
  end
124
124
  @production = options.production
125
125
  @no_prompt = options.no_prompt
126
+ @replay_routers = options.replay_routers
126
127
  @message_log = nil
127
128
  @output_sleeper = Sleeper.new
128
129
  @first_output = 0
@@ -147,7 +148,7 @@ module Cosmos
147
148
 
148
149
  if !CmdTlmServer.instance or @mode == :CMD_TLM_SERVER
149
150
  CmdTlmServer.meta_callback = method(:meta_callback)
150
- cts = CmdTlmServer.new(@options.config_file, @production, false, @mode)
151
+ cts = CmdTlmServer.new(@options.config_file, @production, false, @mode, @replay_routers)
151
152
  CmdTlmServerGui.configure_signal_handlers()
152
153
  cts.stop_callback = method(:stop_callback)
153
154
  cts.reload_callback = method(:reload)
@@ -508,7 +509,7 @@ module Cosmos
508
509
  CmdTlmServer.instance.stop_callback = nil
509
510
  CmdTlmServer.instance.stop
510
511
  System.reset
511
- cts = CmdTlmServer.new(@options.config_file, @options.production, false, @mode)
512
+ cts = CmdTlmServer.new(@options.config_file, @options.production, false, @mode, @options.replay_routers)
512
513
 
513
514
  # Signal catching needs to be repeated here because Puma interferes
514
515
  ["TERM", "INT"].each {|sig| Signal.trap(sig) {exit}}
@@ -557,7 +558,7 @@ module Cosmos
557
558
  else
558
559
  @mode = :CMD_TLM_SERVER
559
560
  end
560
- cts = CmdTlmServer.new(options.config_file, options.production, false, @mode)
561
+ cts = CmdTlmServer.new(options.config_file, options.production, false, @mode, options.replay_routers)
561
562
 
562
563
  # Signal catching needs to be repeated here because Puma interferes
563
564
  ["TERM", "INT"].each {|sig| Signal.trap(sig) {exit}}
@@ -616,12 +617,7 @@ module Cosmos
616
617
  options.production = false
617
618
  options.no_prompt = false
618
619
  options.no_gui = false
619
- if self.name == "Cosmos::Replay"
620
- options.replay = true
621
- options.title = "Replay"
622
- else
623
- options.replay = false
624
- end
620
+ options.replay_routers = false
625
621
 
626
622
  option_parser.separator "CTS Specific Options:"
627
623
  option_parser.on("-c", "--config FILE", "Use the specified configuration file") do |arg|
@@ -636,6 +632,16 @@ module Cosmos
636
632
  option_parser.on(nil, "--no-gui", "Run the server without a GUI") do |arg|
637
633
  options.no_gui = true
638
634
  end
635
+
636
+ if self.name == "Cosmos::Replay"
637
+ options.replay = true
638
+ options.title = "Replay"
639
+ option_parser.on(nil, "--routers", "Enable All Routers") do |arg|
640
+ options.replay_routers = true
641
+ end
642
+ else
643
+ options.replay = false
644
+ end
639
645
  end
640
646
 
641
647
  super(option_parser, options)
@@ -13,7 +13,6 @@ require 'cosmos/gui/qt'
13
13
  require 'cosmos/gui/dialogs/interface_raw_dialog'
14
14
 
15
15
  module Cosmos
16
-
17
16
  # Implements the interfaces and routers tabs in the Command and Telemetry Server GUI
18
17
  class InterfacesTab
19
18
  INTERFACES = 'Interfaces'
@@ -39,22 +38,16 @@ module Cosmos
39
38
  end
40
39
 
41
40
  # Create the interfaces tab and add it to the tab_widget
42
- #
43
- # @param tab_widget [Qt::TabWidget] The tab widget to add the tab to
44
41
  def populate_interfaces
45
42
  populate(CmdTlmServer.interfaces)
46
43
  end
47
44
 
48
45
  # Create the routers tab and add it to the tab_widget
49
- #
50
- # @param tab_widget [Qt::TabWidget] The tab widget to add the tab to
51
46
  def populate_routers
52
47
  populate(CmdTlmServer.routers)
53
48
  end
54
49
 
55
50
  # Update the interfaces or routers tab
56
- #
57
- # @param name [String] Must be Interfaces or Routers
58
51
  def update
59
52
  if @name == ROUTERS
60
53
  interfaces = CmdTlmServer.routers
@@ -219,6 +212,5 @@ module Cosmos
219
212
  state.setTextAlignment(Qt::AlignCenter)
220
213
  state
221
214
  end
222
-
223
215
  end
224
- end # module Cosmos
216
+ end
@@ -12,10 +12,8 @@ require 'cosmos'
12
12
  require 'cosmos/gui/qt'
13
13
 
14
14
  module Cosmos
15
-
16
15
  # Implements the logging tab in the Command and Telemetry Server GUI
17
16
  class LoggingTab
18
-
19
17
  def initialize(production, tab_widget)
20
18
  @production = production
21
19
  @widget = nil
@@ -33,8 +31,6 @@ module Cosmos
33
31
  end
34
32
 
35
33
  # Create the logging tab and add it to the tab_widget
36
- #
37
- # @param tab_widget [Qt::TabWidget] The tab widget to add the tab to
38
34
  def populate
39
35
  reset()
40
36
  @widget = Qt::Widget.new
@@ -181,6 +177,5 @@ module Cosmos
181
177
  end
182
178
  layout.addWidget(Qt::Label.new(Qt::Object.tr("Note: Buffered IO operations cause file size to not reflect total logged data size until the log file is closed.")))
183
179
  end
184
-
185
180
  end
186
- end # module Cosmos
181
+ end
@@ -13,7 +13,6 @@ require 'cosmos/gui/qt'
13
13
  require 'cosmos/gui/dialogs/cmd_tlm_raw_dialog'
14
14
 
15
15
  module Cosmos
16
-
17
16
  # Implements the packets tab in the Command and Telemetry Server GUI
18
17
  class PacketsTab
19
18
  COMMANDS = "Commands"
@@ -157,6 +156,5 @@ module Cosmos
157
156
  table.setItem(row, 4, table_widget)
158
157
  end
159
158
  end
160
-
161
159
  end
162
- end # module Cosmos
160
+ end
@@ -12,13 +12,12 @@ require 'cosmos'
12
12
  require 'cosmos/gui/qt'
13
13
  require 'cosmos/gui/choosers/string_chooser'
14
14
  require 'cosmos/gui/dialogs/packet_log_dialog'
15
+ require 'cosmos/gui/dialogs/dart_dialog'
15
16
  require 'cosmos/gui/dialogs/progress_dialog'
16
17
 
17
18
  module Cosmos
18
-
19
19
  # Implements the replay tab in the Command and Telemetry Server GUI
20
20
  class ReplayTab
21
-
22
21
  attr_accessor :widget
23
22
 
24
23
  def initialize(tab_widget)
@@ -39,11 +38,12 @@ module Cosmos
39
38
  end
40
39
 
41
40
  # Create the targets tab and add it to the tab_widget
42
- #
43
- # @param tab_widget [Qt::TabWidget] The tab widget to add the tab to
44
41
  def populate
45
42
  return if @widget
46
43
 
44
+ @resize_timer = Qt::Timer.new
45
+ @resize_timer.connect(SIGNAL('timeout()')) { @widget.resize(@widget.width, @widget.minimumHeight) }
46
+
47
47
  @widget = Qt::Widget.new
48
48
 
49
49
  layout = Qt::VBoxLayout.new(@widget)
@@ -58,6 +58,44 @@ module Cosmos
58
58
  @log_layout.setContentsMargins(0,0,0,0)
59
59
  @log_widget.setLayout(@log_layout)
60
60
 
61
+ # Data Source Selection
62
+ @data_source_layout = Qt::HBoxLayout.new()
63
+ label = Qt::Label.new("Data Source: ")
64
+ @data_source_layout.addWidget(label)
65
+ @log_file_radio = Qt::RadioButton.new("Log File", @widget)
66
+ @log_file_radio.setChecked(true)
67
+ @log_file_radio.connect(SIGNAL('clicked()')) do
68
+ @stream_selection.hide
69
+ @log_file_selection.show
70
+ @op.setTitle("Playback Control: Log File")
71
+ @move_start.setEnabled(false)
72
+ @step_back.setEnabled(false)
73
+ @reverse_play.setEnabled(false)
74
+ @stop.setEnabled(false)
75
+ @play.setEnabled(false)
76
+ @step_forward.setEnabled(false)
77
+ @move_end.setEnabled(false)
78
+ @resize_timer.start(100)
79
+ end
80
+ @data_source_layout.addWidget(@log_file_radio)
81
+ @dart_radio = Qt::RadioButton.new("DART Database", @widget)
82
+ @dart_radio.connect(SIGNAL('clicked()')) do
83
+ @log_file_selection.hide
84
+ @stream_selection.show
85
+ @op.setTitle("Playback Control: DART Database")
86
+ @move_start.setEnabled(false)
87
+ @step_back.setEnabled(false)
88
+ @reverse_play.setEnabled(false)
89
+ @stop.setEnabled(false)
90
+ @play.setEnabled(false)
91
+ @step_forward.setEnabled(false)
92
+ @move_end.setEnabled(false)
93
+ @resize_timer.start(100)
94
+ end
95
+ @data_source_layout.addWidget(@dart_radio)
96
+ @data_source_layout.addStretch()
97
+ @log_layout.addLayout(@data_source_layout)
98
+
61
99
  # Create the log file GUI
62
100
  @log_file_selection = Qt::GroupBox.new("Log File Selection")
63
101
  @log_select = Qt::HBoxLayout.new(@log_file_selection)
@@ -70,8 +108,18 @@ module Cosmos
70
108
 
71
109
  @log_open.connect(SIGNAL('clicked()')) { select_log_file() }
72
110
 
111
+ # Create the streaming GUI
112
+ @stream_selection = Qt::GroupBox.new("Stream Selection")
113
+ @stream_select = Qt::HBoxLayout.new(@stream_selection)
114
+ @stream_open = Qt::PushButton.new("Select Stream...")
115
+ @stream_select.addWidget(@stream_open)
116
+ @log_layout.addWidget(@stream_selection)
117
+ @stream_selection.hide
118
+
119
+ @stream_open.connect(SIGNAL('clicked()')) { select_stream() }
120
+
73
121
  # Create the operation buttons GUI
74
- @op = Qt::GroupBox.new("Playback Control")
122
+ @op = Qt::GroupBox.new("Playback Control: Log File")
75
123
  @op_layout = Qt::VBoxLayout.new(@op)
76
124
  @op_button_layout = Qt::HBoxLayout.new
77
125
  @move_start = Qt::PushButton.new(Cosmos.get_icon('skip_to_start-26.png'), '')
@@ -104,6 +152,13 @@ module Cosmos
104
152
  @move_end.connect(SIGNAL('clicked()')) { CmdTlmServer.replay_backend.move_end() }
105
153
  @op_button_layout.addWidget(@move_end)
106
154
  @op_layout.addLayout(@op_button_layout)
155
+ @move_start.setEnabled(false)
156
+ @step_back.setEnabled(false)
157
+ @reverse_play.setEnabled(false)
158
+ @stop.setEnabled(false)
159
+ @play.setEnabled(false)
160
+ @step_forward.setEnabled(false)
161
+ @move_end.setEnabled(false)
107
162
 
108
163
  # Speed Selection
109
164
  @playback_delay = nil
@@ -144,7 +199,7 @@ module Cosmos
144
199
  @op_layout.addLayout(@speed_layout)
145
200
  @log_layout.addWidget(@op)
146
201
 
147
- @file_pos = Qt::GroupBox.new("File Position")
202
+ @file_pos = Qt::GroupBox.new("Time")
148
203
  @file_pos_layout = Qt::VBoxLayout.new(@file_pos)
149
204
  @slider = Qt::Slider.new(Qt::Horizontal)
150
205
  @slider.setRange(0, 10000)
@@ -235,8 +290,30 @@ module Cosmos
235
290
  case packet_log_dialog.exec
236
291
  when Qt::Dialog::Accepted
237
292
  CmdTlmServer.replay_backend.select_file(packet_log_dialog.filenames[0], packet_log_dialog.packet_log_reader)
293
+ @move_start.setEnabled(true)
294
+ @step_back.setEnabled(true)
295
+ @reverse_play.setEnabled(true)
296
+ @stop.setEnabled(true)
297
+ @play.setEnabled(true)
298
+ @step_forward.setEnabled(true)
299
+ @move_end.setEnabled(true)
238
300
  end
239
301
  end
240
302
 
303
+ def select_stream
304
+ dart_dialog = DartDialog.new(@widget, 'Select Stream', true)
305
+ case dart_dialog.exec
306
+ when Qt::Dialog::Accepted
307
+ CmdTlmServer.replay_backend.select_stream(dart_dialog.time_start, dart_dialog.time_end, dart_dialog.meta_filters)
308
+ @log_name.text = ""
309
+ @move_start.setEnabled(true)
310
+ @step_back.setEnabled(false)
311
+ @reverse_play.setEnabled(true)
312
+ @stop.setEnabled(true)
313
+ @play.setEnabled(true)
314
+ @step_forward.setEnabled(false)
315
+ @move_end.setEnabled(true)
316
+ end
317
+ end
241
318
  end
242
- end # module Cosmos
319
+ end