| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- --[[
- Get job ids per provided states
- Input:
- KEYS[1] 'prefix'
- ARGV[1] start
- ARGV[2] end
- ARGV[3] asc
- ARGV[4...] types
- ]]
- local rcall = redis.call
- local prefix = KEYS[1]
- local rangeStart = tonumber(ARGV[1])
- local rangeEnd = tonumber(ARGV[2])
- local asc = ARGV[3]
- local results = {}
- local function getRangeInList(listKey, asc, rangeStart, rangeEnd, results)
- if asc == "1" then
- local modifiedRangeStart
- local modifiedRangeEnd
- if rangeStart == -1 then
- modifiedRangeStart = 0
- else
- modifiedRangeStart = -(rangeStart + 1)
- end
- if rangeEnd == -1 then
- modifiedRangeEnd = 0
- else
- modifiedRangeEnd = -(rangeEnd + 1)
- end
- results[#results+1] = rcall("LRANGE", listKey,
- modifiedRangeEnd,
- modifiedRangeStart)
- else
- results[#results+1] = rcall("LRANGE", listKey, rangeStart, rangeEnd)
- end
- end
- for i = 4, #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)
- getRangeInList(stateKey, asc, rangeStart, rangeEnd, results)
- else
- results[#results+1] = {}
- end
- else
- getRangeInList(stateKey, asc, rangeStart, rangeEnd, results)
- end
- elseif ARGV[i] == "active" then
- getRangeInList(stateKey, asc, rangeStart, rangeEnd, results)
- else
- if asc == "1" then
- results[#results+1] = rcall("ZRANGE", stateKey, rangeStart, rangeEnd)
- else
- results[#results+1] = rcall("ZREVRANGE", stateKey, rangeStart, rangeEnd)
- end
- end
- end
- return results
|