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
@@ -22,17 +22,15 @@ require 'cosmos/tools/tlm_grapher/data_objects/xy_data_object'
22
22
  require 'cosmos/tools/tlm_grapher/data_objects/singlexy_data_object'
23
23
 
24
24
  module Cosmos
25
-
26
25
  # Provides capabilities to read an ascii file that lists
27
26
  # the details for a set of plots drawn in tabs.
28
27
  class TabbedPlotsConfig
29
-
30
28
  # Default Values
31
29
  DEFAULT_SECONDS_PLOTTED = 100.0
32
30
  DEFAULT_POINTS_SAVED = 1000000
33
31
  DEFAULT_POINTS_PLOTTED = 1000
34
32
  DEFAULT_REFRESH_RATE_HZ = 10.0
35
- DEFAULT_CTS_TIMEOUT = 10.0
33
+ DEFAULT_CTS_TIMEOUT = 60.0
36
34
 
37
35
  # Gives access to the array of tabs defined by the configuration file
38
36
  attr_accessor :tabs
@@ -445,7 +443,5 @@ module Cosmos
445
443
  end
446
444
  end
447
445
  end
448
-
449
- end # class TabbedPlotsConfig
450
-
451
- end # module Cosmos
446
+ end
447
+ end
@@ -0,0 +1,159 @@
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 'cosmos'
12
+ require 'cosmos/gui/qt'
13
+ require 'cosmos/io/json_drb_object'
14
+
15
+ module Cosmos
16
+
17
+ # Thread used to gather telemetry from DART and process it using a TabbedPlotsDefinition
18
+ class TabbedPlotsDartThread
19
+ # Array of exceptions that occurred
20
+ attr_reader :errors
21
+
22
+ # Create a new TabbedPlotsLogfileThread
23
+ def initialize(tabbed_plots_config, progress_dialog = nil, time_start = nil, time_end = nil, meta_filters = [])
24
+ super()
25
+ @tabbed_plots_config = tabbed_plots_config
26
+ @errors = []
27
+ @done = false
28
+ @cancel = false
29
+
30
+ if progress_dialog
31
+ progress_dialog.cancel_callback = method(:kill)
32
+ progress_dialog.enable_cancel_button
33
+ end
34
+
35
+ @thread = Thread.new do
36
+ begin
37
+ # Determine required queries for DART
38
+ required_queries = []
39
+ @tabbed_plots_config.mu_synchronize do
40
+ @tabbed_plots_config.each_data_object do |data_object|
41
+ required_queries.concat(data_object.processed_items)
42
+ end
43
+ end
44
+ required_queries.uniq!
45
+
46
+ # Execute each query
47
+ results = {}
48
+ server = JsonDRbObject.new(System.connect_hosts['DART_DECOM'], System.ports['DART_DECOM'])
49
+ time_start = Time.utc(1970, 1, 1) unless time_start
50
+ time_end = Time.now unless time_end
51
+ progress_dialog.set_step_progress(0) if progress_dialog
52
+ index = 0
53
+ required_queries.each do |target_name, packet_name, item_name, value_type, array_index, dart_reduction, dart_reduced_type|
54
+ begin
55
+ break if @cancel
56
+ value_type = :CONVERTED if !value_type or value_type != :RAW
57
+ # TODO: Support FORMATTED and WITH_UNITS by iterating and modifying results
58
+ query_string = "#{target_name} #{packet_name} #{item_name} #{value_type} #{array_index} #{dart_reduction} #{dart_reduced_type}"
59
+ progress_dialog.append_text("Querying #{query_string}") if progress_dialog
60
+ request = {}
61
+ request['start_time_sec'] = time_start.tv_sec
62
+ request['start_time_usec'] = time_start.tv_usec
63
+ request['end_time_sec'] = time_end.tv_sec
64
+ request['end_time_usec'] = time_end.tv_usec
65
+ request['item'] = [target_name, packet_name, item_name]
66
+ request['reduction'] = dart_reduction.to_s
67
+ request['cmd_tlm'] = 'TLM'
68
+ request['offset'] = 0
69
+ request['limit'] = 10000
70
+ if dart_reduction == :NONE
71
+ request['value_type'] = value_type.to_s
72
+ else
73
+ request['value_type'] = value_type.to_s + "_#{dart_reduced_type}"
74
+ end
75
+ request['meta_filters'] = meta_filters unless meta_filters.empty?
76
+ query_result = server.query(request)
77
+ result = query_result
78
+ if array_index
79
+ result = []
80
+ query_result.each do |qr|
81
+ result << [qr[0][array_index], qr[1], qr[2], qr[3], qr[4]]
82
+ end
83
+ end
84
+ results[query_string] = result
85
+ progress_dialog.append_text(" Received #{result.length} values") if progress_dialog
86
+ progress_dialog.set_step_progress((index + 1).to_f / required_queries.length) if progress_dialog
87
+ rescue Exception => error
88
+ @errors << error
89
+ break if @cancel
90
+ progress_dialog.append_text("Error querying #{query_string} : #{error.class}:#{error.message}\n#{error.backtrace.join("\n")}\n", 2) if progress_dialog
91
+ # If a progress dialog is shown we can't just bail on this error or
92
+ # it will close and the user will have no idea what happened
93
+ # Thus we'll spin here waiting for them to close the dialog
94
+ break if @cancel
95
+ if progress_dialog
96
+ sleep(0.1) until progress_dialog.complete?
97
+ end
98
+ break # Bail out because something bad happened
99
+ end
100
+ index += 1
101
+ end
102
+ progress_dialog.set_step_progress(1.0) if progress_dialog and not @cancel
103
+ progress_dialog.set_overall_progress(0.5) if progress_dialog and not @cancel
104
+
105
+ # Fill each data object with the DART data
106
+ # For now assume all results are time correlated (they should be)
107
+ @tabbed_plots_config.mu_synchronize do
108
+ @tabbed_plots_config.each_data_object do |data_object|
109
+ do_results = []
110
+ data_object.processed_items.each do |target_name, packet_name, item_name, value_type, array_index, dart_reduction, dart_reduced_type|
111
+ query_string = "#{target_name} #{packet_name} #{item_name} #{value_type} #{array_index} #{dart_reduction} #{dart_reduced_type}"
112
+ do_results << results[query_string]
113
+ end
114
+ data_object.process_dart(do_results)
115
+ end
116
+ end
117
+
118
+ rescue Exception => error
119
+ @errors << error
120
+ return if @cancel
121
+ progress_dialog.append_text("DART Thread Error #{error.class}:#{error.message}\n#{error.backtrace.join("\n")}\n", 2) if progress_dialog
122
+ # If a progress dialog is shown we can't just bail on this error or
123
+ # it will close and the user will have no idea what happened
124
+ # Thus we'll spin here waiting for them to close the dialog
125
+ if progress_dialog
126
+ sleep(0.1) until progress_dialog.complete? or @cancel
127
+ end
128
+ ensure
129
+ if !@cancel
130
+ progress_dialog.complete if progress_dialog
131
+ sleep(0.1) # Give the user a chance to see something if we process really fast
132
+ end
133
+ @done = true
134
+ end
135
+ end
136
+ end # def initialize
137
+
138
+ # Indicates if processing is complete
139
+ def done?
140
+ @done
141
+ end
142
+
143
+ # Kills the log file processing thread
144
+ def kill(progress_dialog = nil)
145
+ @cancel = true
146
+ Cosmos.kill_thread(self, @thread)
147
+ progress_dialog.complete if progress_dialog
148
+ @thread = nil
149
+ @done = true
150
+ return true, false
151
+ end # def kill
152
+
153
+ def graceful_kill
154
+ # Just to remove warnings
155
+ end
156
+
157
+ end # class TabbedPlotsLogfileThread
158
+
159
+ end # module Cosmos
@@ -15,10 +15,12 @@ require 'cosmos/packet_logs/packet_log_reader'
15
15
  require 'cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config'
16
16
  require 'cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread'
17
17
  require 'cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread'
18
+ require 'cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_dart_thread'
18
19
  require 'cosmos/gui/widgets/realtime_button_bar'
19
20
  require 'cosmos/gui/dialogs/exception_list_dialog'
20
21
  require 'cosmos/gui/dialogs/packet_log_dialog'
21
22
  require 'cosmos/gui/dialogs/progress_dialog'
23
+ require 'cosmos/gui/dialogs/dart_dialog'
22
24
  require 'cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots'
23
25
 
24
26
  module Cosmos
@@ -42,6 +44,7 @@ module Cosmos
42
44
  complete_initialize()
43
45
 
44
46
  # Define instance variables
47
+ @need_reset = false
45
48
  @log_filenames = []
46
49
  @log_dir = System.paths['LOGS']
47
50
  @log_dir += '/' unless @log_dir[-1..-1] == '\\' or @log_dir[-1..-1] == '/'
@@ -94,6 +97,12 @@ module Cosmos
94
97
  @file_process.statusTip = tr('Open Log File')
95
98
  @file_process.connect(SIGNAL('triggered()')) { on_file_process_log() }
96
99
 
100
+ @file_dart = Qt::Action.new(tr('&Query DART Database'), self)
101
+ @file_dart_keyseq = Qt::KeySequence.new(tr('Ctrl+D'))
102
+ @file_dart.shortcut = @file_dart_keyseq
103
+ @file_dart.statusTip = tr('Query DART Database')
104
+ @file_dart.connect(SIGNAL('triggered()')) { on_file_dart() }
105
+
97
106
  @file_load = Qt::Action.new(Cosmos.get_icon('open.png'), tr('&Load Config'), self)
98
107
  @file_load.statusTip = tr('Load Saved Configuration')
99
108
  @file_load.connect(SIGNAL('triggered()')) { on_file_load_config() }
@@ -208,6 +217,7 @@ module Cosmos
208
217
  # File Menu
209
218
  @file_menu = menuBar.addMenu(tr('&File'))
210
219
  @file_menu.addAction(@file_process)
220
+ @file_menu.addAction(@file_dart)
211
221
  @file_menu.addSeparator()
212
222
  @file_menu.addAction(@file_load)
213
223
  @file_menu.addAction(@file_save)
@@ -512,9 +522,9 @@ module Cosmos
512
522
  @time_start = dialog.time_start
513
523
  @time_end = dialog.time_end
514
524
  handle_stop()
525
+ @need_reset = true
515
526
  System.telemetry.reset
516
527
  @tabbed_plots.reset_all_data_objects
517
- @realtime_button_bar.state = 'Log File'
518
528
  @packet_log_reader = dialog.packet_log_reader
519
529
  @log_filenames = dialog.filenames.clone
520
530
  filenames = dialog.filenames.sort
@@ -538,6 +548,42 @@ module Cosmos
538
548
  dialog.dispose
539
549
  end # def on_file_process_log
540
550
 
551
+ # Handles querying data from DART
552
+ def on_file_dart
553
+ paused = @tabbed_plots.paused?
554
+ @tabbed_plots.pause
555
+ dialog = DartDialog.new(self,
556
+ 'Query DART Database:')
557
+ dialog.time_start = @time_start
558
+ dialog.time_end = @time_end
559
+ result = dialog.exec
560
+ if result != 0
561
+ @time_start = dialog.time_start
562
+ @time_end = dialog.time_end
563
+ @meta_filters = dialog.meta_filters
564
+ handle_stop()
565
+ @need_reset = true
566
+ System.telemetry.reset
567
+ @tabbed_plots.reset_all_data_objects
568
+
569
+ ProgressDialog.execute(self, 'DART Query Progress', 500, 300) do |progress_dialog|
570
+ dart_thread = TabbedPlotsDartThread.new(@tabbed_plots_config,
571
+ progress_dialog,
572
+ @time_start,
573
+ @time_end,
574
+ @meta_filters)
575
+ sleep(0.1) until dart_thread.done?
576
+ progress_dialog.close_done
577
+ end
578
+
579
+ @tabbed_plots.redraw_plots(true, true)
580
+ @tabbed_plots.update
581
+ else
582
+ @tabbed_plots.resume unless paused
583
+ end
584
+ dialog.dispose
585
+ end # def on_file_process_log
586
+
541
587
  # Handles loading a configuration file
542
588
  def on_file_load_config
543
589
  paused = @tabbed_plots.paused?
@@ -937,7 +983,8 @@ module Cosmos
937
983
  @realtime_button_bar.state = 'Running'
938
984
  else
939
985
  System.load_configuration
940
- if @realtime_button_bar.state == 'Log File'
986
+ if @need_reset
987
+ @need_reset = false
941
988
  System.telemetry.reset
942
989
  @tabbed_plots.reset_all_data_objects
943
990
  end
@@ -258,6 +258,9 @@ module Cosmos
258
258
 
259
259
  begin
260
260
  parser = ConfigParser.new("http://cosmosrb.com/docs/screens/")
261
+ parser.instance_variable_set(:@original_target_name, @original_target_name)
262
+ name = @substitute ? @substitute : @original_target_name
263
+ parser.instance_variable_set(:@target_name, name)
261
264
  parser.parse_file(filename) do |keyword, parameters|
262
265
 
263
266
  if keyword
@@ -8,8 +8,6 @@
8
8
  # as published by the Free Software Foundation; version 3 with
9
9
  # attribution addendums as found in the LICENSE.txt
10
10
 
11
- require 'cosmos'
12
-
13
11
  module Cosmos
14
12
  # Parses the Telemetry Viewer configuration file and builds up the list
15
13
  # of available screens to display.
@@ -2,6 +2,7 @@
2
2
  require 'cosmos/tools/tlm_viewer/widgets/array_widget.rb'
3
3
  require 'cosmos/tools/tlm_viewer/widgets/block_widget.rb'
4
4
  require 'cosmos/tools/tlm_viewer/widgets/button_widget.rb'
5
+ require 'cosmos/tools/tlm_viewer/widgets/backgroundbutton_widget.rb'
5
6
  require 'cosmos/tools/tlm_viewer/widgets/canvasdot_widget.rb'
6
7
  require 'cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb'
7
8
  require 'cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb'
@@ -0,0 +1,54 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 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 file contains the implementation of the BackgroundbuttonWidget class.
12
+
13
+ require 'cosmos'
14
+ require 'cosmos/tools/tlm_viewer/widgets/widget'
15
+ require 'cosmos/gui/utilities/script_module_gui'
16
+
17
+ module Cosmos
18
+ # Run user defined code in the background. This means that all code which
19
+ # interacts with the GUI MUST be wrapped in Qt.execute_in_main_thread.
20
+ class BackgroundbuttonWidget < Qt::PushButton
21
+ include Widget
22
+
23
+ def initialize(parent_layout, button_text, string_to_eval)
24
+ super()
25
+ setText(button_text.to_s)
26
+ connect(SIGNAL('clicked()')) { execute(string_to_eval.to_s) }
27
+ parent_layout.addWidget(self) if parent_layout
28
+ end
29
+
30
+ def execute(code)
31
+ # Disable the button while the code is executed to avoid thrashing
32
+ setEnabled(false)
33
+ # Spawn a new thread to avoid blocking the GUI.
34
+ Thread.new do
35
+ begin
36
+ @screen.instance_eval(code)
37
+ rescue DRb::DRbConnError
38
+ Qt.execute_in_main_thread do
39
+ Qt::MessageBox.warning(parent.parentWidget, 'Error', "Error Connecting to Command and Telemetry Server")
40
+ end
41
+ rescue Exception => error
42
+ message = error.message
43
+ if error.message.include?("Qt methods cannot be called")
44
+ message = "Error executing button code:\n#{code}\n\nYou must wrap calls to the GUI in Qt.execute_in_main_thread { <GUI Code> }"
45
+ end
46
+ Qt.execute_in_main_thread do
47
+ Qt::MessageBox.warning(parent.parentWidget, 'Error', "#{error.class} : #{message}")
48
+ end
49
+ end
50
+ Qt.execute_in_main_thread { self.setEnabled(true) }
51
+ end
52
+ end
53
+ end
54
+ end
@@ -15,11 +15,13 @@ require 'cosmos/tools/tlm_viewer/widgets/widget'
15
15
  require 'cosmos/gui/utilities/script_module_gui'
16
16
 
17
17
  module Cosmos
18
-
18
+ # Run user defined code in the GUI thread context. This means that user
19
+ # code should not block or take too long to execute as it will freeze
20
+ # the TlmViewer screen.
19
21
  class ButtonWidget < Qt::PushButton
20
22
  include Widget
21
23
 
22
- def initialize (parent_layout, button_text, string_to_eval)
24
+ def initialize(parent_layout, button_text, string_to_eval)
23
25
  super()
24
26
  setText(button_text.to_s)
25
27
  connect(SIGNAL('clicked()')) do
@@ -33,7 +35,5 @@ module Cosmos
33
35
  end
34
36
  parent_layout.addWidget(self) if parent_layout
35
37
  end
36
-
37
38
  end
38
-
39
- end # module Cosmos
39
+ end
@@ -67,6 +67,7 @@ module Cosmos
67
67
  saved_verbose = $VERBOSE
68
68
  $VERBOSE = nil
69
69
  yield
70
+ ensure
70
71
  $VERBOSE = saved_verbose
71
72
  end
72
73
 
@@ -96,6 +96,9 @@ module Cosmos
96
96
  # to use the default seed set in the constructor.
97
97
  # @return [Integer] The CRC value
98
98
 
99
+ # Bit reverse the 8 bit value
100
+ # @param value [Integer]
101
+ # @return [Integer] Bit reversed value
99
102
  def bit_reverse_8(value)
100
103
  BIT_REVERSE_TABLE[value & 0xFF]
101
104
  end
@@ -25,6 +25,7 @@ module Cosmos
25
25
  @archive = nil
26
26
  @archive_file = ""
27
27
  Object::CSV.read(input_file).each do |line|
28
+ next if line[0].strip()[0] == '#' # Ignore Ruby comment lines
28
29
  @hash[line[0]] = line[1..-1]
29
30
  end
30
31
  end
@@ -39,13 +39,14 @@ module Cosmos
39
39
  # message to the log and flushes it to force the write.
40
40
  #
41
41
  # @param message [String] Message to write to the log
42
- def write(message)
42
+ def write(message, flush = false)
43
43
  @mutex.synchronize do
44
44
  if @file.nil? or @file.closed? or (not File.exist?(@filename))
45
45
  start(false)
46
46
  end
47
47
 
48
48
  @file.write(message)
49
+ @file.flush if flush
49
50
  end
50
51
  end
51
52
 
@@ -13,26 +13,27 @@ require 'cosmos/packets/structure'
13
13
  require 'cosmos/system/system'
14
14
 
15
15
  module Cosmos
16
-
17
- # Update Packet for Simulated Targets
18
16
  class Packet < Structure
19
17
  attr_accessor :packet_rate
20
18
  end
21
19
 
20
+ # Base class for all virtual COSMOS targets which must be implemented by
21
+ # a subclass. Provides a framework and helper methods to implement a
22
+ # virtual target which can cycle telemetry values and emit telemetry
23
+ # packets.
22
24
  class SimulatedTarget
23
-
24
25
  attr_accessor :tlm_packets
25
26
 
26
- def initialize (target_name)
27
+ def initialize(target_name)
27
28
  @tlm_packets = {}
28
29
 
29
- #Generate copy of telemetry packets for this target
30
+ # Generate copy of telemetry packets for this target
30
31
  System.telemetry.packets(target_name).each do |name, packet|
31
32
  @tlm_packets[name] = packet.clone
32
33
  @tlm_packets[name].enable_method_missing
33
34
  end
34
35
 
35
- #Set id values
36
+ # Set id values
36
37
  @tlm_packets.each do |name, packet|
37
38
  ids = packet.id_items
38
39
  ids.each do |id|
@@ -65,7 +66,7 @@ module Cosmos
65
66
  def get_pending_packets(count_100hz)
66
67
  pending_packets = []
67
68
 
68
- #determine if packets are due to be sent and add to pending
69
+ # Determine if packets are due to be sent and add to pending
69
70
  @tlm_packets.each do |name, packet|
70
71
  if packet.packet_rate
71
72
  if ((count_100hz % packet.packet_rate) == 0)
@@ -96,5 +97,4 @@ module Cosmos
96
97
  updated_value
97
98
  end
98
99
  end
99
-
100
100
  end