Module: Bluth

Defined in:
lib/bluth.rb,
lib/bluth.rb,
lib/bluth.rb,
lib/bluth.rb,
lib/bluth/cli.rb,
lib/bluth/timingbelt.rb,
lib/bluth/worker.rb

Defined Under Namespace

Modules: Handler, Queue, TimingBelt, VERSION, WorkerBase Classes: Buster, CLI, Gob, Maeby, ScheduleWorker, Shutdown, Worker

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.confObject (readonly)

Returns the value of attribute conf.



45
46
47
# File 'lib/bluth.rb', line 45

def conf
  @conf
end

.dbObject (readonly)

Returns the value of attribute db.



45
46
47
# File 'lib/bluth.rb', line 45

def db
  @db
end

.envObject

Returns the value of attribute env.



46
47
48
# File 'lib/bluth.rb', line 46

def env
  @env
end

.handlersObject (readonly)

Returns the value of attribute handlers.



45
46
47
# File 'lib/bluth.rb', line 45

def handlers
  @handlers
end

.locksObject (readonly)

Returns the value of attribute locks.



45
46
47
# File 'lib/bluth.rb', line 45

def locks
  @locks
end

.priorityObject

Returns the value of attribute priority.



46
47
48
# File 'lib/bluth.rb', line 46

def priority
  @priority
end

.queuetimeoutObject

Returns the value of attribute queuetimeout.



46
47
48
# File 'lib/bluth.rb', line 46

def queuetimeout
  @queuetimeout
end

.redisObject

Returns the value of attribute redis.



46
47
48
# File 'lib/bluth.rb', line 46

def redis
  @redis
end

.saltObject (readonly)

Returns the value of attribute salt.



23
24
25
# File 'lib/bluth/worker.rb', line 23

def salt
  @salt
end

.schedulerObject

Returns the value of attribute scheduler.



46
47
48
# File 'lib/bluth.rb', line 46

def scheduler
  @scheduler
end

.uriObject

Returns the value of attribute uri.



46
47
48
# File 'lib/bluth.rb', line 46

def uri
  @uri
end

Class Method Details

.clear_locksObject



83
84
85
86
87
88
# File 'lib/bluth.rb', line 83

def Bluth.clear_locks
  @locks.each { |lock| 
    Familia.info "Removing lock #{lock}"
    Bluth.redis.del lock 
  }
end

.connectObject



66
67
68
# File 'lib/bluth.rb', line 66

def connect
  instance_eval &onconnect unless onconnect.nil?
end

.find_locksObject



89
90
91
# File 'lib/bluth.rb', line 89

def Bluth.find_locks
  @locks = Bluth.redis.keys(Familia.rediskey('*', :lock))
end

.onconnect(&blk) ⇒ Object

A block to be called before a worker starts.

e.g.

Bluth.onconnect do
  config = YourProject.load_config
  Familia.uri = config[:redis_uri]
end

Note: this block can be called multiple times so do not put anything with side effects in here.



62
63
64
65
# File 'lib/bluth.rb', line 62

def onconnect &blk
  @onconnect = blk unless blk.nil?
  @onconnect
end

.popObject



166
167
168
# File 'lib/bluth.rb', line 166

def Bluth.pop
  blocking_queue_handler :brpop
end

.queue(n) ⇒ Object

Raises:

  • (ArgumentError)


96
97
98
99
# File 'lib/bluth.rb', line 96

def Bluth.queue(n)
  raise ArgumentError, "No such queue: #{n}" unless queue?(n)
  Bluth::Queue.send n
end

.queue?(n) ⇒ Boolean

Returns:

  • (Boolean)


93
94
95
# File 'lib/bluth.rb', line 93

def Bluth.queue?(n)
  Bluth::Queue.queues.collect(&:name).member?(n.to_s.to_sym)
end

.reconnect!(delay = 5) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/bluth.rb', line 69

def reconnect! delay=5
  sleep delay
  success = begin
    Familia.reconnect_all!
    (Bluth::Gob.redis.ping.to_s.upcase == 'PONG')
  rescue => ex
    Familia.info "  #{ex.message}"
    false
  end
  Familia.info "  reconnected: #{success}"
  success
end

.shiftObject

Workers use a blocking pop and will wait for up to Bluth.queuetimeout (seconds) before returnning nil. Note that the queues are still processed in order. If all queues are empty, the first one to return a value is use. See:

code.google.com/p/redis/wiki/BlpopCommand



162
163
164
# File 'lib/bluth.rb', line 162

def Bluth.shift
  blocking_queue_handler :blpop
end

.sysinfoObject



47
48
49
50
# File 'lib/bluth.rb', line 47

def sysinfo
  @sysinfo ||= SysInfo.new.freeze
  @sysinfo 
end