Sha256: 3f6d931b64cf49706c2a608da16b2884db98d0a01b39366a1a966c5cc768bf55

Contents?: true

Size: 1.04 KB

Versions: 4

Compression:

Stored size: 1.04 KB

Contents

module Coupler
  class Scheduler
    include Singleton

    def initialize
      super
      @mutex = Mutex.new
    end

    def schedule_transform_job(resource)
      Models::Job.create({
        :name => "transform",
        :resource => resource,
        :status => "scheduled"
      })
    end

    def schedule_run_scenario_job(scenario)
      Models::Job.create({
        :name => "run_scenario",
        :scenario => scenario,
        :status => "scheduled"
      })
    end

    def run_jobs
      @mutex.synchronize do
        count = Models::Job.filter(:status => 'running').count
        if count == 0
          job = Models::Job.filter(:status => 'scheduled').order(:created_at).first
          Thread.new(job) { |j| j.execute } if job
        end
      end
    end

    def start
      if !is_started?
        @loop = Thread.new do
          loop do
            sleep 30
            run_jobs
          end
        end
      end
    end

    def shutdown
      @loop.exit
      @loop = nil
    end

    def is_started?
      !@loop.nil?
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
coupler-0.0.4-java lib/coupler/scheduler.rb
coupler-0.0.3-java lib/coupler/scheduler.rb
coupler-0.0.2-java lib/coupler/scheduler.rb
coupler-0.0.1-java lib/coupler/scheduler.rb