add support for splash leases plugin
[project/luci.git] / applications / luci-statistics / root / usr / bin / stat-genconfig
index 052093b..86773b4 100755 (executable)
@@ -9,7 +9,7 @@ Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at
 
-        http://www.apache.org/licenses/LICENSE-2.0
+               http://www.apache.org/licenses/LICENSE-2.0
 
 $Id$
 
@@ -21,10 +21,15 @@ require("luci.sys.iptparser")
 require("luci.util")
 
 local ipt = luci.sys.iptparser.IptParser()
-local uci = luci.model.uci.Session()
-local sections, names = uci:sections( "luci_statistics" )
+local uci = luci.model.uci.cursor()
+local sections = uci:get_all( "luci_statistics" )
 
 
+function print(...)
+       nixio.stdout:write(...)
+       nixio.stdout:write("\n")
+end
+
 function section( plugin )
 
        local config = sections[ "collectd_" .. plugin ] or sections["collectd"]
@@ -61,12 +66,20 @@ function config_generic( c, singles, bools, lists, nopad )
 
                if type(singles) == "table" then
                        for i, key in ipairs( singles ) do
+                               if preprocess[key] then
+                                       c[key] = preprocess[key](c[key])
+                               end
+
                                str = str .. _string( c[key], key, nopad )
                        end
                end
 
                if type(bools) == "table" then
                        for i, key in ipairs( bools ) do
+                               if preprocess[key] then
+                                       c[key] = preprocess[key](c[key])
+                               end
+
                                str = str .. _bool( c[key], key, nopad )
                        end
                end
@@ -86,11 +99,17 @@ function config_exec( c )
                for key, type in pairs({ Exec="collectd_exec_input", NotificationExec="collectd_exec_notify" }) do
                        if sections[s][".type"] == type then
 
-                               cmd   = sections[s].cmdline
-                               user  = sections[s].cmduser  or "nobody"
-                               group = sections[s].cmdgroup or "nogroup"
+                               cmd = sections[s].cmdline
 
-                               str = str .. "\t" .. key .. " " .. user .. ":" .. group .. ' "' .. cmd .. "\"\n"
+                               if cmd then
+                                       cmd   = cmd:gsub("^%s+", ""):gsub("%s+$", "")
+                                       user  = sections[s].cmduser  or "nobody"
+                                       group = sections[s].cmdgroup
+
+                                       str = str .. "\t" .. key .. ' "' ..
+                                               user .. ( group and ":" .. group or "" ) .. '" "' ..
+                                               cmd:gsub('%s+', '" "') .. '"\n'
+                               end
                        end
                end
        end
@@ -143,14 +162,14 @@ function config_network( c )
 
                                if host then
                                        if port then
-                                               str = str .. "\t" .. key .. " " .. host .. " " .. port .. "\n"
+                                               str = str .. "\t" .. key .. " \"" .. host .. "\" \"" .. port .. "\"\n"
                                        else
-                                               str = str .. "\t" .. key .. " " .. host .. "\n"
+                                               str = str .. "\t" .. key .. " \"" .. host .. "\"\n"
                                        end
                                end
-                        end
-                end
-        end
+                                               end
+                               end
+               end
 
        return str .. _string( c["TimeToLive"], "TimeToLive" )
                   .. _string( c["CacheFlush"], "CacheFlush" )
@@ -163,6 +182,10 @@ function _list_expand( c, l, nopad )
 
        for i, n in ipairs(l) do
                if c[n] then
+                       if preprocess[n] then
+                               c[n] = preprocess[n](c[n])
+                       end
+
                        if n:find("(%w+)ses") then
                                k = n:gsub("(%w+)ses", "%1s")
                        else
@@ -177,15 +200,19 @@ function _list_expand( c, l, nopad )
 end
 
 function _expand( s, n, nopad )
-       if type(s) == "string" then
-               local str = ""
+       local str = ""
 
+       if type(s) == "string" then
                for i, v in ipairs( luci.util.split( s, "%s+", nil, true ) ) do
                        str = str .. _string( v, n, nopad )
                end
-
-               return str
+       elseif type(s) == "table" then
+               for i, v in ipairs(s) do
+                       str = str .. _string( v, n, nopad )
+               end
        end
+
+       return str
 end
 
 function _bool( s, n, nopad )
@@ -210,26 +237,32 @@ function _string( s, n, nopad )
        if not nopad then pad = "\t" end
 
        if s then
-               if s:find("[^%d]") then
-                       if not s:find("[^%w]") then
-                               str = pad .. n .. " " .. s
+               if s:find("[^%d]") or n == "Port" then
+                       if not s:find("[^%w]") and n ~= "Port" then
+                               str = pad .. n .. " " .. luci.util.trim(s)
                        else
-                               str = pad .. n .. ' "' .. s .. '"'
+                               str = pad .. n .. ' "' .. luci.util.trim(s) .. '"'
                        end
                else
-                       str = pad .. n .. " " .. s
+                       str = pad .. n .. " " .. luci.util.trim(s)
                end
 
                str = str .. "\n"
        end
 
        return str
-end            
+end
 
 
 plugins = {
        collectd = {
-               { "BaseDir", "Include", "PIDFile", "PluginDir", "TypesDB", "Interval", "ReadThreads" },
+               { "BaseDir", "Include", "PIDFile", "PluginDir", "TypesDB", "Interval", "ReadThreads", "Hostname" },
+               { },
+               { }
+       },
+
+       conntrack = {
+               { },
                { },
                { }
        },
@@ -240,7 +273,7 @@ plugins = {
                { }
        },
 
-       csv     = { 
+       csv     = {
                { "DataDir" },
                { "StoreRates" },
                { }
@@ -286,12 +319,36 @@ plugins = {
                { "Irqs" }
        },
 
+       iwinfo = {
+               { },
+               { "IgnoreSelected" },
+               { "Interfaces" }
+       },
+
+       load    = {
+               { },
+               { },
+               { }
+       },
+
        logfile = {
                { "LogLevel", "File" },
                { "Timestamp" },
                { }
        },
 
+       madwifi = {
+               { "WatchSet" },
+               { },
+               { "Interfaces", "WatchAdds" }
+       },
+
+       memory = { 
+               { },
+               { },
+               { }
+       },
+
        netlink = {
                { },
                { "IgnoreSelected" },
@@ -300,8 +357,20 @@ plugins = {
 
        network = config_network,
 
+       nut = {
+               { "UPS" },
+               { },
+               { }
+       },
+
+       olsrd = {
+               { "Host", "Port", "CollectLinks","CollectRoutes","CollectTopology"},
+               { },
+               { }
+       },
+
        ping    = {
-               { "TTL" },
+               { "TTL", "Interval" },
                { },
                { "Hosts" }
        },
@@ -318,6 +387,12 @@ plugins = {
                { "RRATimespans" }
        },
 
+        splash_leases = {
+          { },
+          { },
+          { }
+        },
+
        tcpconns = {
                { },
                { "ListeningPorts" },
@@ -330,12 +405,27 @@ plugins = {
                { }
        },
 
+       uptime = {
+               { },
+               { },
+               { }
+       },
+
        wireless = {
                { },
                { },
                { }
        },
+}
 
+preprocess = {
+       RRATimespans = function(val)
+               local rv = { }
+               for time in val:gmatch("[^%s]+") do
+                       table.insert( rv, luci.util.parse_units(time) )
+               end
+               return table.concat(rv, " ")
+       end
 }