Sha256: 7009bd10778a4a179530012b048df63161680d03f920f4e9548709bc41ac9519

Contents?: true

Size: 1.35 KB

Versions: 5

Compression:

Stored size: 1.35 KB

Contents

class Konstant::Scheduler

  def run
    @threads = {}

    until Konstant.shutdown? do
      project_paths = Dir["#{Konstant.config['data_dir']}/projects/*"]
      project_ids = project_paths.map{|path| path.split('/').last}

      (project_ids - @threads.keys).each do |project_id|
        @threads[project_id] = project_worker(project_id)
      end

      (@threads.keys - project_ids).each do |project_id|
        thread = @thread.delete project_id
        thread.kill
        Konstant.logger.info "stopped worker for project '#{project_id}'"
      end

      sleep Konstant.config['new_projects_interval']
    end
  end

  def project_worker(project_id)
    Thread.new do
      project = Konstant::Project.new(project_id)
      Konstant.logger.info "started worker for project '#{project.id}'"

      until Konstant.shutdown? do
        Konstant.logger.debug "polling project '#{project.id}'"
        if File.exists?("#{project.path}/run.txt")
          system "rm #{project.path}/run.txt"

          begin
            system "touch #{project.path}/running.txt"
            Konstant::Builder.new(project).run
          rescue => e
            puts e.message
            puts e.backtrace
          ensure
            system "rm #{project.path}/running.txt"
          end
        else
          sleep Konstant.config["build_check_interval"]
        end
      end
    end
  end

end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
konstant-0.1.1 lib/konstant/scheduler.rb
konstant-0.1.0 lib/konstant/scheduler.rb
konstant-0.0.10 lib/konstant/scheduler.rb
konstant-0.0.9 lib/konstant/scheduler.rb
konstant-0.0.8 lib/konstant/scheduler.rb