* luci/statistics: implement timespan selection in public interface
This commit is contained in:
parent
56a23c609c
commit
71449d76e7
4 changed files with 39 additions and 18 deletions
|
@ -1,12 +1,8 @@
|
||||||
module("luci.controller.luci_statistics.luci_statistics", package.seeall)
|
module("luci.controller.luci_statistics.luci_statistics", package.seeall)
|
||||||
|
|
||||||
require("luci.fs")
|
|
||||||
require("luci.i18n")
|
|
||||||
require("luci.template")
|
|
||||||
|
|
||||||
|
|
||||||
function index()
|
function index()
|
||||||
|
|
||||||
|
require("luci.fs")
|
||||||
require("luci.i18n")
|
require("luci.i18n")
|
||||||
require("luci.statistics.datatree")
|
require("luci.statistics.datatree")
|
||||||
|
|
||||||
|
@ -62,17 +58,23 @@ function index()
|
||||||
_entry({"admin", "statistics", "network", "dns"}, cbi("luci_statistics/dns"), _i18n("dns"), 60)
|
_entry({"admin", "statistics", "network", "dns"}, cbi("luci_statistics/dns"), _i18n("dns"), 60)
|
||||||
_entry({"admin", "statistics", "network", "wireless"}, cbi("luci_statistics/wireless"), _i18n("wireless"), 70)
|
_entry({"admin", "statistics", "network", "wireless"}, cbi("luci_statistics/wireless"), _i18n("wireless"), 70)
|
||||||
|
|
||||||
|
|
||||||
-- public views
|
-- public views
|
||||||
entry({"freifunk", "statistics"}, call("statistics_index"), "Statistiken", 80).i18n = "statistics"
|
entry({"freifunk", "statistics"}, call("statistics_index"), "Statistiken", 80).i18n = "statistics"
|
||||||
|
|
||||||
|
local vars = luci.http.formvalues()
|
||||||
|
local span = vars.timespan or nil
|
||||||
|
|
||||||
for i, plugin in ipairs( tree:plugins() ) do
|
for i, plugin in ipairs( tree:plugins() ) do
|
||||||
|
|
||||||
-- get plugin instances
|
-- get plugin instances
|
||||||
local instances = tree:plugin_instances( plugin )
|
local instances = tree:plugin_instances( plugin )
|
||||||
|
|
||||||
-- plugin menu entry
|
-- plugin menu entry
|
||||||
_entry( { "freifunk", "statistics", plugin }, call("statistics_render"), _i18n( plugin ), i )
|
entry(
|
||||||
|
{ "freifunk", "statistics", plugin },
|
||||||
|
call("statistics_render"), _i18n( plugin ), i
|
||||||
|
).query = { timespan = span }
|
||||||
|
|
||||||
-- if more then one instance is found then generate submenu
|
-- if more then one instance is found then generate submenu
|
||||||
if #instances > 1 then
|
if #instances > 1 then
|
||||||
|
@ -81,13 +83,12 @@ function index()
|
||||||
entry(
|
entry(
|
||||||
{ "freifunk", "statistics", plugin, inst },
|
{ "freifunk", "statistics", plugin, inst },
|
||||||
call("statistics_render"), inst, j
|
call("statistics_render"), inst, j
|
||||||
)
|
).query = { timespan = span }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function statistics_index()
|
function statistics_index()
|
||||||
luci.template.render("admin_statistics/index")
|
luci.template.render("admin_statistics/index")
|
||||||
end
|
end
|
||||||
|
@ -127,9 +128,14 @@ function statistics_render( tree )
|
||||||
|
|
||||||
require("luci.statistics.rrdtool")
|
require("luci.statistics.rrdtool")
|
||||||
require("luci.template")
|
require("luci.template")
|
||||||
|
require("luci.model.uci")
|
||||||
|
|
||||||
local req = luci.dispatcher.request
|
local vars = luci.http.formvalues()
|
||||||
local graph = luci.statistics.rrdtool.Graph()
|
local req = luci.dispatcher.request
|
||||||
|
local uci = luci.model.uci.Session()
|
||||||
|
local spans = luci.util.split( uci:get( "luci_statistics", "collectd_rrdtool", "RRATimespans" ), "%s+", nil, true )
|
||||||
|
local span = vars.timespan or uci:get( "luci_statistics", "rrdtool", "default_timespan" ) or spans[1]
|
||||||
|
local graph = luci.statistics.rrdtool.Graph( luci.util.parse_units( span ) )
|
||||||
|
|
||||||
local plugin = req[3]
|
local plugin = req[3]
|
||||||
local instances = { req[4] }
|
local instances = { req[4] }
|
||||||
|
@ -168,5 +174,10 @@ function statistics_render( tree )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
luci.template.render("public_statistics/graph", { images=images, plugin=plugin } )
|
luci.template.render( "public_statistics/graph", {
|
||||||
|
images = images,
|
||||||
|
plugin = plugin,
|
||||||
|
timespans = spans,
|
||||||
|
current_timespan = span
|
||||||
|
} )
|
||||||
end
|
end
|
||||||
|
|
|
@ -22,6 +22,7 @@ stat_statistics = "Statistics"
|
||||||
stat_systemplugins = "System plugins"
|
stat_systemplugins = "System plugins"
|
||||||
stat_networkplugins = "Network plugins"
|
stat_networkplugins = "Network plugins"
|
||||||
stat_outputplugins = "Output plugins"
|
stat_outputplugins = "Output plugins"
|
||||||
|
stat_showtimespan = "Display timespan »"
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
|
@ -26,9 +26,9 @@ function Graph.__init__( self, timespan, opts )
|
||||||
self.i18n = luci.statistics.i18n.Instance( self )
|
self.i18n = luci.statistics.i18n.Instance( self )
|
||||||
|
|
||||||
-- options
|
-- options
|
||||||
|
opts.timespan = timespan or sections.rrdtool.default_timespan or 900
|
||||||
opts.rrasingle = opts.rrasingle or ( sections.collectd_rrdtool.RRASingle ~= "0" )
|
opts.rrasingle = opts.rrasingle or ( sections.collectd_rrdtool.RRASingle ~= "0" )
|
||||||
opts.host = opts.host or sections.collectd.Hostname or luci.sys.hostname()
|
opts.host = opts.host or sections.collectd.Hostname or luci.sys.hostname()
|
||||||
opts.timespan = opts.timespan or sections.rrdtool.default_timespan or 900
|
|
||||||
opts.width = opts.width or sections.rrdtool.image_width or 400
|
opts.width = opts.width or sections.rrdtool.image_width or 400
|
||||||
opts.rrdpath = opts.rrdpath or sections.collectd_rrdtool.DataDir or "/tmp/rrd"
|
opts.rrdpath = opts.rrdpath or sections.collectd_rrdtool.DataDir or "/tmp/rrd"
|
||||||
opts.imgpath = opts.imgpath or sections.rrdtool.image_path or "/tmp/rrdimg"
|
opts.imgpath = opts.imgpath or sections.rrdtool.image_path or "/tmp/rrdimg"
|
||||||
|
@ -63,7 +63,7 @@ function Graph.mkrrdpath( self, ... )
|
||||||
end
|
end
|
||||||
|
|
||||||
function Graph.mkpngpath( self, ... )
|
function Graph.mkpngpath( self, ... )
|
||||||
return string.format( "%s/%s.png", self.opts.imgpath, self:_mkpath( ... ) )
|
return string.format( "%s/%s.%i.png", self.opts.imgpath, self:_mkpath( ... ), self.opts.timespan )
|
||||||
end
|
end
|
||||||
|
|
||||||
function Graph.strippngpath( self, path )
|
function Graph.strippngpath( self, path )
|
||||||
|
@ -100,7 +100,7 @@ function Graph._rrdtool( self, def, rrd )
|
||||||
-- construct commandline from def stack
|
-- construct commandline from def stack
|
||||||
for i, opt in ipairs(def) do
|
for i, opt in ipairs(def) do
|
||||||
opt = opt .. "" -- force string
|
opt = opt .. "" -- force string
|
||||||
|
|
||||||
if rrd then
|
if rrd then
|
||||||
opt = opt:gsub( "{file}", rrd )
|
opt = opt:gsub( "{file}", rrd )
|
||||||
end
|
end
|
||||||
|
@ -177,7 +177,7 @@ function Graph._generic( self, opts, plugin, plugin_instance, dtype, index )
|
||||||
|
|
||||||
-- is subsequent source without overlay: source_stk = source_nnl + previous_stk
|
-- is subsequent source without overlay: source_stk = source_nnl + previous_stk
|
||||||
else
|
else
|
||||||
-- create cdef statement
|
-- create cdef statement
|
||||||
_tif( _args, "CDEF:%s_stk=%s_nnl,%s_stk,+", source.sname, source.sname, prev )
|
_tif( _args, "CDEF:%s_stk=%s_nnl,%s_stk,+", source.sname, source.sname, prev )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -574,7 +574,7 @@ function Graph.render( self, plugin, plugin_instance )
|
||||||
local png = self:mkpngpath( plugin, plugin_instance, dtype, inst )
|
local png = self:mkpngpath( plugin, plugin_instance, dtype, inst )
|
||||||
local rrd = self:mkrrdpath( plugin, plugin_instance, dtype, inst )
|
local rrd = self:mkrrdpath( plugin, plugin_instance, dtype, inst )
|
||||||
local args = { png, "-t", title }
|
local args = { png, "-t", title }
|
||||||
|
|
||||||
for i, o in ipairs(self.defs.definitions[dtype]) do
|
for i, o in ipairs(self.defs.definitions[dtype]) do
|
||||||
table.insert( args, o )
|
table.insert( args, o )
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,6 +2,15 @@
|
||||||
|
|
||||||
<h1>Statistik</h1>
|
<h1>Statistik</h1>
|
||||||
|
|
||||||
|
<form action="" method="get">
|
||||||
|
<select name="timespan">
|
||||||
|
<% for i, span in ipairs(timespans) do %>
|
||||||
|
<option<% if span == current_timespan then %> selected="selected"<% end %>><%=span%></option>
|
||||||
|
<% end %>
|
||||||
|
</select>
|
||||||
|
<input type="submit" name="submit" value="<%:stat_showtimespan Display timespan »%>" />
|
||||||
|
</form>
|
||||||
|
|
||||||
<% for i, img in ipairs(images) do %>
|
<% for i, img in ipairs(images) do %>
|
||||||
<img src="/rrdimg/<%=img%>" />
|
<img src="/rrdimg/<%=img%>" />
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
Loading…
Reference in a new issue