2023-06-06 09:23:53 +02:00
|
|
|
local sleep_secs=15
|
|
|
|
|
|
|
|
local args = table.pack(...)
|
|
|
|
if args[1] ~= nil then sleep_secs = args[1] end
|
|
|
|
|
|
|
|
function getmax(t)
|
2022-10-23 16:37:53 +02:00
|
|
|
local tmpvalue = 100000
|
|
|
|
local svname
|
|
|
|
local value
|
|
|
|
|
|
|
|
for k,v in pairs(t) do
|
|
|
|
if v < tmpvalue then
|
|
|
|
svname = k
|
|
|
|
value = v
|
|
|
|
end
|
2023-06-06 09:23:53 +02:00
|
|
|
|
2022-10-23 16:37:53 +02:00
|
|
|
tmpvalue = v
|
|
|
|
end
|
2023-06-06 09:23:53 +02:00
|
|
|
|
2022-10-23 16:37:53 +02:00
|
|
|
return svname, value
|
|
|
|
end
|
|
|
|
|
2023-06-06 09:23:53 +02:00
|
|
|
function arrange_backends()
|
|
|
|
local try = 0
|
|
|
|
local lastconns = 0
|
|
|
|
|
2022-10-23 16:37:53 +02:00
|
|
|
while true do
|
2023-06-06 09:23:53 +02:00
|
|
|
if lastconns == core.get_info()["CumConns"] then
|
|
|
|
try = try+1
|
|
|
|
end
|
|
|
|
|
2022-10-23 16:37:53 +02:00
|
|
|
for _, backend in pairs(core.backends) do
|
2022-11-08 11:04:39 +01:00
|
|
|
local results = {}
|
2022-10-23 16:37:53 +02:00
|
|
|
for n,server in pairs(backend.servers) do
|
2023-06-06 09:23:53 +02:00
|
|
|
if server:get_stats()["check_status"] ~= nil
|
|
|
|
and server:get_stats()["status"] == "UP"
|
|
|
|
and server:get_stats()["bck"] == 0 then
|
2022-11-08 11:04:39 +01:00
|
|
|
if string.find(server:get_stats()["check_status"],"OK") ~= nil then
|
|
|
|
local svname = server:get_stats()["svname"]
|
|
|
|
local latency = server:get_stats()["check_duration"]
|
|
|
|
results[svname] = latency
|
|
|
|
end
|
2022-10-23 16:37:53 +02:00
|
|
|
end
|
|
|
|
end
|
2022-11-08 11:04:39 +01:00
|
|
|
|
2022-10-23 16:37:53 +02:00
|
|
|
local b,c = getmax(results)
|
|
|
|
if b ~= nil then
|
|
|
|
for n,server in pairs(backend.servers) do
|
|
|
|
if b == server.name then
|
|
|
|
server:set_weight("10")
|
|
|
|
else
|
|
|
|
server:set_weight("1")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2023-06-06 09:23:53 +02:00
|
|
|
|
|
|
|
lastconns = core.get_info()["CumConns"]
|
|
|
|
|
|
|
|
if try == 10 then
|
|
|
|
local msg = "Worker with pid ".. core.get_info()["Pid"] .. " exited for arrange_backends task"
|
|
|
|
print(msg)
|
|
|
|
core.done(msg)
|
|
|
|
end
|
|
|
|
|
|
|
|
core.sleep(sleep_secs)
|
2022-10-23 16:37:53 +02:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
core.register_task(arrange_backends)
|