class Pione::Agent::JobManager

Attributes

package[R]

instance method

Public Class Methods

new(tuple_space, env, package, param_set, stream) click to toggle source
Calls superclass method
# File lib/pione/agent/job-manager.rb, line 13
def initialize(tuple_space, env, package, param_set, stream)
  unless env.entrance_rule
    name = env.entrance_rule_name
    raise JobError.new("Entrance rule `%s` not found in the package." % name)
  end

  super(tuple_space)
  @tuple_space = tuple_space
  @env = env
  @package = package
  @param_set = param_set
  @stream = stream
  @package_id = @env.current_package_id
end

Public Instance Methods

transit_to_init() click to toggle source

transitions

# File lib/pione/agent/job-manager.rb, line 43
def transit_to_init
  # split parameter set as package toplvel's and main's
  toplevel_variable_names = @env.variable_table.select_names_by(@env, @env.current_package_id)
  toplevel_param_set = @param_set.filter(toplevel_variable_names)
  main_param_set = @param_set.delete_all(toplevel_variable_names)

  # merge the toplevel parameter set
  @env.merge_param_set(toplevel_param_set, force: true)

  # setup root rule
  root_definition = @env.make_root_rule(main_param_set)
  @rule_condition = root_definition.rule_condition_context.eval(@env)

  # share my environment
  write(TupleSpace::EnvTuple.new(@env.dumpable)) # need to be dumpable

  # collect tuple space attributes
  @request_from = @tuple_space.attribute("request_from")
  @session_id = @tuple_space.attribute("session_id")
  @client_ui = @tuple_space.attribute("client_ui")
end
transit_to_run() click to toggle source
# File lib/pione/agent/job-manager.rb, line 69
def transit_to_run
  finder = RuleEngine::DataFinder.new(@tuple_space, 'root')
  list = finder.to_enum(:find, :input, @rule_condition.inputs, @env).to_a
  if list.empty?
    user_message "error: no inputs"
    terminate
  else
    # call root rule of the current package
    list.each do |env, inputs|
      engine_param = {
        :tuple_space  => @tuple_space,
        :env          => @env,
        :package_id   => @env.current_package_id,
        :rule_name    => "Root",
        :inputs       => inputs,
        :param_set    => Lang::ParameterSet.new,
        :domain_id    => 'root',
        :caller_id    => nil,
        :request_from => @request_from,
        :session_id   => @session_id,
        :client_ui    => @client_ui
      }
      RuleEngine.make(engine_param).handle || terminate
    end
  end

  # terminate if the agent is not stream mode
  terminate unless @stream

  return
end
transit_to_sleep() click to toggle source
# File lib/pione/agent/job-manager.rb, line 65
def transit_to_sleep
  take(TupleSpace::CommandTuple.new("start-root-rule", nil))
end