-
Notifications
You must be signed in to change notification settings - Fork 3
/
duxque.coffee
40 lines (36 loc) · 1.2 KB
/
duxque.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# Description:
# Shows the status of Duxware's resque queues
#
# Dependencies:
# None
#
# Configuration:
# RESQUE_WEB_URL
#
# Commands:
# hubot resque - Lists the queues with pending jobs
#
# Author:
# joshuaflanagan
module.exports = (robot) ->
url = 'https://duxware.optimispt.com/resque'
robot.respond /duxque/i, (msg) ->
msg.http(url + '/stats.txt')
.get() (err, res, body) ->
msg.send format_stats parse_stats body
parse_stats = (stats) ->
details = {}
handle_line = (line) ->
[key,val] = line.split '='
[group,name] = key.split '.'
(details[group]||={})[name.replace('+','')] = val
handle_line response for response in stats.split '\n'
details
format_stats = (stats) ->
heading = "#{stats['resque']['pending']} pending jobs. #{stats['resque']['working']} of #{stats['resque']['workers']} workers active."
queues = ([count,name] for name,count of stats['queues'] when count isnt '0').sort (a,b) -> b[0] - a[0]
justify = (str, size) ->
Array(size - str.length + 1).join(' ') + str
width = Math.max.apply null, (q[1].length for q in queues)
queue_list = ("#{justify(q[1], width + 1)} : #{q[0]}" for q in queues).join '\n'
return heading + '\n' + queue_list