Module: BeanstalkdView::BeanstalkdUtils

Included in:
Server
Defined in:
lib/beanstalkd_view/beanstalkd_utils.rb

Defined Under Namespace

Classes: BadURL

Constant Summary collapse

GUESS_PEEK_RANGE =

Default number of elements to use in peek-range guesses

100

Instance Method Summary collapse

Instance Method Details

#add_chart_data_to_hash(tube, jobs, items) ⇒ Object



53
54
55
56
57
58
59
60
# File 'lib/beanstalkd_view/beanstalkd_utils.rb', line 53

def add_chart_data_to_hash(tube, jobs, items)
  if jobs > 0
    datum = {}
    datum["label"] = tube.name
    datum["data"] = jobs
    items << datum
  end
end

#beanstalkObject



9
10
11
# File 'lib/beanstalkd_view/beanstalkd_utils.rb', line 9

def beanstalk
  @@beanstalk ||= Beaneater.new(beanstalk_address)
end

#beanstalk_addressObject



18
19
20
21
# File 'lib/beanstalkd_view/beanstalkd_utils.rb', line 18

def beanstalk_address
  uris = beanstalk_url.split(/[\s,]+/)
  beanstalk_host_and_port(uris.first)
end

#beanstalk_host_and_port(uri_string) ⇒ Object

Raises:



23
24
25
26
27
# File 'lib/beanstalkd_view/beanstalkd_utils.rb', line 23

def beanstalk_host_and_port(uri_string)
  uri = URI.parse(uri_string)
  raise(BadURL, uri_string) if uri.scheme != 'beanstalk'
  "#{uri.host}:#{uri.port || 11300}"
end

#beanstalk_urlObject



13
14
15
16
# File 'lib/beanstalkd_view/beanstalkd_utils.rb', line 13

def beanstalk_url
  return @@url if defined?(@@url) and @@url
  ENV['BEANSTALK_URL'] || 'beanstalk://127.0.0.1/'
end

#close_connectionObject



85
86
87
88
89
90
91
92
93
# File 'lib/beanstalkd_view/beanstalkd_utils.rb', line 85

def close_connection
  begin
    beanstalk.close
  rescue Beaneater::NotConnected
    # Ignore not being able to connect if trying to close
  ensure
    @@beanstalk = nil
  end
end

#get_chart_data_hash(tubes) ⇒ Object

Return the stats data in a format for the Bluff JS UI Charts



39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/beanstalkd_view/beanstalkd_utils.rb', line 39

def get_chart_data_hash(tubes)
  chart_data = {}
  chart_data["total_jobs_data"] = Hash.new
  chart_data["buried_jobs_data"] = Hash.new
  chart_data["total_jobs_data"]["items"] = Array.new
  chart_data["buried_jobs_data"]["items"] = Array.new 
  tubes.each do |tube|
    stats = tube.stats
    add_chart_data_to_hash(tube, stats[:total_jobs], chart_data["total_jobs_data"]["items"])
    add_chart_data_to_hash(tube, stats[:current_jobs_buried], chart_data["buried_jobs_data"]["items"])
  end
  chart_data
end

#guess_max_peek_range(min) ⇒ Object

Pick a Minimum Peek Range Based on the minimum



81
82
83
# File 'lib/beanstalkd_view/beanstalkd_utils.rb', line 81

def guess_max_peek_range(min)
  (min+GUESS_PEEK_RANGE)-1
end

#guess_min_peek_range(tubes) ⇒ Object

Pick a Minimum Peek Range Based on minumum ready jobs on all tubes



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/beanstalkd_view/beanstalkd_utils.rb', line 63

def guess_min_peek_range(tubes)
  min = 0
  tubes.each do |tube|
    response = tube.peek('ready')
    if response
      if min == 0
        min = response.id.to_i
      else
        min = [min, response.id.to_i].min
      end
    end
  end
  # Add some jitter in the opposite direction of 1/4 range
  jitter_min = (min-(GUESS_PEEK_RANGE*0.25)).to_i
  [1, jitter_min].max
end

#job_to_hash(job) ⇒ Object

Convert Beaneater::Job to hash



30
31
32
33
34
35
36
# File 'lib/beanstalkd_view/beanstalkd_utils.rb', line 30

def job_to_hash(job)
  ret_value = {}
  job_stats = job.stats
  job_stats.keys.each { |key| ret_value[key] = job_stats[key] }
  ret_value['body'] = job.body.inspect
  ret_value
end