Class: Debci::Job

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
Test::Duration, Test::Expired
Defined in:
lib/debci/job.rb

Defined Under Namespace

Classes: InvalidStatusFile

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Test::Expired

#expired?

Methods included from Test::Duration

#duration_human

Class Method Details

.history(package, suite, arch) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/debci/job.rb', line 47

def self.history(package, suite, arch)
  Debci::Job.where(
    package: package,
    suite: suite,
    arch: arch
  ).where.not(status: nil).where(pin_packages: nil).order('date')
end

.import(status_file, suite, arch) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/debci/job.rb', line 19

def self.import(status_file, suite, arch)
  status = Debci::Status.from_file(status_file, suite, arch)
  status.run_id = status.run_id.to_i
  job = Debci::Job.find(status.run_id)
  if status.package != job.package
    raise InvalidStatusFile.new("Data in %{file} is for package %{pkg}, while database says that job %{id} is for package %{origpkg}" % {
      file: status_file,
      pkg: status.package,
      id: status.run_id,
      origpkg: job.package,
    })
  end
  job.duration_seconds = status.duration_seconds
  job.date = status.date
  job.last_pass_date = status.last_pass_date
  job.last_pass_version = status.last_pass_version
  job.message = status.message
  job.previous_status = status.previous_status
  job.version = status.version
  job.status = status.status
  job.save!
  job
end

.pendingObject



43
44
45
# File 'lib/debci/job.rb', line 43

def self.pending
  jobs = Debci::Job.where(status: nil).order(:created_at)
end

Instance Method Details

#as_json(options = nil) ⇒ Object



72
73
74
# File 'lib/debci/job.rb', line 72

def as_json(options = nil)
  super(options).update("duration_human" => self.duration_human)
end

#enqueue(priority = 0) ⇒ Object



88
89
90
91
92
# File 'lib/debci/job.rb', line 88

def enqueue(priority = 0)
  queue = Debci::AMQP.get_queue(arch)
  parameters = get_enqueue_parameters()
  queue.publish("%s %s %s" % [package, suite, parameters.join(' ')], priority: priority)
end

#get_enqueue_parametersObject



76
77
78
79
80
81
82
83
84
85
86
# File 'lib/debci/job.rb', line 76

def get_enqueue_parameters
  parameters = ['run-id:%s' % id]
  if self.trigger
    parameters << "trigger:#{CGI.escape(trigger)}"
  end
  Array(self.pin_packages).each do |pin|
    pkg, suite = pin
    parameters << "pin-packages:#{suite}=#{pkg}"
  end
  parameters
end

#prefixObject



55
56
57
58
59
# File 'lib/debci/job.rb', line 55

def prefix
  name = self.package
  name =~ /^((lib)?.)/
  $1
end

#timeObject

Returns the amount of time since the date for this status object



62
63
64
65
66
67
68
69
70
# File 'lib/debci/job.rb', line 62

def time
  days = (Time.now - self.created_at)/86400

  if days >= 1 || days <= -1
    "#{days.floor} day(s) ago"
  else
    "#{Time.at(Time.now - self.created_at).gmtime.strftime('%H')} hour(s) ago"
  end
end