getRanges-1.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. const content = `--[[
  2. Get job ids per provided states
  3. Input:
  4. KEYS[1] 'prefix'
  5. ARGV[1] start
  6. ARGV[2] end
  7. ARGV[3] asc
  8. ARGV[4...] types
  9. ]]
  10. local rcall = redis.call
  11. local prefix = KEYS[1]
  12. local rangeStart = tonumber(ARGV[1])
  13. local rangeEnd = tonumber(ARGV[2])
  14. local asc = ARGV[3]
  15. local results = {}
  16. local function getRangeInList(listKey, asc, rangeStart, rangeEnd, results)
  17. if asc == "1" then
  18. local modifiedRangeStart
  19. local modifiedRangeEnd
  20. if rangeStart == -1 then
  21. modifiedRangeStart = 0
  22. else
  23. modifiedRangeStart = -(rangeStart + 1)
  24. end
  25. if rangeEnd == -1 then
  26. modifiedRangeEnd = 0
  27. else
  28. modifiedRangeEnd = -(rangeEnd + 1)
  29. end
  30. results[#results+1] = rcall("LRANGE", listKey,
  31. modifiedRangeEnd,
  32. modifiedRangeStart)
  33. else
  34. results[#results+1] = rcall("LRANGE", listKey, rangeStart, rangeEnd)
  35. end
  36. end
  37. for i = 4, #ARGV do
  38. local stateKey = prefix .. ARGV[i]
  39. if ARGV[i] == "wait" or ARGV[i] == "paused" then
  40. -- Markers in waitlist DEPRECATED in v5: Remove in v6.
  41. local marker = rcall("LINDEX", stateKey, -1)
  42. if marker and string.sub(marker, 1, 2) == "0:" then
  43. local count = rcall("LLEN", stateKey)
  44. if count > 1 then
  45. rcall("RPOP", stateKey)
  46. getRangeInList(stateKey, asc, rangeStart, rangeEnd, results)
  47. else
  48. results[#results+1] = {}
  49. end
  50. else
  51. getRangeInList(stateKey, asc, rangeStart, rangeEnd, results)
  52. end
  53. elseif ARGV[i] == "active" then
  54. getRangeInList(stateKey, asc, rangeStart, rangeEnd, results)
  55. else
  56. if asc == "1" then
  57. results[#results+1] = rcall("ZRANGE", stateKey, rangeStart, rangeEnd)
  58. else
  59. results[#results+1] = rcall("ZREVRANGE", stateKey, rangeStart, rangeEnd)
  60. end
  61. end
  62. end
  63. return results
  64. `;
  65. export const getRanges = {
  66. name: 'getRanges',
  67. content,
  68. keys: 1,
  69. };
  70. //# sourceMappingURL=getRanges-1.js.map