summaryrefslogtreecommitdiffhomepage
path: root/applications/luci-livestats/luasrc
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2008-10-18 21:51:44 +0000
committerJo-Philipp Wich <jow@openwrt.org>2008-10-18 21:51:44 +0000
commite39b2bff3f01f299201d6c394cbeb7e28e852758 (patch)
tree7df1567cb16ca486a442bd6df408dae913ad3e4a /applications/luci-livestats/luasrc
parent758c06df583f439f625d5a62688d291654234e5b (diff)
* luci/applications: add experimental realtime statistics
Diffstat (limited to 'applications/luci-livestats/luasrc')
-rw-r--r--applications/luci-livestats/luasrc/controller/livestats.lua25
-rw-r--r--applications/luci-livestats/luasrc/view/livestats/loadavg.htm44
-rw-r--r--applications/luci-livestats/luasrc/view/livestats/traffic.htm54
-rw-r--r--applications/luci-livestats/luasrc/view/livestats/wireless.htm30
4 files changed, 153 insertions, 0 deletions
diff --git a/applications/luci-livestats/luasrc/controller/livestats.lua b/applications/luci-livestats/luasrc/controller/livestats.lua
new file mode 100644
index 000000000..4494bbd4b
--- /dev/null
+++ b/applications/luci-livestats/luasrc/controller/livestats.lua
@@ -0,0 +1,25 @@
+--[[
+LuCI - Lua Configuration Interface
+
+Copyright 2008 Steven Barth <steven@midlink.org>
+Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+$Id: openvpn.lua 3549 2008-10-09 22:24:21Z jow $
+]]--
+
+module("luci.controller.livestats", package.seeall)
+
+function index()
+ require("luci.i18n")
+ luci.i18n.loadc("livestats")
+
+ entry( {"admin", "status", "wifistat"}, template("livestats/wireless"), luci.i18n.translate("livestat_wireless", "Live Wireless Statistics") ).i18n = "livestat"
+ entry( {"admin", "status", "trafstat"}, template("livestats/traffic"), luci.i18n.translate("livestat_traffic", "Live Traffic Statistics") ).i18n = "livestat"
+ entry( {"admin", "status", "loadavg"}, template("livestats/loadavg"), luci.i18n.translate("livestat_loadavg", "Live Load Statistics") ).i18n = "livestat"
+end
diff --git a/applications/luci-livestats/luasrc/view/livestats/loadavg.htm b/applications/luci-livestats/luasrc/view/livestats/loadavg.htm
new file mode 100644
index 000000000..a4e8fae00
--- /dev/null
+++ b/applications/luci-livestats/luasrc/view/livestats/loadavg.htm
@@ -0,0 +1,44 @@
+<%+header%>
+
+<!--[if IE]><script type="text/javascript" src="<%=resource%>/livestats/ExCanvas.js"></script><![endif]-->
+<script type="text/javascript" src="<%=resource%>/livestats/MochiKit.js"></script>
+<script type="text/javascript" src="<%=resource%>/livestats/JsonRpc.js"></script>
+<script type="text/javascript" src="<%=resource%>/livestats/PlotKit.js"></script>
+<script type="text/javascript" src="<%=resource%>/livestats/GraphRPC.js"></script>
+
+<script type="text/javascript">
+ PlotKit.Base.baseColors = function () {
+ var hexColor = MochiKit.Color.Color.fromHexString;
+ return [hexColor("#ff0000"),
+ hexColor("#ff6000"),
+ hexColor("#fff000"),
+ hexColor("#00ff00"),
+ hexColor("#00ff77"),
+ hexColor("#0090ff"),
+ hexColor("#000000")];
+ };
+
+ function initGraphs() {
+ var rpc = new GraphRPC(
+ document.getElementById('live_graphs'),
+ '<%=luci.dispatcher.build_url('rpc', 'sys')%>', 'loadavg',
+ 2000,
+
+ // Data sources
+ [ "1", "1 Minute Load", "2", "5 Minutes Load", "3", "15 Minutes Load" ],
+
+ // Graph layout options
+ { shouldFill: false, strokeColor: null,
+ strokeColorTransform: "asFillColor",
+ title: 'Average Load', strokeWidth: 1,
+ padding: { left: 70, right: 10, top: 10, bottom: 20 },
+ instances: [ false ] }
+ );
+ }
+
+ MochiKit.DOM.addLoadEvent(initGraphs);
+</script>
+
+<div id="live_graphs"></div>
+
+<%+footer%>
diff --git a/applications/luci-livestats/luasrc/view/livestats/traffic.htm b/applications/luci-livestats/luasrc/view/livestats/traffic.htm
new file mode 100644
index 000000000..d914fddc4
--- /dev/null
+++ b/applications/luci-livestats/luasrc/view/livestats/traffic.htm
@@ -0,0 +1,54 @@
+<%+header%>
+
+<!--[if IE]><script type="text/javascript" src="<%=resource%>/livestats/ExCanvas.js"></script><![endif]-->
+<script type="text/javascript" src="<%=resource%>/livestats/MochiKit.js"></script>
+<script type="text/javascript" src="<%=resource%>/livestats/JsonRpc.js"></script>
+<script type="text/javascript" src="<%=resource%>/livestats/PlotKit.js"></script>
+<script type="text/javascript" src="<%=resource%>/livestats/GraphRPC.js"></script>
+
+<%
+ local interfaces = { }
+ local uci = luci.model.uci.cursor_state()
+
+ uci:foreach("network", "interface",
+ function(s)
+ if s.ifname ~= "lo" then
+ table.insert( interfaces,
+ "'" .. ( s.ifname or s['.name'] ) .. "'"
+ )
+ end
+ end
+ )
+-%>
+
+<script type="text/javascript">
+ function initGraphs() {
+ var rpc = new GraphRPC(
+ document.getElementById('live_graphs'),
+ '<%=luci.dispatcher.build_url('rpc', 'sys')%>', 'net.deviceinfo',
+ 2000,
+
+ // Data sources
+ [ "1", "received Bytes/s", "9", "transmitted Bytes/s" ],
+
+ // Graph layout options
+ { shouldFill: false, strokeColor: null,
+ strokeColorTransform: "asFillColor",
+ title: 'Traffic on interface "%s"',
+ separateDS: true, strokeWidth: 0.5, height: 140,
+ padding: { left: 70, right: 10, top: 10, bottom: 20 },
+ instances: [ <%=table.concat(interfaces, ", ") %> ] },
+
+ // transform function
+ function(thisval, lastval) {
+ return ( ( thisval - lastval ) / 2 );
+ }
+ );
+ }
+
+ MochiKit.DOM.addLoadEvent(initGraphs);
+</script>
+
+<div id="live_graphs"></div>
+
+<%+footer%>
diff --git a/applications/luci-livestats/luasrc/view/livestats/wireless.htm b/applications/luci-livestats/luasrc/view/livestats/wireless.htm
new file mode 100644
index 000000000..2ee60139e
--- /dev/null
+++ b/applications/luci-livestats/luasrc/view/livestats/wireless.htm
@@ -0,0 +1,30 @@
+<%+header%>
+
+<!--[if IE]><script type="text/javascript" src="<%=resource%>/livestats/ExCanvas.js"></script><![endif]-->
+<script type="text/javascript" src="<%=resource%>/livestats/MochiKit.js"></script>
+<script type="text/javascript" src="<%=resource%>/livestats/JsonRpc.js"></script>
+<script type="text/javascript" src="<%=resource%>/livestats/PlotKit.js"></script>
+<script type="text/javascript" src="<%=resource%>/livestats/GraphRPC.js"></script>
+
+<script type="text/javascript">
+ function initGraphs() {
+ var rpc = new GraphRPC(
+ document.getElementById('live_graphs'),
+ '<%=luci.dispatcher.build_url('rpc', 'sys')%>', 'wifi.getiwconfig',
+ 1500,
+
+ // Data sources
+ [ "Noise level", null, "Signal level", null ],
+
+ // Graph layout options
+ { yAxis: [ 0, 150 ], title: 'Wifi Interface "%s": Signal and Noise',
+ padding: { left: 40, right: 10, top: 10, bottom: 20 } }
+ );
+ }
+
+ MochiKit.DOM.addLoadEvent(initGraphs);
+</script>
+
+<div id="live_graphs"></div>
+
+<%+footer%>