local 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

local function arrange_backends()
  while true do
    for _, backend in pairs(core.backends) do
      local results = {}
      for n,server in pairs(backend.servers) do
        if server:get_stats()["check_status"] ~= nil 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
    core.msleep(1000)
  end
end

core.register_task(arrange_backends)