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.
- checksums.yaml +4 -4
- data/.gitignore +0 -2
- data/.travis.yml +2 -0
- data/.yardopts +1 -0
- data/Gemfile +1 -0
- data/Manifest.txt +130 -0
- data/autohotkey/tools/ConfigEditorAHK +19 -0
- data/autohotkey/tools/cmd_extractor.ahk +4 -4
- data/autohotkey/tools/cmd_sequence.ahk +9 -5
- data/autohotkey/tools/config_editor.ahk +197 -0
- data/autohotkey/tools/packet_viewer.ahk +12 -6
- data/autohotkey/tools/replay.ahk +29 -29
- data/autohotkey/tools/script_runner.ahk +10 -2
- data/autohotkey/tools/tlm_extractor.ahk +7 -8
- data/autohotkey/tools/tlm_grapher.ahk +21 -9
- data/bin/dart_import +2 -0
- data/cosmos.gemspec +18 -16
- data/data/config/cmd_tlm_server.yaml +9 -0
- data/data/config/interface_modifiers.yaml +17 -0
- data/data/config/item_modifiers.yaml +3 -3
- data/data/crc.txt +184 -90
- data/data/dart.png +0 -0
- data/demo/Gemfile +1 -0
- data/demo/Rakefile +4 -0
- data/demo/config/dart/Gemfile +54 -0
- data/demo/config/data/crc.txt +28 -21
- data/demo/config/system/system.txt +3 -0
- data/demo/config/system/system2.txt +3 -0
- data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +3 -3
- data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +1 -1
- data/demo/config/targets/INST/lib/sim_inst.rb +1 -1
- data/demo/config/targets/INST/screens/adcs.txt +2 -1
- data/demo/config/targets/INST/screens/array.txt +1 -1
- data/demo/config/targets/INST/screens/block.txt +1 -1
- data/demo/config/targets/INST/screens/commanding.txt +7 -2
- data/demo/config/targets/INST/screens/graphs.txt +1 -1
- data/demo/config/targets/INST/screens/ground.txt +1 -1
- data/demo/config/targets/INST/screens/hs.txt +2 -1
- data/demo/config/targets/INST/screens/latest.txt +1 -1
- data/demo/config/targets/INST/screens/limits.txt +1 -1
- data/demo/config/targets/INST/screens/other.txt +1 -1
- data/demo/config/targets/INST/screens/tabs.txt +1 -1
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +3 -1
- data/demo/config/tools/launcher/launcher.txt +3 -2
- data/demo/tools/Dart +16 -0
- data/demo/tools/Dart.bat +9 -0
- data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +0 -0
- data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +0 -0
- data/install/Gemfile +1 -0
- data/install/Rakefile +4 -0
- data/install/config/dart/Gemfile +54 -0
- data/install/config/data/crc.txt +6 -3
- data/install/config/system/system.txt +3 -0
- data/install/config/tools/launcher/launcher.txt +3 -2
- data/install/tools/Dart +16 -0
- data/install/tools/Dart.bat +9 -0
- data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +0 -0
- data/install/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +0 -0
- data/lib/cosmos/core_ext/time.rb +8 -8
- data/lib/cosmos/dart/.rspec +1 -0
- data/lib/cosmos/dart/Gemfile +69 -0
- data/lib/cosmos/dart/Rakefile +7 -0
- data/lib/cosmos/dart/app/assets/config/manifest.js +4 -0
- data/lib/cosmos/dart/app/assets/images/.keep +0 -0
- data/lib/cosmos/dart/app/assets/javascripts/application.js +13 -0
- data/lib/cosmos/dart/app/assets/javascripts/cable.js +13 -0
- data/lib/cosmos/dart/app/assets/stylesheets/application.css.scss +15 -0
- data/lib/cosmos/dart/app/channels/application_cable/channel.rb +4 -0
- data/lib/cosmos/dart/app/channels/application_cable/connection.rb +4 -0
- data/lib/cosmos/dart/app/controllers/application_controller.rb +3 -0
- data/lib/cosmos/dart/app/helpers/application_helper.rb +2 -0
- data/lib/cosmos/dart/app/jobs/application_job.rb +2 -0
- data/lib/cosmos/dart/app/mailers/application_mailer.rb +4 -0
- data/lib/cosmos/dart/app/models/application_record.rb +3 -0
- data/lib/cosmos/dart/app/models/item.rb +6 -0
- data/lib/cosmos/dart/app/models/item_to_decom_table_mapping.rb +9 -0
- data/lib/cosmos/dart/app/models/packet.rb +4 -0
- data/lib/cosmos/dart/app/models/packet_config.rb +7 -0
- data/lib/cosmos/dart/app/models/packet_log.rb +3 -0
- data/lib/cosmos/dart/app/models/packet_log_entry.rb +41 -0
- data/lib/cosmos/dart/app/models/system_config.rb +2 -0
- data/lib/cosmos/dart/app/models/target.rb +4 -0
- data/lib/cosmos/dart/app/views/layouts/application.html.erb +14 -0
- data/lib/cosmos/dart/app/views/layouts/mailer.html.erb +13 -0
- data/lib/cosmos/dart/app/views/layouts/mailer.text.erb +1 -0
- data/lib/cosmos/dart/bin/bundle +3 -0
- data/lib/cosmos/dart/bin/rails +4 -0
- data/lib/cosmos/dart/bin/rake +4 -0
- data/lib/cosmos/dart/bin/setup +34 -0
- data/lib/cosmos/dart/bin/update +29 -0
- data/lib/cosmos/dart/config.ru +5 -0
- data/lib/cosmos/dart/config/application.rb +29 -0
- data/lib/cosmos/dart/config/boot.rb +3 -0
- data/lib/cosmos/dart/config/cable.yml +9 -0
- data/lib/cosmos/dart/config/database.yml +23 -0
- data/lib/cosmos/dart/config/environment.rb +5 -0
- data/lib/cosmos/dart/config/environments/development.rb +62 -0
- data/lib/cosmos/dart/config/environments/production.rb +84 -0
- data/lib/cosmos/dart/config/environments/test.rb +42 -0
- data/lib/cosmos/dart/config/initializers/application_controller_renderer.rb +6 -0
- data/lib/cosmos/dart/config/initializers/assets.rb +12 -0
- data/lib/cosmos/dart/config/initializers/backtrace_silencers.rb +7 -0
- data/lib/cosmos/dart/config/initializers/cookies_serializer.rb +5 -0
- data/lib/cosmos/dart/config/initializers/filter_parameter_logging.rb +4 -0
- data/lib/cosmos/dart/config/initializers/inflections.rb +16 -0
- data/lib/cosmos/dart/config/initializers/mime_types.rb +4 -0
- data/lib/cosmos/dart/config/initializers/new_framework_defaults.rb +25 -0
- data/lib/cosmos/dart/config/initializers/session_store.rb +3 -0
- data/lib/cosmos/dart/config/initializers/wrap_parameters.rb +14 -0
- data/lib/cosmos/dart/config/locales/en.yml +23 -0
- data/lib/cosmos/dart/config/puma.rb +47 -0
- data/lib/cosmos/dart/config/routes.rb +3 -0
- data/lib/cosmos/dart/config/secrets.yml +22 -0
- data/lib/cosmos/dart/db/migrate/20170406172907_create_targets.rb +8 -0
- data/lib/cosmos/dart/db/migrate/20170406172927_create_packets.rb +10 -0
- data/lib/cosmos/dart/db/migrate/20170406172937_create_packet_logs.rb +9 -0
- data/lib/cosmos/dart/db/migrate/20170406172943_create_packet_log_entries.rb +16 -0
- data/lib/cosmos/dart/db/migrate/20170406183500_change_packet_log_entries_primary_key.rb +5 -0
- data/lib/cosmos/dart/db/migrate/20170407153618_add_unique_requirements.rb +7 -0
- data/lib/cosmos/dart/db/migrate/20170511155447_add_meta_id_to_packet_log_entries.rb +6 -0
- data/lib/cosmos/dart/db/migrate/20170523185056_rename_received_time_and_add_is_tlm_to_packet_log_entries.rb +7 -0
- data/lib/cosmos/dart/db/migrate/20170525201157_create_items.rb +10 -0
- data/lib/cosmos/dart/db/migrate/20170525201315_create_system_configs.rb +9 -0
- data/lib/cosmos/dart/db/migrate/20170525201624_create_packet_configs.rb +11 -0
- data/lib/cosmos/dart/db/migrate/20170525201745_create_item_to_decom_table_mappings.rb +12 -0
- data/lib/cosmos/dart/db/migrate/20170525201939_create_decom_tables.rb +12 -0
- data/lib/cosmos/dart/db/migrate/20170525202051_add_decom_state_to_packet_log_entry.rb +5 -0
- data/lib/cosmos/dart/db/migrate/20170913160409_update_items.rb +6 -0
- data/lib/cosmos/dart/db/migrate/20170913160558_update_item_to_decom_table_mapping.rb +11 -0
- data/lib/cosmos/dart/db/migrate/20170913160916_udpate_decom_table.rb +6 -0
- data/lib/cosmos/dart/db/migrate/20170913212026_add_ready_to_packet_configs.rb +5 -0
- data/lib/cosmos/dart/db/migrate/20170913223556_modify_tables.rb +9 -0
- data/lib/cosmos/dart/db/migrate/20170914215744_modify_mapping_table.rb +6 -0
- data/lib/cosmos/dart/db/migrate/20170919201433_add_system_config_id_to_packet_config.rb +11 -0
- data/lib/cosmos/dart/db/migrate/20170919210307_add_max_table_index_to_packet_configs.rb +5 -0
- data/lib/cosmos/dart/db/migrate/20171215225546_add_ready_to_packet_log_entries.rb +5 -0
- data/lib/cosmos/dart/db/migrate/20180116214338_add_index_for_ple_ready_to_packet_log_entries.rb +5 -0
- data/lib/cosmos/dart/db/schema.rb +103 -0
- data/lib/cosmos/dart/db/seeds.rb +7 -0
- data/lib/cosmos/dart/examples/dart_decom_client.rb +45 -0
- data/lib/cosmos/dart/examples/dart_stream_client.rb +93 -0
- data/lib/cosmos/dart/lib/dart_common.rb +749 -0
- data/lib/cosmos/dart/lib/dart_database_cleaner.rb +172 -0
- data/lib/cosmos/dart/lib/dart_decom_query.rb +184 -0
- data/lib/cosmos/dart/lib/dart_decommutator.rb +235 -0
- data/lib/cosmos/dart/lib/dart_importer.rb +154 -0
- data/lib/cosmos/dart/lib/dart_logging.rb +50 -0
- data/lib/cosmos/dart/lib/dart_packet_log_writer.rb +139 -0
- data/lib/cosmos/dart/lib/dart_reducer_manager.rb +85 -0
- data/lib/cosmos/dart/lib/dart_reducer_worker_thread.rb +263 -0
- data/lib/cosmos/dart/lib/dart_tcpip_server_interface.rb +142 -0
- data/lib/cosmos/dart/processes/dart.rb +145 -0
- data/lib/cosmos/dart/processes/dart_decom_server.rb +39 -0
- data/lib/cosmos/dart/processes/dart_import.rb +63 -0
- data/lib/cosmos/dart/processes/dart_ingester.rb +92 -0
- data/lib/cosmos/dart/processes/dart_reducer.rb +27 -0
- data/lib/cosmos/dart/processes/dart_stream_server.rb +31 -0
- data/lib/cosmos/dart/processes/dart_worker.rb +37 -0
- data/lib/cosmos/dart/spec/dart/dart_common_spec.rb +333 -0
- data/lib/cosmos/dart/spec/dart/dart_database_cleaner_spec.rb +455 -0
- data/lib/cosmos/dart/spec/dart/dart_decom_query_spec.rb +153 -0
- data/lib/cosmos/dart/spec/dart/dart_decommutator_spec.rb +336 -0
- data/lib/cosmos/dart/spec/dart/dart_importer_spec.rb +83 -0
- data/lib/cosmos/dart/spec/dart/dart_logging_spec.rb +30 -0
- data/lib/cosmos/dart/spec/dart/dart_packet_log_writer_spec.rb +149 -0
- data/lib/cosmos/dart/spec/dart/dart_reducer_manager_spec.rb +289 -0
- data/lib/cosmos/dart/spec/dart/dart_tcpip_server_interface_spec.rb +241 -0
- data/lib/cosmos/dart/spec/rails_helper.rb +60 -0
- data/lib/cosmos/dart/spec/spec_helper.rb +139 -0
- data/lib/cosmos/gui/dialogs/about_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/dart_dialog.rb +60 -0
- data/lib/cosmos/gui/dialogs/legal_dialog.rb +1 -0
- data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +0 -3
- data/lib/cosmos/gui/qt.rb +10 -1
- data/lib/cosmos/gui/text/completion.rb +10 -9
- data/lib/cosmos/gui/text/completion_text_edit.rb +16 -14
- data/lib/cosmos/gui/text/ruby_editor.rb +2 -2
- data/lib/cosmos/gui/widgets/dart_frame.rb +142 -0
- data/lib/cosmos/gui/widgets/dart_meta_frame.rb +119 -0
- data/lib/cosmos/gui/widgets/packet_log_frame.rb +42 -12
- data/lib/cosmos/interfaces/interface.rb +1 -2
- data/lib/cosmos/interfaces/protocols/crc_protocol.rb +26 -8
- data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +8 -2
- data/lib/cosmos/interfaces/protocols/protocol.rb +2 -1
- data/lib/cosmos/interfaces/protocols/template_protocol.rb +1 -1
- data/lib/cosmos/interfaces/stream_interface.rb +1 -0
- data/lib/cosmos/interfaces/tcpip_server_interface.rb +2 -3
- data/lib/cosmos/io/json_drb_object.rb +1 -1
- data/lib/cosmos/io/json_rpc.rb +2 -1
- data/lib/cosmos/io/win32_serial_driver.rb +2 -9
- data/lib/cosmos/packet_logs/packet_log_writer.rb +1 -1
- data/lib/cosmos/packets/packet.rb +22 -12
- data/lib/cosmos/packets/packet_config.rb +2 -1
- data/lib/cosmos/packets/packet_item.rb +26 -24
- data/lib/cosmos/packets/parsers/macro_parser.rb +5 -2
- data/lib/cosmos/packets/parsers/packet_item_parser.rb +35 -17
- data/lib/cosmos/packets/parsers/packet_parser.rb +3 -10
- data/lib/cosmos/packets/parsers/xtce_converter.rb +21 -35
- data/lib/cosmos/packets/parsers/xtce_parser.rb +54 -46
- data/lib/cosmos/packets/structure.rb +10 -2
- data/lib/cosmos/packets/structure_item.rb +22 -8
- data/lib/cosmos/processors/statistics_processor.rb +2 -0
- data/lib/cosmos/script/api_shared.rb +13 -12
- data/lib/cosmos/script/cmd_tlm_server.rb +4 -0
- data/lib/cosmos/script/commands.rb +3 -15
- data/lib/cosmos/script/script.rb +69 -23
- data/lib/cosmos/streams/tcpip_client_stream.rb +2 -2
- data/lib/cosmos/system/system.rb +42 -25
- data/lib/cosmos/system/target.rb +6 -2
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +177 -36
- data/lib/cosmos/tools/cmd_sender/cmd_param_table_item_delegate.rb +3 -2
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +34 -8
- data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +80 -25
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +19 -4
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +15 -14
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +15 -9
- data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +1 -9
- data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +1 -6
- data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +1 -3
- data/lib/cosmos/tools/cmd_tlm_server/gui/replay_tab.rb +84 -7
- data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +0 -1
- data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +1 -5
- data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +3 -2
- data/lib/cosmos/tools/cmd_tlm_server/replay_backend.rb +159 -27
- data/lib/cosmos/tools/cmd_tlm_server/routers.rb +1 -1
- data/lib/cosmos/tools/config_editor/config_editor.rb +17 -52
- data/lib/cosmos/tools/config_editor/config_editor_frame.rb +0 -5
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +111 -0
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +31 -18
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +12 -3
- data/lib/cosmos/tools/script_runner/script_runner.rb +27 -14
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +104 -37
- data/lib/cosmos/tools/table_manager/table_config.rb +1 -1
- data/lib/cosmos/tools/table_manager/table_item_parser.rb +4 -2
- data/lib/cosmos/tools/table_manager/table_manager.rb +0 -5
- data/lib/cosmos/tools/table_manager/table_manager_core.rb +0 -1
- data/lib/cosmos/tools/test_runner/test.rb +1 -3
- data/lib/cosmos/tools/test_runner/test_runner.rb +26 -15
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +290 -137
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +122 -25
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +67 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +28 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +36 -0
- data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +42 -3
- data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +88 -14
- data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +2 -5
- data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +2 -6
- data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +74 -18
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +3 -7
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_dart_thread.rb +159 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +49 -2
- data/lib/cosmos/tools/tlm_viewer/screen.rb +3 -0
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +0 -2
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +1 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/backgroundbutton_widget.rb +54 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +5 -5
- data/lib/cosmos/top_level.rb +1 -0
- data/lib/cosmos/utilities/crc.rb +3 -0
- data/lib/cosmos/utilities/csv.rb +1 -0
- data/lib/cosmos/utilities/message_log.rb +2 -1
- data/lib/cosmos/utilities/simulated_target.rb +8 -8
- data/lib/cosmos/version.rb +5 -5
- data/lib/cosmos/win32/win32.rb +4 -10
- data/run_gui_tests.bat +2 -1
- data/spec/config/config_parser_spec.rb +4 -4
- data/spec/core_ext/array_spec.rb +1 -1
- data/spec/core_ext/exception_spec.rb +12 -12
- data/spec/core_ext/file_spec.rb +6 -6
- data/spec/core_ext/hash_spec.rb +1 -1
- data/spec/core_ext/socket_spec.rb +2 -2
- data/spec/core_ext/string_spec.rb +13 -13
- data/spec/core_ext/time_spec.rb +0 -2
- data/spec/gui/utilities/script_module_gui_spec.rb +3 -3
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +6 -6
- data/spec/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +4 -0
- data/spec/interfaces/cmd_tlm_server_interface_spec.rb +6 -2
- data/spec/interfaces/interface_spec.rb +0 -1
- data/spec/interfaces/linc_interface_spec.rb +0 -5
- data/spec/interfaces/protocols/crc_protocol_spec.rb +201 -85
- data/spec/interfaces/protocols/fixed_protocol_spec.rb +33 -9
- data/spec/interfaces/protocols/length_protocol_spec.rb +1 -1
- data/spec/interfaces/protocols/override_protocol_spec.rb +6 -2
- data/spec/interfaces/protocols/preidentified_protocol_spec.rb +1 -5
- data/spec/interfaces/protocols/template_protocol_spec.rb +0 -1
- data/spec/interfaces/simulated_target_interface_spec.rb +5 -5
- data/spec/interfaces/udp_interface_spec.rb +2 -4
- data/spec/io/buffered_file_spec.rb +8 -12
- data/spec/io/json_drb_spec.rb +9 -9
- data/spec/io/json_rpc_spec.rb +4 -4
- data/spec/io/raw_logger_spec.rb +4 -3
- data/spec/packet_logs/packet_log_reader_spec.rb +3 -6
- data/spec/packet_logs/packet_log_writer_spec.rb +4 -4
- data/spec/packets/binary_accessor_spec.rb +5 -8
- data/spec/packets/commands_spec.rb +2 -2
- data/spec/packets/limits_spec.rb +2 -2
- data/spec/packets/packet_config_spec.rb +12 -0
- data/spec/packets/packet_item_limits_spec.rb +1 -1
- data/spec/packets/packet_item_spec.rb +9 -9
- data/spec/packets/packet_spec.rb +15 -5
- data/spec/packets/parsers/packet_item_parser_spec.rb +27 -0
- data/spec/packets/parsers/xtce_parser_spec.rb +27 -30
- data/spec/packets/structure_spec.rb +2 -1
- data/spec/packets/telemetry_spec.rb +3 -5
- data/spec/processors/statistics_processor_spec.rb +35 -0
- data/spec/script/cmd_tlm_server_spec.rb +4 -21
- data/spec/script/commands_disconnect_spec.rb +46 -58
- data/spec/script/commands_spec.rb +40 -61
- data/spec/script/limits_spec.rb +1 -21
- data/spec/script/script_spec.rb +32 -41
- data/spec/script/scripting_spec.rb +166 -185
- data/spec/script/telemetry_spec.rb +10 -5
- data/spec/script/tools_spec.rb +2 -24
- data/spec/spec_helper.rb +11 -5
- data/spec/system/system_spec.rb +17 -12
- data/spec/tools/cmd_tlm_server/api_spec.rb +21 -10
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +15 -16
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +0 -1
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +16 -27
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +2 -6
- data/spec/tools/cmd_tlm_server/connections_spec.rb +0 -4
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +13 -13
- data/spec/tools/cmd_tlm_server/interfaces_spec.rb +5 -9
- data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +11 -3
- data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +0 -4
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +5 -5
- data/spec/tools/cmd_tlm_server/routers_spec.rb +5 -9
- data/spec/tools/table_manager/table_config_spec.rb +0 -1
- data/spec/tools/table_manager/tablemanager_core_spec.rb +23 -23
- data/spec/tools/tlm_viewer/tlm_viewer_config_spec.rb +6 -4
- data/spec/top_level/top_level_spec.rb +9 -9
- data/spec/utilities/csv_spec.rb +2 -12
- data/spec/utilities/logger_spec.rb +6 -6
- data/spec/utilities/message_log_spec.rb +3 -11
- data/tasks/gemfile_stats.rake +2 -2
- metadata +167 -60
|
@@ -263,7 +263,11 @@ module Cosmos
|
|
|
263
263
|
# @return (see #define_item)
|
|
264
264
|
def append_item(name, bit_size, data_type, array_size = nil, endianness = @default_endianness, overflow = :ERROR)
|
|
265
265
|
raise ArgumentError, "Can't append an item after a variably sized item" if !@fixed_size
|
|
266
|
-
|
|
266
|
+
if data_type == :DERIVED
|
|
267
|
+
return define_item(name, 0, bit_size, data_type, array_size, endianness, overflow)
|
|
268
|
+
else
|
|
269
|
+
return define_item(name, @defined_length_bits, bit_size, data_type, array_size, endianness, overflow)
|
|
270
|
+
end
|
|
267
271
|
end
|
|
268
272
|
|
|
269
273
|
# Adds an item at the end of the structure. It adds the item to the items
|
|
@@ -273,7 +277,11 @@ module Cosmos
|
|
|
273
277
|
# @return (see #define)
|
|
274
278
|
def append(item)
|
|
275
279
|
raise ArgumentError, "Can't append an item after a variably sized item" if !@fixed_size
|
|
276
|
-
item.
|
|
280
|
+
if item.data_type == :DERIVED
|
|
281
|
+
item.bit_offset = 0
|
|
282
|
+
else
|
|
283
|
+
item.bit_offset = @defined_length_bits
|
|
284
|
+
end
|
|
277
285
|
return define(item)
|
|
278
286
|
end
|
|
279
287
|
|
|
@@ -287,6 +287,16 @@ module Cosmos
|
|
|
287
287
|
hash
|
|
288
288
|
end
|
|
289
289
|
|
|
290
|
+
def little_endian_bit_field?
|
|
291
|
+
return false unless @endianness == :LITTLE_ENDIAN
|
|
292
|
+
return false unless (@data_type == :INT || @data_type == :UINT)
|
|
293
|
+
# If we're not byte aligned we're a bit field
|
|
294
|
+
return true unless (@bit_offset % 8) == 0
|
|
295
|
+
# If we don't have an even number of bytes we're a bit field
|
|
296
|
+
return true unless even_byte_multiple()
|
|
297
|
+
false
|
|
298
|
+
end
|
|
299
|
+
|
|
290
300
|
protected
|
|
291
301
|
|
|
292
302
|
# Verifies overall integrity of the StructureItem by checking for correct
|
|
@@ -302,11 +312,8 @@ module Cosmos
|
|
|
302
312
|
raise ArgumentError, "#{@name}: Can't define an item with bit_size #{@bit_size} greater than negative bit_offset #{@bit_offset}"
|
|
303
313
|
end
|
|
304
314
|
else
|
|
305
|
-
#
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
# Verify little-endian bit fields
|
|
309
|
-
if @endianness == :LITTLE_ENDIAN and (@data_type == :INT or @data_type == :UINT) and !(byte_aligned and (@bit_size == 8 or @bit_size == 16 or @bit_size == 32 or @bit_size == 64))
|
|
315
|
+
# Verify bounds on little-endian bit fields
|
|
316
|
+
if little_endian_bit_field?()
|
|
310
317
|
# Bitoffset always refers to the most significant bit of a bitfield
|
|
311
318
|
num_bytes = (((@bit_offset % 8) + @bit_size - 1) / 8) + 1
|
|
312
319
|
upper_bound = @bit_offset / 8
|
|
@@ -319,6 +326,13 @@ module Cosmos
|
|
|
319
326
|
end
|
|
320
327
|
end
|
|
321
328
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
329
|
+
def even_byte_multiple
|
|
330
|
+
case @bit_size
|
|
331
|
+
when 8, 16, 32, 64
|
|
332
|
+
true
|
|
333
|
+
else
|
|
334
|
+
false
|
|
335
|
+
end
|
|
336
|
+
end
|
|
337
|
+
end
|
|
338
|
+
end
|
|
@@ -32,6 +32,8 @@ module Cosmos
|
|
|
32
32
|
# See Processor#call
|
|
33
33
|
def call(packet, buffer)
|
|
34
34
|
value = packet.read(@item_name, @value_type, buffer)
|
|
35
|
+
# Don't process NaN or Infinite values
|
|
36
|
+
return if value.to_f.nan? || value.to_f.infinite?
|
|
35
37
|
@samples << value
|
|
36
38
|
@samples = @samples[-@samples_to_average..-1] if @samples.length > @samples_to_average
|
|
37
39
|
mean, stddev = Math.stddev_sample(@samples)
|
|
@@ -114,7 +114,7 @@ module Cosmos
|
|
|
114
114
|
if all_checks_ok
|
|
115
115
|
Logger.info message
|
|
116
116
|
else
|
|
117
|
-
if $
|
|
117
|
+
if $disconnected_targets && $disconnected_targets.include?(target_name)
|
|
118
118
|
Logger.error message
|
|
119
119
|
else
|
|
120
120
|
raise CheckError, message
|
|
@@ -128,7 +128,7 @@ module Cosmos
|
|
|
128
128
|
Logger.info "#{check_str} was within #{range_str}"
|
|
129
129
|
else
|
|
130
130
|
message = "#{check_str} failed to be within #{range_str}"
|
|
131
|
-
if $
|
|
131
|
+
if $disconnected_targets && $disconnected_targets.include?(target_name)
|
|
132
132
|
Logger.error message
|
|
133
133
|
else
|
|
134
134
|
raise CheckError, message
|
|
@@ -167,7 +167,7 @@ module Cosmos
|
|
|
167
167
|
Logger.info "CHECK: #{exp_to_eval} is TRUE"
|
|
168
168
|
else
|
|
169
169
|
message = "CHECK: #{exp_to_eval} is FALSE"
|
|
170
|
-
if $
|
|
170
|
+
if $disconnected_targets
|
|
171
171
|
Logger.error message
|
|
172
172
|
else
|
|
173
173
|
raise CheckError, message
|
|
@@ -279,7 +279,7 @@ module Cosmos
|
|
|
279
279
|
Logger.info "#{check_str} success #{with_value_str}"
|
|
280
280
|
else
|
|
281
281
|
message = "#{check_str} failed #{with_value_str}"
|
|
282
|
-
if $
|
|
282
|
+
if $disconnected_targets && $disconnected_targets.include?(target_name)
|
|
283
283
|
Logger.error message
|
|
284
284
|
else
|
|
285
285
|
raise CheckError, message
|
|
@@ -336,7 +336,7 @@ module Cosmos
|
|
|
336
336
|
if success
|
|
337
337
|
Logger.info message
|
|
338
338
|
else
|
|
339
|
-
if $
|
|
339
|
+
if $disconnected_targets && $disconnected_targets.include?(target_name)
|
|
340
340
|
Logger.error message
|
|
341
341
|
else
|
|
342
342
|
raise CheckError, message
|
|
@@ -352,7 +352,7 @@ module Cosmos
|
|
|
352
352
|
Logger.info "#{check_str} was within #{range_str}"
|
|
353
353
|
else
|
|
354
354
|
message = "#{check_str} failed to be within #{range_str}"
|
|
355
|
-
if $
|
|
355
|
+
if $disconnected_targets && $disconnected_targets.include?(target_name)
|
|
356
356
|
Logger.error message
|
|
357
357
|
else
|
|
358
358
|
raise CheckError, message
|
|
@@ -386,7 +386,7 @@ module Cosmos
|
|
|
386
386
|
Logger.info "CHECK: #{exp_to_eval} is TRUE after waiting #{time} seconds"
|
|
387
387
|
else
|
|
388
388
|
message = "CHECK: #{exp_to_eval} is FALSE after waiting #{time} seconds"
|
|
389
|
-
if $
|
|
389
|
+
if $disconnected_targets
|
|
390
390
|
Logger.error message
|
|
391
391
|
else
|
|
392
392
|
raise CheckError, message
|
|
@@ -419,7 +419,7 @@ module Cosmos
|
|
|
419
419
|
else
|
|
420
420
|
message = "#{type}: #{target_name.upcase} #{packet_name.upcase} expected to be received #{num_packets} times but only received #{value - initial_count} times after waiting #{time} seconds"
|
|
421
421
|
if check
|
|
422
|
-
if $
|
|
422
|
+
if $disconnected_targets && $disconnected_targets.include?(target_name)
|
|
423
423
|
Logger.error message
|
|
424
424
|
else
|
|
425
425
|
raise CheckError, message
|
|
@@ -505,7 +505,8 @@ module Cosmos
|
|
|
505
505
|
begin
|
|
506
506
|
file_text = File.read(path)
|
|
507
507
|
rescue Exception => error
|
|
508
|
-
|
|
508
|
+
msg = "Error reading procedure file '#{path}' due to #{error.message}."
|
|
509
|
+
raise $!, msg, $!.backtrace
|
|
509
510
|
end
|
|
510
511
|
|
|
511
512
|
if use_file_cache and File.exist?(cache_filename)
|
|
@@ -786,7 +787,7 @@ module Cosmos
|
|
|
786
787
|
|
|
787
788
|
# sleep in a script - returns true if canceled mid sleep
|
|
788
789
|
def cosmos_script_sleep(sleep_time = nil)
|
|
789
|
-
return false if $
|
|
790
|
+
return false if $disconnected_targets
|
|
790
791
|
if defined? ScriptRunnerFrame and ScriptRunnerFrame.instance
|
|
791
792
|
sleep_time = 30000000 unless sleep_time # Handle infinite wait
|
|
792
793
|
if sleep_time > 0.0
|
|
@@ -822,7 +823,7 @@ module Cosmos
|
|
|
822
823
|
if eval(exp_to_eval)
|
|
823
824
|
return true, value
|
|
824
825
|
end
|
|
825
|
-
break if Time.now.sys >= end_time || $
|
|
826
|
+
break if Time.now.sys >= end_time || ($disconnected_targets && $disconnected_targets.include?(target_name))
|
|
826
827
|
|
|
827
828
|
delta = Time.now.sys - work_start
|
|
828
829
|
sleep_time = polling_rate - delta
|
|
@@ -905,7 +906,7 @@ module Cosmos
|
|
|
905
906
|
Logger.info "#{check_str} success #{value_str}"
|
|
906
907
|
else
|
|
907
908
|
message = "#{check_str} failed #{value_str}"
|
|
908
|
-
if $
|
|
909
|
+
if $disconnected_targets && $disconnected_targets.include?(target_name)
|
|
909
910
|
Logger.error message
|
|
910
911
|
else
|
|
911
912
|
raise CheckError, message
|
|
@@ -208,5 +208,9 @@ module Cosmos
|
|
|
208
208
|
def get_output_logs_filenames(filter = '*tlm.bin')
|
|
209
209
|
return $cmd_tlm_server.get_output_logs_filenames(filter)
|
|
210
210
|
end
|
|
211
|
+
|
|
212
|
+
def get_saved_config(configuration_name = nil)
|
|
213
|
+
return $cmd_tlm_server.get_saved_config(configuration_name)
|
|
214
|
+
end
|
|
211
215
|
end
|
|
212
216
|
end
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
# attribution addendums as found in the LICENSE.txt
|
|
10
10
|
|
|
11
11
|
module Cosmos
|
|
12
|
-
|
|
13
12
|
module Script
|
|
14
13
|
private
|
|
15
14
|
|
|
@@ -33,25 +32,14 @@ module Cosmos
|
|
|
33
32
|
no_hazardous = cmd.include?('no_hazardous') || cmd.include?('no_checks')
|
|
34
33
|
|
|
35
34
|
begin
|
|
36
|
-
|
|
37
|
-
# In disconnect mode we call API methods directly on the server
|
|
38
|
-
target_name, cmd_name, cmd_params = $cmd_tlm_server.send(cmd, *args)
|
|
39
|
-
else
|
|
40
|
-
# In connected mode we forward method calls through the JsonDrb object
|
|
41
|
-
# so we must call method_missing
|
|
42
|
-
target_name, cmd_name, cmd_params = $cmd_tlm_server.method_missing(cmd, *args)
|
|
43
|
-
end
|
|
35
|
+
target_name, cmd_name, cmd_params = $cmd_tlm_server.method_missing(cmd, *args)
|
|
44
36
|
_log_cmd(target_name, cmd_name, cmd_params, raw, no_range, no_hazardous)
|
|
45
37
|
rescue HazardousError => e
|
|
46
38
|
ok_to_proceed = prompt_for_hazardous(e.target_name,
|
|
47
39
|
e.cmd_name,
|
|
48
40
|
e.hazardous_description)
|
|
49
41
|
if ok_to_proceed
|
|
50
|
-
|
|
51
|
-
target_name, cmd_name, cmd_params = $cmd_tlm_server.send(cmd_no_hazardous, *args)
|
|
52
|
-
else
|
|
53
|
-
target_name, cmd_name, cmd_params = $cmd_tlm_server.method_missing(cmd_no_hazardous, *args)
|
|
54
|
-
end
|
|
42
|
+
target_name, cmd_name, cmd_params = $cmd_tlm_server.method_missing(cmd_no_hazardous, *args)
|
|
55
43
|
_log_cmd(target_name, cmd_name, cmd_params, raw, no_range, no_hazardous)
|
|
56
44
|
else
|
|
57
45
|
retry unless prompt_for_script_abort()
|
|
@@ -181,7 +169,7 @@ module Cosmos
|
|
|
181
169
|
# Returns the buffer from the most recent specified command
|
|
182
170
|
def get_cmd_buffer(target_name, command_name)
|
|
183
171
|
return $cmd_tlm_server.get_cmd_buffer(target_name, command_name)
|
|
184
|
-
end
|
|
172
|
+
end
|
|
185
173
|
|
|
186
174
|
end # module Script
|
|
187
175
|
|
data/lib/cosmos/script/script.rb
CHANGED
|
@@ -20,14 +20,68 @@ require 'cosmos/script/scripting'
|
|
|
20
20
|
require 'cosmos/script/tools'
|
|
21
21
|
|
|
22
22
|
$cmd_tlm_server = nil
|
|
23
|
-
$
|
|
23
|
+
$disconnected_targets = nil
|
|
24
24
|
$cmd_tlm_replay_mode = false
|
|
25
25
|
|
|
26
26
|
module Cosmos
|
|
27
|
+
# Error raised by the API when a check fails
|
|
27
28
|
class CheckError < RuntimeError; end
|
|
29
|
+
# Error raised when a Script should be stopped
|
|
28
30
|
class StopScript < StandardError; end
|
|
31
|
+
# Error raised when a TestCase should be skipped by TestRunner
|
|
29
32
|
class SkipTestCase < StandardError; end
|
|
30
33
|
|
|
34
|
+
# Provides a proxy to both a disconnected CmdTlmServer instance and the real
|
|
35
|
+
# JsonDRbObject which communicates with the real CmdTlmServer. If targets
|
|
36
|
+
# are disconnected their method calls are forwarded to the disconnected
|
|
37
|
+
# CmdTlmServer while all other calls are forwarded through to the real
|
|
38
|
+
# server by the JsonDRbObject.
|
|
39
|
+
class ServerProxy
|
|
40
|
+
# Creates a disconnected CmdTlmServer object if there are any
|
|
41
|
+
# $disconnected_targets defined. Also creates a JsonDRbObject
|
|
42
|
+
# connected to Replay (if $cmd_tlm_replay_mode) or to the
|
|
43
|
+
# Command and Telemetry Server.
|
|
44
|
+
def initialize(config_file)
|
|
45
|
+
if $disconnected_targets
|
|
46
|
+
# Start up a standalone CTS in disconnected mode
|
|
47
|
+
@disconnected = CmdTlmServer.new(config_file, false, true)
|
|
48
|
+
end
|
|
49
|
+
# Start a Json connect to the real server
|
|
50
|
+
if $cmd_tlm_replay_mode
|
|
51
|
+
@cmd_tlm_server = JsonDRbObject.new(System.connect_hosts['REPLAY_API'], System.ports['REPLAY_API'])
|
|
52
|
+
else
|
|
53
|
+
@cmd_tlm_server = JsonDRbObject.new(System.connect_hosts['CTS_API'], System.ports['CTS_API'])
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Ruby method which captures any method calls on this object. This allows
|
|
58
|
+
# us to proxy the methods to either the disconnected CmdTlmServer object
|
|
59
|
+
# or to the real server through the JsonDRbObject.
|
|
60
|
+
def method_missing(method_name, *method_params)
|
|
61
|
+
if $disconnected_targets && method_params[0].is_a?(String)
|
|
62
|
+
if method_params.length == 1
|
|
63
|
+
target = method_params[0].split(" ")[0]
|
|
64
|
+
else
|
|
65
|
+
target = method_params[0]
|
|
66
|
+
end
|
|
67
|
+
if $disconnected_targets.include?(target)
|
|
68
|
+
return @disconnected.send(method_name, *method_params)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
# Must call shutdown and disconnect on the JsonDrbObject itself
|
|
72
|
+
# to avoid it being sent to the CmdTlmServer
|
|
73
|
+
case method_name
|
|
74
|
+
when :shutdown
|
|
75
|
+
@cmd_tlm_server.shutdown
|
|
76
|
+
@disconnected.stop if @disconnected
|
|
77
|
+
when :disconnect
|
|
78
|
+
@cmd_tlm_server.disconnect
|
|
79
|
+
else
|
|
80
|
+
@cmd_tlm_server.method_missing(method_name, *method_params)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
31
85
|
module Script
|
|
32
86
|
# All methods are private so they can only be called by themselves and not
|
|
33
87
|
# on another object. This is important for the JsonDrbObject class which we
|
|
@@ -40,43 +94,36 @@ module Cosmos
|
|
|
40
94
|
|
|
41
95
|
# Called when this module is mixed in using "include Cosmos::Script"
|
|
42
96
|
def self.included(base)
|
|
43
|
-
$
|
|
97
|
+
$disconnected_targets = nil
|
|
44
98
|
$cmd_tlm_replay_mode = false
|
|
45
99
|
$cmd_tlm_server = nil
|
|
46
100
|
initialize_script_module()
|
|
47
101
|
end
|
|
48
102
|
|
|
49
103
|
def initialize_script_module(config_file = CmdTlmServer::DEFAULT_CONFIG_FILE)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
$cmd_tlm_server = CmdTlmServer.new(config_file, false, true)
|
|
53
|
-
else
|
|
54
|
-
# Start a Json connect to the real server
|
|
55
|
-
if $cmd_tlm_replay_mode
|
|
56
|
-
$cmd_tlm_server = JsonDRbObject.new(System.connect_hosts['REPLAY_API'], System.ports['REPLAY_API'])
|
|
57
|
-
else
|
|
58
|
-
$cmd_tlm_server = JsonDRbObject.new(System.connect_hosts['CTS_API'], System.ports['CTS_API'])
|
|
59
|
-
end
|
|
60
|
-
end
|
|
104
|
+
shutdown_cmd_tlm()
|
|
105
|
+
$cmd_tlm_server = ServerProxy.new(config_file)
|
|
61
106
|
end
|
|
62
107
|
|
|
63
108
|
def shutdown_cmd_tlm
|
|
64
|
-
$cmd_tlm_server.shutdown if $cmd_tlm_server
|
|
109
|
+
$cmd_tlm_server.shutdown if $cmd_tlm_server
|
|
65
110
|
end
|
|
66
111
|
|
|
67
|
-
def
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
initialize_script_module(config_file)
|
|
71
|
-
end
|
|
112
|
+
def set_disconnected_targets(targets, config_file = CmdTlmServer::DEFAULT_CONFIG_FILE)
|
|
113
|
+
$disconnected_targets = targets
|
|
114
|
+
initialize_script_module(config_file)
|
|
72
115
|
end
|
|
73
116
|
|
|
74
|
-
def
|
|
75
|
-
return $
|
|
117
|
+
def get_disconnected_targets
|
|
118
|
+
return $disconnected_targets
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def clear_disconnected_targets
|
|
122
|
+
$disconnected_targets = nil
|
|
76
123
|
end
|
|
77
124
|
|
|
78
125
|
def script_disconnect
|
|
79
|
-
$cmd_tlm_server.disconnect if $cmd_tlm_server
|
|
126
|
+
$cmd_tlm_server.disconnect if $cmd_tlm_server
|
|
80
127
|
end
|
|
81
128
|
|
|
82
129
|
def set_replay_mode(replay_mode)
|
|
@@ -89,6 +136,5 @@ module Cosmos
|
|
|
89
136
|
def get_replay_mode
|
|
90
137
|
$cmd_tlm_replay_mode
|
|
91
138
|
end
|
|
92
|
-
|
|
93
139
|
end
|
|
94
140
|
end
|
|
@@ -38,8 +38,8 @@ module Cosmos
|
|
|
38
38
|
@read_port = ConfigParser.handle_nil(read_port)
|
|
39
39
|
@read_port = Integer(read_port) if @read_port
|
|
40
40
|
|
|
41
|
-
write_addr = nil
|
|
42
|
-
read_addr = nil
|
|
41
|
+
@write_addr = nil
|
|
42
|
+
@read_addr = nil
|
|
43
43
|
begin
|
|
44
44
|
@write_addr = Socket.pack_sockaddr_in(@write_port, @hostname) if @write_port
|
|
45
45
|
@read_addr = Socket.pack_sockaddr_in(@read_port, @hostname) if @read_port
|
data/lib/cosmos/system/system.rb
CHANGED
|
@@ -73,11 +73,11 @@ module Cosmos
|
|
|
73
73
|
instance_attr_reader :additional_md5_files
|
|
74
74
|
|
|
75
75
|
# Known COSMOS ports
|
|
76
|
-
KNOWN_PORTS = ['CTS_API', 'TLMVIEWER_API', 'CTS_PREIDENTIFIED', 'CTS_CMD_ROUTER', 'REPLAY_API', 'REPLAY_PREIDENTIFIED', 'REPLAY_CMD_ROUTER']
|
|
76
|
+
KNOWN_PORTS = ['CTS_API', 'TLMVIEWER_API', 'CTS_PREIDENTIFIED', 'CTS_CMD_ROUTER', 'REPLAY_API', 'REPLAY_PREIDENTIFIED', 'REPLAY_CMD_ROUTER', 'DART_STREAM', 'DART_DECOM']
|
|
77
77
|
# Known COSMOS hosts
|
|
78
|
-
KNOWN_HOSTS = ['CTS_API', 'TLMVIEWER_API', 'CTS_PREIDENTIFIED', 'CTS_CMD_ROUTER', 'REPLAY_API', 'REPLAY_PREIDENTIFIED', 'REPLAY_CMD_ROUTER']
|
|
78
|
+
KNOWN_HOSTS = ['CTS_API', 'TLMVIEWER_API', 'CTS_PREIDENTIFIED', 'CTS_CMD_ROUTER', 'REPLAY_API', 'REPLAY_PREIDENTIFIED', 'REPLAY_CMD_ROUTER', 'DART_STREAM', 'DART_DECOM']
|
|
79
79
|
# Known COSMOS paths
|
|
80
|
-
KNOWN_PATHS = ['LOGS', 'TMP', 'SAVED_CONFIG', 'TABLES', 'HANDBOOKS', 'PROCEDURES', 'SEQUENCES']
|
|
80
|
+
KNOWN_PATHS = ['LOGS', 'TMP', 'SAVED_CONFIG', 'TABLES', 'HANDBOOKS', 'PROCEDURES', 'SEQUENCES', 'DART_DATA', 'DART_LOGS']
|
|
81
81
|
|
|
82
82
|
@@instance = nil
|
|
83
83
|
@@instance_mutex = Mutex.new
|
|
@@ -252,13 +252,17 @@ module Cosmos
|
|
|
252
252
|
when 'DEFAULT_PACKET_LOG_WRITER'
|
|
253
253
|
usage = "#{keyword} <FILENAME> <Specific Parameters>"
|
|
254
254
|
parser.verify_num_parameters(1, nil, usage)
|
|
255
|
-
|
|
255
|
+
Cosmos.disable_warnings do
|
|
256
|
+
@default_packet_log_writer = Cosmos.require_class(parameters[0])
|
|
257
|
+
end
|
|
256
258
|
@default_packet_log_writer_params = parameters[1..-1] if parameters.size > 1
|
|
257
259
|
|
|
258
260
|
when 'DEFAULT_PACKET_LOG_READER'
|
|
259
261
|
usage = "#{keyword} <FILENAME> <Specific Parameters>"
|
|
260
262
|
parser.verify_num_parameters(1, nil, usage)
|
|
261
|
-
|
|
263
|
+
Cosmos.disable_warnings do
|
|
264
|
+
@default_packet_log_reader = Cosmos.require_class(parameters[0])
|
|
265
|
+
end
|
|
262
266
|
@default_packet_log_reader_params = parameters[1..-1] if parameters.size > 1
|
|
263
267
|
|
|
264
268
|
when 'ENABLE_SOUND'
|
|
@@ -429,8 +433,6 @@ module Cosmos
|
|
|
429
433
|
end # parser.parse_file
|
|
430
434
|
end
|
|
431
435
|
|
|
432
|
-
|
|
433
|
-
|
|
434
436
|
# Load the specified configuration by iterating through the SAVED_CONFIG
|
|
435
437
|
# directory looking for a matching MD5 sum. Updates the internal state so
|
|
436
438
|
# subsequent commands and telemetry methods return the new configuration.
|
|
@@ -439,6 +441,11 @@ module Cosmos
|
|
|
439
441
|
# configuration. Pass nil to load the default configuration.
|
|
440
442
|
# @return [String, Exception/nil] The actual configuration loaded
|
|
441
443
|
def load_configuration(name = nil)
|
|
444
|
+
unless @config
|
|
445
|
+
# Ensure packets have been lazy loaded
|
|
446
|
+
System.commands
|
|
447
|
+
end
|
|
448
|
+
|
|
442
449
|
if name && @config
|
|
443
450
|
# Make sure they're requesting something other than the current
|
|
444
451
|
# configuration.
|
|
@@ -473,8 +480,6 @@ module Cosmos
|
|
|
473
480
|
end
|
|
474
481
|
end
|
|
475
482
|
else
|
|
476
|
-
# Ensure packets have been lazy loaded
|
|
477
|
-
System.commands
|
|
478
483
|
update_config(@initial_config)
|
|
479
484
|
end
|
|
480
485
|
return @config.name, nil
|
|
@@ -487,7 +492,7 @@ module Cosmos
|
|
|
487
492
|
|
|
488
493
|
# Resets the System's internal state to defaults.
|
|
489
494
|
#
|
|
490
|
-
# @
|
|
495
|
+
# @param filename [String] Path to system.txt config file to process. Defaults to config/system/system.txt
|
|
491
496
|
def reset_variables(filename = nil)
|
|
492
497
|
@targets = {}
|
|
493
498
|
@targets['UNKNOWN'] = Target.new('UNKNOWN')
|
|
@@ -516,6 +521,8 @@ module Cosmos
|
|
|
516
521
|
@ports['REPLAY_API'] = 7877
|
|
517
522
|
@ports['REPLAY_PREIDENTIFIED'] = 7879
|
|
518
523
|
@ports['REPLAY_CMD_ROUTER'] = 7880
|
|
524
|
+
@ports['DART_DECOM'] = 8777
|
|
525
|
+
@ports['DART_STREAM'] = 8779
|
|
519
526
|
|
|
520
527
|
@listen_hosts = {}
|
|
521
528
|
@listen_hosts['CTS_API'] = '127.0.0.1'
|
|
@@ -527,6 +534,8 @@ module Cosmos
|
|
|
527
534
|
# Localhost would be more secure but historically these are open to allow for chaining servers by default
|
|
528
535
|
@listen_hosts['REPLAY_PREIDENTIFIED'] = '0.0.0.0'
|
|
529
536
|
@listen_hosts['REPLAY_CMD_ROUTER'] = '0.0.0.0'
|
|
537
|
+
@listen_hosts['DART_STREAM'] = '0.0.0.0'
|
|
538
|
+
@listen_hosts['DART_DECOM'] = '0.0.0.0'
|
|
530
539
|
|
|
531
540
|
@connect_hosts = {}
|
|
532
541
|
@connect_hosts['CTS_API'] = '127.0.0.1'
|
|
@@ -536,6 +545,8 @@ module Cosmos
|
|
|
536
545
|
@connect_hosts['REPLAY_API'] = '127.0.0.1'
|
|
537
546
|
@connect_hosts['REPLAY_PREIDENTIFIED'] = '127.0.0.1'
|
|
538
547
|
@connect_hosts['REPLAY_CMD_ROUTER'] = '127.0.0.1'
|
|
548
|
+
@connect_hosts['DART_STREAM'] = '127.0.0.1'
|
|
549
|
+
@connect_hosts['DART_DECOM'] = '127.0.0.1'
|
|
539
550
|
|
|
540
551
|
@paths = {}
|
|
541
552
|
@paths['LOGS'] = File.join(USERPATH, 'outputs', 'logs')
|
|
@@ -545,6 +556,8 @@ module Cosmos
|
|
|
545
556
|
@paths['HANDBOOKS'] = File.join(USERPATH, 'outputs', 'handbooks')
|
|
546
557
|
@paths['PROCEDURES'] = [File.join(USERPATH, 'procedures')]
|
|
547
558
|
@paths['SEQUENCES'] = File.join(USERPATH, 'outputs', 'sequences')
|
|
559
|
+
@paths['DART_DATA'] = File.join(USERPATH, 'outputs', 'dart', 'data')
|
|
560
|
+
@paths['DART_LOGS'] = File.join(USERPATH, 'outputs', 'dart', 'logs')
|
|
548
561
|
|
|
549
562
|
unless filename
|
|
550
563
|
system_arg = false
|
|
@@ -575,15 +588,27 @@ module Cosmos
|
|
|
575
588
|
self.instance.reset
|
|
576
589
|
end
|
|
577
590
|
|
|
591
|
+
def find_configuration(name)
|
|
592
|
+
Cosmos.set_working_dir do
|
|
593
|
+
Dir.foreach(@paths['SAVED_CONFIG']) do |filename|
|
|
594
|
+
full_path = File.join(@paths['SAVED_CONFIG'], filename)
|
|
595
|
+
if File.exist?(full_path) && File.basename(filename, ".*")[-32..-1] == name
|
|
596
|
+
return full_path
|
|
597
|
+
end
|
|
598
|
+
end
|
|
599
|
+
end
|
|
600
|
+
nil
|
|
601
|
+
end
|
|
602
|
+
|
|
578
603
|
protected
|
|
579
604
|
|
|
580
|
-
def unzip(
|
|
581
|
-
zip_dir = File.join(@paths['TMP'], File.basename(
|
|
605
|
+
def unzip(zip_file_name)
|
|
606
|
+
zip_dir = File.join(@paths['TMP'], File.basename(zip_file_name, ".*"))
|
|
582
607
|
# Only unzip if we have to. We assume the unzipped directory structure is
|
|
583
608
|
# intact. If not they'll get a popop with the errors encountered when
|
|
584
609
|
# loading the configuration.
|
|
585
610
|
unless File.exist? zip_dir
|
|
586
|
-
Zip::File.open(
|
|
611
|
+
Zip::File.open(zip_file_name) do |zip_file|
|
|
587
612
|
zip_file.each do |entry|
|
|
588
613
|
path = File.join(@paths['TMP'], entry.name)
|
|
589
614
|
FileUtils.mkdir_p(File.dirname(path))
|
|
@@ -656,18 +681,6 @@ module Cosmos
|
|
|
656
681
|
@telemetry.reset if current_config != config
|
|
657
682
|
end
|
|
658
683
|
|
|
659
|
-
def find_configuration(name)
|
|
660
|
-
Cosmos.set_working_dir do
|
|
661
|
-
Dir.foreach(@paths['SAVED_CONFIG']) do |filename|
|
|
662
|
-
full_path = File.join(@paths['SAVED_CONFIG'], filename)
|
|
663
|
-
if File.exist?(full_path) && File.basename(filename, ".*")[-32..-1] == name
|
|
664
|
-
return full_path
|
|
665
|
-
end
|
|
666
|
-
end
|
|
667
|
-
end
|
|
668
|
-
nil
|
|
669
|
-
end
|
|
670
|
-
|
|
671
684
|
def save_configuration
|
|
672
685
|
Cosmos.set_working_dir do
|
|
673
686
|
configuration = find_configuration(@config.name)
|
|
@@ -707,6 +720,7 @@ module Cosmos
|
|
|
707
720
|
end
|
|
708
721
|
end
|
|
709
722
|
end
|
|
723
|
+
File.chmod(0444, configuration) # Mark readonly
|
|
710
724
|
rescue Exception => error
|
|
711
725
|
Logger.error "Problem saving configuration to #{configuration}: #{error.class}:#{error.message}\n#{error.backtrace.join("\n")}\n"
|
|
712
726
|
end
|
|
@@ -831,6 +845,8 @@ module Cosmos
|
|
|
831
845
|
tlm_meta.write('RUBY_VERSION', "#{RUBY_VERSION}p#{RUBY_PATCHLEVEL}")
|
|
832
846
|
|
|
833
847
|
cmd_meta.buffer = tlm_meta.buffer
|
|
848
|
+
cmd_meta.received_time = Time.now.sys
|
|
849
|
+
tlm_meta.received_time = Time.now.sys
|
|
834
850
|
end
|
|
835
851
|
|
|
836
852
|
def build_cmd_system_meta
|
|
@@ -848,6 +864,7 @@ module Cosmos
|
|
|
848
864
|
|
|
849
865
|
def build_tlm_system_meta
|
|
850
866
|
tlm_meta = Packet.new('SYSTEM', 'META', :BIG_ENDIAN)
|
|
867
|
+
tlm_meta.define_reserved_items()
|
|
851
868
|
item = tlm_meta.append_item('PKTID', 8, :UINT, nil, :BIG_ENDIAN, :ERROR, nil, nil, nil, 1)
|
|
852
869
|
item.description = 'Packet Id'
|
|
853
870
|
item.meta["READ_ONLY"] = []
|