balsamique 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/balsamique.rb +37 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 875fa74f76e93f583746ce80088297a1d0ee34ac
|
4
|
+
data.tar.gz: 0554405360376134aff714697848c98cb911b959
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 173858d448408ba15351c0bcb908b615a403de5bdacc694e3caa3ff4708213dc6d4e84a23776585f755e8bb2e5036d8691903237d361e92b36a01885e07b6f09
|
7
|
+
data.tar.gz: be3fe7aff6d2fd2589abfc3173b8fe57c94dbda2e7a658a3730d6c84771c16a08d88ba9b4ed9612db3cd0fcf0c1751ae119a8e7e39a08d6cf2a425b0ac29e2b2
|
data/lib/balsamique.rb
CHANGED
@@ -52,8 +52,8 @@ class Balsamique
|
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
-
STATS_SLICE =
|
56
|
-
STATS_CHUNK =
|
55
|
+
STATS_SLICE = 60 # seconds
|
56
|
+
STATS_CHUNK = 60 # slices (= 3600 seconds = 1 hr)
|
57
57
|
def self.slice_timestamp(ts)
|
58
58
|
slice = ts.to_i / STATS_SLICE
|
59
59
|
return slice / STATS_CHUNK, slice % STATS_CHUNK
|
@@ -142,7 +142,7 @@ while KEYS[i] do
|
|
142
142
|
redis.call('hset', KEYS[3], KEYS[i] .. ',len,' .. ARGV[3],
|
143
143
|
redis.call('zcard', KEYS[i]))
|
144
144
|
redis.call('hincrby', KEYS[3], KEYS[i] .. ',dq,' .. ARGV[3], 1)
|
145
|
-
redis.call('expire', KEYS[3],
|
145
|
+
redis.call('expire', KEYS[3], 90000)
|
146
146
|
return({ elem[1],
|
147
147
|
redis.call('hget', KEYS[1], elem[1]),
|
148
148
|
redis.call('hget', KEYS[2], elem[1]), retries })
|
@@ -304,6 +304,38 @@ EOF
|
|
304
304
|
result.keys.map { |k| self.class.strip_prefix(k, @que_prefix) }
|
305
305
|
end
|
306
306
|
|
307
|
+
def queues_info
|
308
|
+
qs_info = redis.hgetall(@queues)
|
309
|
+
return {} if qs_info.empty?
|
310
|
+
now = Time.now.to_f
|
311
|
+
details = redis.multi do |r|
|
312
|
+
qs_info.keys.each do |key|
|
313
|
+
r.zrange(key, 0, 0, withscores: true)
|
314
|
+
r.zcount(key, 0, now)
|
315
|
+
r.zcard(key)
|
316
|
+
end
|
317
|
+
end
|
318
|
+
result = {}
|
319
|
+
qs_info.keys.each_with_index do |key, i|
|
320
|
+
i3 = 3 * i
|
321
|
+
queue = self.class.strip_prefix(key, @que_prefix)
|
322
|
+
last_id, last_ts = qs_info[key].split(',')
|
323
|
+
last_ts = last_ts.to_f
|
324
|
+
next_id = next_ts = nil
|
325
|
+
if (next_info = details[i3].first)
|
326
|
+
next_id = next_info.first
|
327
|
+
next_ts = next_info.last
|
328
|
+
end
|
329
|
+
result[queue] = {
|
330
|
+
current_ts: now,
|
331
|
+
last_id: last_id, last_ts: last_ts,
|
332
|
+
total: details[i3 + 2], ready: details[i3 + 1],
|
333
|
+
next_id: next_id, next_ts: next_ts
|
334
|
+
}
|
335
|
+
end
|
336
|
+
result
|
337
|
+
end
|
338
|
+
|
307
339
|
def queue_length(queue)
|
308
340
|
redis.zcard(@que_prefix + queue) || 0
|
309
341
|
end
|
@@ -320,7 +352,7 @@ EOF
|
|
320
352
|
end
|
321
353
|
|
322
354
|
def remove_job(id)
|
323
|
-
status = redis.hget(@status, id)
|
355
|
+
return unless (status = redis.hget(@status, id))
|
324
356
|
queue, timestamps = decode_job_status(status)
|
325
357
|
redis.multi do |r|
|
326
358
|
if queue.start_with?(@que_prefix)
|
@@ -339,8 +371,7 @@ EOF
|
|
339
371
|
r.hdel(@args, id)
|
340
372
|
r.hdel(@tasks, id)
|
341
373
|
end
|
342
|
-
check_status = redis.hget(@status, id)
|
343
|
-
return if check_status.nil?
|
374
|
+
return unless (check_status = redis.hget(@status, id))
|
344
375
|
if check_status == status
|
345
376
|
redis.hdel(@status, id)
|
346
377
|
if (uid = redis.hget(@unique, id))
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: balsamique
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- DWNLD
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|