* luci/statistics: adept controller to new dispatcher requirements
[project/luci.git] / applications / luci-statistics / luasrc / controller / luci_statistics / luci_statistics.lua
1 module("luci.controller.luci_statistics.luci_statistics", package.seeall)
2
3 local fs   = require("luci.fs")
4 local tpl  = require("luci.template")
5 local rrd  = require("luci.statistics.rrdtool")
6 local data = require("luci.statistics.datatree").Instance()
7
8
9 function index()
10
11         function _entry( path, ... )
12                 local file = path[4] or path[3]
13                 if fs.isfile( "/usr/lib/collectd/" .. file .. ".so" ) then
14                         entry( path, ... )
15                 end
16         end
17
18
19         entry({"admin", "statistics"},                          call("statistics_index"),               "Statistiken",          80)
20         entry({"admin", "statistics", "collectd"},              cbi("luci_statistics/collectd"),        "Collectd",             10)
21
22         entry({"admin", "statistics", "output"},                call("statistics_outputplugins"),       "Ausgabeplugins",       20)
23         _entry({"admin", "statistics", "output", "rrdtool"},    cbi("luci_statistics/rrdtool"),         "RRDTool",              10)
24         _entry({"admin", "statistics", "output", "network"},    cbi("luci_statistics/network"),         "Netzwerk",             20)
25         _entry({"admin", "statistics", "output", "unixsock"},   cbi("luci_statistics/unixsock"),        "Unix Socket",          30)
26         _entry({"admin", "statistics", "output", "csv"},        cbi("luci_statistics/csv"),             "CSV",                  40)
27
28         entry({"admin", "statistics", "system"},                call("statistics_systemplugins"),       "Systemplugins",        30)
29         _entry({"admin", "statistics", "system", "exec"},       cbi("luci_statistics/exec"),            "Exec",                 10)
30         _entry({"admin", "statistics", "system", "email"},      cbi("luci_statistics/email"),           "E-Mail",               20)
31         _entry({"admin", "statistics", "system", "cpu"},        cbi("luci_statistics/cpu"),             "Prozessor",            30)
32         _entry({"admin", "statistics", "system", "df"},         cbi("luci_statistics/df"),              "Speicherplatz",        40)
33         _entry({"admin", "statistics", "system", "disk"},       cbi("luci_statistics/disk"),            "Datenträger",         50)
34         _entry({"admin", "statistics", "system", "irq"},        cbi("luci_statistics/irq"),             "Interrupts",           60)
35         _entry({"admin", "statistics", "system", "processes"},  cbi("luci_statistics/processes"),       "Prozesse",             70)
36
37         entry({"admin", "statistics", "network"},               call("statistics_networkplugins"),      "Netzwerkplugins",      40)
38         _entry({"admin", "statistics", "network", "interface"}, cbi("luci_statistics/interface"),       "Schnittstellen",       10)
39         _entry({"admin", "statistics", "network", "netlink"},   cbi("luci_statistics/netlink"),         "Netlink",              20)
40         _entry({"admin", "statistics", "network", "iptables"},  cbi("luci_statistics/iptables"),        "Firewall",             30)
41         _entry({"admin", "statistics", "network", "tcpconns"},  cbi("luci_statistics/tcpconns"),        "Verbindungen",         40)
42         _entry({"admin", "statistics", "network", "ping"},      cbi("luci_statistics/ping"),            "Ping",                 50)
43         _entry({"admin", "statistics", "network", "dns"},       cbi("luci_statistics/dns"),             "DNS",                  60)
44
45         
46         -- public views
47         entry({"freifunk", "statistics"},                       call("statistics_index"),               "Statistiken",          80)
48         
49         for i, plugin in ipairs( data:plugins() ) do
50                 _entry({"freifunk", "statistics", plugin},      call("statistics_render"),              plugin,                  i)
51         end
52 end
53
54
55 function statistics_index()
56         tpl.render("admin_statistics/index")
57 end
58
59 function statistics_outputplugins()
60         plugins = {
61                 rrdtool="RRDTool",
62                 network="Netzwerk",
63                 unixsock="Unix Socket",
64                 csv="CSV"
65         }
66
67         tpl.render("admin_statistics/outputplugins", {plugins=plugins})
68 end
69
70 function statistics_systemplugins()
71         plugins = {
72                 exec="Exec",
73                 email="E-Mail",
74                 disk="Datenträger",
75                 irq="Interrupts",
76                 processes="Prozesse"
77         }
78
79         tpl.render("admin_statistics/systemplugins", {plugins=plugins})
80 end
81
82 function statistics_networkplugins()
83         plugins = {
84                 interface="Schnittstellen",
85                 netlink="Netlink",
86                 iptables="Firewall",
87                 tcpconns="Verbindungen",
88                 ping="Ping",
89                 dns="DNS"
90         }
91
92         tpl.render("admin_statistics/networkplugins", {plugins=plugins})
93 end
94
95
96 function statistics_render()
97         local plugin = luci.dispatcher.request[3]
98         local images = { }
99
100         for i, inst in ipairs( data:plugin_instances( plugin ) ) do
101                 local graph = rrd.Graph()
102                 for i, img in ipairs( graph:render( "OpenWrt", plugin, inst ) ) do
103                         table.insert( images, img )
104                 end
105         end
106
107         tpl.render("public_statistics/graph", { images=images, plugin=plugin } )
108 end