Sha256: 1938a769dddf4d48aa6a89d6f6ddebcc769f3d32afc9e7264d3be6ce688d7abc

Contents?: true

Size: 1.77 KB

Versions: 3

Compression:

Stored size: 1.77 KB

Contents

module SimControl
  class Controller
    attr_reader :current_simulation

    def initialize(hostname, simulation_description, scenario_description, results_directory, args = {})
      @hosts = args.delete(:hosts) || SimControl::Hosts.new

      @hostname = hostname
      @simulation_description = simulation_description
      @scenario_description = scenario_description
      @results_directory = results_directory

      @scenarios = []

      @meta_seed = 13
      @max_seed = 2**(32 - 1) - 1
    end 

    def run
      instance_eval(@simulation_description)
      instance_eval(@scenario_description)

      host_scenarios = @hosts.partition(all_scenarios, @hostname)

      host_scenarios.each do |scenarios_per_core|
        threads = []
        scenarios_per_core.each do |scenario|
          threads << Thread.new do
            current_simulation.simulate(scenario, seeds)
          end

          threads.each do |thread|
            thread.join
          end
        end
      end
    end

    def repetitions(number_of_repetitions)
      @number_of_repetitions = number_of_repetitions
    end

    def hosts(&hosts_block)
      @hosts.process &hosts_block
    end

    def simulation(klass, script, arguments)
      @current_simulation = klass.new script, arguments
    end

    def seeds
      @rng = Random.new(@meta_seed)
      (1..@number_of_repetitions).map { @rng.rand(@max_seed) }
    end

    def simulate(scenario)
      @scenarios << scenario
    end

    def all_scenarios
      @scenarios
    end

    class << self
      def execute(hostname, simulation_description, scenario_description, results_directory)
        controller = SimControl::Controller.new(hostname, simulation_description, scenario_description, results_directory)
        controller.run
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
SimControl-0.1.2 lib/SimControl/controller.rb
SimControl-0.1.1 lib/SimControl/controller.rb
SimControl-0.1.0 lib/SimControl/controller.rb