summaryrefslogtreecommitdiffstats
path: root/src/civetweb/test/ws_status.lua
diff options
context:
space:
mode:
Diffstat (limited to 'src/civetweb/test/ws_status.lua')
-rw-r--r--src/civetweb/test/ws_status.lua137
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)
+