applications/luci-statistics: add support for olsr and madwifi plugin parameters
[project/luci.git] / applications / luci-statistics / root / usr / bin / stat-genconfig
index cd707c6..2b312cc 100755 (executable)
@@ -9,38 +9,43 @@ 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$
 
 ]]--
 
 
-require("ffluci.model.uci")
-require("ffluci.sys.iptparser")
-require("ffluci.util")
+require("luci.model.uci")
+require("luci.sys.iptparser")
+require("luci.util")
 
-local ipt = ffluci.sys.iptparser.IptParser()
-local uci = ffluci.model.uci.Session()
-local sections, names = uci:sections( "luci_statistics" )
+local ipt = luci.sys.iptparser.IptParser()
+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["general"]
+       local config = sections[ "collectd_" .. plugin ] or sections["collectd"]
 
-       if type(config) == "table" and ( plugin == "general" or config.enable == "1" ) then
+       if type(config) == "table" and ( plugin == "collectd" or config.enable == "1" ) then
 
                local params = ""
 
                if type( plugins[plugin] ) == "function" then
                        params = plugins[plugin]( config )
                else
-                       params = config_generic( config, plugins[plugin][1], plugins[plugin][2], plugins[plugin][3], plugin == "general" )
+                       params = config_generic( config, plugins[plugin][1], plugins[plugin][2], plugins[plugin][3], plugin == "collectd" )
                end
 
 
-               if plugin ~= "general" then
+               if plugin ~= "collectd" then
                        print( "LoadPlugin " .. plugin )
 
                        if params:len() > 0 then
@@ -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
+
+                               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 .. ' "' .. cmd .. "\"\n"
+                                       str = str .. "\t" .. key .. ' "' ..
+                                               user .. ( group and ":" .. group or "" ) .. '" "' ..
+                                               cmd:gsub('%s+', '" "') .. '"\n'
+                               end
                        end
                end
        end
@@ -113,7 +132,7 @@ function config_iptables( c )
                                v = sections[s][k]
 
                                if type(v) == "string" then
-                                       if k == "options" then v = ffluci.util.split( v, "%s+", nil, true ) end
+                                       if k == "options" then v = luci.util.split( v, "%s+", nil, true ) end
                                        search[k] = v
                                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
@@ -180,7 +203,7 @@ function _expand( s, n, nopad )
        if type(s) == "string" then
                local str = ""
 
-               for i, v in ipairs( ffluci.util.split( s, "%s+", nil, true ) ) do
+               for i, v in ipairs( luci.util.split( s, "%s+", nil, true ) ) do
                        str = str .. _string( v, n, nopad )
                end
 
@@ -210,31 +233,37 @@ 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 = {
-       general = {
-               { "BaseDir", "Include", "PIDFile", "PluginDir", "TypesDB", "Interval", "ReadThreads" },
+       collectd = {
+               { "BaseDir", "Include", "PIDFile", "PluginDir", "TypesDB", "Interval", "ReadThreads", "Hostname" },
+               { },
+               { }
+       },
+
+       cpu     = {
+               { },
                { },
                { }
        },
 
-       csv     = { 
+       csv     = {
                { "DataDir" },
                { "StoreRates" },
                { }
@@ -280,12 +309,24 @@ plugins = {
                { "Irqs" }
        },
 
+       load    = {
+               { },
+               { },
+               { }
+       },
+
        logfile = {
                { "LogLevel", "File" },
                { "Timestamp" },
                { }
        },
 
+       madwifi = {
+               { "WatchSet" },
+               { },
+               { "Interfaces", "WatchAdds" }
+       },
+
        netlink = {
                { },
                { "IgnoreSelected" },
@@ -294,6 +335,18 @@ plugins = {
 
        network = config_network,
 
+       olsrd = {
+               { "Host", "Port", "CollectLinks","CollectRoutes","CollectTopology"},
+               { },
+               { }
+       },
+
+       ping    = {
+               { "TTL", "Interval" },
+               { },
+               { "Hosts" }
+       },
+
        processes = {
                { },
                { },
@@ -323,14 +376,23 @@ plugins = {
                { },
                { }
        },
+}
 
+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
 }
 
 
-section("general")
+section("collectd")
 
 for plugin in pairs(plugins) do
-       if plugin ~= "general" then
+       if plugin ~= "collectd" then
                section( plugin )
        end
 end