cosmos 4.2.4-java → 4.5.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/.dockerignore +2 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +30 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
- data/.github/ISSUE_TEMPLATE/help---usage---general-question.md +12 -0
- data/.gitignore +2 -0
- data/.travis.yml +6 -6
- data/Dockerfile +69 -0
- data/Gemfile +1 -1
- data/Manifest.txt +130 -46
- data/README.md +9 -0
- data/Rakefile +57 -0
- data/appveyor.yml +18 -7
- data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -1
- data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +5 -5
- data/autohotkey/config/targets/INST/lib/sim_inst.rb +3 -1
- data/autohotkey/config/tools/cmd_sequence/cmd_sequence.txt +2 -0
- data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
- data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
- data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
- data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
- data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/autohotkey/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
- data/autohotkey/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
- data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +2 -4
- data/autohotkey/config/tools/table_manager/SubTables/OneDimensionalSubTable_def.txt +31 -0
- data/autohotkey/config/tools/table_manager/SubTables/TwoDimensionalSubTable_def.txt +28 -0
- data/autohotkey/config/tools/test_runner/test_runner.txt +1 -1
- data/autohotkey/config/tools/test_runner/test_runner2.txt +1 -1
- data/autohotkey/config/tools/test_runner/test_runner3.txt +1 -1
- data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
- data/autohotkey/lib/cmd_sequence_exporter.rb +52 -0
- data/autohotkey/procedures/collect.rb +2 -2
- data/autohotkey/procedures/collect_util.rb +1 -1
- data/autohotkey/procedures/script_test.rb +1 -1
- data/autohotkey/tools/CmdSenderAHK2 +18 -0
- data/autohotkey/tools/cmd_sender.ahk +34 -6
- data/autohotkey/tools/cmd_sender2.ahk +4 -0
- data/autohotkey/tools/cmd_sequence.ahk +36 -22
- data/autohotkey/tools/cmd_sequence2.ahk +1 -1
- data/autohotkey/tools/config_editor.ahk +5 -5
- data/autohotkey/tools/launcher.ahk +1 -0
- data/autohotkey/tools/limits_monitor.ahk +1 -1
- data/autohotkey/tools/packet_viewer.ahk +7 -6
- data/autohotkey/tools/script_runner.ahk +16 -4
- data/autohotkey/tools/test_runner.ahk +8 -8
- data/bin/cosmos +38 -1
- data/bin/cstol_converter +1 -1
- data/bin/dart_util +0 -0
- data/bin/rubysloc +73 -28
- data/bin/xtce_converter +1 -1
- data/cosmos.gemspec +7 -9
- data/data/config/_interfaces.yaml +4 -0
- data/data/config/cmd_sequence.yaml +14 -0
- data/data/config/command_modifiers.yaml +16 -1
- data/data/config/housekeeping_params.yaml +14 -0
- data/data/config/interface_modifiers.yaml +14 -2
- data/data/config/item_modifiers.yaml +11 -1
- data/data/config/launcher.yaml +12 -2
- data/data/config/param_item_modifiers.yaml +7 -2
- data/data/config/parameter_modifiers.yaml +20 -0
- data/data/config/screen.yaml +2 -0
- data/data/config/script_runner.yaml +9 -0
- data/data/config/system.yaml +152 -28
- data/data/config/table_manager.yaml +7 -0
- data/data/config/target.yaml +12 -0
- data/data/config/telemetry_modifiers.yaml +19 -2
- data/data/config/test_runner.yaml +10 -9
- data/data/config/widgets.yaml +174 -11
- data/data/crc.txt +428 -415
- data/demo/Gemfile +1 -1
- data/demo/Launcher.bat +1 -9
- data/demo/Launcher2.bat +1 -0
- data/demo/LauncherMini.bat +1 -0
- data/demo/Rakefile +2 -0
- data/demo/config/dart/Gemfile +2 -7
- data/demo/config/data/crc.txt +243 -219
- data/demo/config/system/system.txt +42 -3
- data/demo/config/system/system2.txt +34 -5
- data/demo/config/system/system_alt_ports.txt +80 -0
- data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +1 -0
- data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +5 -4
- data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +12 -7
- data/demo/config/targets/INST/cmd_tlm/inst_tlm_override.txt +12 -0
- data/demo/config/targets/INST/cmd_tlm_server.txt +2 -0
- data/demo/config/targets/INST/lib/sim_inst.rb +15 -3
- data/demo/config/targets/INST/screens/adcs.txt +2 -2
- data/demo/config/targets/INST/screens/block.txt +1 -1
- data/demo/config/targets/INST/screens/commanding.txt +1 -1
- data/demo/config/targets/INST/screens/ground.txt +27 -5
- data/demo/config/targets/INST/screens/ground_error.gif +0 -0
- data/demo/config/{data/groundoff.gif → targets/INST/screens/ground_off.gif} +0 -0
- data/demo/config/{data/groundon.gif → targets/INST/screens/ground_on.gif} +0 -0
- data/demo/config/targets/INST/screens/limits.txt +69 -31
- data/demo/config/targets/INST/screens/other.txt +13 -3
- data/demo/config/targets/INST/screens/params.txt +54 -0
- data/demo/config/targets/INST/screens/satellite.gif +0 -0
- data/demo/config/targets/INST/target.txt +1 -0
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server_chain.txt +18 -0
- data/demo/config/tools/data_viewer/data_viewer.txt +3 -0
- data/demo/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
- data/demo/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
- data/demo/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
- data/demo/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
- data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/demo/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
- data/demo/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
- data/demo/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
- data/demo/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
- data/demo/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
- data/demo/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
- data/demo/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
- data/demo/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
- data/demo/config/tools/handbook_creator/default_toc.xsl +59 -59
- data/demo/config/tools/script_runner/script_runner.txt +1 -2
- data/demo/config/tools/test_runner/test_runner.txt +3 -1
- data/demo/lib/example_background_task.rb +1 -0
- data/demo/procedures/cosmos_api_test.rb +26 -22
- data/demo/procedures/interactive.rb +22 -0
- data/demo/procedures/local_screen_example.rb +51 -0
- data/ext/cosmos/ext/cosmos_io/cosmos_io.c +32 -4
- data/ext/cosmos/ext/packet/packet.c +6 -77
- data/ext/mkrf_conf.rb +2 -2
- data/extensions/vscode/.gitignore +4 -0
- data/extensions/vscode/.vscode/launch.json +32 -0
- data/extensions/vscode/.vscode/settings.json +13 -0
- data/extensions/vscode/.vscode/tasks.json +79 -0
- data/extensions/vscode/License.txt +879 -0
- data/extensions/vscode/README.md +9 -0
- data/extensions/vscode/client/License.txt +879 -0
- data/extensions/vscode/client/README.md +39 -0
- data/extensions/vscode/client/cosmos.configuration.json +23 -0
- data/extensions/vscode/client/images/icon.png +0 -0
- data/extensions/vscode/client/package-lock.json +414 -0
- data/extensions/vscode/client/package.json +105 -0
- data/extensions/vscode/client/src/extension.ts +132 -0
- data/extensions/vscode/client/src/screen_preview.rb +25 -0
- data/extensions/vscode/client/syntaxes/cosmos.tmLanguage.json +219 -0
- data/extensions/vscode/client/tsconfig.json +17 -0
- data/extensions/vscode/package-lock.json +26 -0
- data/extensions/vscode/package.json +35 -0
- data/extensions/vscode/server/License.txt +879 -0
- data/extensions/vscode/server/package-lock.json +236 -0
- data/extensions/vscode/server/package.json +29 -0
- data/extensions/vscode/server/src/server.ts +59 -0
- data/extensions/vscode/server/tsconfig.json +16 -0
- data/install/Gemfile +1 -1
- data/install/Launcher.bat +1 -9
- data/install/config/dart/Gemfile +3 -8
- data/install/config/data/crc.txt +148 -132
- data/install/config/system/system.txt +36 -3
- data/install/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
- data/install/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
- data/install/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
- data/install/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
- data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/install/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
- data/install/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
- data/install/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
- data/install/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
- data/install/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
- data/install/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
- data/install/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
- data/install/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
- data/install/config/tools/handbook_creator/default_toc.xsl +59 -59
- data/lib/cosmos/config/config_parser.rb +4 -5
- data/lib/cosmos/conversions.rb +2 -0
- data/lib/cosmos/conversions/packet_time_formatted_conversion.rb +38 -0
- data/lib/cosmos/conversions/packet_time_seconds_conversion.rb +38 -0
- data/lib/cosmos/core_ext/cosmos_io.rb +2 -1
- data/lib/cosmos/core_ext/time.rb +3 -1
- data/lib/cosmos/dart/config/boot.rb +1 -1
- data/lib/cosmos/dart/config/database.yml +2 -0
- data/lib/cosmos/dart/examples/dart_decom_client.rb +1 -1
- data/lib/cosmos/dart/examples/dart_stream_client.rb +6 -2
- data/lib/cosmos/dart/lib/dart_common.rb +13 -6
- data/lib/cosmos/dart/lib/dart_constants.rb +15 -0
- data/lib/cosmos/dart/lib/dart_database_cleaner.rb +2 -2
- data/lib/cosmos/dart/lib/dart_decom_query.rb +5 -6
- data/lib/cosmos/dart/lib/dart_decommutator.rb +64 -54
- data/lib/cosmos/dart/lib/dart_importer.rb +3 -3
- data/lib/cosmos/dart/lib/dart_master_query.rb +71 -0
- data/lib/cosmos/dart/lib/dart_packet_log_writer.rb +2 -2
- data/lib/cosmos/dart/lib/dart_reducer_worker_thread.rb +165 -134
- data/lib/cosmos/dart/processes/dart.rb +4 -2
- data/lib/cosmos/dart/processes/dart_decom_server.rb +3 -3
- data/lib/cosmos/dart/processes/dart_ingester.rb +40 -1
- data/lib/cosmos/dart/processes/dart_master.rb +44 -0
- data/lib/cosmos/dart/processes/dart_util.rb +119 -4
- data/lib/cosmos/dart/spec/dart/dart_reducer_manager_spec.rb +3 -3
- data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +9 -5
- data/lib/cosmos/gui/dialogs/details_dialog.rb +44 -29
- data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +3 -3
- data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +2 -2
- data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +11 -10
- data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +4 -2
- data/lib/cosmos/gui/opengl/earth_model.rb +1 -1
- data/lib/cosmos/gui/qt.rb +13 -2
- data/lib/cosmos/gui/qt_tool.rb +71 -43
- data/lib/cosmos/gui/text/ruby_editor.rb +91 -49
- data/lib/cosmos/gui/utilities/classification_banner.rb +60 -0
- data/lib/cosmos/gui/utilities/screenshot.rb +1 -1
- data/lib/cosmos/gui/utilities/script_module_gui.rb +117 -91
- data/lib/cosmos/gui/widgets/dart_meta_frame.rb +22 -3
- data/lib/cosmos/interfaces.rb +2 -0
- data/lib/cosmos/interfaces/dart_status_interface.rb +1 -1
- data/lib/cosmos/interfaces/interface.rb +9 -1
- data/lib/cosmos/interfaces/linc_interface.rb +3 -3
- data/lib/cosmos/interfaces/protocols/burst_protocol.rb +1 -1
- data/lib/cosmos/interfaces/protocols/crc_protocol.rb +1 -1
- data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +40 -18
- data/lib/cosmos/interfaces/protocols/ignore_packet_protocol.rb +46 -0
- data/lib/cosmos/interfaces/protocols/length_protocol.rb +5 -0
- data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +68 -23
- data/lib/cosmos/interfaces/protocols/template_protocol.rb +9 -4
- data/lib/cosmos/interfaces/serial_interface.rb +7 -1
- data/lib/cosmos/interfaces/simulated_target_interface.rb +14 -5
- data/lib/cosmos/interfaces/stream_interface.rb +1 -1
- data/lib/cosmos/interfaces/tcpip_server_interface.rb +13 -13
- data/lib/cosmos/io/json_drb.rb +16 -12
- data/lib/cosmos/io/json_drb_object.rb +7 -2
- data/lib/cosmos/io/json_drb_rack.rb +25 -5
- data/lib/cosmos/io/json_rpc.rb +1 -1
- data/lib/cosmos/io/posix_serial_driver.rb +60 -22
- data/lib/cosmos/io/serial_driver.rb +11 -8
- data/lib/cosmos/io/win32_serial_driver.rb +31 -3
- data/lib/cosmos/packet_logs/packet_log_reader.rb +71 -28
- data/lib/cosmos/packet_logs/packet_log_writer.rb +13 -1
- data/lib/cosmos/packets/commands.rb +30 -9
- data/lib/cosmos/packets/packet.rb +105 -34
- data/lib/cosmos/packets/packet_config.rb +60 -10
- data/lib/cosmos/packets/parsers/format_string_parser.rb +0 -1
- data/lib/cosmos/packets/parsers/state_parser.rb +0 -1
- data/lib/cosmos/packets/parsers/xtce_converter.rb +2 -0
- data/lib/cosmos/packets/parsers/xtce_parser.rb +5 -4
- data/lib/cosmos/packets/structure.rb +32 -4
- data/lib/cosmos/packets/structure_item.rb +5 -1
- data/lib/cosmos/packets/telemetry.rb +30 -4
- data/lib/cosmos/script/api_shared.rb +22 -10
- data/lib/cosmos/script/extract.rb +1 -1
- data/lib/cosmos/script/limits.rb +4 -0
- data/lib/cosmos/script/script.rb +29 -20
- data/lib/cosmos/script/scripting.rb +16 -14
- data/lib/cosmos/script/telemetry.rb +3 -1
- data/lib/cosmos/script/tools.rb +18 -8
- data/lib/cosmos/streams/serial_stream.rb +11 -6
- data/lib/cosmos/system/system.rb +214 -76
- data/lib/cosmos/system/target.rb +39 -9
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +116 -55
- data/lib/cosmos/tools/cmd_sender/cmd_param_table_item_delegate.rb +15 -0
- data/lib/cosmos/tools/cmd_sender/cmd_params.rb +382 -0
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +54 -340
- data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +74 -52
- data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +40 -333
- data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +16 -11
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +13 -0
- data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +2 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +44 -15
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +8 -1
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +18 -20
- data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +13 -2
- data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +2 -2
- data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +13 -13
- data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +9 -6
- data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +8 -8
- data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +5 -5
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +35 -20
- data/lib/cosmos/tools/cmd_tlm_server/replay_backend.rb +15 -11
- data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +5 -0
- data/lib/cosmos/tools/cmd_tlm_server/routers.rb +2 -0
- data/lib/cosmos/tools/config_editor/config_editor.rb +181 -94
- data/lib/cosmos/tools/config_editor/config_editor_frame.rb +10 -9
- data/lib/cosmos/tools/config_editor/system_config_dialog.rb +158 -0
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +57 -47
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +1 -0
- data/lib/cosmos/tools/data_viewer/dump_component.rb +3 -9
- data/lib/cosmos/tools/data_viewer/text_component.rb +77 -0
- data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +68 -42
- data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +1 -1
- data/lib/cosmos/tools/launcher/launcher.rb +2 -1
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +59 -41
- data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +42 -42
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +64 -59
- data/lib/cosmos/tools/script_runner/script_runner.rb +198 -123
- data/lib/cosmos/tools/script_runner/script_runner_config.rb +14 -0
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +87 -35
- data/lib/cosmos/tools/table_manager/table_config.rb +5 -3
- data/lib/cosmos/tools/table_manager/table_manager.rb +48 -45
- data/lib/cosmos/tools/test_runner/test.rb +5 -2
- data/lib/cosmos/tools/test_runner/test_runner.rb +61 -38
- data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +24 -12
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +48 -48
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +5 -8
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +20 -16
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +3 -3
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +7 -7
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +10 -10
- data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +10 -3
- data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +6 -6
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +14 -14
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_dart_thread.rb +21 -17
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +5 -8
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +94 -91
- data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +27 -26
- data/lib/cosmos/tools/tlm_viewer/screen.rb +76 -14
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +51 -34
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +3 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +4 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +3 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +4 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/canvas_clickable.rb +16 -2
- data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +17 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasdot_widget.rb +1 -2
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasellipse_widget.rb +40 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +12 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +79 -29
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +1 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +2 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +2 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +4 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +33 -25
- data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +5 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +5 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +1 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +4 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +5 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +6 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +2 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +10 -8
- data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/labelled_widget.rb +58 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +3 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +2 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +2 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +3 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitscolumn_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangecolumn_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +3 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/led_widget.rb +108 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/limits_widget.rb +60 -10
- data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +22 -8
- data/lib/cosmos/tools/tlm_viewer/widgets/limitscolor_widget.rb +19 -13
- data/lib/cosmos/tools/tlm_viewer/widgets/limitscolumn_widget.rb +22 -8
- data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +4 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +1 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +10 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +7 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +4 -6
- data/lib/cosmos/tools/tlm_viewer/widgets/rangecolumn_widget.rb +3 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +4 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +4 -6
- data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +13 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +3 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +3 -8
- data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +6 -12
- data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +5 -10
- data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +5 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +4 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitscolumn_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +3 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/valuerangecolumn_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +8 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +9 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +60 -47
- data/lib/cosmos/top_level.rb +37 -13
- data/lib/cosmos/utilities/ruby_lex_utils.rb +34 -30
- data/lib/cosmos/version.rb +5 -5
- data/lib/cosmos/win32/excel.rb +81 -24
- data/make_gems.sh +10 -0
- data/run_gui_tests.bat +1 -0
- data/spec/conversions/packet_time_formatted_conversion_spec.rb +58 -0
- data/spec/conversions/packet_time_seconds_conversion_spec.rb +60 -0
- data/spec/core_ext/socket_spec.rb +1 -1
- data/spec/core_ext/time_spec.rb +4 -0
- data/spec/gui/utilities/script_module_gui_spec.rb +44 -63
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -1
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +5 -5
- data/spec/install/yaml_docs_spec.rb +132 -0
- data/spec/interfaces/linc_interface_spec.rb +1 -1
- data/spec/interfaces/protocols/fixed_protocol_spec.rb +20 -9
- data/spec/interfaces/protocols/ignore_packet_protocol_spec.rb +243 -0
- data/spec/interfaces/protocols/length_protocol_spec.rb +39 -0
- data/spec/interfaces/protocols/preidentified_protocol_spec.rb +227 -4
- data/spec/interfaces/protocols/template_protocol_spec.rb +78 -25
- data/spec/io/json_drb_rack_spec.rb +166 -0
- data/spec/io/json_drb_spec.rb +14 -0
- data/spec/io/json_rpc_spec.rb +4 -5
- data/spec/io/posix_serial_driver_spec.rb +81 -0
- data/spec/io/serial_driver_spec.rb +15 -13
- data/spec/io/win32_serial_driver_spec.rb +33 -3
- data/spec/packet_logs/packet_log_reader_spec.rb +106 -52
- data/spec/packets/commands_spec.rb +22 -0
- data/spec/packets/packet_config_spec.rb +29 -16
- data/spec/packets/packet_item_spec.rb +2 -2
- data/spec/packets/packet_spec.rb +39 -6
- data/spec/packets/parsers/format_string_parser_spec.rb +0 -11
- data/spec/packets/parsers/macro_parser_spec.rb +36 -36
- data/spec/packets/parsers/state_parser_spec.rb +69 -11
- data/spec/packets/structure_spec.rb +93 -2
- data/spec/packets/telemetry_spec.rb +63 -10
- data/spec/script/extract_spec.rb +4 -1
- data/spec/script/script_spec.rb +2 -3
- data/spec/script/scripting_spec.rb +2 -1
- data/spec/script/tools_spec.rb +0 -1
- data/spec/streams/tcpip_socket_stream_spec.rb +32 -27
- data/spec/system/system_spec.rb +187 -4
- data/spec/system/target_spec.rb +62 -1
- data/spec/tools/cmd_tlm_server/api_spec.rb +29 -21
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +15 -7
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +33 -0
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +25 -1
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +15 -0
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +2 -3
- data/spec/top_level/top_level_spec.rb +29 -5
- data/spec/utilities/message_log_spec.rb +6 -3
- data/tasks/gemfile_stats.rake +38 -14
- data/test/performance/config/system/system.txt +0 -0
- data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +5 -5
- data/test/performance/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
- data/test/performance/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
- data/test/performance/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
- data/test/performance/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
- data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
- data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
- data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
- data/test/performance/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
- data/test/performance/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
- data/test/performance/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
- data/test/performance/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
- data/test/performance/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
- data/test/performance/config/tools/test_runner/test_runner.txt +1 -1
- data/test/performance/procedures/cosmos_api_test.rb +1 -1
- data/test/performance/tools/identify_performance.rb +82 -0
- metadata +146 -62
- data/lib/cosmos/dart/Gemfile +0 -69
|
@@ -132,7 +132,7 @@ module Cosmos
|
|
|
132
132
|
end
|
|
133
133
|
rescue Exception => err
|
|
134
134
|
shutdown_interfaces(@write_interface_infos)
|
|
135
|
-
Logger.instance.error("Tcpip server write thread unexpectedly died")
|
|
135
|
+
Logger.instance.error("#{@name}: Tcpip server write thread unexpectedly died")
|
|
136
136
|
Logger.instance.error(err.formatted)
|
|
137
137
|
end
|
|
138
138
|
end
|
|
@@ -144,7 +144,7 @@ module Cosmos
|
|
|
144
144
|
end
|
|
145
145
|
rescue Exception => err
|
|
146
146
|
shutdown_interfaces(@write_interface_infos)
|
|
147
|
-
Logger.instance.error("Tcpip server write raw thread unexpectedly died")
|
|
147
|
+
Logger.instance.error("#{@name}: Tcpip server write raw thread unexpectedly died")
|
|
148
148
|
Logger.instance.error(err.formatted)
|
|
149
149
|
end
|
|
150
150
|
end
|
|
@@ -346,7 +346,7 @@ module Cosmos
|
|
|
346
346
|
break if @cancel_threads
|
|
347
347
|
end
|
|
348
348
|
rescue => err
|
|
349
|
-
Logger.instance.error("Tcpip server listen thread unexpectedly died")
|
|
349
|
+
Logger.instance.error("#{@name}: Tcpip server listen thread unexpectedly died")
|
|
350
350
|
Logger.instance.error(err.formatted)
|
|
351
351
|
end
|
|
352
352
|
end
|
|
@@ -372,7 +372,7 @@ module Cosmos
|
|
|
372
372
|
if not System.instance.acl.allow_addr?(addr)
|
|
373
373
|
# Reject connection
|
|
374
374
|
Cosmos.close_socket(socket)
|
|
375
|
-
Logger.instance.info "Tcpip server rejected connection from #{hostname}(#{host_ip}):#{port}"
|
|
375
|
+
Logger.instance.info "#{@name}: Tcpip server rejected connection from #{hostname}(#{host_ip}):#{port}"
|
|
376
376
|
return
|
|
377
377
|
end
|
|
378
378
|
end
|
|
@@ -417,7 +417,7 @@ module Cosmos
|
|
|
417
417
|
end
|
|
418
418
|
start_read_thread(@read_interface_infos[-1])
|
|
419
419
|
end
|
|
420
|
-
Logger.instance.info "Tcpip server accepted connection from #{hostname}(#{host_ip}):#{port}"
|
|
420
|
+
Logger.instance.info "#{@name}: Tcpip server accepted connection from #{hostname}(#{host_ip}):#{port}"
|
|
421
421
|
end
|
|
422
422
|
|
|
423
423
|
def start_read_thread(interface_info)
|
|
@@ -427,10 +427,10 @@ module Cosmos
|
|
|
427
427
|
begin
|
|
428
428
|
read_thread_body(interface_info.interface)
|
|
429
429
|
rescue Exception => err
|
|
430
|
-
Logger.instance.error "Tcpip server read thread unexpectedly died"
|
|
430
|
+
Logger.instance.error "#{@name}: Tcpip server read thread unexpectedly died"
|
|
431
431
|
Logger.instance.error err.formatted
|
|
432
432
|
end
|
|
433
|
-
Logger.instance.info "Tcpip server lost read connection to #{interface_info.hostname}(#{interface_info.host_ip}):#{interface_info.port}"
|
|
433
|
+
Logger.instance.info "#{@name}: Tcpip server lost read connection to #{interface_info.hostname}(#{interface_info.host_ip}):#{interface_info.port}"
|
|
434
434
|
@read_threads.delete(Thread.current)
|
|
435
435
|
|
|
436
436
|
index_to_delete = nil
|
|
@@ -453,7 +453,7 @@ module Cosmos
|
|
|
453
453
|
end
|
|
454
454
|
end
|
|
455
455
|
rescue Exception => err
|
|
456
|
-
Logger.instance.error "Tcpip server read thread unexpectedly died"
|
|
456
|
+
Logger.instance.error "#{@name}: Tcpip server read thread unexpectedly died"
|
|
457
457
|
Logger.instance.error err.formatted
|
|
458
458
|
end
|
|
459
459
|
end
|
|
@@ -500,7 +500,7 @@ module Cosmos
|
|
|
500
500
|
end
|
|
501
501
|
|
|
502
502
|
def interface_disconnect(interface_info)
|
|
503
|
-
Logger.instance.info "Tcpip server lost write connection to "\
|
|
503
|
+
Logger.instance.info "#{@name}: Tcpip server lost write connection to "\
|
|
504
504
|
"#{interface_info.hostname}(#{interface_info.host_ip}):#{interface_info.port}"
|
|
505
505
|
interface_info.interface.disconnect
|
|
506
506
|
interface_info.interface.raw_logger_pair.stop if interface_info.interface.raw_logger_pair
|
|
@@ -552,13 +552,13 @@ module Cosmos
|
|
|
552
552
|
next
|
|
553
553
|
end
|
|
554
554
|
# Client has disconnected (or is invalidly sending data on the socket)
|
|
555
|
-
Logger.instance.info "Tcpip server lost write connection to #{interface_info.hostname}(#{interface_info.host_ip}):#{interface_info.port}"
|
|
555
|
+
Logger.instance.info "#{@name}: Tcpip server lost write connection to #{interface_info.hostname}(#{interface_info.host_ip}):#{interface_info.port}"
|
|
556
556
|
interface_info.interface.disconnect
|
|
557
557
|
interface_info.interface.raw_logger_pair.stop if interface_info.interface.raw_logger_pair
|
|
558
558
|
indexes_to_delete.unshift(index) # Put later indexes at front of array
|
|
559
559
|
rescue Errno::ECONNRESET, Errno::ECONNABORTED, IOError
|
|
560
560
|
# Client has disconnected
|
|
561
|
-
Logger.instance.info "Tcpip server lost write connection to #{interface_info.hostname}(#{interface_info.host_ip}):#{interface_info.port}"
|
|
561
|
+
Logger.instance.info "#{@name}: Tcpip server lost write connection to #{interface_info.hostname}(#{interface_info.host_ip}):#{interface_info.port}"
|
|
562
562
|
interface_info.interface.disconnect
|
|
563
563
|
interface_info.interface.raw_logger_pair.stop if interface_info.interface.raw_logger_pair
|
|
564
564
|
indexes_to_delete.unshift(index) # Put later indexes at front of array
|
|
@@ -600,13 +600,13 @@ module Cosmos
|
|
|
600
600
|
need_disconnect = true
|
|
601
601
|
rescue Exception => err
|
|
602
602
|
if err.message != "Stream not connected for write_raw"
|
|
603
|
-
Logger.instance.error "Error sending to client: #{err.class} #{err.message}"
|
|
603
|
+
Logger.instance.error "#{@name}: Error sending to client: #{err.class} #{err.message}"
|
|
604
604
|
end
|
|
605
605
|
need_disconnect = true
|
|
606
606
|
end
|
|
607
607
|
|
|
608
608
|
if need_disconnect
|
|
609
|
-
Logger.instance.info "Tcpip server lost write connection to #{interface_info.hostname}(#{interface_info.host_ip}):#{interface_info.port}"
|
|
609
|
+
Logger.instance.info "#{@name}: Tcpip server lost write connection to #{interface_info.hostname}(#{interface_info.host_ip}):#{interface_info.port}"
|
|
610
610
|
interface_info.interface.disconnect
|
|
611
611
|
interface_info.interface.raw_logger_pair.stop if interface_info.interface.raw_logger_pair
|
|
612
612
|
indexes_to_delete.unshift(index) # Put later indexes at front of array
|
data/lib/cosmos/io/json_drb.rb
CHANGED
|
@@ -44,14 +44,19 @@ module Puma
|
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
module Cosmos
|
|
47
|
-
|
|
48
47
|
# JsonDRb implements the JSON-RPC 2.0 Specification to provide an interface
|
|
49
48
|
# for both internal and external tools to access the COSMOS server. It
|
|
50
49
|
# provides methods to install an access control list to control access to the
|
|
51
50
|
# API. It also limits the available methods to a known list of allowable API
|
|
52
51
|
# methods.
|
|
53
52
|
class JsonDRb
|
|
53
|
+
# Minimum amount of time in seconds to receive the JSON request,
|
|
54
|
+
# process it, and send the response. Requests for less than this amount
|
|
55
|
+
# will be set to the minimum
|
|
54
56
|
MINIMUM_REQUEST_TIME = 0.0001
|
|
57
|
+
STOP_SERVICE_TIMEOUT = 10.0 # seconds to wait when stopping the service
|
|
58
|
+
PUMA_THREAD_TIMEOUT = 10.0 # seconds to wait for the puma threads to die
|
|
59
|
+
SERVER_START_TIMEOUT = 15.0 # seconds to wait for the server to start
|
|
55
60
|
|
|
56
61
|
@@debug = false
|
|
57
62
|
|
|
@@ -94,9 +99,9 @@ module Cosmos
|
|
|
94
99
|
|
|
95
100
|
# Stops the DRb service by closing the socket and the processing thread
|
|
96
101
|
def stop_service
|
|
97
|
-
# Kill the server thread
|
|
98
|
-
#
|
|
99
|
-
Cosmos.kill_thread(self, @thread,
|
|
102
|
+
# Kill the server thread
|
|
103
|
+
# parameters are owner, thread, graceful_timeout, timeout_interval, hard_timeout
|
|
104
|
+
Cosmos.kill_thread(self, @thread, STOP_SERVICE_TIMEOUT, 0.1, STOP_SERVICE_TIMEOUT)
|
|
100
105
|
@thread = nil
|
|
101
106
|
@server_mutex.synchronize do
|
|
102
107
|
@server = nil
|
|
@@ -118,7 +123,7 @@ module Cosmos
|
|
|
118
123
|
# @param object [Object] The object to send the DRb requests to. This
|
|
119
124
|
# object must either include the Cosmos::Script module or be the
|
|
120
125
|
# CmdTlmServer.
|
|
121
|
-
def start_service(hostname = nil, port = nil, object = nil, max_threads = 1000)
|
|
126
|
+
def start_service(hostname = nil, port = nil, object = nil, max_threads = 1000, system = nil)
|
|
122
127
|
server_started = false
|
|
123
128
|
@server_mutex.synchronize do
|
|
124
129
|
server_started = true if @server
|
|
@@ -142,7 +147,7 @@ module Cosmos
|
|
|
142
147
|
}
|
|
143
148
|
|
|
144
149
|
# The run call will block until the server is stopped.
|
|
145
|
-
Rack::Handler::Puma.run(JsonDrbRack.new(self), server_config) do |server|
|
|
150
|
+
Rack::Handler::Puma.run(JsonDrbRack.new(self, system), server_config) do |server|
|
|
146
151
|
@server_mutex.synchronize do
|
|
147
152
|
@server = server
|
|
148
153
|
end
|
|
@@ -155,7 +160,7 @@ module Cosmos
|
|
|
155
160
|
puma_threads = false
|
|
156
161
|
Thread.list.each {|thread| puma_threads = true if thread.inspect.match(/puma/)}
|
|
157
162
|
break if !puma_threads
|
|
158
|
-
break if (Time.now - start_time) >
|
|
163
|
+
break if (Time.now - start_time) > PUMA_THREAD_TIMEOUT
|
|
159
164
|
sleep 0.25
|
|
160
165
|
end
|
|
161
166
|
|
|
@@ -184,7 +189,7 @@ module Cosmos
|
|
|
184
189
|
|
|
185
190
|
# Wait for the server to be started in the thread before returning.
|
|
186
191
|
start_time = Time.now
|
|
187
|
-
while ((Time.now - start_time) <
|
|
192
|
+
while ((Time.now - start_time) < SERVER_START_TIMEOUT) and !server_started
|
|
188
193
|
sleep(0.1)
|
|
189
194
|
@server_mutex.synchronize do
|
|
190
195
|
server_started = true if @server and @server.running
|
|
@@ -254,10 +259,10 @@ module Cosmos
|
|
|
254
259
|
error_code = nil
|
|
255
260
|
response_data = nil
|
|
256
261
|
|
|
257
|
-
if (@method_whitelist and @method_whitelist.include?(request.method)) or
|
|
258
|
-
(!@method_whitelist and !JsonRpcRequest::DANGEROUS_METHODS.include?(request.method))
|
|
262
|
+
if (@method_whitelist and @method_whitelist.include?(request.method.downcase())) or
|
|
263
|
+
(!@method_whitelist and !JsonRpcRequest::DANGEROUS_METHODS.include?(request.method.downcase()))
|
|
259
264
|
begin
|
|
260
|
-
result = @object.send(request.method.intern, *request.params)
|
|
265
|
+
result = @object.send(request.method.downcase().intern, *request.params)
|
|
261
266
|
if request.id
|
|
262
267
|
response = JsonRpcSuccessResponse.new(result, request.id)
|
|
263
268
|
end
|
|
@@ -308,4 +313,3 @@ module Cosmos
|
|
|
308
313
|
|
|
309
314
|
end
|
|
310
315
|
end
|
|
311
|
-
|
|
@@ -38,7 +38,7 @@ module Cosmos
|
|
|
38
38
|
# @param hostname [String] The name of the machine which has started
|
|
39
39
|
# the JSON service
|
|
40
40
|
# @param port [Integer] The port number of the JSON service
|
|
41
|
-
def initialize(hostname, port, connect_timeout = 1.0)
|
|
41
|
+
def initialize(hostname, port, connect_timeout = 1.0, x_csrf_token = nil)
|
|
42
42
|
hostname = '127.0.0.1' if (hostname.to_s.upcase == 'LOCALHOST')
|
|
43
43
|
begin
|
|
44
44
|
Socket.pack_sockaddr_in(port, hostname)
|
|
@@ -61,6 +61,7 @@ module Cosmos
|
|
|
61
61
|
@connect_timeout = connect_timeout
|
|
62
62
|
@connect_timeout = @connect_timeout.to_f if @connect_timeout
|
|
63
63
|
@shutdown = false
|
|
64
|
+
@x_csrf_token = x_csrf_token
|
|
64
65
|
end
|
|
65
66
|
|
|
66
67
|
# Disconnects from http server
|
|
@@ -127,7 +128,11 @@ module Cosmos
|
|
|
127
128
|
STDOUT.puts "\nRequest:\n" if JsonDRb.debug?
|
|
128
129
|
STDOUT.puts @request_data if JsonDRb.debug?
|
|
129
130
|
@request_in_progress = true
|
|
130
|
-
|
|
131
|
+
if @x_csrf_token
|
|
132
|
+
headers = {'Content-Type' => 'application/json-rpc', 'X-Csrf-Token' => @x_csrf_token}
|
|
133
|
+
else
|
|
134
|
+
headers = {'Content-Type' => 'application/json-rpc'}
|
|
135
|
+
end
|
|
131
136
|
res = @http.post(@uri,
|
|
132
137
|
:body => @request_data,
|
|
133
138
|
:header => headers)
|
|
@@ -17,8 +17,9 @@ module Cosmos
|
|
|
17
17
|
class JsonDrbRack
|
|
18
18
|
# @param drb [JsonDRb] - An instance of the JsonDRb class that'll be used
|
|
19
19
|
# to process the JSON request and generate a response
|
|
20
|
-
def initialize(drb)
|
|
20
|
+
def initialize(drb, system = nil)
|
|
21
21
|
@drb = drb
|
|
22
|
+
@system = system
|
|
22
23
|
end
|
|
23
24
|
|
|
24
25
|
# Handles a request.
|
|
@@ -32,22 +33,41 @@ module Cosmos
|
|
|
32
33
|
# ACL allow_addr? function takes address in the form returned by
|
|
33
34
|
# IPSocket.peeraddr.
|
|
34
35
|
req_addr = ["AF_INET", request.port, request.host.to_s, request.ip.to_s]
|
|
36
|
+
status = nil
|
|
35
37
|
|
|
36
38
|
if @drb.acl and !@drb.acl.allow_addr?(req_addr)
|
|
37
39
|
status = 403
|
|
38
40
|
content_type = "text/plain"
|
|
39
41
|
body = "Forbidden"
|
|
40
42
|
elsif request.post?
|
|
41
|
-
|
|
43
|
+
if @system
|
|
44
|
+
if @system.x_csrf_token and (request.env['HTTP_X_CSRF_TOKEN'] != @system.x_csrf_token)
|
|
45
|
+
status = 403
|
|
46
|
+
content_type = "text/plain"
|
|
47
|
+
body = "Forbidden: Bad X-Csrf-Token: #{request.env['HTTP_X_CSRF_TOKEN']}"
|
|
48
|
+
end
|
|
49
|
+
if !@system.allowed_hosts.include?(request.env['HTTP_HOST'])
|
|
50
|
+
status = 403
|
|
51
|
+
content_type = "text/plain"
|
|
52
|
+
body = "Forbidden: #{request.env['HTTP_HOST']} not in allowed hosts"
|
|
53
|
+
end
|
|
54
|
+
if request.env['HTTP_ORIGIN'] and !@system.allowed_origins.include?(request.env['HTTP_ORIGIN'])
|
|
55
|
+
status = 403
|
|
56
|
+
content_type = "text/plain"
|
|
57
|
+
body = "Forbidden: #{request.env['HTTP_ORIGIN']} not in allowed origins"
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
status, content_type, body = handle_post(request) unless status
|
|
42
62
|
else
|
|
43
63
|
status = 405
|
|
44
64
|
content_type = "text/plain"
|
|
45
65
|
body = "Request not allowed"
|
|
46
66
|
end
|
|
47
|
-
|
|
67
|
+
|
|
48
68
|
return status, {'Content-Type' => content_type}, [body]
|
|
49
69
|
end
|
|
50
|
-
|
|
70
|
+
|
|
51
71
|
# Handles an http post.
|
|
52
72
|
#
|
|
53
73
|
# @param request [Rack::Request] - A rack post request
|
|
@@ -57,7 +77,7 @@ module Cosmos
|
|
|
57
77
|
request_data = request.body.read
|
|
58
78
|
start_time = Time.now.sys
|
|
59
79
|
response_data, error_code = @drb.process_request(request_data, start_time)
|
|
60
|
-
|
|
80
|
+
|
|
61
81
|
# Convert json error code into html status code
|
|
62
82
|
# see http://www.jsonrpc.org/historical/json-rpc-over-http.html#errors
|
|
63
83
|
if error_code
|
data/lib/cosmos/io/json_rpc.rb
CHANGED
|
@@ -269,7 +269,7 @@ module Cosmos
|
|
|
269
269
|
# @param response_data [String] JSON encoded string representing the response
|
|
270
270
|
# @return [JsonRpcResponse]
|
|
271
271
|
def self.from_json(response_data)
|
|
272
|
-
msg = "Invalid JSON-RPC 2.0 Response"
|
|
272
|
+
msg = "Invalid JSON-RPC 2.0 Response: #{response_data.inspect}"
|
|
273
273
|
begin
|
|
274
274
|
hash = JSON.parse(response_data, :allow_nan => true, :create_additions => true)
|
|
275
275
|
rescue
|
|
@@ -25,19 +25,20 @@ module Cosmos
|
|
|
25
25
|
write_timeout = 10.0,
|
|
26
26
|
read_timeout = nil,
|
|
27
27
|
flow_control = :NONE,
|
|
28
|
-
data_bits = 8
|
|
28
|
+
data_bits = 8,
|
|
29
|
+
struct = [])
|
|
29
30
|
|
|
30
31
|
# Convert Baud Rate into Termios constant
|
|
31
32
|
begin
|
|
32
33
|
baud_rate = Object.const_get("Termios::B#{baud_rate}")
|
|
33
34
|
rescue NameError
|
|
34
|
-
raise(ArgumentError, "Invalid
|
|
35
|
+
raise(ArgumentError, "Invalid baud rate: #{baud_rate}")
|
|
35
36
|
end
|
|
36
37
|
|
|
37
38
|
# Verify Parameters
|
|
38
|
-
raise(ArgumentError, "Invalid
|
|
39
|
+
raise(ArgumentError, "Invalid data bits: #{data_bits}") unless [5,6,7,8].include?(data_bits)
|
|
39
40
|
raise(ArgumentError, "Invalid parity: #{parity}") if parity and !SerialDriver::VALID_PARITY.include?(parity)
|
|
40
|
-
raise(ArgumentError, "Invalid
|
|
41
|
+
raise(ArgumentError, "Invalid stop bits: #{stop_bits}") unless [1,2].include?(stop_bits)
|
|
41
42
|
@write_timeout = write_timeout
|
|
42
43
|
@read_timeout = read_timeout
|
|
43
44
|
|
|
@@ -51,22 +52,61 @@ module Cosmos
|
|
|
51
52
|
|
|
52
53
|
# Configure the serial Port
|
|
53
54
|
tio = Termios::new_termios()
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
tio.cflag = cflags
|
|
67
|
-
tio.lflag = 0
|
|
55
|
+
iflag = 0
|
|
56
|
+
iflag |= Termios::IGNPAR unless parity
|
|
57
|
+
oflag = 0
|
|
58
|
+
cflag = 0
|
|
59
|
+
cflag |= Termios::CREAD # Enable receiver
|
|
60
|
+
cflag |= Termios.const_get("CS#{data_bits}") # data bits
|
|
61
|
+
cflag |= Termios::CLOCAL # Ignore Modem Control Lines
|
|
62
|
+
cflag |= Termios::CSTOPB if stop_bits == 2
|
|
63
|
+
cflag |= Termios::PARENB if parity
|
|
64
|
+
cflag |= Termios::PARODD if parity == :ODD
|
|
65
|
+
cflag |= Termios::CRTSCTS if flow_control == :RTSCTS
|
|
66
|
+
lflag = 0
|
|
68
67
|
tio.cc[Termios::VTIME] = 0
|
|
69
68
|
tio.cc[Termios::VMIN] = 1
|
|
69
|
+
unless struct.empty?
|
|
70
|
+
struct.each do |field, key, value|
|
|
71
|
+
case field
|
|
72
|
+
when 'iflag'
|
|
73
|
+
if value == "0"
|
|
74
|
+
iflag &= ~Termios.const_get(key)
|
|
75
|
+
else
|
|
76
|
+
iflag |= Termios.const_get(key)
|
|
77
|
+
end
|
|
78
|
+
when 'oflag'
|
|
79
|
+
if value == "0"
|
|
80
|
+
oflag &= ~Termios.const_get(key)
|
|
81
|
+
else
|
|
82
|
+
oflag |= Termios.const_get(key)
|
|
83
|
+
end
|
|
84
|
+
when 'cflag'
|
|
85
|
+
if value == "0"
|
|
86
|
+
cflag &= ~Termios.const_get(key)
|
|
87
|
+
else
|
|
88
|
+
cflag |= Termios.const_get(key)
|
|
89
|
+
end
|
|
90
|
+
when 'lflag'
|
|
91
|
+
if value == "0"
|
|
92
|
+
lflag &= ~Termios.const_get(key)
|
|
93
|
+
else
|
|
94
|
+
lflag |= Termios.const_get(key)
|
|
95
|
+
end
|
|
96
|
+
when 'cc'
|
|
97
|
+
begin
|
|
98
|
+
value = Integer(value) # Try to convert to int
|
|
99
|
+
rescue ArgumentError
|
|
100
|
+
# Ignore this error and use the string
|
|
101
|
+
end
|
|
102
|
+
tio.cc[Termios.const_get(key)] = value
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
tio.iflag = iflag
|
|
107
|
+
tio.oflag = oflag
|
|
108
|
+
tio.cflag = cflag
|
|
109
|
+
tio.lflag = lflag
|
|
70
110
|
tio.ispeed = baud_rate
|
|
71
111
|
tio.ospeed = baud_rate
|
|
72
112
|
@handle.tcflush(Termios::TCIOFLUSH)
|
|
@@ -143,7 +183,5 @@ module Cosmos
|
|
|
143
183
|
|
|
144
184
|
data
|
|
145
185
|
end
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
end # module Cosmos
|
|
186
|
+
end
|
|
187
|
+
end
|
|
@@ -32,8 +32,10 @@ module Cosmos
|
|
|
32
32
|
# complete or nil to block
|
|
33
33
|
# @param read_timeout [Float|nil] Number of seconds to wait for the read to
|
|
34
34
|
# complete or nil to block
|
|
35
|
-
# @param flow_control [Symbol] Currently supported :NONE
|
|
35
|
+
# @param flow_control [Symbol] Currently supported :NONE, :RTSCTS (default :NONE)
|
|
36
36
|
# @param data_bits [Integer] Number of data bits (default 8)
|
|
37
|
+
# @param struct [Array] Array of arrays of fields and values to set in the
|
|
38
|
+
# Windows DCB or POSIX structure
|
|
37
39
|
def initialize(port_name,
|
|
38
40
|
baud_rate,
|
|
39
41
|
parity = :NONE,
|
|
@@ -41,7 +43,8 @@ module Cosmos
|
|
|
41
43
|
write_timeout = 10.0,
|
|
42
44
|
read_timeout = nil,
|
|
43
45
|
flow_control = :NONE,
|
|
44
|
-
data_bits = 8
|
|
46
|
+
data_bits = 8,
|
|
47
|
+
struct = [])
|
|
45
48
|
raise(ArgumentError, "Invalid parity: #{parity}") unless VALID_PARITY.include? parity
|
|
46
49
|
if Kernel.is_windows?
|
|
47
50
|
@driver = Win32SerialDriver.new(port_name,
|
|
@@ -53,7 +56,8 @@ module Cosmos
|
|
|
53
56
|
0.01,
|
|
54
57
|
1000,
|
|
55
58
|
flow_control,
|
|
56
|
-
data_bits
|
|
59
|
+
data_bits,
|
|
60
|
+
struct)
|
|
57
61
|
elsif RUBY_ENGINE == 'ruby'
|
|
58
62
|
@driver = PosixSerialDriver.new(port_name,
|
|
59
63
|
baud_rate,
|
|
@@ -62,7 +66,8 @@ module Cosmos
|
|
|
62
66
|
write_timeout,
|
|
63
67
|
read_timeout,
|
|
64
68
|
flow_control,
|
|
65
|
-
data_bits
|
|
69
|
+
data_bits,
|
|
70
|
+
struct)
|
|
66
71
|
else
|
|
67
72
|
@driver = nil # JRuby Serial on Linux not currently supported
|
|
68
73
|
end
|
|
@@ -92,7 +97,5 @@ module Cosmos
|
|
|
92
97
|
def read_nonblock
|
|
93
98
|
@driver.read_nonblock
|
|
94
99
|
end
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
end # module Cosmos
|
|
100
|
+
end
|
|
101
|
+
end
|