summaryrefslogtreecommitdiffhomepage
path: root/applications/luci-statistics/src/controller/luci_statistics/luci_statistics.lua
blob: a30db7c09c6908cc0ae3328bd1294164614618b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
module("ffluci.controller.luci_statistics.luci_statistics", package.seeall)

local fs   = require("ffluci.fs")
local tpl  = require("ffluci.template")
local rrd  = require("ffluci.statistics.rrdtool")
local data = require("ffluci.statistics.datatree").Instance()


function _entry( path, ... )
	local file = path[4] or path[3]
	if fs.isfile( "/usr/lib/collectd/" .. file .. ".so" ) then
		entry( path, ... )
	end
end


function index()
	entry({"admin", "statistics"},				statistics_index,			"Statistiken",		80)
	entry({"admin", "statistics", "collectd"},		cbi("luci_statistics/collectd"),	"Collectd",		10)

	entry({"admin", "statistics", "output"},		statistics_outputplugins,		"Ausgabeplugins",	20)
	_entry({"admin", "statistics", "output", "rrdtool"},	cbi("luci_statistics/rrdtool"),		"RRDTool",		10)
	_entry({"admin", "statistics", "output", "network"},	cbi("luci_statistics/network"),		"Netzwerk",		20)
	_entry({"admin", "statistics", "output", "unixsock"},	cbi("luci_statistics/unixsock"),	"Unix Socket",		30)
	_entry({"admin", "statistics", "output", "csv"},	cbi("luci_statistics/csv"),		"CSV",			40)

	entry({"admin", "statistics", "system"},		statistics_systemplugins,		"Systemplugins",	30)
	_entry({"admin", "statistics", "system", "exec"},	cbi("luci_statistics/exec"),		"Exec",			10)
	_entry({"admin", "statistics", "system", "email"},	cbi("luci_statistics/email"),		"E-Mail",		20)
	_entry({"admin", "statistics", "system", "cpu"},	cbi("luci_statistics/cpu"),		"Prozessor",		30)
	_entry({"admin", "statistics", "system", "df"},		cbi("luci_statistics/df"),		"Speicherplatz",	40)
	_entry({"admin", "statistics", "system", "disk"},	cbi("luci_statistics/disk"),		"Datenträger",		50)
	_entry({"admin", "statistics", "system", "irq"},	cbi("luci_statistics/irq"),		"Interrupts",		60)
	_entry({"admin", "statistics", "system", "processes"},	cbi("luci_statistics/processes"),	"Prozesse",		70)

	entry({"admin", "statistics", "network"},		statistics_networkplugins,		"Netzwerkplugins",	40)
	_entry({"admin", "statistics", "network", "interface"},	cbi("luci_statistics/interface"),	"Schnittstellen",	10)
	_entry({"admin", "statistics", "network", "netlink"},	cbi("luci_statistics/netlink"),		"Netlink",		20)
	_entry({"admin", "statistics", "network", "iptables"},	cbi("luci_statistics/iptables"),	"Firewall",		30)
	_entry({"admin", "statistics", "network", "tcpconns"},	cbi("luci_statistics/tcpconns"),	"Verbindungen",		40)
	_entry({"admin", "statistics", "network", "ping"},	cbi("luci_statistics/ping"),		"Ping",			50)
	_entry({"admin", "statistics", "network", "dns"},	cbi("luci_statistics/dns"),		"DNS",			60)

	
	-- public views
	entry({"freifunk", "statistics"},			statistics_index,			"Statistiken",		80)
	
	for i, plugin in ipairs( data:plugins() ) do
		_entry({"freifunk", "statistics", plugin},	statistics_render,			plugin,		    	 i)
	end
end


function statistics_index()
	tpl.render("admin_statistics/index")
end

function statistics_outputplugins()
	plugins = {
		rrdtool="RRDTool",
		network="Netzwerk",
		unixsock="Unix Socket",
		csv="CSV"
	}

	tpl.render("admin_statistics/outputplugins", {plugins=plugins})
end

function statistics_systemplugins()
	plugins = {
		exec="Exec",
		email="E-Mail",
		disk="Datenträger",
		irq="Interrupts",
		processes="Prozesse"
	}

	tpl.render("admin_statistics/systemplugins", {plugins=plugins})
end

function statistics_networkplugins()
	plugins = {
		interface="Schnittstellen",
		netlink="Netlink",
		iptables="Firewall",
		tcpconns="Verbindungen",
		ping="Ping",
		dns="DNS"
	}

	tpl.render("admin_statistics/networkplugins", {plugins=plugins})
end


function statistics_render()
	local plugin = ffluci.dispatcher.request[3]
	local images = { }

	for i, inst in ipairs( data:plugin_instances( plugin ) ) do
		local graph = rrd.Graph()
		for i, img in ipairs( graph:render( "OpenWrt", plugin, inst ) ) do
			table.insert( images, img )
		end
	end

	tpl.render("public_statistics/graph", { images=images, plugin=plugin } )
end