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
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
4
|
+
# All Rights Reserved.
|
|
5
|
+
#
|
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
|
7
|
+
# under the terms of the GNU General Public License
|
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
|
10
|
+
|
|
11
|
+
require 'rails_helper'
|
|
12
|
+
require 'dart_importer'
|
|
13
|
+
require 'tempfile'
|
|
14
|
+
require 'cosmos/packet_logs/packet_log_writer'
|
|
15
|
+
|
|
16
|
+
describe DartImporter do
|
|
17
|
+
before(:all) do
|
|
18
|
+
@importer = DartImporter.new
|
|
19
|
+
# Clean the system logs
|
|
20
|
+
Dir["#{Cosmos::System.paths['LOGS']}/*"].each do |filename|
|
|
21
|
+
FileUtils.rm_f filename
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
before(:each) do
|
|
26
|
+
DatabaseCleaner.strategy = :truncation
|
|
27
|
+
DatabaseCleaner.clean
|
|
28
|
+
# Clean the dart logs
|
|
29
|
+
Dir["#{Cosmos::System.paths['DART_LOGS']}/*"].each do |filename|
|
|
30
|
+
FileUtils.rm_f filename
|
|
31
|
+
end
|
|
32
|
+
@string_output = StringIO.new("", "r+")
|
|
33
|
+
$stdout = @string_output
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def create_dart_log_file
|
|
37
|
+
plw = Cosmos::PacketLogWriter.new(:TLM,nil,true,nil,10000000,nil,false)
|
|
38
|
+
packet = Cosmos::System.telemetry.packet("INST", "HEALTH_STATUS")
|
|
39
|
+
plw.write(packet)
|
|
40
|
+
plw.shutdown
|
|
41
|
+
filename = File.expand_path(Dir[File.join(Cosmos::System.paths['LOGS'],"*.bin")][-1])
|
|
42
|
+
FileUtils.mv(filename, Cosmos::System.paths['DART_DATA'])
|
|
43
|
+
return File.expand_path(Dir[File.join(Cosmos::System.paths['DART_DATA'],"*.bin")][-1])
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
describe "import" do
|
|
47
|
+
it "ensures file are in the DART_DATA dir" do
|
|
48
|
+
tf = Tempfile.new('unittest')
|
|
49
|
+
tf.puts "HI"
|
|
50
|
+
tf.close
|
|
51
|
+
code = @importer.import(tf, false)
|
|
52
|
+
expect(code).to eq 1 # fail
|
|
53
|
+
expect(@string_output.string).to match(/Imported files must be in \"#{File.expand_path(Cosmos::System.paths['DART_DATA'])}\"/)
|
|
54
|
+
tf.unlink
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "checks that file can be opened by PacketLogReader" do
|
|
58
|
+
filename = File.join(Cosmos::System.paths['DART_DATA'], "file.bin")
|
|
59
|
+
File.open(filename, 'w') { |file| file.puts "HI" }
|
|
60
|
+
code = @importer.import(filename, false)
|
|
61
|
+
expect(code).to eq 1 # fail
|
|
62
|
+
expect(@string_output.string).to match(/Unable to open/)
|
|
63
|
+
FileUtils.rm_r filename
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "checks that file has packets" do
|
|
67
|
+
filename = create_dart_log_file()
|
|
68
|
+
allow_any_instance_of(Cosmos::PacketLogReader).to receive(:first).and_return(nil)
|
|
69
|
+
code = @importer.import(filename, false)
|
|
70
|
+
expect(code).to eq 1 # fail
|
|
71
|
+
expect(@string_output.string).to match(/No packets found in file/)
|
|
72
|
+
FileUtils.rm_r filename
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it "warns about importing a file twice" do
|
|
76
|
+
filename = create_dart_log_file()
|
|
77
|
+
@importer.import(filename, false)
|
|
78
|
+
expect(@string_output.string).to match(/Creating PacketLog entry/)
|
|
79
|
+
@importer.import(filename, false)
|
|
80
|
+
expect(@string_output.string).to match(/PacketLog already exists in database/)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
4
|
+
# All Rights Reserved.
|
|
5
|
+
#
|
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
|
7
|
+
# under the terms of the GNU General Public License
|
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
|
10
|
+
|
|
11
|
+
require 'rails_helper'
|
|
12
|
+
require 'dart_logging'
|
|
13
|
+
|
|
14
|
+
describe DartLogging do
|
|
15
|
+
describe "logging" do
|
|
16
|
+
it "starts a log and captures stdout" do
|
|
17
|
+
logger = DartLogging.new('dart_test')
|
|
18
|
+
sleep 0.1
|
|
19
|
+
test_string = "This is a test"
|
|
20
|
+
puts test_string # This should go in the log
|
|
21
|
+
logger.stop
|
|
22
|
+
|
|
23
|
+
Dir["#{Cosmos::System.paths['DART_LOGS']}/*"].each do |file|
|
|
24
|
+
expect(file).to match(/dart_test/)
|
|
25
|
+
data = File.read(file)
|
|
26
|
+
expect(File.read(file)).to include(test_string)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
4
|
+
# All Rights Reserved.
|
|
5
|
+
#
|
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
|
7
|
+
# under the terms of the GNU General Public License
|
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
|
10
|
+
|
|
11
|
+
require 'rails_helper'
|
|
12
|
+
require 'dart_packet_log_writer'
|
|
13
|
+
|
|
14
|
+
describe DartPacketLogWriter do
|
|
15
|
+
before(:each) do
|
|
16
|
+
DatabaseCleaner.strategy = :truncation
|
|
17
|
+
DatabaseCleaner.clean
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe "write" do
|
|
21
|
+
it "creates PacketLogEntries and flushes the file" do
|
|
22
|
+
writer = DartPacketLogWriter.new(
|
|
23
|
+
:TLM, # Log telemetry
|
|
24
|
+
'test_dart_tlm_', # Put dart_ in the log file name
|
|
25
|
+
true, # Enable logging
|
|
26
|
+
nil, # Don't cycle on time
|
|
27
|
+
2_000_000_000, # Cycle the log at 2GB
|
|
28
|
+
Cosmos::System.paths['DART_DATA']) # Log into the DART_DATA dir
|
|
29
|
+
|
|
30
|
+
hs_packet = Cosmos::System.telemetry.packet("INST", "HEALTH_STATUS")
|
|
31
|
+
(DartPacketLogWriter::DEFAULT_SYNC_COUNT_LIMIT - 1).times do
|
|
32
|
+
hs_packet.received_time = Time.now
|
|
33
|
+
writer.write(hs_packet)
|
|
34
|
+
sleep 0.01
|
|
35
|
+
end
|
|
36
|
+
sleep 0.1
|
|
37
|
+
|
|
38
|
+
# The first Log Entry is always SYSTEM META
|
|
39
|
+
ple = PacketLogEntry.find(1)
|
|
40
|
+
expect(ple.target.name).to eq "SYSTEM"
|
|
41
|
+
expect(ple.packet.name).to eq "META"
|
|
42
|
+
expect(ple.ready).to eq false # Hasn't been flushed yet
|
|
43
|
+
|
|
44
|
+
packet = writer.read_packet_from_ple(ple)
|
|
45
|
+
expect(packet.class).to eq Cosmos::Packet
|
|
46
|
+
expect(packet.target_name).to eq "SYSTEM"
|
|
47
|
+
expect(packet.packet_name).to eq "META"
|
|
48
|
+
|
|
49
|
+
target = Target.find_by_name("INST")
|
|
50
|
+
packet = Packet.find_by_name("HEALTH_STATUS")
|
|
51
|
+
count = 0
|
|
52
|
+
previous_time = Time.now
|
|
53
|
+
PacketLogEntry.where("target_id = ? and packet_id = ?", target.id, packet.id).each do |ple|
|
|
54
|
+
expect(ple.target.name).to eq "INST"
|
|
55
|
+
expect(ple.packet.name).to eq "HEALTH_STATUS"
|
|
56
|
+
expect(ple.ready).to eq false # Hasn't been flushed yet
|
|
57
|
+
|
|
58
|
+
packet = writer.read_packet_from_ple(ple)
|
|
59
|
+
expect(packet.target_name).to eq "INST"
|
|
60
|
+
expect(packet.packet_name).to eq "HEALTH_STATUS"
|
|
61
|
+
expect(packet.received_time).to_not eq previous_time
|
|
62
|
+
previous_time = packet.received_time
|
|
63
|
+
count += 1
|
|
64
|
+
end
|
|
65
|
+
expect(count).to eq (DartPacketLogWriter::DEFAULT_SYNC_COUNT_LIMIT - 1)
|
|
66
|
+
|
|
67
|
+
hs_packet.received_time = Time.now
|
|
68
|
+
writer.write(hs_packet) # Write the packet that causes the flush
|
|
69
|
+
sleep 0.1
|
|
70
|
+
count = 0
|
|
71
|
+
PacketLogEntry.all.each do |ple|
|
|
72
|
+
if count < DartPacketLogWriter::DEFAULT_SYNC_COUNT_LIMIT
|
|
73
|
+
expect(ple.ready).to eq true # Flushed!
|
|
74
|
+
else
|
|
75
|
+
# The last write isn't flushed
|
|
76
|
+
expect(ple.ready).to eq false
|
|
77
|
+
end
|
|
78
|
+
count += 1
|
|
79
|
+
end
|
|
80
|
+
# We wrote one SYSTEM META plus (DartPacketLogWriter::DEFAULT_SYNC_COUNT_LIMIT - 1)
|
|
81
|
+
# plus one more to cause the flush
|
|
82
|
+
expect(count).to eq DartPacketLogWriter::DEFAULT_SYNC_COUNT_LIMIT + 1
|
|
83
|
+
writer.shutdown
|
|
84
|
+
sleep 0.1
|
|
85
|
+
|
|
86
|
+
files = Dir["#{Cosmos::System.paths['DART_DATA']}/*_test_dart_tlm_*"]
|
|
87
|
+
expect(files.length).to eq 1
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it "creates command logs" do
|
|
91
|
+
DatabaseCleaner.clean
|
|
92
|
+
meta = Cosmos::System.commands.packet("SYSTEM", "META")
|
|
93
|
+
clr_cmd = Cosmos::System.commands.packet("INST", "CLEAR")
|
|
94
|
+
# 128 byte file header, SYSTEM META has 24 byte header,
|
|
95
|
+
# INST CLEAR has 23 byte header
|
|
96
|
+
length = 128 + 24 + meta.length + 23 + clr_cmd.length
|
|
97
|
+
|
|
98
|
+
writer = DartPacketLogWriter.new(
|
|
99
|
+
:CMD, # Log commands
|
|
100
|
+
'test_dart_cmd_', # Put dart_ in the log file name
|
|
101
|
+
true, # Enable logging
|
|
102
|
+
nil, # Don't cycle on time
|
|
103
|
+
length, # Cycle the log at 1 Meta plus 1 Cmd
|
|
104
|
+
Cosmos::System.paths['DART_DATA']) # Log into the DART_DATA dir
|
|
105
|
+
|
|
106
|
+
clr_cmd.received_time = Time.now
|
|
107
|
+
writer.write(clr_cmd)
|
|
108
|
+
sleep 0.1
|
|
109
|
+
|
|
110
|
+
# The first Log Entry is always SYSTEM META
|
|
111
|
+
ple = PacketLogEntry.find(1)
|
|
112
|
+
expect(ple.target.name).to eq "SYSTEM"
|
|
113
|
+
expect(ple.packet.name).to eq "META"
|
|
114
|
+
expect(ple.ready).to eq false # Hasn't been flushed yet
|
|
115
|
+
|
|
116
|
+
# The second Log Entry is the command
|
|
117
|
+
ple = PacketLogEntry.find(2)
|
|
118
|
+
expect(ple.target.name).to eq "INST"
|
|
119
|
+
expect(ple.packet.name).to eq "CLEAR"
|
|
120
|
+
expect(ple.ready).to eq false # Hasn't been flushed yet
|
|
121
|
+
|
|
122
|
+
clr_cmd.received_time = Time.now
|
|
123
|
+
writer.write(clr_cmd) # The second command should create a new log
|
|
124
|
+
sleep 0.1
|
|
125
|
+
|
|
126
|
+
# Check the the first two have been flushed
|
|
127
|
+
ple = PacketLogEntry.find(1)
|
|
128
|
+
expect(ple.ready).to eq true # Flushed
|
|
129
|
+
ple = PacketLogEntry.find(2)
|
|
130
|
+
expect(ple.ready).to eq true # Flushed
|
|
131
|
+
|
|
132
|
+
# The third and fourth are SYSTEM META and the command
|
|
133
|
+
ple = PacketLogEntry.find(3)
|
|
134
|
+
expect(ple.target.name).to eq "SYSTEM"
|
|
135
|
+
expect(ple.packet.name).to eq "META"
|
|
136
|
+
expect(ple.ready).to eq false # Hasn't been flushed yet
|
|
137
|
+
ple = PacketLogEntry.find(4)
|
|
138
|
+
expect(ple.target.name).to eq "INST"
|
|
139
|
+
expect(ple.packet.name).to eq "CLEAR"
|
|
140
|
+
expect(ple.ready).to eq false # Hasn't been flushed yet
|
|
141
|
+
|
|
142
|
+
writer.shutdown
|
|
143
|
+
sleep 0.1
|
|
144
|
+
|
|
145
|
+
files = Dir["#{Cosmos::System.paths['DART_DATA']}/*_test_dart_cmd_*"]
|
|
146
|
+
expect(files.length).to eq 2
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
4
|
+
# All Rights Reserved.
|
|
5
|
+
#
|
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
|
7
|
+
# under the terms of the GNU General Public License
|
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
|
10
|
+
|
|
11
|
+
require 'rails_helper'
|
|
12
|
+
require 'dart_reducer_manager'
|
|
13
|
+
require 'database_cleaner'
|
|
14
|
+
require 'dart_packet_log_writer'
|
|
15
|
+
require 'dart_decommutator'
|
|
16
|
+
require 'dart_common'
|
|
17
|
+
|
|
18
|
+
describe DartReducerManager do
|
|
19
|
+
let(:common) { Object.new.extend(DartCommon) }
|
|
20
|
+
|
|
21
|
+
before(:each) do
|
|
22
|
+
DatabaseCleaner.strategy = :truncation
|
|
23
|
+
DatabaseCleaner.clean
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def setup_ples(entries, delta_time)
|
|
27
|
+
time = Time.utc(2018, 1, 1, 0, 0, 0)
|
|
28
|
+
meta = Cosmos::System.telemetry.packet("SYSTEM", "META")
|
|
29
|
+
meta.received_time = time
|
|
30
|
+
hs_packet = Cosmos::System.telemetry.packet("INST", "HEALTH_STATUS")
|
|
31
|
+
# 128 byte file header, SYSTEM META has 14 byte header + length of SYSTEM & META
|
|
32
|
+
# INST HEALTH_STATUS has 14 byte header + length of INST & HEALTH_STATUS
|
|
33
|
+
length = 128 + 24 + meta.length + entries * (31 + hs_packet.length)
|
|
34
|
+
|
|
35
|
+
writer = DartPacketLogWriter.new(
|
|
36
|
+
:TLM, # Log telemetry
|
|
37
|
+
'test_decom_', # File name suffix
|
|
38
|
+
true, # Enable logging
|
|
39
|
+
nil, # Don't cycle on time
|
|
40
|
+
length, # Cycle the log after a single INST HEALTH_STATUS packet
|
|
41
|
+
Cosmos::System.paths['DART_DATA']) # Log into the DART_DATA dir
|
|
42
|
+
|
|
43
|
+
entries.times do |x|
|
|
44
|
+
hs_packet.received_time = time
|
|
45
|
+
hs_packet.write("COLLECTS", x)
|
|
46
|
+
writer.write(hs_packet)
|
|
47
|
+
time += delta_time
|
|
48
|
+
end
|
|
49
|
+
ples = 0
|
|
50
|
+
count = 0
|
|
51
|
+
while ples != (entries + 1) # SYSTEM META is the plus 1
|
|
52
|
+
ples = PacketLogEntry.count
|
|
53
|
+
sleep 0.1 # Allow the log writer to work
|
|
54
|
+
count += 1
|
|
55
|
+
break if count == 100 # 10s
|
|
56
|
+
end
|
|
57
|
+
writer.shutdown
|
|
58
|
+
sleep 0.1
|
|
59
|
+
expect(count).to be < 100
|
|
60
|
+
|
|
61
|
+
thread = Thread.new do
|
|
62
|
+
decom = DartDecommutator.new
|
|
63
|
+
decom.run
|
|
64
|
+
end
|
|
65
|
+
complete = 0
|
|
66
|
+
count = 0
|
|
67
|
+
while complete != (entries + 1) # SYSTEM META is the plus 1
|
|
68
|
+
complete = PacketLogEntry.where("decom_state = #{PacketLogEntry::COMPLETE}").length
|
|
69
|
+
sleep 0.1 # Allow the decommutator to work
|
|
70
|
+
count += 1
|
|
71
|
+
break if count == 200 # 20s
|
|
72
|
+
end
|
|
73
|
+
expect(count).to be < 200
|
|
74
|
+
thread.kill
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def worker_threads
|
|
78
|
+
count = 0
|
|
79
|
+
Thread.list.each do |t|
|
|
80
|
+
count += 1 if t.inspect.include?("worker_thread")
|
|
81
|
+
end
|
|
82
|
+
count
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def get_mappings(tgt, pkt, item)
|
|
86
|
+
target_model = Target.where("name = ?", tgt).first
|
|
87
|
+
packet_model = Packet.where("target_id = ? and name = ? and is_tlm = ?", target_model.id, pkt, true).first
|
|
88
|
+
item_model = Item.where("packet_id = ? and name = ?", packet_model.id, item).first
|
|
89
|
+
mappings = ItemToDecomTableMapping.where("item_id = ? and value_type != ?", item_model.id, ItemToDecomTableMapping::RAW)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
describe "run" do
|
|
93
|
+
it "starts the specified number of worker threads" do
|
|
94
|
+
drm = DartReducerManager.new(1)
|
|
95
|
+
thread = Thread.new { drm.run }
|
|
96
|
+
sleep 0.1
|
|
97
|
+
expect(worker_threads()).to eq 1
|
|
98
|
+
drm.shutdown
|
|
99
|
+
thread.kill
|
|
100
|
+
|
|
101
|
+
drm = DartReducerManager.new(5)
|
|
102
|
+
thread = Thread.new { drm.run }
|
|
103
|
+
sleep 0.1
|
|
104
|
+
expect(worker_threads()).to eq 5
|
|
105
|
+
drm.shutdown
|
|
106
|
+
thread.kill
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it "reduces per minute" do
|
|
110
|
+
setup_ples(11, 6) # 11 entries with a 6s gap
|
|
111
|
+
drm = DartReducerManager.new(1)
|
|
112
|
+
thread = Thread.new { drm.run }
|
|
113
|
+
sleep 0.5
|
|
114
|
+
drm.shutdown
|
|
115
|
+
thread.kill
|
|
116
|
+
|
|
117
|
+
get_mappings("INST", "HEALTH_STATUS", "COLLECTS").each do |mapping|
|
|
118
|
+
# Grab the base reduction table
|
|
119
|
+
rows = common.get_decom_table_model(mapping.packet_config_id, mapping.table_index)
|
|
120
|
+
expect(rows.where("reduced_state" => DartCommon::INITIALIZING).count).to eq 0
|
|
121
|
+
# The last one doesn't get reduced
|
|
122
|
+
expect(rows.where("reduced_state" => DartCommon::READY_TO_REDUCE).count).to eq 1
|
|
123
|
+
# Everything else should be reduced
|
|
124
|
+
expect(rows.where("reduced_state" => DartCommon::REDUCED).count).to eq 10
|
|
125
|
+
val = 0
|
|
126
|
+
rows.find_each do |row|
|
|
127
|
+
expect(row.read_attribute("i#{mapping.item_index}")).to eq val
|
|
128
|
+
val += 1
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Grab the minute reduction table
|
|
132
|
+
rows = common.get_decom_table_model(mapping.packet_config_id, mapping.table_index, "_m")
|
|
133
|
+
expect(rows.where("reduced_state" => DartCommon::INITIALIZING).count).to eq 0
|
|
134
|
+
# We only spanned a single minute so we have a single packet ready to reduce
|
|
135
|
+
expect(rows.where("reduced_state" => DartCommon::READY_TO_REDUCE).count).to eq 1
|
|
136
|
+
# None have been actually reduced
|
|
137
|
+
expect(rows.where("reduced_state" => DartCommon::REDUCED).count).to eq 0
|
|
138
|
+
rows.find_each do |row|
|
|
139
|
+
expect(row.num_samples).to eq 10
|
|
140
|
+
expect(row.read_attribute("i#{mapping.item_index}min")).to eq 0
|
|
141
|
+
expect(row.read_attribute("i#{mapping.item_index}max")).to eq 9
|
|
142
|
+
expect(row.read_attribute("i#{mapping.item_index}avg")).to eq ((0..9).to_a.sum / 10.0)
|
|
143
|
+
expect(row.read_attribute("i#{mapping.item_index}stddev")).to be_within(0.0000001).of(Math.stddev_population((0..9).to_a)[1])
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
it "reduces per hour" do
|
|
149
|
+
# 367 entries at 10s apart creates 3670.367s which is 1hr, 1min and 10s of time
|
|
150
|
+
# The extra 10s is due to the last one not getting reduced. The extra minute is due
|
|
151
|
+
# to the last minute reduction table not getting reduced.
|
|
152
|
+
setup_ples(367, 10.001)
|
|
153
|
+
drm = DartReducerManager.new(1)
|
|
154
|
+
thread = Thread.new { drm.run }
|
|
155
|
+
sleep 2
|
|
156
|
+
drm.shutdown
|
|
157
|
+
thread.kill
|
|
158
|
+
|
|
159
|
+
get_mappings("INST", "HEALTH_STATUS", "COLLECTS").each do |mapping|
|
|
160
|
+
# Grab the base reduction table
|
|
161
|
+
rows = common.get_decom_table_model(mapping.packet_config_id, mapping.table_index)
|
|
162
|
+
expect(rows.where("reduced_state" => DartCommon::INITIALIZING).count).to eq 0
|
|
163
|
+
# The last one doesn't get reduced
|
|
164
|
+
expect(rows.where("reduced_state" => DartCommon::READY_TO_REDUCE).count).to eq 1
|
|
165
|
+
# Everything else should be reduced
|
|
166
|
+
expect(rows.where("reduced_state" => DartCommon::REDUCED).count).to eq 366
|
|
167
|
+
val = 0
|
|
168
|
+
rows.find_each do |row|
|
|
169
|
+
expect(row.read_attribute("i#{mapping.item_index}")).to eq val
|
|
170
|
+
val += 1
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# Grab the minute reduction table
|
|
174
|
+
rows = common.get_decom_table_model(mapping.packet_config_id, mapping.table_index, "_m")
|
|
175
|
+
expect(rows.where("reduced_state" => DartCommon::INITIALIZING).count).to eq 0
|
|
176
|
+
# The last one doesn't get reduced
|
|
177
|
+
expect(rows.where("reduced_state" => DartCommon::READY_TO_REDUCE).count).to eq 1
|
|
178
|
+
# We reduced 60 minutes
|
|
179
|
+
expect(rows.where("reduced_state" => DartCommon::REDUCED).count).to eq 60
|
|
180
|
+
row = rows.first
|
|
181
|
+
expect(row.num_samples).to eq 6
|
|
182
|
+
expect(row.read_attribute("i#{mapping.item_index}min")).to eq 0
|
|
183
|
+
expect(row.read_attribute("i#{mapping.item_index}max")).to eq 5
|
|
184
|
+
expect(row.read_attribute("i#{mapping.item_index}avg")).to eq ((0..5).to_a.sum / 6.0)
|
|
185
|
+
expect(row.read_attribute("i#{mapping.item_index}stddev")).to be_within(0.0000001).of(Math.stddev_population((0..5).to_a)[1])
|
|
186
|
+
|
|
187
|
+
# Grab the hour reduction table
|
|
188
|
+
rows = common.get_decom_table_model(mapping.packet_config_id, mapping.table_index, "_h")
|
|
189
|
+
expect(rows.where("reduced_state" => DartCommon::INITIALIZING).count).to eq 0
|
|
190
|
+
# We only spanned a single hour so we have a single packet ready to reduce
|
|
191
|
+
expect(rows.where("reduced_state" => DartCommon::READY_TO_REDUCE).count).to eq 1
|
|
192
|
+
# None have been actually reduced
|
|
193
|
+
expect(rows.where("reduced_state" => DartCommon::REDUCED).count).to eq 0
|
|
194
|
+
row = rows.first
|
|
195
|
+
expect(row.num_samples).to eq 60
|
|
196
|
+
expect(row.read_attribute("i#{mapping.item_index}min")).to eq 0
|
|
197
|
+
expect(row.read_attribute("i#{mapping.item_index}max")).to eq 359
|
|
198
|
+
expect(row.read_attribute("i#{mapping.item_index}avg")).to eq ((0..359).to_a.sum / 360.0)
|
|
199
|
+
expect(row.read_attribute("i#{mapping.item_index}stddev")).to be_within(0.05).of(Math.stddev_population((0..359).to_a)[1])
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
it "reduces per day" do
|
|
204
|
+
# 72 is three days plus the extra reduction, minute, and hour
|
|
205
|
+
setup_ples(75, 3600.001)
|
|
206
|
+
drm = DartReducerManager.new(1)
|
|
207
|
+
thread = Thread.new { drm.run }
|
|
208
|
+
sleep 2
|
|
209
|
+
drm.shutdown
|
|
210
|
+
thread.kill
|
|
211
|
+
|
|
212
|
+
drm = DartReducerManager.new(1)
|
|
213
|
+
thread = Thread.new { drm.run }
|
|
214
|
+
sleep 2
|
|
215
|
+
drm.shutdown
|
|
216
|
+
thread.kill
|
|
217
|
+
|
|
218
|
+
get_mappings("INST", "HEALTH_STATUS", "COLLECTS").each do |mapping|
|
|
219
|
+
# Grab the base reduction table
|
|
220
|
+
rows = common.get_decom_table_model(mapping.packet_config_id, mapping.table_index)
|
|
221
|
+
expect(rows.where("reduced_state" => DartCommon::INITIALIZING).count).to eq 0
|
|
222
|
+
# The last one doesn't get reduced
|
|
223
|
+
expect(rows.where("reduced_state" => DartCommon::READY_TO_REDUCE).count).to eq 1
|
|
224
|
+
# Everything else should be reduced
|
|
225
|
+
expect(rows.where("reduced_state" => DartCommon::REDUCED).count).to eq 74
|
|
226
|
+
val = 0
|
|
227
|
+
rows.find_each do |row|
|
|
228
|
+
expect(row.read_attribute("i#{mapping.item_index}")).to eq val
|
|
229
|
+
val += 1
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
# Grab the minute reduction table
|
|
233
|
+
rows = common.get_decom_table_model(mapping.packet_config_id, mapping.table_index, "_m")
|
|
234
|
+
expect(rows.where("reduced_state" => DartCommon::INITIALIZING).count).to eq 0
|
|
235
|
+
# The last one doesn't get reduced
|
|
236
|
+
expect(rows.where("reduced_state" => DartCommon::READY_TO_REDUCE).count).to eq 1
|
|
237
|
+
# The rest is reduced
|
|
238
|
+
expect(rows.where("reduced_state" => DartCommon::REDUCED).count).to eq 73
|
|
239
|
+
val = 0
|
|
240
|
+
rows.find_each do |row|
|
|
241
|
+
# Since our samples were more than 1 min apart there is only 1 sample per row
|
|
242
|
+
expect(row.num_samples).to eq 1
|
|
243
|
+
# Min, max, and avg are all the same since we only have 1 sample
|
|
244
|
+
expect(row.read_attribute("i#{mapping.item_index}min")).to eq val
|
|
245
|
+
expect(row.read_attribute("i#{mapping.item_index}max")).to eq val
|
|
246
|
+
expect(row.read_attribute("i#{mapping.item_index}avg")).to eq val
|
|
247
|
+
expect(row.read_attribute("i#{mapping.item_index}stddev")).to eq 0
|
|
248
|
+
val += 1
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
# Grab the hour reduction table
|
|
252
|
+
rows = common.get_decom_table_model(mapping.packet_config_id, mapping.table_index, "_h")
|
|
253
|
+
expect(rows.where("reduced_state" => DartCommon::INITIALIZING).count).to eq 0
|
|
254
|
+
# The last one doesn't get reduced
|
|
255
|
+
expect(rows.where("reduced_state" => DartCommon::READY_TO_REDUCE).count).to eq 1
|
|
256
|
+
# The rest is reduced
|
|
257
|
+
expect(rows.where("reduced_state" => DartCommon::REDUCED).count).to eq 72
|
|
258
|
+
val = 0
|
|
259
|
+
rows.find_each do |row|
|
|
260
|
+
# Since our samples were more than 1 hour apart there is only 1 sample per row
|
|
261
|
+
expect(row.num_samples).to eq 1
|
|
262
|
+
# Min, max, and avg are all the same since we only have 1 sample
|
|
263
|
+
expect(row.read_attribute("i#{mapping.item_index}min")).to eq val
|
|
264
|
+
expect(row.read_attribute("i#{mapping.item_index}max")).to eq val
|
|
265
|
+
expect(row.read_attribute("i#{mapping.item_index}avg")).to eq val
|
|
266
|
+
expect(row.read_attribute("i#{mapping.item_index}stddev")).to eq 0
|
|
267
|
+
val += 1
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
# Grab the day reduction table
|
|
271
|
+
rows = common.get_decom_table_model(mapping.packet_config_id, mapping.table_index, "_d")
|
|
272
|
+
expect(rows.where("reduced_state" => DartCommon::INITIALIZING).count).to eq 0
|
|
273
|
+
# Day values are always "READY" since they don't get further reduced
|
|
274
|
+
expect(rows.where("reduced_state" => DartCommon::READY_TO_REDUCE).count).to eq 3
|
|
275
|
+
# Reduced is always 0
|
|
276
|
+
expect(rows.where("reduced_state" => DartCommon::REDUCED).count).to eq 0
|
|
277
|
+
val = 0
|
|
278
|
+
rows.find_each do |row|
|
|
279
|
+
expect(row.num_samples).to eq 24
|
|
280
|
+
expect(row.read_attribute("i#{mapping.item_index}min")).to eq val
|
|
281
|
+
expect(row.read_attribute("i#{mapping.item_index}max")).to eq val + 23
|
|
282
|
+
expect(row.read_attribute("i#{mapping.item_index}avg")).to eq ((val..(val+23)).to_a.sum / 24.0)
|
|
283
|
+
expect(row.read_attribute("i#{mapping.item_index}stddev")).to be_within(0.0000001).of(Math.stddev_population((val..(val+23)).to_a)[1])
|
|
284
|
+
val += 24
|
|
285
|
+
end
|
|
286
|
+
end
|
|
287
|
+
end
|
|
288
|
+
end
|
|
289
|
+
end
|