Sha256: 02c9adbb86c83887861c2a0135569dfa2b0f0c44a02e26a3f499cfa90c083f54

Contents?: true

Size: 1.2 KB

Versions: 2

Compression:

Stored size: 1.2 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 schedule_import_job(import)
      Models::Job.create({
        :name => "import",
        :import => import,
        :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 10
            run_jobs
          end
        end
      end
    end

    def shutdown
      @loop.exit
      @loop = nil
    end

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

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
coupler-0.0.9-java lib/coupler/scheduler.rb
coupler-0.0.8-java lib/coupler/scheduler.rb