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
@@ -92,6 +92,12 @@ module Cosmos
92
92
  raise "processed_packets must be defined by class #{self.class}"
93
93
  end
94
94
 
95
+ # Returns the items used by this data object in the order required
96
+ # by process_dart and process_values
97
+ def processed_items
98
+ raise "processed_items must be defined by class #{self.class}"
99
+ end
100
+
95
101
  # Processes a packet associated with this data object
96
102
  #
97
103
  # @param packet [Packet] The packet to process
@@ -101,6 +107,31 @@ module Cosmos
101
107
  raise "process_packet must be defined by class #{self.class}"
102
108
  end
103
109
 
110
+ # Processes a packet associated with this data object
111
+ #
112
+ # @param packet [Packet] The packet to process
113
+ # @param count [Integer] Count which increments for each packet received by
114
+ # the higher level process
115
+ def process_values(*args)
116
+ raise "process_values must be defined by class #{self.class}"
117
+ end
118
+
119
+ # Handles calling process_values with the given data from DART
120
+ def process_dart(dart_results)
121
+ sample = []
122
+ min_length = nil
123
+ dart_results.each do |dr|
124
+ min_length = dr.length if !min_length or dr.length < min_length
125
+ end
126
+ min_length.times do |sample_index|
127
+ sample = []
128
+ dart_results.length.times do |drindex|
129
+ sample << dart_results[drindex][sample_index][0]
130
+ end
131
+ process_values(*sample)
132
+ end
133
+ end
134
+
104
135
  def handle_process_exception(error, telemetry_point)
105
136
  raise error if error.class == NoMemoryError
106
137
  reset()
@@ -188,6 +219,14 @@ module Cosmos
188
219
  return nil
189
220
  end
190
221
 
191
- end # class DataObject
192
-
193
- end # module Cosmos
222
+ # @return [Boolean] Whether the value is invalid: nil, NaN, or Infinite
223
+ # and thus can not be graphed
224
+ def invalid_value?(value)
225
+ invalid = false
226
+ invalid ||= value.nil?
227
+ invalid ||= (value.respond_to?(:nan?) && value.nan?)
228
+ invalid ||= (value.respond_to?(:infinite?) && value.infinite?)
229
+ invalid
230
+ end
231
+ end
232
+ end
@@ -12,7 +12,6 @@ require 'cosmos'
12
12
  require 'cosmos/tools/tlm_grapher/data_objects/linegraph_data_object'
13
13
 
14
14
  module Cosmos
15
-
16
15
  # Represents a data object on a line graph for a housekeeping telemetry item
17
16
  class HousekeepingDataObject < LinegraphDataObject
18
17
 
@@ -20,7 +19,13 @@ module Cosmos
20
19
  VALUE_TYPES = [:RAW, :CONVERTED]
21
20
 
22
21
  # Analysis Types
23
- ANALYSIS_TYPES = [:NONE, :DIFFERENCE, :WINDOWED_MEAN, :WINDOWED_MEAN_REMOVED, :STD_DEV, :ALLAN_DEV, :MAXIMUM, :MINIMUM, :PEAK_TO_PEAK]
22
+ ANALYSIS_TYPES = [:NONE, :DIFFERENCE, :WINDOWED_MEAN, :WINDOWED_MEAN_REMOVED, :STD_DEV, :ALLAN_DEV, :MAXIMUM, :MINIMUM, :PEAK_TO_PEAK, :SAMPLED, :SAMPLED_MEAN]
23
+
24
+ # DART Reductions
25
+ DART_REDUCTIONS = [:NONE, :MINUTE, :HOUR, :DAY]
26
+
27
+ # DART Reduced Types
28
+ DART_REDUCED_TYPES = [:AVG, :MIN, :MAX, :STDDEV]
24
29
 
25
30
  # The housekeeping telemetry item's target name (string)
26
31
  attr_reader :target_name
@@ -43,6 +48,12 @@ module Cosmos
43
48
  # Type of data to collect - :RAW or :CONVERTED
44
49
  attr_accessor :value_type
45
50
 
51
+ # DART Reduction
52
+ attr_accessor :dart_reduction
53
+
54
+ # DART Reduced Type
55
+ attr_accessor :dart_reduced_type
56
+
46
57
  # The analysis to perform
47
58
  attr_accessor :analysis
48
59
 
@@ -65,6 +76,8 @@ module Cosmos
65
76
  @time_item_name = nil
66
77
  @formatted_time_item_name = nil
67
78
  @value_type = :CONVERTED
79
+ @dart_reduction = :NONE
80
+ @dart_reduced_type = :AVG
68
81
  @analysis = :NONE
69
82
  @analysis_samples = 3
70
83
  @show_limits_lines = false
@@ -84,6 +97,8 @@ module Cosmos
84
97
  string << " TIME_ITEM #{@time_item_name}\n" if @time_item_name
85
98
  string << " FORMATTED_TIME_ITEM #{@formatted_time_item_name}\n" if @formatted_time_item_name
86
99
  string << " VALUE_TYPE #{@value_type}\n"
100
+ string << " DART_REDUCTION #{@dart_reduction}\n"
101
+ string << " DART_REDUCED_TYPE #{@dart_reduced_type}\n"
87
102
  string << " ANALYSIS #{@analysis}\n"
88
103
  string << " ANALYSIS_SAMPLES #{@analysis_samples}\n"
89
104
  string << " SHOW_LIMITS_LINES #{@show_limits_lines.to_s.upcase}\n"
@@ -123,6 +138,26 @@ module Cosmos
123
138
  raise ArgumentError, "Unknown VALUE_TYPE value: #{value_type}"
124
139
  end
125
140
 
141
+ when 'DART_REDUCTION'
142
+ # Expect 1 parameter
143
+ parser.verify_num_parameters(1, 1, "DART_REDUCTION <NONE, MINUTE, HOUR, DAY>")
144
+ dart_reduction = parameters[0].upcase.intern
145
+ if DART_REDUCTIONS.include?(dart_reduction)
146
+ @dart_reduction = dart_reduction
147
+ else
148
+ raise ArgumentError, "Unknown DART_REDUCTION value: #{dart_reduction}"
149
+ end
150
+
151
+ when 'DART_REDUCED_TYPE'
152
+ # Expect 1 parameter
153
+ parser.verify_num_parameters(1, 1, "DART_REDUCED_TYPE <AVG, MIN, MAX, STDDEV>")
154
+ dart_reduced_type = parameters[0].upcase.intern
155
+ if DART_REDUCED_TYPES.include?(dart_reduced_type)
156
+ @dart_reduced_type = dart_reduced_type
157
+ else
158
+ raise ArgumentError, "Unknown DART_REDUCED_TYPE value: #{dart_reduced_type}"
159
+ end
160
+
126
161
  when 'ANALYSIS'
127
162
  # Expect 1 parameter
128
163
  parser.verify_num_parameters(1, 1, "ANALYSIS <Analysis Type>")
@@ -160,6 +195,19 @@ module Cosmos
160
195
  end
161
196
  end
162
197
 
198
+ # Returns an array of items used by this data object
199
+ def processed_items
200
+ items = []
201
+ if @target_name and @packet_name
202
+ if @item_name
203
+ items << [@target_name, @packet_name, @time_item_name, :CONVERTED, nil, @dart_reduction, :AVG]
204
+ items << [@target_name, @packet_name, @item_name, @value_type, @item_array_index, @dart_reduction, @dart_reduced_type]
205
+ items << [@target_name, @packet_name, @formatted_time_item_name, :CONVERTED, nil, @dart_reduction, :AVG] if @formatted_time_item_name and @dart_reduction == :NONE
206
+ end
207
+ end
208
+ items
209
+ end
210
+
163
211
  # (see DataObject#process_packet)
164
212
  def process_packet(packet, count)
165
213
  begin
@@ -173,13 +221,23 @@ module Cosmos
173
221
  if y_value.is_a?(Array) and @item_array_index and @item_array_index < y_value.size
174
222
  y_value = y_value[@item_array_index]
175
223
  end
224
+
225
+ formatted_x_value = nil
226
+ formatted_x_value = packet.read(@formatted_time_item_name) if @formatted_time_item_name and @dart_reduction == :NONE
227
+
228
+ process_values(x_value, y_value, formatted_x_value)
229
+ rescue Exception => error
230
+ handle_process_exception(error, "#{@target_name} #{@packet_name} #{@item_name}")
231
+ end
232
+ end # def process_packet
233
+
234
+ # Process Analysis Steps
235
+ def process_values(x_value, y_value, formatted_x_value = nil)
236
+ begin
237
+ @formatted_x_values << formatted_x_value if formatted_x_value
238
+
176
239
  # Bail on the values if they are NaN or nil as we can't graph them
177
- return if x_value.nil? || y_value.nil? ||
178
- (x_value.respond_to?(:nan?) && x_value.nan?) ||
179
- (y_value.respond_to?(:nan?) && y_value.nan?) ||
180
- (x_value.respond_to?(:infinite?) && x_value.infinite?) ||
181
- (y_value.respond_to?(:infinite?) && y_value.infinite?)
182
- @formatted_x_values << packet.read(@formatted_time_item_name) if @formatted_time_item_name
240
+ return if invalid_value?(x_value) || invalid_value?(y_value)
183
241
 
184
242
  upper_index = nil
185
243
  sample_index = nil
@@ -256,6 +314,19 @@ module Cosmos
256
314
  @plot.redraw_needed = true
257
315
  end
258
316
 
317
+ when :SAMPLED, :SAMPLED_MEAN
318
+ if @unprocessed_y_values.length >= @analysis_samples
319
+ if sample_index % @analysis_samples == 0
320
+ if @analysis == :SAMPLED
321
+ @x_values << @unprocessed_x_values[sample_index]
322
+ @y_values << (@unprocessed_y_values[sample_index] + @y_offset)
323
+ else # :SAMPLED_MEAN
324
+ @x_values << @unprocessed_x_values[sample_index]
325
+ @y_values << @unprocessed_y_values[lower_index..upper_index].mean + @y_offset
326
+ end
327
+ end
328
+ @plot.redraw_needed = true
329
+ end
259
330
  end # case @analysis
260
331
 
261
332
  # Make sure the data object's first x value is the smallest x value encountered during packet processing.
@@ -268,9 +339,9 @@ module Cosmos
268
339
  # Prune Data
269
340
  prune_to_max_points_saved()
270
341
  rescue Exception => error
271
- handle_process_exception(error, "#{packet.target_name} #{packet.packet_name} #{@item_name}")
342
+ handle_process_exception(error, "#{@target_name} #{@packet_name} #{@item_name}")
272
343
  end
273
- end # def process_packet
344
+ end
274
345
 
275
346
  # Returns the name of this data object
276
347
  def name
@@ -278,6 +349,7 @@ module Cosmos
278
349
  if @target_name and @packet_name and @item_name
279
350
  str << "#{@target_name} #{@packet_name} #{@item_name}"
280
351
  str << "[#{@item_array_index}]" if @item_array_index
352
+ str << " <#{@dart_reduction} #{dart_reduced_type}>" if @dart_reduction != :NONE
281
353
  str << " (#{@analysis})" if @analysis != :NONE
282
354
  end
283
355
  str
@@ -301,6 +373,8 @@ module Cosmos
301
373
  data_object.time_item_name = @time_item_name.clone if @time_item_name
302
374
  data_object.formatted_time_item_name = @formatted_time_item_name.clone if @formatted_time_item_name
303
375
  data_object.value_type = @value_type
376
+ data_object.dart_reduction = @dart_reduction
377
+ data_object.dart_reduced_type = @dart_reduced_type
304
378
  data_object.analysis = @analysis
305
379
  data_object.analysis_samples = @analysis_samples
306
380
  data_object.show_limits_lines = @show_limits_lines
@@ -331,6 +405,8 @@ module Cosmos
331
405
  @item_array_index != edited_data_object.item_array_index or
332
406
  @time_item_name != edited_data_object.time_item_name or
333
407
  @formatted_time_item_name != edited_data_object.formatted_time_item_name or
408
+ @dart_reduction != edited_data_object.dart_reduction or
409
+ @dart_reduced_type != edited_data_object.dart_reduced_type or
334
410
  @value_type != edited_data_object.value_type or
335
411
  @analysis != edited_data_object.analysis or
336
412
  @analysis_samples != edited_data_object.analysis_samples
@@ -416,7 +492,5 @@ module Cosmos
416
492
  end
417
493
  prune_index
418
494
  end
419
-
420
- end # class HousekeepingDataObject
421
-
422
- end # module Cosmos
495
+ end
496
+ end
@@ -12,7 +12,6 @@ require 'cosmos'
12
12
  require 'cosmos/tools/tlm_grapher/data_objects/data_object'
13
13
 
14
14
  module Cosmos
15
-
16
15
  # Represents a data object on a line graph
17
16
  # Designed for use as a base class for custom data objects
18
17
  class LinegraphDataObject < DataObject
@@ -170,7 +169,5 @@ module Cosmos
170
169
  end
171
170
  prune_index
172
171
  end
173
-
174
- end # class LinegraphDataObject
175
-
176
- end # module Cosmos
172
+ end
173
+ end
@@ -12,14 +12,10 @@ require 'cosmos'
12
12
  require 'cosmos/tools/tlm_grapher/data_objects/xy_data_object'
13
13
 
14
14
  module Cosmos
15
-
16
15
  # Represents a data object on an SinglxyGraph for two telemetry items
17
16
  class SinglexyDataObject < XyDataObject
18
-
19
17
  def initialize
20
18
  super()
21
19
  end
22
-
23
- end # class SinglexyDataObject
24
-
25
- end # module Cosmos
20
+ end
21
+ end
@@ -12,13 +12,18 @@ require 'cosmos'
12
12
  require 'cosmos/tools/tlm_grapher/data_objects/data_object'
13
13
 
14
14
  module Cosmos
15
-
16
15
  # Represents a data object on an XyGraph for two telemetry items
17
16
  class XyDataObject < DataObject
18
17
 
19
18
  # Value Types
20
19
  VALUE_TYPES = [:RAW, :CONVERTED]
21
20
 
21
+ # DART Reductions
22
+ DART_REDUCTIONS = [:NONE, :MINUTE, :HOUR, :DAY]
23
+
24
+ # DART Reduced Types
25
+ DART_REDUCED_TYPES = [:AVG, :MIN, :MAX, :STDDEV]
26
+
22
27
  # The target name (string)
23
28
  attr_accessor :target_name
24
29
 
@@ -40,6 +45,12 @@ module Cosmos
40
45
  # Type of data to collect for y value - :RAW or :CONVERTED
41
46
  attr_accessor :y_value_type
42
47
 
48
+ # DART Reduction
49
+ attr_accessor :dart_reduction
50
+
51
+ # DART Reduced Type
52
+ attr_accessor :dart_reduced_type
53
+
43
54
  # Array of x_values to graph on the line graph
44
55
  attr_accessor :x_values
45
56
 
@@ -65,6 +76,8 @@ module Cosmos
65
76
  @time_item_name = nil
66
77
  @x_value_type = :CONVERTED
67
78
  @y_value_type = :CONVERTED
79
+ @dart_reduction = :NONE
80
+ @dart_reduced_type = :AVG
68
81
 
69
82
  @x_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
70
83
  @y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
@@ -85,6 +98,8 @@ module Cosmos
85
98
  string << " TIME_ITEM #{@time_item_name}\n" if @time_item_name
86
99
  string << " X_VALUE_TYPE #{@x_value_type}\n"
87
100
  string << " Y_VALUE_TYPE #{@y_value_type}\n"
101
+ string << " DART_REDUCTION #{@dart_reduction}\n"
102
+ string << " DART_REDUCED_TYPE #{@dart_reduced_type}\n"
88
103
  string
89
104
  end # def configuration_string
90
105
 
@@ -160,6 +175,26 @@ module Cosmos
160
175
  raise ArgumentError, "Unknown Y_VALUE_TYPE value: #{value_type}"
161
176
  end
162
177
 
178
+ when 'DART_REDUCTION'
179
+ # Expect 1 parameter
180
+ parser.verify_num_parameters(1, 1, "DART_REDUCTION <NONE, MINUTE, HOUR, DAY>")
181
+ dart_reduction = parameters[0].upcase.intern
182
+ if DART_REDUCTIONS.include?(dart_reduction)
183
+ @dart_reduction = dart_reduction
184
+ else
185
+ raise ArgumentError, "Unknown DART_REDUCTION value: #{dart_reduction}"
186
+ end
187
+
188
+ when 'DART_REDUCED_TYPE'
189
+ # Expect 1 parameter
190
+ parser.verify_num_parameters(1, 1, "DART_REDUCED_TYPE <AVG, MIN, MAX, STDDEV>")
191
+ dart_reduced_type = parameters[0].upcase.intern
192
+ if DART_REDUCED_TYPES.include?(dart_reduced_type)
193
+ @dart_reduced_type = dart_reduced_type
194
+ else
195
+ raise ArgumentError, "Unknown DART_REDUCED_TYPE value: #{dart_reduced_type}"
196
+ end
197
+
163
198
  else
164
199
  # Unknown keywords are passed to parent data object
165
200
  super(parser, keyword, parameters)
@@ -177,6 +212,17 @@ module Cosmos
177
212
  end
178
213
  end
179
214
 
215
+ # Returns an array of items used by this data object
216
+ def processed_items
217
+ items = []
218
+ if @target_name and @packet_name
219
+ items << [@target_name, @packet_name, @x_item_name, @x_value_type, nil, @dart_reduction, @dart_reduced_type]
220
+ items << [@target_name, @packet_name, @y_item_name, @y_value_type, nil, @dart_reduction, @dart_reduced_type]
221
+ items << [@target_name, @packet_name, @time_item_name, :CONVERTED, nil, @dart_reduction, :AVG] if @time_item_name
222
+ end
223
+ items
224
+ end
225
+
180
226
  # (see DataObject#process_packet)
181
227
  def process_packet(packet, count)
182
228
  begin
@@ -192,32 +238,40 @@ module Cosmos
192
238
  y_value = packet.read(@y_item_name)
193
239
  end
194
240
 
195
- # Bail on the values if they are NaN or nil as we can't graph them
196
- return if x_value.nil? || y_value.nil? ||
197
- (x_value.respond_to?(:nan?) && x_value.nan?) ||
198
- (y_value.respond_to?(:nan?) && y_value.nan?) ||
199
- (x_value.respond_to?(:infinite?) && x_value.infinite?) ||
200
- (y_value.respond_to?(:infinite?) && y_value.infinite?)
201
-
241
+ time_value = nil
202
242
  time_value = packet.read(@time_item_name) if @time_item_name
203
243
 
244
+ process_values(x_value, y_value, time_value)
245
+ rescue Exception => error
246
+ handle_process_exception(error, "#{@target_name} #@packet_name} #{@x_item_name} or #{@y_item_name}")
247
+ end
248
+ end # def process_packet
249
+
250
+ # Add a set of values to the data object
251
+ def process_values(x_value, y_value, time_value = nil)
252
+ begin
253
+ # Bail on the values if they are NaN or nil as we can't graph them
254
+ return if invalid_value?(x_value) || invalid_value?(y_value)
255
+
204
256
  @x_values << x_value
205
257
  @y_values << y_value
206
- @time_values << time_value if @time_item_name
258
+ @time_values << time_value if time_value
207
259
 
208
260
  @plot.redraw_needed = true
209
261
 
210
262
  # Prune Data
211
263
  prune_to_max_points_saved()
212
264
  rescue Exception => error
213
- handle_process_exception(error, "#{packet.target_name} #{packet.packet_name} #{@x_item_name} or #{@y_item_name}")
214
- end
215
- end # def process_packet
265
+ handle_process_exception(error, "#{@target_name} #{@packet_name} #{@x_item_name} or #{@y_item_name}")
266
+ end
267
+ end
216
268
 
217
269
  # Returns the name of this data object
218
270
  def name
219
271
  if @target_name and @packet_name and @y_item_name and @x_item_name
220
- "#{@target_name} #{@packet_name} #{@y_item_name} VS #{@x_item_name}"
272
+ str = "#{@target_name} #{@packet_name} #{@y_item_name} VS #{@x_item_name}"
273
+ str << " <#{@dart_reduction} #{dart_reduced_type}>" if @dart_reduction != :NONE
274
+ str
221
275
  else
222
276
  ""
223
277
  end
@@ -250,6 +304,8 @@ module Cosmos
250
304
  data_object.time_item_name = @time_item_name.clone if @time_item_name
251
305
  data_object.x_value_type = @x_value_type
252
306
  data_object.y_value_type = @y_value_type
307
+ data_object.dart_reduction = @dart_reduction
308
+ data_object.dart_reduced_type = @dart_reduced_type
253
309
  data_object
254
310
  end
255
311
 
@@ -263,7 +319,9 @@ module Cosmos
263
319
  @y_item_name != edited_data_object.y_item_name or
264
320
  @time_item_name != edited_data_object.time_item_name or
265
321
  @x_value_type != edited_data_object.x_value_type or
266
- @y_value_type != edited_data_object.y_value_type
322
+ @y_value_type != edited_data_object.y_value_type or
323
+ @dart_reduction != edited_data_object.dart_reduction or
324
+ @dart_reduced_type != edited_data_object.dart_reduced_type
267
325
  false
268
326
  else
269
327
  super(edited_data_object)
@@ -319,7 +377,5 @@ module Cosmos
319
377
  end
320
378
  prune_index
321
379
  end
322
-
323
- end # class XyDataObject
324
-
325
- end # module Cosmos
380
+ end
381
+ end