Sha256: ee7d90a1c879b6068b8024a11217b662691690427b5de10302951b791ecb7592

Contents?: true

Size: 1.4 KB

Versions: 12

Compression:

Stored size: 1.4 KB

Contents

require File.join(File.dirname(__FILE__), 'db.rb') unless defined?(DB)

class Job < Sequel::Model
  def update(hash)
    super(hash)
    if build = Build.find([ "id = ?", self[:build_id] ])
      done = Job.filter([ "result IS NULL AND build_id = ?", self[:build_id] ]).count == 0
      build.update(:results => build[:results].to_s + hash[:result].to_s,
                   :done => done)
    end
  end
  
  def self.next(params, remove_addr)
    clean_params = params.reject { |k, v| [ "requester_mac", "no_jruby" ].include?(k) }
    runner = Runner.record! clean_params.merge({ :ip => remove_addr, :last_seen_at => Time.now })
    return unless Server.valid_version?(params[:version])
    [ next_job_query(params["requester_mac"], params["no_jruby"]).first, runner ]
  end
  
  private
  
  def self.next_job_query(requester_mac, no_jruby)
    release_jobs_taken_by_missing_runners!
    query = Job.filter("taken_at IS NULL").order("Random()".lit)
    filters = []
    filters << "requester_mac = '#{requester_mac}'" if requester_mac
    filters << "jruby != 1" if no_jruby
    if filters.empty?
      query
    else
      query.filter(filters.join(' AND ')) 
    end
  end
  
  def self.release_jobs_taken_by_missing_runners!
    missing_runners = Runner.filter([ "last_seen_at < ?", (Time.now - Runner.timeout) ])
    missing_runners.each { |r|
      Job.filter(:taken_by_id => r[:id]).update(:taken_at => nil)
    }    
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
testbot-0.3.7 lib/server/job.rb
testbot-0.3.6 lib/server/job.rb
testbot-0.3.5 lib/server/job.rb
testbot-0.3.4 lib/server/job.rb
testbot-0.3.3 lib/server/job.rb
testbot-0.3.2 lib/server/job.rb
testbot-0.3.1 lib/server/job.rb
testbot-0.3.0 lib/server/job.rb
testbot-0.2.9 lib/server/job.rb
testbot-0.2.8 lib/server/job.rb
testbot-0.2.7 lib/server/job.rb
testbot-0.2.6 lib/server/job.rb