diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 18:24:20 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 18:24:20 +0000 |
commit | 483eb2f56657e8e7f419ab1a4fab8dce9ade8609 (patch) | |
tree | e5d88d25d870d5dedacb6bbdbe2a966086a0a5cf /src/civetweb/test/ws_status.lua | |
parent | Initial commit. (diff) | |
download | ceph-483eb2f56657e8e7f419ab1a4fab8dce9ade8609.tar.xz ceph-483eb2f56657e8e7f419ab1a4fab8dce9ade8609.zip |
Adding upstream version 14.2.21.upstream/14.2.21upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/civetweb/test/ws_status.lua')
-rw-r--r-- | src/civetweb/test/ws_status.lua | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/src/civetweb/test/ws_status.lua b/src/civetweb/test/ws_status.lua new file mode 100644 index 00000000..a19505b2 --- /dev/null +++ b/src/civetweb/test/ws_status.lua @@ -0,0 +1,137 @@ +if mg.lua_type ~= "websocket" then + mg.write("HTTP/1.0 200 OK\r\n") + mg.write("Connection: close\r\n") + mg.write("\r\n") + mg.write("<!DOCTYPE HTML>\r\n") + mg.write("<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n") + mg.write("<head>\r\n") + mg.write("<meta charset=\"UTF-8\"></meta>\r\n") + mg.write("<title>Server stats</title>\r\n") + mg.write("</head>\r\n") + mg.write("<body onload=\"load()\">\r\n") + mg.write([====[ + <script type="text/javascript"> + + var connection; + var data_field; + + function webSockKeepAlive() { + if (keepAlive) { + connection.send('Ok'); + setTimeout("webSockKeepAlive()", 10000); + } + } + + function load() { + var wsproto = (location.protocol === 'https:') ? "wss:" : "ws:"; + connection = new WebSocket(wsproto + "//" + window.location.host + window.location.pathname); + data_field = document.getElementById('data'); + + data_field.innerHTML = "wait for data"; + + use_keepAlive = true; + + connection.onopen = function () { + keepAlive = use_keepAlive; + webSockKeepAlive(); + }; + + // Log errors + connection.onerror = function (error) { + keepAlive = false; + alert("WebSocket error"); + connection.close(); + }; + + // Log messages from the server + connection.onmessage = function (e) { + data_field.innerHTML = e.data; + }; + } + +</script> +]====]) + + mg.write("<div id='data'>Wait for page load</div>\r\n") + mg.write("</body>\r\n") + mg.write("</html>\r\n") + return +end + + +function table.count(tab) + local count = 0 + for _ in pairs(tab) do + count = count + 1 + end + return count +end + + +-- table of all active connection +allConnections = {} +connCount = table.count(allConnections) + + +-- function to get a client identification string +function who(tab) + local ri = allConnections[tab.client].request_info + return ri.remote_addr .. ":" .. ri.remote_port +end + +-- Callback to accept or reject a connection +function open(tab) + allConnections[tab.client] = tab + connCount = table.count(allConnections) + return true -- return true to accept the connection +end + +-- Callback for "Websocket ready" +function ready(tab) + senddata() + return true -- return true to keep the connection open +end + +-- Callback for "Websocket received data" +function data(tab) + senddata() + return true -- return true to keep the connection open +end + +-- Callback for "Websocket is closing" +function close(tab) + allConnections[tab.client] = nil + connCount = table.count(allConnections) +end + +function senddata() + local date = os.date('*t'); + + collectgarbage("collect"); -- Avoid adding uncollected Lua memory from this state + + mg.write(string.format([[ +{"Time": "%u:%02u:%02u", + "Date": "%04u-%02u-%02u", + "Context": %s, + "Common": %s, + "System": \"%s\", + "ws_status": {"Memory": %u, "Connections": %u} +}]], +date.hour, date.min, date.sec, +date.year, date.month, date.day, +mg.get_info("context"), +mg.get_info("common"), +mg.get_info("system"), +collectgarbage("count")*1024, +connCount +)); + +end + +function timer() + senddata() + mg.set_timeout("timer()", 1) +end + +mg.set_timeout("timer()", 1) + |