local sleep_secs=15 local args = table.pack(...) if args[1] ~= nil then sleep_secs = args[1] end function getmax(t) local tmpvalue = 100000 local svname local value for k,v in pairs(t) do if v < tmpvalue then svname = k value = v end tmpvalue = v end return svname, value end function arrange_backends() local try = 0 local lastconns = 0 while true do if lastconns == core.get_info()["CumConns"] then try = try+1 end for _, backend in pairs(core.backends) do local results = {} for n,server in pairs(backend.servers) do if server:get_stats()["check_status"] ~= nil and server:get_stats()["status"] == "UP" and server:get_stats()["bck"] == 0 then 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 end end 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 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) end end core.register_task(arrange_backends)