--[[ 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 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