Class: NoradBeacon::Runner

Inherits:
Object
  • Object
show all
Defined in:
lib/norad_beacon/runner.rb

Direct Known Subclasses

MultiRunner

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(prog, args, timeout = 600) ⇒ NoradBeacon::Runner

Initialize an instance of the Runner class

Parameters:

  • prog (String)

    the program to execute

  • args (Array)

    list of arguments to pass to the program

  • timeout (Fixnum) (defaults to: 600)

    optionally specify the timeout for the sub process

Raises:

  • (ArgumentError)


20
21
22
23
24
25
26
27
# File 'lib/norad_beacon/runner.rb', line 20

def initialize(prog, args, timeout = 600)
  raise ArgumentError, 'args must be an Array' unless args.is_a?(Array)
  @prog = prog
  @timeout = timeout
  @result_set = NoradBeacon::ResultSet.new
  @args = format_args(args)
  @exit_code = nil
end

Instance Attribute Details

#exit_codeObject (readonly)

Returns the value of attribute exit_code.



7
8
9
# File 'lib/norad_beacon/runner.rb', line 7

def exit_code
  @exit_code
end

#result_setObject (readonly)

Returns the value of attribute result_set.



7
8
9
# File 'lib/norad_beacon/runner.rb', line 7

def result_set
  @result_set
end

Class Method Details

.results_fileObject

Class method to return results file



10
11
12
# File 'lib/norad_beacon/runner.rb', line 10

def self.results_file
  @results_fn ||= "/tmp/norad.results.#{Time.now.strftime('%Y%m%d-%H%M%S')}"
end

Instance Method Details

#execute(stdout_results = false) ⇒ Object

Execute the command



30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/norad_beacon/runner.rb', line 30

def execute(stdout_results = false)
  process = ChildProcess.build(@prog, *@args)
  set_child_proc_io(process, stdout_results)
  process.start
  begin
    process.poll_for_exit(@timeout)
  rescue ChildProcess::TimeoutError
    puts 'Beacon Timeout reached. Stopping the process...'
    process.stop # tries increasingly harsher methods to kill the process.
  end
  @exit_code = process.exit_code
end

#parse_results {|raw_results| ... } ⇒ Object

Parse the results stored in the results file

Yields:

  • (raw_results)


44
45
46
47
48
# File 'lib/norad_beacon/runner.rb', line 44

def parse_results
  raw_results = File.open(self.class.results_file, 'r')
  yield raw_results
  raw_results.close
end