| 123456789101112131415161718192021222324252627282930313233343536 |
- --[[
- Get counts per provided states
- Input:
- KEYS[1] 'prefix'
- ARGV[1...] types
- ]]
- local rcall = redis.call;
- local prefix = KEYS[1]
- local results = {}
- for i = 1, #ARGV do
- local stateKey = prefix .. ARGV[i]
- if ARGV[i] == "wait" or ARGV[i] == "paused" then
- -- Markers in waitlist DEPRECATED in v5: Remove in v6.
- local marker = rcall("LINDEX", stateKey, -1)
- if marker and string.sub(marker, 1, 2) == "0:" then
- local count = rcall("LLEN", stateKey)
- if count > 1 then
- rcall("RPOP", stateKey)
- results[#results+1] = count-1
- else
- results[#results+1] = 0
- end
- else
- results[#results+1] = rcall("LLEN", stateKey)
- end
- elseif ARGV[i] == "active" then
- results[#results+1] = rcall("LLEN", stateKey)
- else
- results[#results+1] = rcall("ZCARD", stateKey)
- end
- end
- return results
|