Class: OpenC3::MultiMicroservice

Inherits:
Microservice show all
Defined in:
lib/openc3/microservices/multi_microservice.rb

Instance Attribute Summary

Attributes inherited from Microservice

#count, #custom, #error, #logger, #microservice_status_thread, #name, #scope, #secrets, #state

Instance Method Summary collapse

Methods inherited from Microservice

#as_json, #initialize, #microservice_cmd, run, #setup_microservice_topic, #shutdown

Constructor Details

This class inherits a constructor from OpenC3::Microservice

Instance Method Details

#runObject



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/openc3/microservices/multi_microservice.rb', line 25

def run
  ARGV.each do |microservice_name|
    microservice_model = MicroserviceModel.get_model(name: microservice_name, scope: @scope)
    if microservice_model and microservice_model.enabled
      thread = Thread.new do
        cmd_line = microservice_model.cmd.join(' ')
        split_cmd_line = cmd_line.split(' ')
        filename = nil
        split_cmd_line.each do |item|
          if File.extname(item) == '.rb'
            filename = item
            break
          end
        end
        raise "Could not determine class filename from '#{cmd_line}'" unless filename
        OpenC3.set_working_dir(microservice_model.work_dir) do
          require File.join(microservice_model.work_dir, filename)
        end
        klass = filename.filename_to_class_name.to_class
        klass.run(microservice_model.name)
      end
      ThreadManager.instance.register(thread)
    end
  end
  ThreadManager.instance.monitor
  ThreadManager.instance.shutdown
end