cosmos 4.1.1-java → 4.2.0-java

Sign up to get free protection for your applications and to get access to all the features.
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