cosmos 3.4.2 → 3.5.0
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/Manifest.txt +69 -11
- data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +23 -0
- data/autohotkey/tools/TestRunnerAHK5 +17 -0
- data/autohotkey/tools/TestRunnerAHK6 +17 -0
- data/autohotkey/tools/cmd_extractor.ahk +6 -0
- data/autohotkey/tools/data_viewer.ahk +6 -0
- data/autohotkey/tools/limits_monitor.ahk +67 -14
- data/autohotkey/tools/replay.ahk +6 -0
- data/autohotkey/tools/test_runner5.ahk +8 -0
- data/autohotkey/tools/test_runner6.ahk +5 -0
- data/autohotkey/tools/tlm_extractor.ahk +25 -1
- data/autohotkey/tools/tlm_grapher.ahk +6 -0
- data/cosmos.gemspec +19 -19
- data/data/crc.txt +46 -46
- data/data/critical.wav +0 -0
- data/data/information.wav +0 -0
- data/data/input.wav +0 -0
- data/data/message.wav +0 -0
- data/data/question.wav +0 -0
- data/data/warning.wav +0 -0
- data/demo/Gemfile +5 -1
- data/demo/Launcher +5 -4
- data/demo/Launcher.bat +6 -56
- data/demo/config/data/crc.txt +73 -55
- data/demo/config/system/system.txt +1 -0
- data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +2 -0
- data/demo/procedures/example_test.rb +17 -16
- data/demo/tools/CmdExtractor +6 -5
- data/demo/tools/CmdExtractor.bat +6 -56
- data/demo/tools/CmdSender +6 -5
- data/demo/tools/CmdSender.bat +6 -56
- data/demo/tools/CmdTlmServer +6 -5
- data/demo/tools/CmdTlmServer.bat +6 -56
- data/demo/tools/DataViewer +6 -5
- data/demo/tools/DataViewer.bat +6 -56
- data/demo/tools/ExampleTarget +6 -5
- data/demo/tools/ExampleTarget.bat +6 -56
- data/demo/tools/HandbookCreator +6 -5
- data/demo/tools/HandbookCreator.bat +6 -58
- data/demo/tools/Launcher +6 -5
- data/demo/tools/Launcher.bat +6 -56
- data/demo/tools/LimitsMonitor +6 -5
- data/demo/tools/LimitsMonitor.bat +6 -56
- data/demo/tools/OpenGLBuilder +6 -5
- data/demo/tools/OpenGLBuilder.bat +6 -56
- data/demo/tools/PacketViewer +6 -5
- data/demo/tools/PacketViewer.bat +6 -56
- data/demo/tools/Replay +6 -5
- data/demo/tools/Replay.bat +6 -56
- data/demo/tools/ScpiTarget +6 -5
- data/demo/tools/ScpiTarget.bat +6 -56
- data/demo/tools/ScriptRunner +6 -5
- data/demo/tools/ScriptRunner.bat +6 -56
- data/demo/tools/TableManager +6 -5
- data/demo/tools/TableManager.bat +6 -56
- data/demo/tools/TestRunner +6 -5
- data/demo/tools/TestRunner.bat +6 -56
- data/demo/tools/TlmExtractor +6 -5
- data/demo/tools/TlmExtractor.bat +6 -56
- data/demo/tools/TlmGrapher +6 -5
- data/demo/tools/TlmGrapher.bat +6 -56
- data/demo/tools/TlmViewer +6 -5
- data/demo/tools/TlmViewer.bat +6 -56
- data/demo/tools/ToolLaunch.bat +63 -0
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +6 -5
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +6 -5
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +6 -5
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +6 -5
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +6 -5
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +6 -5
- data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +6 -5
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +6 -5
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +6 -5
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +6 -5
- data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +6 -5
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +6 -5
- data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +6 -5
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +6 -5
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +6 -5
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +6 -5
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/tool_launch.rb +38 -0
- data/install/Gemfile +5 -1
- data/install/Launcher +5 -3
- data/install/Launcher.bat +6 -56
- data/install/config/data/crc.txt +67 -49
- data/install/config/tools/launcher/launcher.txt +1 -0
- data/install/tools/CmdExtractor +6 -5
- data/install/tools/CmdExtractor.bat +6 -56
- data/install/tools/CmdSender +6 -5
- data/install/tools/CmdSender.bat +6 -56
- data/install/tools/CmdTlmServer +6 -5
- data/install/tools/CmdTlmServer.bat +6 -56
- data/install/tools/DataViewer +6 -5
- data/install/tools/DataViewer.bat +6 -56
- data/install/tools/HandbookCreator +6 -5
- data/install/tools/HandbookCreator.bat +6 -58
- data/install/tools/Launcher +6 -5
- data/install/tools/Launcher.bat +6 -56
- data/install/tools/LimitsMonitor +6 -5
- data/install/tools/LimitsMonitor.bat +6 -56
- data/install/tools/OpenGLBuilder +6 -5
- data/install/tools/OpenGLBuilder.bat +6 -56
- data/install/tools/PacketViewer +6 -5
- data/install/tools/PacketViewer.bat +6 -56
- data/install/tools/Replay +6 -5
- data/install/tools/Replay.bat +6 -56
- data/install/tools/ScriptRunner +6 -5
- data/install/tools/ScriptRunner.bat +6 -56
- data/install/tools/TableManager +6 -5
- data/install/tools/TableManager.bat +6 -56
- data/install/tools/TestRunner +6 -5
- data/install/tools/TestRunner.bat +6 -56
- data/install/tools/TlmExtractor +6 -5
- data/install/tools/TlmExtractor.bat +6 -56
- data/install/tools/TlmGrapher +6 -5
- data/install/tools/TlmGrapher.bat +6 -56
- data/install/tools/TlmViewer +6 -5
- data/install/tools/TlmViewer.bat +6 -56
- data/install/tools/ToolLaunch.bat +63 -0
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +6 -5
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +6 -5
- data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +6 -5
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +6 -5
- data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +6 -5
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +6 -5
- data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +6 -5
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +6 -5
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +6 -5
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +6 -5
- data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +6 -5
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +6 -5
- data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +6 -5
- data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +6 -5
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +6 -5
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +6 -5
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/tool_launch.rb +38 -0
- data/lib/cosmos/core_ext/string.rb +3 -2
- data/lib/cosmos/gui/dialogs/about_dialog.rb +3 -7
- data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +200 -136
- data/lib/cosmos/gui/opengl/gl_viewer.rb +8 -8
- data/lib/cosmos/gui/qt.rb +56 -27
- data/lib/cosmos/gui/qt_tool.rb +3 -1
- data/lib/cosmos/gui/text/ruby_editor.rb +130 -110
- data/lib/cosmos/gui/utilities/script_module_gui.rb +150 -4
- data/lib/cosmos/io/json_drb.rb +1 -1
- data/lib/cosmos/io/win32_serial_driver.rb +2 -4
- data/lib/cosmos/packet_logs/ccsds_log_reader.rb +1 -0
- data/lib/cosmos/packet_logs/packet_log_reader.rb +13 -4
- data/lib/cosmos/packets/limits.rb +6 -3
- data/lib/cosmos/packets/telemetry.rb +34 -3
- data/lib/cosmos/processors/new_packet_log_processor.rb +1 -1
- data/lib/cosmos/script/commands.rb +20 -2
- data/lib/cosmos/script/extract.rb +11 -3
- data/lib/cosmos/script/limits.rb +6 -0
- data/lib/cosmos/script/scripting.rb +17 -9
- data/lib/cosmos/system/system.rb +73 -17
- data/lib/cosmos/system/target.rb +10 -5
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +1 -0
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +95 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +8 -4
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +55 -0
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +5 -12
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +14 -48
- data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +1 -5
- data/lib/cosmos/tools/launcher/launcher.rb +4 -0
- data/lib/cosmos/tools/launcher/launcher_config.rb +50 -0
- data/lib/cosmos/tools/launcher/launcher_tool.rb +21 -9
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +607 -566
- data/lib/cosmos/tools/replay/replay.rb +51 -45
- data/lib/cosmos/tools/script_runner/script_runner.rb +13 -5
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +8 -109
- data/lib/cosmos/tools/test_runner/test.rb +65 -6
- data/lib/cosmos/tools/test_runner/test_runner.rb +4 -4
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +5 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +3 -0
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +3 -2
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +9 -6
- data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +1 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +1 -5
- data/lib/cosmos/top_level.rb +86 -3
- data/lib/cosmos/version.rb +5 -5
- data/lib/cosmos/win32/win32_main.rb +7 -1
- data/spec/packet_logs/packet_log_reader_spec.rb +67 -7
- data/spec/packets/limits_spec.rb +19 -1
- data/spec/packets/telemetry_spec.rb +44 -1
- data/spec/script/commands_spec.rb +14 -0
- data/spec/script/scripting_spec.rb +5 -1
- data/spec/script/telemetry_spec.rb +38 -3
- data/spec/system/system_spec.rb +24 -4
- data/spec/tools/cmd_tlm_server/api_spec.rb +30 -0
- data/test/benchmarks/gsub_benchmark.rb +42 -4
- data/test/benchmarks/is_a_benchmark.rb +34 -0
- data/test/performance/config/data/crc.txt +161 -171
- data/test/performance/config/system/system_packets.txt +10 -10
- data/test/performance/config/system/system_threads.txt +30 -30
- data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +7 -2
- data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -0
- data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -0
- data/test/performance/config/targets/{EXAMPLE → PACKET}/cmd_tlm_server.txt +2 -2
- data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -0
- data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -0
- data/test/performance/config/targets/PACKET/screens/status.txt +25 -0
- data/test/performance/config/targets/PACKET/target.txt +28 -0
- data/test/performance/config/targets/{EXAMPLE/cmd_tlm/example_cmds.txt → THREAD/cmd_tlm/thread_cmds.txt} +1 -1
- data/test/performance/config/targets/{EXAMPLE/cmd_tlm/example_tlm.txt → THREAD/cmd_tlm/thread_tlm.txt} +1 -1
- data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -0
- data/test/performance/config/targets/{EXAMPLE/lib/example_interface.rb → THREAD/lib/thread_interface.rb} +1 -1
- data/test/performance/config/targets/THREAD/screens/status.txt +25 -0
- data/test/performance/config/targets/{EXAMPLE → THREAD}/target.txt +0 -0
- data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +24 -30
- data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +31 -31
- data/test/performance/config/tools/launcher/launcher_packets.txt +16 -11
- data/test/performance/config/tools/launcher/launcher_threads.txt +41 -35
- data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -0
- data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +10 -38
- data/test/performance/lib/packet_target.rb +126 -0
- data/test/performance/lib/{example_target.rb → thread_target.rb} +9 -9
- data/test/performance/tools/CmdTlmServerMemProf +1 -1
- data/test/performance/tools/{ExampleTarget → PacketTarget} +2 -2
- data/test/performance/tools/{ExampleTarget.bat → PacketTarget.bat} +0 -0
- data/test/performance/tools/ThreadTarget +14 -0
- data/test/performance/tools/ThreadTarget.bat +59 -0
- data/test/performance/tools/TlmGrapherMemProf +1 -1
- data/test/performance/tools/TlmViewerMemProf +19 -0
- data/{autohotkey/tools/Replay.bat → test/performance/tools/TlmViewerMemProf.bat} +1 -1
- metadata +107 -55
- data/test/performance/lib/example_background_task.rb +0 -57
- data/test/performance/lib/scpi_target.rb +0 -74
data/lib/cosmos/system/system.rb
CHANGED
|
@@ -17,6 +17,7 @@ require 'cosmos/system/target'
|
|
|
17
17
|
require 'cosmos/packet_logs'
|
|
18
18
|
require 'fileutils'
|
|
19
19
|
require 'drb/acl'
|
|
20
|
+
require 'bundler'
|
|
20
21
|
|
|
21
22
|
module Cosmos
|
|
22
23
|
|
|
@@ -39,6 +40,8 @@ module Cosmos
|
|
|
39
40
|
instance_attr_reader :default_packet_log_writer
|
|
40
41
|
# @return [PacketLogReader] Class used to read log files
|
|
41
42
|
instance_attr_reader :default_packet_log_reader
|
|
43
|
+
# @return [Boolean] Whether to use sound for alerts
|
|
44
|
+
instance_attr_reader :sound
|
|
42
45
|
# @return [Boolean] Whether to use DNS to lookup IP addresses or not
|
|
43
46
|
instance_attr_reader :use_dns
|
|
44
47
|
# @return [String] Stores the initial configuration file used when this
|
|
@@ -81,7 +84,8 @@ module Cosmos
|
|
|
81
84
|
@cmd_tlm_version = nil
|
|
82
85
|
@default_packet_log_writer = PacketLogWriter
|
|
83
86
|
@default_packet_log_reader = PacketLogReader
|
|
84
|
-
@
|
|
87
|
+
@sound = false
|
|
88
|
+
@use_dns = false
|
|
85
89
|
@acl = nil
|
|
86
90
|
@staleness_seconds = 30
|
|
87
91
|
@limits_set = :DEFAULT
|
|
@@ -222,7 +226,7 @@ module Cosmos
|
|
|
222
226
|
# First pass - Everything except targets
|
|
223
227
|
parser.parse_file(filename) do |keyword, parameters|
|
|
224
228
|
case keyword
|
|
225
|
-
when 'AUTO_DECLARE_TARGETS', 'DECLARE_TARGET'
|
|
229
|
+
when 'AUTO_DECLARE_TARGETS', 'DECLARE_TARGET', 'DECLARE_GEM_TARGET'
|
|
226
230
|
# Will be handled by second pass
|
|
227
231
|
|
|
228
232
|
when 'PORT'
|
|
@@ -267,11 +271,21 @@ module Cosmos
|
|
|
267
271
|
parser.verify_num_parameters(1, 1, usage)
|
|
268
272
|
@default_packet_log_reader = Cosmos.require_class(parameters[0])
|
|
269
273
|
|
|
274
|
+
when 'ENABLE_SOUND'
|
|
275
|
+
usage = "#{keyword}"
|
|
276
|
+
parser.verify_num_parameters(0, 0, usage)
|
|
277
|
+
@sound = true
|
|
278
|
+
|
|
270
279
|
when 'DISABLE_DNS'
|
|
271
280
|
usage = "#{keyword}"
|
|
272
281
|
parser.verify_num_parameters(0, 0, usage)
|
|
273
282
|
@use_dns = false
|
|
274
283
|
|
|
284
|
+
when 'ENABLE_DNS'
|
|
285
|
+
usage = "#{keyword}"
|
|
286
|
+
parser.verify_num_parameters(0, 0, usage)
|
|
287
|
+
@use_dns = true
|
|
288
|
+
|
|
275
289
|
when 'ALLOW_ACCESS'
|
|
276
290
|
parser.verify_num_parameters(1, 1, "#{keyword} <IP Address or Hostname>")
|
|
277
291
|
begin
|
|
@@ -364,6 +378,9 @@ module Cosmos
|
|
|
364
378
|
end
|
|
365
379
|
end
|
|
366
380
|
end
|
|
381
|
+
|
|
382
|
+
auto_detect_gem_based_targets()
|
|
383
|
+
|
|
367
384
|
if system_found
|
|
368
385
|
target = Target.new('SYSTEM')
|
|
369
386
|
@targets[target.name] = target
|
|
@@ -386,6 +403,19 @@ module Cosmos
|
|
|
386
403
|
end
|
|
387
404
|
target = Target.new(target_name, substitute_name, configuration_directory, ConfigParser.handle_nil(parameters[2]))
|
|
388
405
|
@targets[target.name] = target
|
|
406
|
+
|
|
407
|
+
when 'DECLARE_GEM_TARGET'
|
|
408
|
+
usage = "#{keyword} <GEM NAME> <SUBSTITUTE TARGET NAME (Optional)> <TARGET FILENAME (Optional - defaults to target.txt)>"
|
|
409
|
+
parser.verify_num_parameters(1, 3, usage)
|
|
410
|
+
# Remove 'cosmos' from the gem name 'cosmos-power-supply'
|
|
411
|
+
target_name = parameters[0].split('-')[1..-1].join('-').to_s.upcase
|
|
412
|
+
substitute_name = nil
|
|
413
|
+
substitute_name = ConfigParser.handle_nil(parameters[1])
|
|
414
|
+
substitute_name.to_s.upcase if substitute_name
|
|
415
|
+
gem_dir = Gem::Specification.find_by_name(parameters[0]).gem_dir
|
|
416
|
+
target = Target.new(target_name, substitute_name, configuration_directory, ConfigParser.handle_nil(parameters[2]), gem_dir)
|
|
417
|
+
@targets[target.name] = target
|
|
418
|
+
|
|
389
419
|
end # case keyword
|
|
390
420
|
end # parser.parse_file
|
|
391
421
|
end
|
|
@@ -396,7 +426,7 @@ module Cosmos
|
|
|
396
426
|
#
|
|
397
427
|
# @param name [String] MD5 string which identifies the
|
|
398
428
|
# configuration. Pass nil to load the default configuration.
|
|
399
|
-
# @return [String] The actual configuration loaded
|
|
429
|
+
# @return [String, Exception/nil] The actual configuration loaded
|
|
400
430
|
def load_configuration(name = nil)
|
|
401
431
|
if name and @config
|
|
402
432
|
# Make sure they're requesting something other than the current
|
|
@@ -412,24 +442,27 @@ module Cosmos
|
|
|
412
442
|
if configuration_directory
|
|
413
443
|
# We found the configuration requested. Reprocess the system.txt
|
|
414
444
|
# and reload the packets
|
|
415
|
-
|
|
416
|
-
|
|
445
|
+
begin
|
|
446
|
+
process_file(File.join(configuration_directory, 'system.txt'), configuration_directory)
|
|
447
|
+
load_packets(name)
|
|
448
|
+
rescue Exception => error
|
|
449
|
+
# Failed to load - Restore initial
|
|
450
|
+
update_config(@initial_config)
|
|
451
|
+
return @config.name, error
|
|
452
|
+
end
|
|
417
453
|
else
|
|
418
454
|
# We couldn't find the configuration request. Reload the
|
|
419
455
|
# initial configuration
|
|
420
456
|
update_config(@initial_config)
|
|
421
457
|
end
|
|
422
458
|
end
|
|
423
|
-
@telemetry.reset
|
|
424
459
|
end
|
|
425
460
|
else
|
|
426
461
|
# Ensure packets have been lazy loaded
|
|
427
|
-
System.commands
|
|
428
|
-
|
|
429
|
-
@config = @initial_config
|
|
430
|
-
@telemetry.reset if current_config != @initial_config
|
|
462
|
+
System.commands
|
|
463
|
+
update_config(@initial_config)
|
|
431
464
|
end
|
|
432
|
-
return @config.name
|
|
465
|
+
return @config.name, nil
|
|
433
466
|
end
|
|
434
467
|
|
|
435
468
|
# (see #load_configuration)
|
|
@@ -439,7 +472,24 @@ module Cosmos
|
|
|
439
472
|
|
|
440
473
|
protected
|
|
441
474
|
|
|
475
|
+
def auto_detect_gem_based_targets
|
|
476
|
+
Bundler.load.specs.each do |spec|
|
|
477
|
+
spec_name_split = spec.name.split('-')
|
|
478
|
+
if spec_name_split.length > 1 and spec_name_split[0] == 'cosmos'
|
|
479
|
+
# Filter to just targets and not tools and other extensions
|
|
480
|
+
if File.exist?(File.join(spec.gem_dir, 'cmd_tlm'))
|
|
481
|
+
target_name = spec_name_split[1..-1].join('-').to_s.upcase
|
|
482
|
+
target = Target.new(target_name, nil, nil, nil, spec.gem_dir)
|
|
483
|
+
@targets[target.name] = target
|
|
484
|
+
end
|
|
485
|
+
end
|
|
486
|
+
end
|
|
487
|
+
rescue Bundler::GemfileNotFound
|
|
488
|
+
# No Gemfile - so no gem based targets
|
|
489
|
+
end
|
|
490
|
+
|
|
442
491
|
def update_config(config)
|
|
492
|
+
current_config = @config
|
|
443
493
|
unless @config
|
|
444
494
|
@config = config
|
|
445
495
|
@commands = Commands.new(config)
|
|
@@ -451,6 +501,7 @@ module Cosmos
|
|
|
451
501
|
@telemetry.config = config
|
|
452
502
|
@limits.config = config
|
|
453
503
|
end
|
|
504
|
+
@telemetry.reset if current_config != config
|
|
454
505
|
end
|
|
455
506
|
|
|
456
507
|
def find_configuration(name)
|
|
@@ -476,10 +527,9 @@ module Cosmos
|
|
|
476
527
|
|
|
477
528
|
# Copy target files into directory
|
|
478
529
|
@targets.each do |target_name, target|
|
|
479
|
-
source_dir = File.join(USERPATH, 'config', 'targets', target.original_name)
|
|
480
530
|
destination_dir = File.join(configuration_directory, target.original_name)
|
|
481
531
|
unless Dir.exist?(destination_dir)
|
|
482
|
-
FileUtils.cp_r(
|
|
532
|
+
FileUtils.cp_r(target.dir, destination_dir)
|
|
483
533
|
end
|
|
484
534
|
end
|
|
485
535
|
|
|
@@ -502,9 +552,9 @@ module Cosmos
|
|
|
502
552
|
end
|
|
503
553
|
end
|
|
504
554
|
|
|
505
|
-
def load_packets
|
|
555
|
+
def load_packets(configuration_name = nil)
|
|
506
556
|
# Determine MD5 over all targets cmd_tlm files
|
|
507
|
-
cmd_tlm_files = [
|
|
557
|
+
cmd_tlm_files = []
|
|
508
558
|
additional_data = ''
|
|
509
559
|
@targets.each do |target_name, target|
|
|
510
560
|
cmd_tlm_files << target.filename if File.exist?(target.filename)
|
|
@@ -516,6 +566,7 @@ module Cosmos
|
|
|
516
566
|
additional_data << target.original_name
|
|
517
567
|
end
|
|
518
568
|
end
|
|
569
|
+
|
|
519
570
|
md5 = Cosmos.md5_files(cmd_tlm_files, additional_data)
|
|
520
571
|
md5_string = md5.hexdigest
|
|
521
572
|
|
|
@@ -526,6 +577,8 @@ module Cosmos
|
|
|
526
577
|
config = Cosmos.marshal_load(marshal_filename)
|
|
527
578
|
if config
|
|
528
579
|
update_config(config)
|
|
580
|
+
@config.name = configuration_name if configuration_name
|
|
581
|
+
|
|
529
582
|
# Marshal file load successful
|
|
530
583
|
Logger.info "Marshal load success: #{marshal_filename}"
|
|
531
584
|
@config.warnings.each {|warning| Logger.warn(warning)} if @config.warnings
|
|
@@ -548,11 +601,14 @@ module Cosmos
|
|
|
548
601
|
end
|
|
549
602
|
|
|
550
603
|
# Create marshal file for next time
|
|
551
|
-
|
|
604
|
+
if configuration_name
|
|
605
|
+
@config.name = configuration_name
|
|
606
|
+
else
|
|
607
|
+
@config.name = md5_string
|
|
608
|
+
end
|
|
552
609
|
Cosmos.marshal_dump(marshal_filename, @config)
|
|
553
610
|
end
|
|
554
611
|
|
|
555
|
-
# Save configuration
|
|
556
612
|
@initial_config = @config unless @initial_config
|
|
557
613
|
save_configuration()
|
|
558
614
|
end
|
data/lib/cosmos/system/target.rb
CHANGED
|
@@ -79,7 +79,8 @@ module Cosmos
|
|
|
79
79
|
# path to the default of <USERPATH>/config/targets.
|
|
80
80
|
# @param target_filename [String] Configuration file for the target. Normally
|
|
81
81
|
# target.txt
|
|
82
|
-
|
|
82
|
+
# @param gem_path [String] Path to the gem file or nil if there is no gem
|
|
83
|
+
def initialize(target_name, substitute_name = nil, path = nil, target_filename = nil, gem_path = nil)
|
|
83
84
|
@requires = []
|
|
84
85
|
@ignored_parameters = []
|
|
85
86
|
@ignored_items = []
|
|
@@ -100,7 +101,7 @@ module Cosmos
|
|
|
100
101
|
@name = @original_name
|
|
101
102
|
end
|
|
102
103
|
|
|
103
|
-
@dir = get_target_dir(path, @original_name)
|
|
104
|
+
@dir = get_target_dir(path, @original_name, gem_path)
|
|
104
105
|
# Parse the target.txt file if it exists
|
|
105
106
|
@filename = process_target_config_file(@dir, @name, target_filename)
|
|
106
107
|
# If target.txt didn't specify specific cmd/tlm files then add everything
|
|
@@ -156,9 +157,13 @@ module Cosmos
|
|
|
156
157
|
|
|
157
158
|
# Get the target directory and add the target's lib folder to the
|
|
158
159
|
# search path if it exists
|
|
159
|
-
def get_target_dir(path, name)
|
|
160
|
-
|
|
161
|
-
|
|
160
|
+
def get_target_dir(path, name, gem_path)
|
|
161
|
+
if gem_path
|
|
162
|
+
dir = gem_path
|
|
163
|
+
else
|
|
164
|
+
path = File.join(USERPATH,'config','targets') unless path
|
|
165
|
+
dir = File.join(path, name)
|
|
166
|
+
end
|
|
162
167
|
lib_dir = File.join(dir, 'lib')
|
|
163
168
|
Cosmos.add_to_search_path(lib_dir, false) if File.exist?(lib_dir)
|
|
164
169
|
dir
|
|
@@ -170,6 +170,7 @@ module Cosmos
|
|
|
170
170
|
@input_filenames.each do |log_file|
|
|
171
171
|
break if @cancel
|
|
172
172
|
begin
|
|
173
|
+
Cosmos.check_log_configuration(@packet_log_reader, log_file)
|
|
173
174
|
file_size = File.size(log_file).to_f
|
|
174
175
|
progress_dialog.append_text("Processing File #{log_file_count}/#{@input_filenames.length}: #{log_file}")
|
|
175
176
|
progress_dialog.set_step_progress(0.0)
|
|
@@ -31,6 +31,8 @@ module Cosmos
|
|
|
31
31
|
'get_cmd_list',
|
|
32
32
|
'get_cmd_param_list',
|
|
33
33
|
'get_cmd_hazardous',
|
|
34
|
+
'get_cmd_value',
|
|
35
|
+
'get_cmd_time',
|
|
34
36
|
'tlm',
|
|
35
37
|
'tlm_raw',
|
|
36
38
|
'tlm_formatted',
|
|
@@ -48,6 +50,7 @@ module Cosmos
|
|
|
48
50
|
'limits_enabled?',
|
|
49
51
|
'enable_limits',
|
|
50
52
|
'disable_limits',
|
|
53
|
+
'get_stale',
|
|
51
54
|
'get_limits',
|
|
52
55
|
'set_limits',
|
|
53
56
|
'get_limits_groups',
|
|
@@ -273,6 +276,80 @@ module Cosmos
|
|
|
273
276
|
return hazardous
|
|
274
277
|
end
|
|
275
278
|
|
|
279
|
+
# Returns a value from the specified command
|
|
280
|
+
#
|
|
281
|
+
# @param target_name [String] Target name of the command
|
|
282
|
+
# @param command_name [String] Packet name of the command
|
|
283
|
+
# @param parameter_name [String] Parameter name in the command
|
|
284
|
+
# @param value_type [Symbol] How the values should be converted. Must be
|
|
285
|
+
# one of {Packet::VALUE_TYPES}
|
|
286
|
+
# @return [Varies] value
|
|
287
|
+
def get_cmd_value(target_name, command_name, parameter_name, value_type = :CONVERTED)
|
|
288
|
+
packet = System.commands.packet(target_name, command_name)
|
|
289
|
+
# Virtually support RECEIVED_TIMEFORMATTED, RECEIVED_TIMESECONDS, RECEIVED_COUNT
|
|
290
|
+
case parameter_name.to_s.upcase
|
|
291
|
+
when 'RECEIVED_TIMEFORMATTED'
|
|
292
|
+
if packet.received_time
|
|
293
|
+
return packet.received_time.formatted
|
|
294
|
+
else
|
|
295
|
+
return 'No Packet Received Time'
|
|
296
|
+
end
|
|
297
|
+
when 'RECEIVED_TIMESECONDS'
|
|
298
|
+
if packet.received_time
|
|
299
|
+
return packet.received_time.to_f
|
|
300
|
+
else
|
|
301
|
+
return 0.0
|
|
302
|
+
end
|
|
303
|
+
when 'RECEIVED_COUNT'
|
|
304
|
+
return packet.received_count
|
|
305
|
+
else
|
|
306
|
+
return packet.read(parameter_name, value_type.intern)
|
|
307
|
+
end
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
# Returns the time the most recent command was sent
|
|
311
|
+
#
|
|
312
|
+
# @param target_name [String] Target name of the command. If not given then
|
|
313
|
+
# the most recent time from all commands will be returned
|
|
314
|
+
# @param command_name [String] Packet name of the command. If not given then
|
|
315
|
+
# then most recent time from the given target will be returned.
|
|
316
|
+
# @return [Array<Target Name, Command Name, Time Seconds, Time Microseconds>]
|
|
317
|
+
def get_cmd_time(target_name = nil, command_name = nil)
|
|
318
|
+
last_command = nil
|
|
319
|
+
if target_name
|
|
320
|
+
if command_name
|
|
321
|
+
last_command = System.commands.packet(target_name, command_name)
|
|
322
|
+
else
|
|
323
|
+
System.commands.packets(target_name).each do |packet_name, command|
|
|
324
|
+
last_command = command if !last_command and command.received_time
|
|
325
|
+
if command.received_time and command.received_time > last_command.received_time
|
|
326
|
+
last_command = command
|
|
327
|
+
end
|
|
328
|
+
end
|
|
329
|
+
end
|
|
330
|
+
else
|
|
331
|
+
commands = System.commands.all
|
|
332
|
+
commands.each do |target_name, target_commands|
|
|
333
|
+
target_commands.each do |packet_name, command|
|
|
334
|
+
last_command = command if !last_command and command.received_time
|
|
335
|
+
if command.received_time and command.received_time > last_command.received_time
|
|
336
|
+
last_command = command
|
|
337
|
+
end
|
|
338
|
+
end
|
|
339
|
+
end
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
if last_command
|
|
343
|
+
if last_command.received_time
|
|
344
|
+
return [last_command.target_name, last_command.packet_name, last_command.received_time.tv_sec, last_command.received_time.tv_usec]
|
|
345
|
+
else
|
|
346
|
+
return [last_command.target_name, last_command.packet_name, nil, nil]
|
|
347
|
+
end
|
|
348
|
+
else
|
|
349
|
+
return [nil, nil, nil, nil]
|
|
350
|
+
end
|
|
351
|
+
end
|
|
352
|
+
|
|
276
353
|
# Request a converted telemetry item from a packet.
|
|
277
354
|
#
|
|
278
355
|
# Accepts two different calling styles:
|
|
@@ -549,6 +626,24 @@ module Cosmos
|
|
|
549
626
|
nil
|
|
550
627
|
end
|
|
551
628
|
|
|
629
|
+
# Get the list of stale packets for a specific target or pass nil to list
|
|
630
|
+
# all stale packets
|
|
631
|
+
#
|
|
632
|
+
# @param with_limits_only [Boolean] Return only the stale packets
|
|
633
|
+
# that have limits items and thus affect the overall limits
|
|
634
|
+
# state of the system
|
|
635
|
+
# @param target [String] The target to find stale packets for or nil to list
|
|
636
|
+
# all stale packets in the system
|
|
637
|
+
# @return [Array<Array<String, String>>] Array of arrays listing the target
|
|
638
|
+
# name and packet name
|
|
639
|
+
def get_stale(with_limits_only = false, target = nil)
|
|
640
|
+
stale = []
|
|
641
|
+
System.telemetry.stale(with_limits_only, target).each do |packet|
|
|
642
|
+
stale << [packet.target_name, packet.packet_name]
|
|
643
|
+
end
|
|
644
|
+
stale
|
|
645
|
+
end
|
|
646
|
+
|
|
552
647
|
# (see Cosmos::Limits#get)
|
|
553
648
|
def get_limits(target_name, packet_name, item_name, limits_set = nil)
|
|
554
649
|
System.limits.get(target_name, packet_name, item_name, limits_set)
|
|
@@ -197,7 +197,10 @@ module Cosmos
|
|
|
197
197
|
@staleness_monitor_thread = Thread.new do
|
|
198
198
|
begin
|
|
199
199
|
while true
|
|
200
|
-
System.telemetry.check_stale
|
|
200
|
+
stale = System.telemetry.check_stale
|
|
201
|
+
stale.each do |packet|
|
|
202
|
+
post_limits_event(:STALE_PACKET, [packet.target_name, packet.packet_name])
|
|
203
|
+
end
|
|
201
204
|
broken = @sleeper.sleep(10)
|
|
202
205
|
break if broken
|
|
203
206
|
end
|
|
@@ -281,8 +284,9 @@ module Cosmos
|
|
|
281
284
|
#
|
|
282
285
|
# @param event_type [Symbol] The type of limits event that occurred. Must
|
|
283
286
|
# be one of :LIMITS_SET which means the system limits set has changed,
|
|
284
|
-
# :LIMITS_CHANGE which means an individual item has changed limits state,
|
|
285
|
-
# :LIMITS_SETTINGS which means an individual item has new settings
|
|
287
|
+
# :LIMITS_CHANGE which means an individual item has changed limits state,
|
|
288
|
+
# :LIMITS_SETTINGS which means an individual item has new settings, or
|
|
289
|
+
# :STALE_PACKET which means a packet with limits has gone stale
|
|
286
290
|
# @param event_data [Symbol|Array<String,String,String,Symbol,Symbol>]
|
|
287
291
|
# Returns the current limits set name for event_type == :LIMITS_SET.
|
|
288
292
|
# Returns an array containing the target name, packet name, item name,
|
|
@@ -354,7 +358,7 @@ module Cosmos
|
|
|
354
358
|
# Get a limits event from the queue created by {#subscribe_limits_events}.
|
|
355
359
|
#
|
|
356
360
|
# Each limits event consists of an Array with two elements:
|
|
357
|
-
#
|
|
361
|
+
# The Symbol name of the event and an Array of data
|
|
358
362
|
#
|
|
359
363
|
# @param id [Integer] The queue ID received from calling
|
|
360
364
|
# {#subscribe_limits_events}
|
|
@@ -320,6 +320,57 @@ module Cosmos
|
|
|
320
320
|
# Just to avoid warning
|
|
321
321
|
end
|
|
322
322
|
|
|
323
|
+
def self.graceful_kill
|
|
324
|
+
# Just to avoid warning
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
def self.no_gui_handle_string_output
|
|
328
|
+
if @string_output.string[-1..-1] == "\n"
|
|
329
|
+
lines_to_write = ''
|
|
330
|
+
string = @string_output.string.clone
|
|
331
|
+
@string_output.string = @string_output.string[string.length..-1]
|
|
332
|
+
string.each_line {|out_line| lines_to_write << out_line }
|
|
333
|
+
@message_log.write(lines_to_write)
|
|
334
|
+
STDOUT.print lines_to_write if STDIN.isatty # Have a console
|
|
335
|
+
end
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
def self.no_gui_stop_callback
|
|
339
|
+
no_gui_handle_string_output()
|
|
340
|
+
@output_sleeper.cancel
|
|
341
|
+
Cosmos.kill_thread(self, @output_thread)
|
|
342
|
+
no_gui_handle_string_output()
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
def self.post_options_parsed_hook(options)
|
|
346
|
+
if options.no_gui
|
|
347
|
+
begin
|
|
348
|
+
@output_sleeper = Sleeper.new
|
|
349
|
+
@string_output = StringIO.new("", "r+")
|
|
350
|
+
$stdout = @string_output
|
|
351
|
+
Logger.level = Logger::INFO
|
|
352
|
+
cts = CmdTlmServer.new(options.config_file, options.production)
|
|
353
|
+
@message_log = CmdTlmServer.message_log
|
|
354
|
+
@output_thread = Thread.new do
|
|
355
|
+
while true
|
|
356
|
+
no_gui_handle_string_output()
|
|
357
|
+
break if @output_sleeper.sleep(1)
|
|
358
|
+
end
|
|
359
|
+
end
|
|
360
|
+
cts.stop_callback = method(:no_gui_stop_callback)
|
|
361
|
+
sleep # Sleep until waked by signal
|
|
362
|
+
ensure
|
|
363
|
+
if defined? cts and cts
|
|
364
|
+
cts.stop_logging('ALL')
|
|
365
|
+
cts.stop
|
|
366
|
+
end
|
|
367
|
+
end
|
|
368
|
+
return false
|
|
369
|
+
else
|
|
370
|
+
return true
|
|
371
|
+
end
|
|
372
|
+
end
|
|
373
|
+
|
|
323
374
|
# Entry point to the server application
|
|
324
375
|
def self.run(option_parser = nil, options = nil)
|
|
325
376
|
Cosmos.catch_fatal_exception do
|
|
@@ -333,6 +384,7 @@ module Cosmos
|
|
|
333
384
|
options.config_file = CmdTlmServer::DEFAULT_CONFIG_FILE
|
|
334
385
|
options.production = false
|
|
335
386
|
options.no_prompt = false
|
|
387
|
+
options.no_gui = false
|
|
336
388
|
option_parser.separator "CTS Specific Options:"
|
|
337
389
|
option_parser.on("-c", "--config FILE", "Use the specified configuration file") do |arg|
|
|
338
390
|
options.config_file = arg
|
|
@@ -343,6 +395,9 @@ module Cosmos
|
|
|
343
395
|
option_parser.on("-n", "--no-prompt", "Don't prompt with Are You Sure dialog on close.") do |arg|
|
|
344
396
|
options.no_prompt = true
|
|
345
397
|
end
|
|
398
|
+
option_parser.on(nil, "--no-gui", "Run the server without a GUI") do |arg|
|
|
399
|
+
options.no_gui = true
|
|
400
|
+
end
|
|
346
401
|
end
|
|
347
402
|
|
|
348
403
|
super(option_parser, options)
|