cosmos 3.4.2 → 3.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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)
|