Class: Beaneater::Job

Inherits:
Object
  • Object
show all
Defined in:
lib/beaneater/job/record.rb

Overview

Represents job related commands.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client, res) ⇒ Job

Initializes a new job object.



22
23
24
25
26
27
# File 'lib/beaneater/job/record.rb', line 22

def initialize(client, res)
  @client     = client
  @id         = res[:id]
  @body       = res[:body]
  @reserved   = res[:status] == 'RESERVED'
end

Instance Attribute Details

#bodyString



15
# File 'lib/beaneater/job/record.rb', line 15

attr_reader :id, :body, :reserved, :client

#clientObject

Returns the value of attribute client.



15
# File 'lib/beaneater/job/record.rb', line 15

attr_reader :id, :body, :reserved, :client

#idInteger



15
16
17
# File 'lib/beaneater/job/record.rb', line 15

def id
  @id
end

#reservedBoolean



15
# File 'lib/beaneater/job/record.rb', line 15

attr_reader :id, :body, :reserved, :client

Instance Method Details

#bury(options = {}) ⇒ Hash{Symbol => String,Number}

Sends command to bury a reserved job.

Examples:

@job.bury({:pri => 100})
  # => {:status=>"BURIED", :body=>nil}

Options Hash (options):

  • pri (Integer)

    Assign new priority to job



40
41
42
43
44
45
# File 'lib/beaneater/job/record.rb', line 40

def bury(options={})
  options = { :pri => stats.pri }.merge(options)
  with_reserved("bury #{id} #{options[:pri]}") do
    @reserved = false
  end
end

#delayInteger

Returns the delay of this job

Examples:

@beaneater.jobs.find(123).delay
  # => 5


180
181
182
# File 'lib/beaneater/job/record.rb', line 180

def delay
  self.stats.delay
end

#deleteHash{Symbol => String,Number}

Sends command to delete a job.

Examples:

@beaneater.jobs.find(123).delete
  # => {:status=>"DELETED", :body=>nil}


85
86
87
# File 'lib/beaneater/job/record.rb', line 85

def delete
  transmit("delete #{id}") { @reserved = false }
end

#exists?Boolean

Check if the job still exists.

Examples:

@beaneater.jobs.find(123).exists?


132
133
134
135
136
# File 'lib/beaneater/job/record.rb', line 132

def exists?
  !self.stats.nil?
rescue Beaneater::NotFoundError
  false
end

#kickHash{Symbol => String,Number}

Sends command to kick a buried job.

Examples:

@beaneater.jobs.find(123).kick
  # => {:status=>"KICKED", :body=>nil}


97
98
99
# File 'lib/beaneater/job/record.rb', line 97

def kick
  transmit("kick-job #{id}")
end

#priInteger

Returns the pri of this job

Examples:

@beaneater.jobs.find(123).pri
  # => 1


169
170
171
# File 'lib/beaneater/job/record.rb', line 169

def pri
  self.stats.pri
end

#release(options = {}) ⇒ Hash{Symbol => String,Number}

Sends command to release a job back to ready state.

Examples:

@beaneater.jobs.find(123).release(:pri => 10, :delay => 5)
  # => {:status=>"RELEASED", :body=>nil}

Options Hash (options):

  • pri (Integer)

    Assign new priority to job

  • delay (Integer)

    Assign new delay to job



58
59
60
61
62
63
# File 'lib/beaneater/job/record.rb', line 58

def release(options={})
  options = { :pri => stats.pri, :delay => stats.delay }.merge(options)
  with_reserved("release #{id} #{options[:pri]} #{options[:delay]}") do
    @reserved = false
  end
end

#reserved?Boolean

Check if job is currently in a reserved state.

Examples:

@beaneater.jobs.find(123).reserved?


121
122
123
# File 'lib/beaneater/job/record.rb', line 121

def reserved?
  @reserved || self.stats.state == "reserved"
end

#statsBeaneater::StatStruct

Sends command to get stats about job.

Examples:

@beaneater.jobs.find(123).stats
@job.stats.tube # => "some-tube"


109
110
111
112
# File 'lib/beaneater/job/record.rb', line 109

def stats
  res = transmit("stats-job #{id}")
  StatStruct.from_hash(res[:body])
end

#to_sString Also known as: inspect

Returns string representation of job

Examples:

@beaneater.jobs.find(123).to_s
@beaneater.jobs.find(123).inspect


191
192
193
# File 'lib/beaneater/job/record.rb', line 191

def to_s
  "#<Beaneater::Job id=#{id} body=#{body.inspect}>"
end

#touchHash{Symbol => String,Number}

Sends command to touch job which extends the ttr.

Examples:

@beaneater.jobs.find(123).touch
  # => {:status=>"TOUCHED", :body=>nil}


73
74
75
# File 'lib/beaneater/job/record.rb', line 73

def touch
  with_reserved("touch #{id}")
end

#transmit(cmd, &block) ⇒ Hash{Symbol => String,Number} (protected)

Transmit command to beanstalkd instance and fetch response.

Examples:

transmit('stats')
transmit('stats') { 'success' }


206
207
208
209
210
# File 'lib/beaneater/job/record.rb', line 206

def transmit(cmd, &block)
  res = client.connection.transmit(cmd)
  yield if block_given?
  res
end

#ttrInteger

Returns the ttr of this job

Examples:

@beaneater.jobs.find(123).ttr
  # => 123


158
159
160
# File 'lib/beaneater/job/record.rb', line 158

def ttr
  @ttr ||= self.stats.ttr
end

#tubeString

Returns the name of the tube this job is in

Examples:

@beaneater.jobs.find(123).tube
  # => "some-tube"


146
147
148
# File 'lib/beaneater/job/record.rb', line 146

def tube
  @tube ||= self.stats.tube
end

#with_reserved(cmd, &block) ⇒ Hash{Symbol => String,Number} (protected)

Transmits a command which requires the job to be reserved.

Examples:

with_reserved("bury 26") { @reserved = false }

Raises:



220
221
222
223
# File 'lib/beaneater/job/record.rb', line 220

def with_reserved(cmd, &block)
  raise JobNotReserved unless reserved?
  transmit(cmd, &block)
end