* luci/statistics: implement timespan selection in public interface
authorJo-Philipp Wich <jow@openwrt.org>
Tue, 3 Jun 2008 19:05:34 +0000 (19:05 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Tue, 3 Jun 2008 19:05:34 +0000 (19:05 +0000)
applications/luci-statistics/luasrc/controller/luci_statistics/luci_statistics.lua
applications/luci-statistics/luasrc/i18n/statistics.en
applications/luci-statistics/luasrc/statistics/rrdtool.lua
applications/luci-statistics/luasrc/view/public_statistics/graph.htm

index 7fdedfbece37d4d7f992b4861c5c2c182a4e7c9f..c621ee063351b0f5e1a6ef621e2793014e051268 100644 (file)
@@ -1,12 +1,8 @@
 module("luci.controller.luci_statistics.luci_statistics", package.seeall)
 
-require("luci.fs")
-require("luci.i18n")
-require("luci.template")
-
-
 function index()
 
+       require("luci.fs")
        require("luci.i18n")
        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", "wireless"},  cbi("luci_statistics/wireless"),        _i18n("wireless"),      70)
 
-       
+
        -- public views
        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
 
                -- get plugin instances
                local instances = tree:plugin_instances( plugin )
 
                -- 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 #instances > 1 then
@@ -81,13 +83,12 @@ function index()
                                entry(
                                        { "freifunk", "statistics", plugin, inst },
                                        call("statistics_render"), inst, j
-                               )
+                               ).query = { timespan = span }
                        end
-               end                     
+               end
        end
 end
 
-
 function statistics_index()
        luci.template.render("admin_statistics/index")
 end
@@ -127,9 +128,14 @@ function statistics_render( tree )
 
        require("luci.statistics.rrdtool")
        require("luci.template")
+       require("luci.model.uci")
 
-       local req   = luci.dispatcher.request 
-       local graph = luci.statistics.rrdtool.Graph()
+       local vars  = luci.http.formvalues()
+       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 instances = { req[4] }
@@ -168,5 +174,10 @@ function statistics_render( tree )
                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
index 84f1c0e230927e97103927c0d45db0f109f44977..046fea20c4511c0a80026d0068666e6ee7317a5d 100644 (file)
@@ -22,6 +22,7 @@ stat_statistics           = "Statistics"
 stat_systemplugins  = "System plugins"
 stat_networkplugins = "Network plugins"
 stat_outputplugins  = "Output plugins"
+stat_showtimespan   = "Display timespan &raquo;"
 
 
 --
index 85741a4b7d2e99eea5580212de0529db89546514..c2ac7a8e64590d64a4f3148239cce4e5fe6dbe29 100644 (file)
@@ -26,9 +26,9 @@ function Graph.__init__( self, timespan, opts )
        self.i18n   = luci.statistics.i18n.Instance( self )
 
        -- options
+       opts.timespan  = timespan       or sections.rrdtool.default_timespan or 900
        opts.rrasingle = opts.rrasingle or ( sections.collectd_rrdtool.RRASingle ~= "0" )
        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.rrdpath   = opts.rrdpath   or sections.collectd_rrdtool.DataDir or "/tmp/rrd"
        opts.imgpath   = opts.imgpath   or sections.rrdtool.image_path       or "/tmp/rrdimg"
@@ -63,7 +63,7 @@ function Graph.mkrrdpath( self, ... )
 end
 
 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
 
 function Graph.strippngpath( self, path )
@@ -100,7 +100,7 @@ function Graph._rrdtool( self, def, rrd )
        -- construct commandline from def stack
        for i, opt in ipairs(def) do
                opt = opt .. ""    -- force string
-               
+
                if rrd then
                        opt = opt:gsub( "{file}", rrd )
                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
                else
-                       -- create cdef statement                                
+                       -- create cdef statement
                        _tif( _args, "CDEF:%s_stk=%s_nnl,%s_stk,+", source.sname, source.sname, prev )
                end
 
@@ -574,7 +574,7 @@ function Graph.render( self, plugin, plugin_instance )
                                                local png   = self:mkpngpath( plugin, plugin_instance, dtype, inst )
                                                local rrd   = self:mkrrdpath( plugin, plugin_instance, dtype, inst )
                                                local args  = { png, "-t", title }
-                                               
+
                                                for i, o in ipairs(self.defs.definitions[dtype]) do
                                                        table.insert( args, o )
                                                end
index 33678bdcb66d54ce9fd042c20784cc9912f951c0..f3be3ab8a17db25f247a67f2e96c511c913dfb48 100644 (file)
@@ -2,6 +2,15 @@
 
 <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 &raquo;%>" />
+</form>
+
 <% for i, img in ipairs(images) do %>
        <img src="/rrdimg/<%=img%>" />
 <% end %>