Class: OpenC3::System
- Defined in:
- lib/openc3/system/system.rb,
ext/openc3/ext/telemetry/telemetry.c
Constant Summary collapse
- @@instance =
Variable that holds the singleton instance
nil
- @@instance_mutex =
Mutex used to ensure that only one instance of System is created
Mutex.new
- @@limits_set =
The current limits set
nil
Class Method Summary collapse
-
.instance(target_names = nil, target_config_dir = nil) ⇒ System
Get the singleton instance of System.
-
.limits_set ⇒ Symbol
The current limits_set of the system returned from Redis.
- .limits_set=(value) ⇒ Object
- .setup_targets(target_names, base_dir, scope:) ⇒ Object
Instance Method Summary collapse
- #add_target(target_name, target_config_dir) ⇒ Object
-
#commands ⇒ Commands
Access to the command definition.
-
#initialize(target_names, target_config_dir) ⇒ System
constructor
Create a new System object.
-
#limits ⇒ Limits
Access to the limits definition.
-
#packet_config ⇒ PacketConfig
Access to the packet configuration.
-
#targets ⇒ Hash<String,Target>
Hash of all the known targets.
-
#telemetry ⇒ Telemetry
Access to the telemetry definition.
Constructor Details
#initialize(target_names, target_config_dir) ⇒ System
Create a new System object.
118 119 120 121 122 123 124 125 |
# File 'lib/openc3/system/system.rb', line 118 def initialize(target_names, target_config_dir) @targets = {} @packet_config = PacketConfig.new @commands = Commands.new(@packet_config) @telemetry = Telemetry.new(@packet_config) @limits = Limits.new(@packet_config) target_names.each { |target_name| add_target(target_name, target_config_dir) } end |
Class Method Details
.instance(target_names = nil, target_config_dir = nil) ⇒ System
Get the singleton instance of System
104 105 106 107 108 109 110 111 112 |
# File 'lib/openc3/system/system.rb', line 104 def self.instance(target_names = nil, target_config_dir = nil) return @@instance if @@instance raise "System.instance parameters are required on first call" unless target_names and target_config_dir @@instance_mutex.synchronize do @@instance ||= self.new(target_names, target_config_dir) return @@instance end end |
.limits_set ⇒ Symbol
63 64 65 66 67 68 |
# File 'lib/openc3/system/system.rb', line 63 def self.limits_set unless @@limits_set @@limits_set = LimitsEventTopic.current_set(scope: $openc3_scope).to_s.intern end @@limits_set end |
.limits_set=(value) ⇒ Object
70 71 72 |
# File 'lib/openc3/system/system.rb', line 70 def self.limits_set=(value) @@limits_set = value.to_s.intern end |
.setup_targets(target_names, base_dir, scope:) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/openc3/system/system.rb', line 74 def self.setup_targets(target_names, base_dir, scope:) if @@instance.nil? FileUtils.mkdir_p("#{base_dir}/targets") bucket = Bucket.getClient() target_names.each do |target_name| # Retrieve bucket/targets/target_name/target_id.zip zip_path = "#{base_dir}/targets/#{target_name}_current.zip" FileUtils.mkdir_p(File.dirname(zip_path)) bucket_key = "#{scope}/target_archives/#{target_name}/#{target_name}_current.zip" Logger.info("Retrieving #{bucket_key} from targets bucket") bucket.get_object(bucket: ENV['OPENC3_CONFIG_BUCKET'], key: bucket_key, path: zip_path) Zip::File.open(zip_path) do |zip_file| zip_file.each do |entry| path = File.join("#{base_dir}/targets", entry.name) FileUtils.mkdir_p(File.dirname(path)) zip_file.extract(entry, path) unless File.exist?(path) end end end # Build System from targets System.instance(target_names, "#{base_dir}/targets") end end |
Instance Method Details
#add_target(target_name, target_config_dir) ⇒ Object
127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/openc3/system/system.rb', line 127 def add_target(target_name, target_config_dir) parser = ConfigParser.new folder_name = File.join(target_config_dir, target_name) raise parser.error("Target folder must exist '#{folder_name}'.") unless Dir.exist?(folder_name) target = Target.new(target_name, target_config_dir) @targets[target.name] = target target.cmd_tlm_files.each do |cmd_tlm_file| @packet_config.process_file(cmd_tlm_file, target.name) rescue Exception => err Logger.error "Problem processing #{cmd_tlm_file}: #{err}." raise err end end |
#commands ⇒ Commands
45 |
# File 'lib/openc3/system/system.rb', line 45 instance_attr_reader :commands |
#limits ⇒ Limits
51 |
# File 'lib/openc3/system/system.rb', line 51 instance_attr_reader :limits |
#packet_config ⇒ PacketConfig
42 |
# File 'lib/openc3/system/system.rb', line 42 instance_attr_reader :packet_config |
#targets ⇒ Hash<String,Target>
39 |
# File 'lib/openc3/system/system.rb', line 39 instance_attr_reader :targets |
#telemetry ⇒ Telemetry
48 |
# File 'lib/openc3/system/system.rb', line 48 instance_attr_reader :telemetry |