RTMP/Build/nginx/conf/EBLB/upstreamstatus.lua

95 lines
4.2 KiB
Lua

-- 0.3 changes: different layout better overview
local concat = table.concat
local upstream = require "ngx.upstream"
local get_servers = upstream.get_servers
local get_upstreams = upstream.get_upstreams
local us = get_upstreams()
local worker_pid = tostring(ngx.worker.pid())
ngx.print("<html><head><title>Upstream management page</title></head>\n")
ngx.print("<style type=\"text/css\">\n")
ngx.print(".smalltable, .smalltable TH\n")
ngx.print("{\n")
ngx.print("font-family:arial;\n")
ngx.print("font-size:8pt;\n")
ngx.print("}\n")
ngx.print(".smalltable TD\n")
ngx.print("{\n")
ngx.print("font-family:arial;\n")
ngx.print("font-size:8pt;\n")
ngx.print("width:25px;\n")
ngx.print("}\n")
ngx.print("</style>\n")
ngx.print("<body>\n")
for _, u in ipairs(us) do
ngx.say("<b>Peer status in upstream ", u, ", worker-PID: ",worker_pid,":</b><br>\n<table border=\"1\" width=\"100%\" CLASS=\"smalltable\">")
local srvs, err = upstream.get_primary_peers(u)
-- local srvs, err = get_servers(u)
local p_up = " style=\"background:green; color:white;\""
local p_down = " style=\"background:red; color:white;\""
local p_addr = " style=\"background:blue; color:white;\""
local p_name = " style=\"background:lightblue; color:white;\""
if not srvs then
ngx.say("failed to get servers in upstream ", u)
else
for _, srv in ipairs(srvs) do
local r_id = _ - 1
local l_state = 0
local l_first = 0
if r_id > 0 then l_first = 1 end
for k, v in pairs(srv) do
if k == "addr" then l_state = 1 -- which fields do we want to see?
elseif k == "server" then l_state = 1
elseif k == "fails" then l_state = 2
elseif k == "down" then l_state = 3
elseif k == "fail_timeout" then l_state = 2
elseif k == "weight" then l_state = 2
-- values: current_weight, weight, id, fail_timeout, fails, down, effective_weight, name, server, max_fails, addr
end
if l_state > 0 then
if l_first == 1 then ngx.print("<tr></tr>"); l_first = 0 end
ngx.print("<td style=\"vertical-align:middle\"")
-- if l_state == 2 then ngx.print(" CLASS=\"smalltable TD\"") end
ngx.print("><form action=\"/upstreamcontrol\" method=\"GET\">")
p_state = ""
if k == "server" then p_state = p_name end -- set a color for specific fields
if k == "addr" then p_state = p_addr end
if k == "down" then p_state = p_down end
if k == "down" and tostring(v) == "false" then p_state = p_up end
if k == "down" then
if tostring(v) == "true" then
vv = false
else
vv = true
end
end
local p_test = k.."</td><td style=\"vertical-align:middle\""
-- if l_state == 2 then p_test = p_test.." CLASS=\"smalltable TD\"" end
p_test = p_test.."><input type=\"text\" value=\""..tostring(v).."\" name=\""..k.."\""..p_state
if l_state == 2 then p_test = p_test.." maxlength=\"6\" size=\"7\"" end
if l_state == 3 then p_test = p_test.." maxlength=\"5\" size=\"5\"" end
p_test = p_test..">"
ngx.print(p_test)
ngx.print("<input type=\"hidden\" name=\"gui\" value=\"1\">")
ngx.print("<input type=\"hidden\" name=\"peer\" value=\"",r_id,"\">")
ngx.print("<input type=\"hidden\" name=\"stream\" value=\"",u,"\">")
if k == "down" then
if tostring(v) == "true" then
ngx.print("<input type=\"hidden\" name=\"vdown\" value=\"",tostring(vv),"\">")
ngx.print("<input type=\"submit\" value=\"Up\"></form></td>\n")
else
ngx.print("<input type=\"hidden\" name=\"vdown\" value=\"",tostring(vv),"\">")
ngx.print("<input type=\"submit\" value=\"Down\"></form></td>\n")
end
else
ngx.print("<input type=\"submit\" value=\"Change\"></form></td>\n")
end
end
l_state = 0
end
end
end
ngx.print("</table><br>")
end
ngx.print("</body></html>\n")