mirror of
https://github.com/pomerium/pomerium.git
synced 2025-04-30 19:06:33 +02:00
28 lines
659 B
Lua
28 lines
659 B
Lua
-- ARGV = [current time in seconds, ttl in seconds, services ...]
|
|
local current_time = ARGV[1]
|
|
local ttl = ARGV[2]
|
|
local changed = false
|
|
|
|
-- update the service list
|
|
for i = 3, #ARGV, 1 do
|
|
redis.call('HSET', KEYS[1], ARGV[i], current_time + ttl)
|
|
changed = true
|
|
end
|
|
|
|
-- retrieve all the services, removing any that have expired
|
|
local svcs = {}
|
|
local kvs = redis.call('HGETALL', KEYS[1])
|
|
for i = 1, #kvs, 2 do
|
|
if kvs[i + 1] < current_time then
|
|
redis.call('HDEL', KEYS[1], kvs[i])
|
|
changed = true
|
|
else
|
|
table.insert(svcs, kvs[i])
|
|
end
|
|
end
|
|
|
|
if changed then
|
|
redis.call('PUBLISH', KEYS[2], current_time)
|
|
end
|
|
|
|
return svcs
|