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