cosmos 4.1.1-java → 4.2.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (336) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -2
  3. data/.travis.yml +2 -0
  4. data/.yardopts +1 -0
  5. data/Gemfile +1 -0
  6. data/Manifest.txt +130 -0
  7. data/autohotkey/tools/ConfigEditorAHK +19 -0
  8. data/autohotkey/tools/cmd_extractor.ahk +4 -4
  9. data/autohotkey/tools/cmd_sequence.ahk +9 -5
  10. data/autohotkey/tools/config_editor.ahk +197 -0
  11. data/autohotkey/tools/packet_viewer.ahk +12 -6
  12. data/autohotkey/tools/replay.ahk +29 -29
  13. data/autohotkey/tools/script_runner.ahk +10 -2
  14. data/autohotkey/tools/tlm_extractor.ahk +7 -8
  15. data/autohotkey/tools/tlm_grapher.ahk +21 -9
  16. data/bin/dart_import +2 -0
  17. data/cosmos.gemspec +18 -16
  18. data/data/config/cmd_tlm_server.yaml +9 -0
  19. data/data/config/interface_modifiers.yaml +17 -0
  20. data/data/config/item_modifiers.yaml +3 -3
  21. data/data/crc.txt +184 -90
  22. data/data/dart.png +0 -0
  23. data/demo/Gemfile +1 -0
  24. data/demo/Rakefile +4 -0
  25. data/demo/config/dart/Gemfile +54 -0
  26. data/demo/config/data/crc.txt +28 -21
  27. data/demo/config/system/system.txt +3 -0
  28. data/demo/config/system/system2.txt +3 -0
  29. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +3 -3
  30. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +1 -1
  31. data/demo/config/targets/INST/lib/sim_inst.rb +1 -1
  32. data/demo/config/targets/INST/screens/adcs.txt +2 -1
  33. data/demo/config/targets/INST/screens/array.txt +1 -1
  34. data/demo/config/targets/INST/screens/block.txt +1 -1
  35. data/demo/config/targets/INST/screens/commanding.txt +7 -2
  36. data/demo/config/targets/INST/screens/graphs.txt +1 -1
  37. data/demo/config/targets/INST/screens/ground.txt +1 -1
  38. data/demo/config/targets/INST/screens/hs.txt +2 -1
  39. data/demo/config/targets/INST/screens/latest.txt +1 -1
  40. data/demo/config/targets/INST/screens/limits.txt +1 -1
  41. data/demo/config/targets/INST/screens/other.txt +1 -1
  42. data/demo/config/targets/INST/screens/tabs.txt +1 -1
  43. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  44. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +3 -1
  45. data/demo/config/tools/launcher/launcher.txt +3 -2
  46. data/demo/tools/Dart +16 -0
  47. data/demo/tools/Dart.bat +9 -0
  48. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +0 -0
  49. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +0 -0
  50. data/install/Gemfile +1 -0
  51. data/install/Rakefile +4 -0
  52. data/install/config/dart/Gemfile +54 -0
  53. data/install/config/data/crc.txt +6 -3
  54. data/install/config/system/system.txt +3 -0
  55. data/install/config/tools/launcher/launcher.txt +3 -2
  56. data/install/tools/Dart +16 -0
  57. data/install/tools/Dart.bat +9 -0
  58. data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +0 -0
  59. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +0 -0
  60. data/lib/cosmos/core_ext/time.rb +8 -8
  61. data/lib/cosmos/dart/.rspec +1 -0
  62. data/lib/cosmos/dart/Gemfile +69 -0
  63. data/lib/cosmos/dart/Rakefile +7 -0
  64. data/lib/cosmos/dart/app/assets/config/manifest.js +4 -0
  65. data/lib/cosmos/dart/app/assets/images/.keep +0 -0
  66. data/lib/cosmos/dart/app/assets/javascripts/application.js +13 -0
  67. data/lib/cosmos/dart/app/assets/javascripts/cable.js +13 -0
  68. data/lib/cosmos/dart/app/assets/stylesheets/application.css.scss +15 -0
  69. data/lib/cosmos/dart/app/channels/application_cable/channel.rb +4 -0
  70. data/lib/cosmos/dart/app/channels/application_cable/connection.rb +4 -0
  71. data/lib/cosmos/dart/app/controllers/application_controller.rb +3 -0
  72. data/lib/cosmos/dart/app/helpers/application_helper.rb +2 -0
  73. data/lib/cosmos/dart/app/jobs/application_job.rb +2 -0
  74. data/lib/cosmos/dart/app/mailers/application_mailer.rb +4 -0
  75. data/lib/cosmos/dart/app/models/application_record.rb +3 -0
  76. data/lib/cosmos/dart/app/models/item.rb +6 -0
  77. data/lib/cosmos/dart/app/models/item_to_decom_table_mapping.rb +9 -0
  78. data/lib/cosmos/dart/app/models/packet.rb +4 -0
  79. data/lib/cosmos/dart/app/models/packet_config.rb +7 -0
  80. data/lib/cosmos/dart/app/models/packet_log.rb +3 -0
  81. data/lib/cosmos/dart/app/models/packet_log_entry.rb +41 -0
  82. data/lib/cosmos/dart/app/models/system_config.rb +2 -0
  83. data/lib/cosmos/dart/app/models/target.rb +4 -0
  84. data/lib/cosmos/dart/app/views/layouts/application.html.erb +14 -0
  85. data/lib/cosmos/dart/app/views/layouts/mailer.html.erb +13 -0
  86. data/lib/cosmos/dart/app/views/layouts/mailer.text.erb +1 -0
  87. data/lib/cosmos/dart/bin/bundle +3 -0
  88. data/lib/cosmos/dart/bin/rails +4 -0
  89. data/lib/cosmos/dart/bin/rake +4 -0
  90. data/lib/cosmos/dart/bin/setup +34 -0
  91. data/lib/cosmos/dart/bin/update +29 -0
  92. data/lib/cosmos/dart/config.ru +5 -0
  93. data/lib/cosmos/dart/config/application.rb +29 -0
  94. data/lib/cosmos/dart/config/boot.rb +3 -0
  95. data/lib/cosmos/dart/config/cable.yml +9 -0
  96. data/lib/cosmos/dart/config/database.yml +23 -0
  97. data/lib/cosmos/dart/config/environment.rb +5 -0
  98. data/lib/cosmos/dart/config/environments/development.rb +62 -0
  99. data/lib/cosmos/dart/config/environments/production.rb +84 -0
  100. data/lib/cosmos/dart/config/environments/test.rb +42 -0
  101. data/lib/cosmos/dart/config/initializers/application_controller_renderer.rb +6 -0
  102. data/lib/cosmos/dart/config/initializers/assets.rb +12 -0
  103. data/lib/cosmos/dart/config/initializers/backtrace_silencers.rb +7 -0
  104. data/lib/cosmos/dart/config/initializers/cookies_serializer.rb +5 -0
  105. data/lib/cosmos/dart/config/initializers/filter_parameter_logging.rb +4 -0
  106. data/lib/cosmos/dart/config/initializers/inflections.rb +16 -0
  107. data/lib/cosmos/dart/config/initializers/mime_types.rb +4 -0
  108. data/lib/cosmos/dart/config/initializers/new_framework_defaults.rb +25 -0
  109. data/lib/cosmos/dart/config/initializers/session_store.rb +3 -0
  110. data/lib/cosmos/dart/config/initializers/wrap_parameters.rb +14 -0
  111. data/lib/cosmos/dart/config/locales/en.yml +23 -0
  112. data/lib/cosmos/dart/config/puma.rb +47 -0
  113. data/lib/cosmos/dart/config/routes.rb +3 -0
  114. data/lib/cosmos/dart/config/secrets.yml +22 -0
  115. data/lib/cosmos/dart/db/migrate/20170406172907_create_targets.rb +8 -0
  116. data/lib/cosmos/dart/db/migrate/20170406172927_create_packets.rb +10 -0
  117. data/lib/cosmos/dart/db/migrate/20170406172937_create_packet_logs.rb +9 -0
  118. data/lib/cosmos/dart/db/migrate/20170406172943_create_packet_log_entries.rb +16 -0
  119. data/lib/cosmos/dart/db/migrate/20170406183500_change_packet_log_entries_primary_key.rb +5 -0
  120. data/lib/cosmos/dart/db/migrate/20170407153618_add_unique_requirements.rb +7 -0
  121. data/lib/cosmos/dart/db/migrate/20170511155447_add_meta_id_to_packet_log_entries.rb +6 -0
  122. data/lib/cosmos/dart/db/migrate/20170523185056_rename_received_time_and_add_is_tlm_to_packet_log_entries.rb +7 -0
  123. data/lib/cosmos/dart/db/migrate/20170525201157_create_items.rb +10 -0
  124. data/lib/cosmos/dart/db/migrate/20170525201315_create_system_configs.rb +9 -0
  125. data/lib/cosmos/dart/db/migrate/20170525201624_create_packet_configs.rb +11 -0
  126. data/lib/cosmos/dart/db/migrate/20170525201745_create_item_to_decom_table_mappings.rb +12 -0
  127. data/lib/cosmos/dart/db/migrate/20170525201939_create_decom_tables.rb +12 -0
  128. data/lib/cosmos/dart/db/migrate/20170525202051_add_decom_state_to_packet_log_entry.rb +5 -0
  129. data/lib/cosmos/dart/db/migrate/20170913160409_update_items.rb +6 -0
  130. data/lib/cosmos/dart/db/migrate/20170913160558_update_item_to_decom_table_mapping.rb +11 -0
  131. data/lib/cosmos/dart/db/migrate/20170913160916_udpate_decom_table.rb +6 -0
  132. data/lib/cosmos/dart/db/migrate/20170913212026_add_ready_to_packet_configs.rb +5 -0
  133. data/lib/cosmos/dart/db/migrate/20170913223556_modify_tables.rb +9 -0
  134. data/lib/cosmos/dart/db/migrate/20170914215744_modify_mapping_table.rb +6 -0
  135. data/lib/cosmos/dart/db/migrate/20170919201433_add_system_config_id_to_packet_config.rb +11 -0
  136. data/lib/cosmos/dart/db/migrate/20170919210307_add_max_table_index_to_packet_configs.rb +5 -0
  137. data/lib/cosmos/dart/db/migrate/20171215225546_add_ready_to_packet_log_entries.rb +5 -0
  138. data/lib/cosmos/dart/db/migrate/20180116214338_add_index_for_ple_ready_to_packet_log_entries.rb +5 -0
  139. data/lib/cosmos/dart/db/schema.rb +103 -0
  140. data/lib/cosmos/dart/db/seeds.rb +7 -0
  141. data/lib/cosmos/dart/examples/dart_decom_client.rb +45 -0
  142. data/lib/cosmos/dart/examples/dart_stream_client.rb +93 -0
  143. data/lib/cosmos/dart/lib/dart_common.rb +749 -0
  144. data/lib/cosmos/dart/lib/dart_database_cleaner.rb +172 -0
  145. data/lib/cosmos/dart/lib/dart_decom_query.rb +184 -0
  146. data/lib/cosmos/dart/lib/dart_decommutator.rb +235 -0
  147. data/lib/cosmos/dart/lib/dart_importer.rb +154 -0
  148. data/lib/cosmos/dart/lib/dart_logging.rb +50 -0
  149. data/lib/cosmos/dart/lib/dart_packet_log_writer.rb +139 -0
  150. data/lib/cosmos/dart/lib/dart_reducer_manager.rb +85 -0
  151. data/lib/cosmos/dart/lib/dart_reducer_worker_thread.rb +263 -0
  152. data/lib/cosmos/dart/lib/dart_tcpip_server_interface.rb +142 -0
  153. data/lib/cosmos/dart/processes/dart.rb +145 -0
  154. data/lib/cosmos/dart/processes/dart_decom_server.rb +39 -0
  155. data/lib/cosmos/dart/processes/dart_import.rb +63 -0
  156. data/lib/cosmos/dart/processes/dart_ingester.rb +92 -0
  157. data/lib/cosmos/dart/processes/dart_reducer.rb +27 -0
  158. data/lib/cosmos/dart/processes/dart_stream_server.rb +31 -0
  159. data/lib/cosmos/dart/processes/dart_worker.rb +37 -0
  160. data/lib/cosmos/dart/spec/dart/dart_common_spec.rb +333 -0
  161. data/lib/cosmos/dart/spec/dart/dart_database_cleaner_spec.rb +455 -0
  162. data/lib/cosmos/dart/spec/dart/dart_decom_query_spec.rb +153 -0
  163. data/lib/cosmos/dart/spec/dart/dart_decommutator_spec.rb +336 -0
  164. data/lib/cosmos/dart/spec/dart/dart_importer_spec.rb +83 -0
  165. data/lib/cosmos/dart/spec/dart/dart_logging_spec.rb +30 -0
  166. data/lib/cosmos/dart/spec/dart/dart_packet_log_writer_spec.rb +149 -0
  167. data/lib/cosmos/dart/spec/dart/dart_reducer_manager_spec.rb +289 -0
  168. data/lib/cosmos/dart/spec/dart/dart_tcpip_server_interface_spec.rb +241 -0
  169. data/lib/cosmos/dart/spec/rails_helper.rb +60 -0
  170. data/lib/cosmos/dart/spec/spec_helper.rb +139 -0
  171. data/lib/cosmos/gui/dialogs/about_dialog.rb +1 -1
  172. data/lib/cosmos/gui/dialogs/dart_dialog.rb +60 -0
  173. data/lib/cosmos/gui/dialogs/legal_dialog.rb +1 -0
  174. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +0 -3
  175. data/lib/cosmos/gui/qt.rb +10 -1
  176. data/lib/cosmos/gui/text/completion.rb +10 -9
  177. data/lib/cosmos/gui/text/completion_text_edit.rb +16 -14
  178. data/lib/cosmos/gui/text/ruby_editor.rb +2 -2
  179. data/lib/cosmos/gui/widgets/dart_frame.rb +142 -0
  180. data/lib/cosmos/gui/widgets/dart_meta_frame.rb +119 -0
  181. data/lib/cosmos/gui/widgets/packet_log_frame.rb +42 -12
  182. data/lib/cosmos/interfaces/interface.rb +1 -2
  183. data/lib/cosmos/interfaces/protocols/crc_protocol.rb +26 -8
  184. data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +8 -2
  185. data/lib/cosmos/interfaces/protocols/protocol.rb +2 -1
  186. data/lib/cosmos/interfaces/protocols/template_protocol.rb +1 -1
  187. data/lib/cosmos/interfaces/stream_interface.rb +1 -0
  188. data/lib/cosmos/interfaces/tcpip_server_interface.rb +2 -3
  189. data/lib/cosmos/io/json_drb_object.rb +1 -1
  190. data/lib/cosmos/io/json_rpc.rb +2 -1
  191. data/lib/cosmos/io/win32_serial_driver.rb +2 -9
  192. data/lib/cosmos/packet_logs/packet_log_writer.rb +1 -1
  193. data/lib/cosmos/packets/packet.rb +22 -12
  194. data/lib/cosmos/packets/packet_config.rb +2 -1
  195. data/lib/cosmos/packets/packet_item.rb +26 -24
  196. data/lib/cosmos/packets/parsers/macro_parser.rb +5 -2
  197. data/lib/cosmos/packets/parsers/packet_item_parser.rb +35 -17
  198. data/lib/cosmos/packets/parsers/packet_parser.rb +3 -10
  199. data/lib/cosmos/packets/parsers/xtce_converter.rb +21 -35
  200. data/lib/cosmos/packets/parsers/xtce_parser.rb +54 -46
  201. data/lib/cosmos/packets/structure.rb +10 -2
  202. data/lib/cosmos/packets/structure_item.rb +22 -8
  203. data/lib/cosmos/processors/statistics_processor.rb +2 -0
  204. data/lib/cosmos/script/api_shared.rb +13 -12
  205. data/lib/cosmos/script/cmd_tlm_server.rb +4 -0
  206. data/lib/cosmos/script/commands.rb +3 -15
  207. data/lib/cosmos/script/script.rb +69 -23
  208. data/lib/cosmos/streams/tcpip_client_stream.rb +2 -2
  209. data/lib/cosmos/system/system.rb +42 -25
  210. data/lib/cosmos/system/target.rb +6 -2
  211. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +177 -36
  212. data/lib/cosmos/tools/cmd_sender/cmd_param_table_item_delegate.rb +3 -2
  213. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +34 -8
  214. data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +80 -25
  215. data/lib/cosmos/tools/cmd_tlm_server/api.rb +19 -4
  216. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +15 -14
  217. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +15 -9
  218. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +1 -9
  219. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +1 -6
  220. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +1 -3
  221. data/lib/cosmos/tools/cmd_tlm_server/gui/replay_tab.rb +84 -7
  222. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +0 -1
  223. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +1 -5
  224. data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +3 -2
  225. data/lib/cosmos/tools/cmd_tlm_server/replay_backend.rb +159 -27
  226. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +1 -1
  227. data/lib/cosmos/tools/config_editor/config_editor.rb +17 -52
  228. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +0 -5
  229. data/lib/cosmos/tools/data_viewer/data_viewer.rb +111 -0
  230. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +31 -18
  231. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +12 -3
  232. data/lib/cosmos/tools/script_runner/script_runner.rb +27 -14
  233. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +104 -37
  234. data/lib/cosmos/tools/table_manager/table_config.rb +1 -1
  235. data/lib/cosmos/tools/table_manager/table_item_parser.rb +4 -2
  236. data/lib/cosmos/tools/table_manager/table_manager.rb +0 -5
  237. data/lib/cosmos/tools/table_manager/table_manager_core.rb +0 -1
  238. data/lib/cosmos/tools/test_runner/test.rb +1 -3
  239. data/lib/cosmos/tools/test_runner/test_runner.rb +26 -15
  240. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +290 -137
  241. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +122 -25
  242. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +67 -0
  243. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +28 -0
  244. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +36 -0
  245. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +42 -3
  246. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +88 -14
  247. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +2 -5
  248. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +2 -6
  249. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +74 -18
  250. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +3 -7
  251. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_dart_thread.rb +159 -0
  252. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +49 -2
  253. data/lib/cosmos/tools/tlm_viewer/screen.rb +3 -0
  254. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +0 -2
  255. data/lib/cosmos/tools/tlm_viewer/widgets.rb +1 -0
  256. data/lib/cosmos/tools/tlm_viewer/widgets/backgroundbutton_widget.rb +54 -0
  257. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +5 -5
  258. data/lib/cosmos/top_level.rb +1 -0
  259. data/lib/cosmos/utilities/crc.rb +3 -0
  260. data/lib/cosmos/utilities/csv.rb +1 -0
  261. data/lib/cosmos/utilities/message_log.rb +2 -1
  262. data/lib/cosmos/utilities/simulated_target.rb +8 -8
  263. data/lib/cosmos/version.rb +5 -5
  264. data/lib/cosmos/win32/win32.rb +4 -10
  265. data/run_gui_tests.bat +2 -1
  266. data/spec/config/config_parser_spec.rb +4 -4
  267. data/spec/core_ext/array_spec.rb +1 -1
  268. data/spec/core_ext/exception_spec.rb +12 -12
  269. data/spec/core_ext/file_spec.rb +6 -6
  270. data/spec/core_ext/hash_spec.rb +1 -1
  271. data/spec/core_ext/socket_spec.rb +2 -2
  272. data/spec/core_ext/string_spec.rb +13 -13
  273. data/spec/core_ext/time_spec.rb +0 -2
  274. data/spec/gui/utilities/script_module_gui_spec.rb +3 -3
  275. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +6 -6
  276. data/spec/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +4 -0
  277. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +6 -2
  278. data/spec/interfaces/interface_spec.rb +0 -1
  279. data/spec/interfaces/linc_interface_spec.rb +0 -5
  280. data/spec/interfaces/protocols/crc_protocol_spec.rb +201 -85
  281. data/spec/interfaces/protocols/fixed_protocol_spec.rb +33 -9
  282. data/spec/interfaces/protocols/length_protocol_spec.rb +1 -1
  283. data/spec/interfaces/protocols/override_protocol_spec.rb +6 -2
  284. data/spec/interfaces/protocols/preidentified_protocol_spec.rb +1 -5
  285. data/spec/interfaces/protocols/template_protocol_spec.rb +0 -1
  286. data/spec/interfaces/simulated_target_interface_spec.rb +5 -5
  287. data/spec/interfaces/udp_interface_spec.rb +2 -4
  288. data/spec/io/buffered_file_spec.rb +8 -12
  289. data/spec/io/json_drb_spec.rb +9 -9
  290. data/spec/io/json_rpc_spec.rb +4 -4
  291. data/spec/io/raw_logger_spec.rb +4 -3
  292. data/spec/packet_logs/packet_log_reader_spec.rb +3 -6
  293. data/spec/packet_logs/packet_log_writer_spec.rb +4 -4
  294. data/spec/packets/binary_accessor_spec.rb +5 -8
  295. data/spec/packets/commands_spec.rb +2 -2
  296. data/spec/packets/limits_spec.rb +2 -2
  297. data/spec/packets/packet_config_spec.rb +12 -0
  298. data/spec/packets/packet_item_limits_spec.rb +1 -1
  299. data/spec/packets/packet_item_spec.rb +9 -9
  300. data/spec/packets/packet_spec.rb +15 -5
  301. data/spec/packets/parsers/packet_item_parser_spec.rb +27 -0
  302. data/spec/packets/parsers/xtce_parser_spec.rb +27 -30
  303. data/spec/packets/structure_spec.rb +2 -1
  304. data/spec/packets/telemetry_spec.rb +3 -5
  305. data/spec/processors/statistics_processor_spec.rb +35 -0
  306. data/spec/script/cmd_tlm_server_spec.rb +4 -21
  307. data/spec/script/commands_disconnect_spec.rb +46 -58
  308. data/spec/script/commands_spec.rb +40 -61
  309. data/spec/script/limits_spec.rb +1 -21
  310. data/spec/script/script_spec.rb +32 -41
  311. data/spec/script/scripting_spec.rb +166 -185
  312. data/spec/script/telemetry_spec.rb +10 -5
  313. data/spec/script/tools_spec.rb +2 -24
  314. data/spec/spec_helper.rb +11 -5
  315. data/spec/system/system_spec.rb +17 -12
  316. data/spec/tools/cmd_tlm_server/api_spec.rb +21 -10
  317. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +15 -16
  318. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +0 -1
  319. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +16 -27
  320. data/spec/tools/cmd_tlm_server/commanding_spec.rb +2 -6
  321. data/spec/tools/cmd_tlm_server/connections_spec.rb +0 -4
  322. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +13 -13
  323. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +5 -9
  324. data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +11 -3
  325. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +0 -4
  326. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +5 -5
  327. data/spec/tools/cmd_tlm_server/routers_spec.rb +5 -9
  328. data/spec/tools/table_manager/table_config_spec.rb +0 -1
  329. data/spec/tools/table_manager/tablemanager_core_spec.rb +23 -23
  330. data/spec/tools/tlm_viewer/tlm_viewer_config_spec.rb +6 -4
  331. data/spec/top_level/top_level_spec.rb +9 -9
  332. data/spec/utilities/csv_spec.rb +2 -12
  333. data/spec/utilities/logger_spec.rb +6 -6
  334. data/spec/utilities/message_log_spec.rb +3 -11
  335. data/tasks/gemfile_stats.rake +2 -2
  336. metadata +167 -60
@@ -0,0 +1,60 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2018 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ # This file contains the implementation of the StreamPacketsDialog class. This class
12
+ # provides a dialog box to configure packet streaming from DART
13
+
14
+ require 'cosmos'
15
+ require 'cosmos/gui/qt'
16
+ require 'cosmos/gui/widgets/dart_frame'
17
+
18
+ module Cosmos
19
+ # Creates a dialog to allow a user to select the
20
+ # time period to process.
21
+ class DartDialog < Qt::Dialog
22
+ extend Forwardable
23
+ def_delegators :@stream_packets_frame, :time_start, :time_start=, :time_end, :time_end=, :meta_filters
24
+
25
+ # @param parent (see PacketLogFrame#initialize)
26
+ # @param title [String] Dialog title
27
+ # @param show_time (see PacketLogFrame#initialize)
28
+ def initialize(parent, title, show_time = true)
29
+ super(parent)
30
+ setWindowTitle(title)
31
+
32
+ @layout = Qt::VBoxLayout.new
33
+ @stream_packets_frame = DartFrame.new(self, show_time)
34
+ @stream_packets_frame.change_callback = method(:change_callback)
35
+ @layout.addWidget(@stream_packets_frame)
36
+
37
+ # Separator before buttons
38
+ @sep1 = Qt::Frame.new(self)
39
+ @sep1.setFrameStyle(Qt::Frame::HLine | Qt::Frame::Sunken)
40
+ @layout.addWidget(@sep1)
41
+
42
+ # Create OK and Cancel buttons
43
+ @button_layout = Qt::HBoxLayout.new
44
+ @ok_button = Qt::PushButton.new('OK')
45
+ @ok_button.connect(SIGNAL('clicked()')) { System.telemetry.reset; self.accept }
46
+ @button_layout.addWidget(@ok_button)
47
+ @cancel_button = Qt::PushButton.new('Cancel')
48
+ @cancel_button.connect(SIGNAL('clicked()')) { self.reject }
49
+ @button_layout.addWidget(@cancel_button)
50
+
51
+ @layout.addLayout(@button_layout)
52
+ setLayout(@layout)
53
+ end
54
+
55
+ protected
56
+
57
+ def change_callback(item_changed)
58
+ end
59
+ end
60
+ end
@@ -153,6 +153,7 @@ module Cosmos
153
153
  File.open(filename, 'r') do |file|
154
154
  file.each_line do |line|
155
155
  split_line = line.strip.scan(ConfigParser::PARSING_REGEX)
156
+ next unless split_line[0]
156
157
  if split_line[0] == 'USER_MODIFIED'
157
158
  official = false
158
159
  next
@@ -17,9 +17,6 @@ module Cosmos
17
17
  SCREEN_WIDTH_MARGIN = 40
18
18
  SCREEN_HEIGHT_MARGIN = 100
19
19
 
20
- # @param parent [Qt::Widget] Parent of this dialog
21
- # @param title [String] Dialog title
22
- # @param text [String] Text to display
23
20
  # @param parent [Qt::Widget] Parent of this dialog
24
21
  # @param title [String] Dialog title
25
22
  # @param text [String] Text to display
@@ -252,7 +252,16 @@ module Cosmos
252
252
  end
253
253
  end
254
254
  end
255
- return config_change_success, change_error
255
+ end
256
+ end
257
+
258
+ class Qt::CheckboxLabel < Qt::Label
259
+ def setCheckbox(checkbox)
260
+ @checkbox = checkbox
261
+ end
262
+
263
+ def mouseReleaseEvent(event)
264
+ @checkbox.toggle
256
265
  end
257
266
  end
258
267
 
@@ -13,15 +13,17 @@ require 'cosmos/gui/qt'
13
13
  require 'cosmos/script'
14
14
 
15
15
  module Cosmos
16
-
16
+ # Performs code completion for COSMOS by supporting all the COSMOS keywords
17
+ # as well as the defined targets and packets.
17
18
  class Completion < Qt::Completer
18
19
  CMD_KEYWORDS = %w(cmd cmd_no_range_check cmd_no_hazardous_check cmd_no_checks
19
20
  cmd_raw cmd_raw_no_range_check cmd_raw_no_hazardous_check cmd_raw_no_checks)
20
21
  TLM_KEYWORDS = %w(set_tlm set_tlm_raw override_tlm override_tlm_raw normalize_tlm
21
- tlm tlm_raw tlm_formatted tlm_with_units
22
- limits_enabled? enable_limits disable_limits
23
- check check_raw check_tolerance check_tolerance_raw
24
- wait wait_raw wait_tolerance wait_tolerance_raw wait_check wait_check_raw wait_check_tolerance wait_check_tolerance_raw)
22
+ tlm tlm_raw tlm_formatted tlm_with_units
23
+ limits_enabled? enable_limits disable_limits
24
+ check check_raw check_tolerance check_tolerance_raw
25
+ wait wait_raw wait_tolerance wait_tolerance_raw wait_check wait_check_raw
26
+ wait_check_tolerance wait_check_tolerance_raw)
25
27
 
26
28
  slots 'insertCompletion(const QString&)'
27
29
 
@@ -324,13 +326,13 @@ module Cosmos
324
326
  end
325
327
  end
326
328
 
327
- #Creates a Popup box to help with code completion
329
+ # Creates a Popup box to help with code completion
328
330
  def create_list_popup(list_items)
329
331
  return if list_items.nil? or list_items.empty?
330
332
  create_popup(list_items)
331
333
  end
332
334
 
333
- # Called by script_runner on SEL_KEYRELEASE
335
+ # Called by CompletionTextEdit in the keyPressEvent method
334
336
  def handle_keypress(event)
335
337
  current_line = widget.textCursor.block.text
336
338
 
@@ -398,5 +400,4 @@ module Cosmos
398
400
  setCurrentRow(0) if popup.isVisible
399
401
  end
400
402
  end
401
-
402
- end # module Cosmos
403
+ end
@@ -13,8 +13,13 @@ require 'cosmos/gui/qt'
13
13
  require 'cosmos/gui/dialogs/splash'
14
14
 
15
15
  module Cosmos
16
-
16
+ # Creates a Completion object to handle code completion popups.
17
+ # This calss also includes many helper methods to access various
18
+ # lines, indent selections, highlight lines and center the view.
17
19
  class CompletionTextEdit < Qt::PlainTextEdit
20
+ # Create a signal so users of CompletionTextEdit don't have to
21
+ # subclass in order to listen to keyPressEvents
22
+ signals 'key_pressed(QKeyEvent*)'
18
23
  TRUE_VARIANT = Qt::Variant.new(true)
19
24
  SELECTION_DETAILS_POOL = []
20
25
 
@@ -78,34 +83,31 @@ module Cosmos
78
83
  @code_completion.dispose if @code_completion
79
84
  end
80
85
 
81
- def keyPressCallback=(callback)
82
- @keypress_callback = callback
83
- end
84
-
85
86
  def keyPressEvent(event)
87
+ emit key_pressed(event)
88
+
86
89
  # If the completion popup is visible then ignore the event and allow the popup to handle it
87
- if (@code_completion and @code_completion.popup.isVisible)
90
+ if (@code_completion && @code_completion.popup.isVisible)
88
91
  case event.key
89
- when Qt::Key_Return, Qt::Key_Enter
92
+ when Qt::Key_Return, Qt::Key_Enter, Qt::Key_Tab, Qt::Key_Backtab
90
93
  event.ignore
91
94
  return
92
95
  end
93
96
  end
94
97
 
95
- continue = @keypress_callback.call(event) if @keypress_callback
96
-
97
98
  case event.key
98
99
  when Qt::Key_Tab
100
+ # Ensure Ctrl-Tab doesn't activate indentation
99
101
  if event.modifiers == Qt::NoModifier
100
102
  indent_selection()
101
103
  end
102
104
  when Qt::Key_Backtab
103
- unindent_selection()
104
- else
105
- if continue != false
106
- super(event)
107
- @code_completion.handle_keypress(event) if @code_completion
105
+ if event.modifiers == Qt::NoModifier
106
+ unindent_selection()
108
107
  end
108
+ else
109
+ super(event)
110
+ @code_completion.handle_keypress(event) if @code_completion
109
111
  end
110
112
  end
111
113
 
@@ -94,8 +94,6 @@ module Cosmos
94
94
  ['\b\w+(::\b\w+)+', 0, STYLES['class']],
95
95
  # Ruby global
96
96
  ['\\$\b\w+', 0, STYLES['string']],
97
- # A single # or a # not followed by { to the end
98
- ['(#$|#[^{]).*', 0, STYLES['comment']],
99
97
  # Regex, possibly containing escape sequences
100
98
  ["/.*/", 0, STYLES['string']],
101
99
  # Double-quoted string, possibly containing escape sequences
@@ -108,6 +106,8 @@ module Cosmos
108
106
  ["'[^'\\\\]*(\\.[^'\\\\]*)*'", 0, STYLES['string']],
109
107
  # Back-tick string, possibly containing escape sequences
110
108
  ["`[^`\\\\]*(\\.[^`\\\\]*)*`", 0, STYLES['string']],
109
+ # A single # possibly followed by matched quotes
110
+ ['#(?=([^\'"]*(\'|")[^\'"]*(\'|"))*[^\'"]*$).*', 0, STYLES['comment']],
111
111
  ])
112
112
 
113
113
  # Build a QRegExp for each pattern
@@ -0,0 +1,142 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2018 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'cosmos'
12
+ require 'cosmos/gui/qt'
13
+ require 'cosmos/gui/dialogs/calendar_dialog'
14
+ require 'cosmos/gui/widgets/dart_meta_frame'
15
+
16
+ module Cosmos
17
+ # Widget which displays a button to configure packet stream from DART.
18
+ # Buttons exist to display start and stop time choosers
19
+ class DartFrame < Qt::Widget
20
+ # @return [Time] Start time of packets to process
21
+ attr_reader :time_start
22
+ # @return [Time] End time of packets to process
23
+ attr_reader :time_end
24
+ # @return [#call] Callback called when something changes. Called with
25
+ # the item that was changed as a symbol. The possible values are
26
+ # :TIME_START, :TIME_END
27
+ attr_accessor :change_callback
28
+
29
+ # @param parent [Qt::Widget] Parent to this dialog
30
+ # @param show_time [Boolean] Whether to show the start and end time
31
+ # fields and buttons which popup a calendar browser
32
+ def initialize(parent,
33
+ show_time = true)
34
+ super(parent)
35
+
36
+ @time_start = nil
37
+ @time_end = nil
38
+ @change_callback = nil
39
+
40
+ @vbox = Qt::VBoxLayout.new
41
+ @vbox.setContentsMargins(0,0,0,0)
42
+
43
+ @layout = Qt::GridLayout.new
44
+ row = 0
45
+
46
+ # Declare these regardless of if show_time is set so getters and setters work
47
+ @time_start_field = Qt::LineEdit.new('N/A')
48
+ @time_end_field = Qt::LineEdit.new('N/A')
49
+ if show_time
50
+ %w(Start End).each do |time|
51
+ time_label = Qt::Label.new("Time Period #{time}:")
52
+ @layout.addWidget(time_label, row, 0)
53
+ if time == 'Start'
54
+ time_field = @time_start_field
55
+ else
56
+ time_field = @time_end_field
57
+ end
58
+ time_field.setMinimumWidth(340)
59
+ time_field.setReadOnly(true)
60
+ @layout.addWidget(time_field, row, 1)
61
+ time_clear_button = Qt::PushButton.new('Clear')
62
+ time_clear_button.connect(SIGNAL('clicked()')) { handle_time_clear_button(time, time_field) }
63
+ @layout.addWidget(time_clear_button, row, 2)
64
+ time_button = Qt::PushButton.new('Select')
65
+ time_button.connect(SIGNAL('clicked()')) { handle_time_select_button(time, time_field) }
66
+ @layout.addWidget(time_button, row, 3)
67
+ row += 1
68
+ end
69
+ end
70
+
71
+ @vbox.addLayout(@layout)
72
+
73
+ @dart_meta_frame = DartMetaFrame.new(self)
74
+ @vbox.addWidget(@dart_meta_frame)
75
+
76
+ setLayout(@vbox)
77
+ end
78
+
79
+ # @param time_start [Time] Start time
80
+ def time_start=(time_start)
81
+ @time_start = time_start
82
+ if @time_start
83
+ @time_start_field.setText(@time_start.formatted)
84
+ else
85
+ @time_start_field.setText('N/A')
86
+ end
87
+ end
88
+
89
+ # @param time_end [Time] End time
90
+ def time_end=(time_end)
91
+ @time_end = time_end
92
+ if @time_end
93
+ @time_end_field.setText(@time_end.formatted)
94
+ else
95
+ @time_end_field.setText('N/A')
96
+ end
97
+ end
98
+
99
+ def meta_filters
100
+ @dart_meta_frame.meta_filters
101
+ end
102
+
103
+ protected
104
+
105
+ # Handles choosing a time
106
+ def handle_time_select_button(time_period, time_field)
107
+ if time_period == 'Start'
108
+ time = @time_start
109
+ time = @time_end unless @time_start
110
+ else
111
+ time = @time_end
112
+ time = @time_start unless @time_end
113
+ end
114
+ dialog = CalendarDialog.new(self, "Select Time Period #{time_period}:", time)
115
+ case dialog.exec
116
+ when Qt::Dialog::Accepted
117
+ time_field.setText(dialog.time.formatted)
118
+ if time_period == 'Start'
119
+ @time_start = dialog.time
120
+ @change_callback.call(:TIME_START) if @change_callback
121
+ else
122
+ @time_end = dialog.time
123
+ @change_callback.call(:TIME_END) if @change_callback
124
+ end
125
+ end
126
+ end
127
+
128
+ # Clears the time
129
+ def handle_time_clear_button(time_period, time_field)
130
+ current_text = time_field.text
131
+ time_field.setText('N/A')
132
+ if time_period == 'Start'
133
+ @time_start = nil
134
+ @change_callback.call(:TIME_START) if @change_callback and current_text != 'N/A'
135
+ else
136
+ @time_end = nil
137
+ @change_callback.call(:TIME_END) if @change_callback and current_text != 'N/A'
138
+ end
139
+ end
140
+
141
+ end
142
+ end
@@ -0,0 +1,119 @@
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
+ class DartMetaFrame < Qt::Widget
17
+ @@meta_filters = []
18
+
19
+ def initialize(parent)
20
+ super(parent)
21
+
22
+ @got_meta_item_names = false
23
+
24
+ @layout = Qt::VBoxLayout.new(self)
25
+ @layout.setContentsMargins(0,0,0,0)
26
+
27
+ @groupbox = Qt::GroupBox.new("Meta Filter Selection")
28
+ @vbox = Qt::VBoxLayout.new(@groupbox)
29
+ @hbox1 = Qt::HBoxLayout.new
30
+ @label = Qt::Label.new("Meta Filters: ")
31
+ @hbox1.addWidget(@label)
32
+ @meta_filters_text = Qt::LineEdit.new
33
+ @meta_filters_text.setReadOnly(true)
34
+ @meta_filters_text.text = @@meta_filters.to_s[1..-2]
35
+ @hbox1.addWidget(@meta_filters_text)
36
+ @clear_button = Qt::PushButton.new("Clear")
37
+ @hbox1.addWidget(@clear_button)
38
+ @clear_button.connect(SIGNAL('clicked()')) do
39
+ @@meta_filters = []
40
+ @meta_filters_text.text = ""
41
+ update_meta_item_names()
42
+ end
43
+ @vbox.addLayout(@hbox1)
44
+
45
+ @hbox2 = Qt::HBoxLayout.new
46
+ @meta_item_name = Qt::ComboBox.new
47
+ @meta_item_name.setMinimumWidth(200)
48
+ @meta_item_name.setMaxVisibleItems(6)
49
+ @hbox2.addWidget(@meta_item_name)
50
+ @comparison = Qt::ComboBox.new
51
+ @comparison.addItem("==")
52
+ @comparison.addItem("!=")
53
+ @comparison.addItem(">")
54
+ @comparison.addItem(">=")
55
+ @comparison.addItem("<")
56
+ @comparison.addItem("<=")
57
+ @comparison.setMaxVisibleItems(6)
58
+ @hbox2.addWidget(@comparison)
59
+ @filter_value = Qt::LineEdit.new
60
+ @hbox2.addWidget(@filter_value)
61
+ @add_button = Qt::PushButton.new("Add Filter")
62
+ @add_button.connect(SIGNAL('clicked()')) do
63
+ filter_value = @filter_value.text
64
+ if filter_value.to_s.strip.length > 0
65
+ if filter_value.index(" ")
66
+ if filter_value.index('"')
67
+ @@meta_filters << "#{@meta_item_name.text} #{@comparison.text} '#{@filter_value.text}'"
68
+ else
69
+ @@meta_filters << "#{@meta_item_name.text} #{@comparison.text} \"#{@filter_value.text}\""
70
+ end
71
+ else
72
+ @@meta_filters << "#{@meta_item_name.text} #{@comparison.text} #{@filter_value.text}"
73
+ end
74
+ else
75
+ @@meta_filters << "#{@meta_item_name.text} #{@comparison.text} ''"
76
+ end
77
+ @meta_filters_text.text = @@meta_filters.to_s[1..-2]
78
+ end
79
+ @hbox2.addWidget(@add_button)
80
+ @vbox.addLayout(@hbox2)
81
+ @layout.addWidget(@groupbox)
82
+
83
+ setLayout(@layout)
84
+
85
+ @resize_timer = Qt::Timer.new
86
+ @resize_timer.connect(SIGNAL('timeout()')) { update_meta_item_names() }
87
+ @resize_timer.start(100)
88
+ end
89
+
90
+ def meta_filters
91
+ @@meta_filters
92
+ end
93
+
94
+ protected
95
+
96
+ def update_meta_item_names
97
+ if !@got_meta_item_names and !@update_thread
98
+ @update_thread = Thread.new do
99
+ begin
100
+ server = JsonDRbObject.new(System.connect_hosts['DART_DECOM'], System.ports['DART_DECOM'])
101
+ item_names = server.item_names("SYSTEM", "META")
102
+ Qt.execute_in_main_thread do
103
+ @meta_item_name.clear
104
+ item_names.each do |item|
105
+ @meta_item_name.addItem(item)
106
+ end
107
+ end
108
+ @got_meta_item_names = true
109
+ rescue Exception
110
+ # We tried...
111
+ ensure
112
+ @update_thread = nil
113
+ server.disconnect if defined? server
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end