applications/luci-statistics: rework handling of index and detail graphs
authorJo-Philipp Wich <jow@openwrt.org>
Mon, 5 Dec 2011 14:09:24 +0000 (14:09 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Mon, 5 Dec 2011 14:09:24 +0000 (14:09 +0000)
Instead of coding the display logic into the graph models, simply annotate
graph models with .detail = true/false and let the renderer decide which
to pick when.

applications/luci-statistics/luasrc/statistics/rrdtool.lua
applications/luci-statistics/luasrc/statistics/rrdtool/definitions/disk.lua
applications/luci-statistics/luasrc/statistics/rrdtool/definitions/netlink.lua
applications/luci-statistics/luasrc/statistics/rrdtool/definitions/olsrd.lua
applications/luci-statistics/luasrc/statistics/rrdtool/definitions/ping.lua
applications/luci-statistics/luasrc/statistics/rrdtool/definitions/processes.lua
applications/luci-statistics/luasrc/statistics/rrdtool/definitions/tcpconns.lua

index 871e055..b540dd1 100644 (file)
@@ -513,20 +513,20 @@ function Graph.render( self, plugin, plugin_instance, is_index )
 
                -- get diagram definitions
                for i, opts in ipairs( self:_forcelol( def.rrdargs( self, plugin, plugin_instance, nil, is_index ) ) ) do
 
                -- get diagram definitions
                for i, opts in ipairs( self:_forcelol( def.rrdargs( self, plugin, plugin_instance, nil, is_index ) ) ) do
+                       if not is_index or not opts.detail then
+                               _images[i] = { }
 
 
-                       _images[i] = { }
+                               -- get diagram definition instances
+                               local diagrams = self:_generic( opts, plugin, plugin_instance, nil, i )
 
 
-                       -- get diagram definition instances
-                       local diagrams = self:_generic( opts, plugin, plugin_instance, nil, i )
+                               -- render all diagrams
+                               for j, def in ipairs( diagrams ) do
+                                       -- remember image
+                                       _images[i][j] = def[1]
 
 
-                       -- render all diagrams
-                       for j, def in ipairs( diagrams ) do
-
-                               -- remember image
-                               _images[i][j] = def[1]
-
-                               -- exec
-                               self:_rrdtool( def )
+                                       -- exec
+                                       self:_rrdtool( def )
+                               end
                        end
                end
 
                        end
                end
 
index b42faac..ebc37ef 100644 (file)
@@ -49,6 +49,8 @@ function rrdargs( graph, plugin, plugin_instance, dtype )
                        vlabel = "Bytes/s",
                        number_format = "%5.1lf%sB/s",
 
                        vlabel = "Bytes/s",
                        number_format = "%5.1lf%sB/s",
 
+                       detail = true,
+
                        data = {
                                types = { "disk_octets" },
                                sources = {
                        data = {
                                types = { "disk_octets" },
                                sources = {
index 0b4c6c2..9313952 100644 (file)
@@ -53,7 +53,7 @@ function rrdargs( graph, plugin, plugin_instance )
        --
        local packets = {
                title = "%H: Netlink - Packets on %pi",
        --
        local packets = {
                title = "%H: Netlink - Packets on %pi",
-               vlabel = "Packets/s",
+               vlabel = "Packets/s", detail = true,
 
                -- diagram data description
                data = {
 
                -- diagram data description
                data = {
@@ -123,7 +123,7 @@ function rrdargs( graph, plugin, plugin_instance )
        --
        local multicast = {
                title = "%H: Netlink - Multicast on %pi",
        --
        local multicast = {
                title = "%H: Netlink - Multicast on %pi",
-               vlabel = "Packets/s",
+               vlabel = "Packets/s", detail = true,
 
                -- diagram data description
                data = {
 
                -- diagram data description
                data = {
@@ -147,7 +147,7 @@ function rrdargs( graph, plugin, plugin_instance )
        --
        local collisions = {
                title = "%H: Netlink - Collisions on %pi",
        --
        local collisions = {
                title = "%H: Netlink - Collisions on %pi",
-               vlabel = "Collisions/s",
+               vlabel = "Collisions/s", detail = true,
 
                -- diagram data description
                data = {
 
                -- diagram data description
                data = {
@@ -171,7 +171,7 @@ function rrdargs( graph, plugin, plugin_instance )
        --
        local errors = {
                title = "%H: Netlink - Errors on %pi",
        --
        local errors = {
                title = "%H: Netlink - Errors on %pi",
-               vlabel = "Errors/s",
+               vlabel = "Errors/s", detail = true,
 
                -- diagram data description
                data = {
 
                -- diagram data description
                data = {
index 0ba3835..3ee3910 100644 (file)
@@ -15,8 +15,7 @@ module("luci.statistics.rrdtool.definitions.olsrd", package.seeall)
 
 local tree = luci.statistics.datatree.Instance()
 
 
 local tree = luci.statistics.datatree.Instance()
 
-function rrdargs( graph, plugin, plugin_instance, dtype, is_index )
-
+function rrdargs( graph, plugin, plugin_instance, dtype )
        local g = { }
 
        if plugin_instance == "routes" then
        local g = { }
 
        if plugin_instance == "routes" then
@@ -35,33 +34,31 @@ function rrdargs( graph, plugin, plugin_instance, dtype, is_index )
                        }
                }
 
                        }
                }
 
-               if not is_index then
-                       g[#g+1] = {
-                               title = "%H: Average route ETX", vlabel = "ETX",
-                               number_format = "%5.1lf",data = {
-                                       instances = { "average" }, -- falls es irgendwann mal welche pro ip gibt, wie bei links, dann werden die hier excludiert
-                                       types = { "route_etx" },
-                                       options = {
-                                               route_etx = {
-                                                       title = "Average route ETX"
-                                               }
+               g[#g+1] = {
+                       title = "%H: Average route ETX", vlabel = "ETX", detail = true,
+                       number_format = "%5.1lf",data = {
+                               instances = { "average" }, -- falls es irgendwann mal welche pro ip gibt, wie bei links, dann werden die hier excludiert
+                               types = { "route_etx" },
+                               options = {
+                                       route_etx = {
+                                               title = "Average route ETX"
                                        }
                                }
                        }
                                        }
                                }
                        }
+               }
 
 
-                       g[#g+1] = {
-                               title = "%H: Average route metric", vlabel = "metric",
-                               number_format = "%5.1lf", data = {
-                                       instances = { "average" }, -- falls es irgendwann mal welche pro ip gibt, wie bei links, dann werden die hier excludiert
-                                       types = { "route_metric" },
-                                       options = {
-                                               route_metric = {
-                                                       title = "Average route metric"
-                                               }
+               g[#g+1] = {
+                       title = "%H: Average route metric", vlabel = "metric", detail = true,
+                       number_format = "%5.1lf", data = {
+                               instances = { "average" }, -- falls es irgendwann mal welche pro ip gibt, wie bei links, dann werden die hier excludiert
+                               types = { "route_metric" },
+                               options = {
+                                       route_metric = {
+                                               title = "Average route metric"
                                        }
                                }
                        }
                                        }
                                }
                        }
-               end
+               }
 
        elseif plugin_instance == "links" then
 
 
        elseif plugin_instance == "links" then
 
@@ -80,40 +77,39 @@ function rrdargs( graph, plugin, plugin_instance, dtype, is_index )
                        }
                }
 
                        }
                }
 
-               if not is_index then
-                       local instances = tree:data_instances(plugin, plugin_instance, "signal_quality")
-                       table.sort(instances)
+               local instances = tree:data_instances(plugin, plugin_instance, "signal_quality")
+               table.sort(instances)
 
 
-                       -- define one diagram per host, containing the rx and lq values
-                       local i
-                       for i = 1, #instances, 2 do
-                               local dsn1 = "signal_quality_%s_value" % instances[i]:gsub("[^%w]+", "_")
-                               local dsn2 = "signal_quality_%s_value" % instances[i+1]:gsub("[^%w]+", "_")
-                               local host = instances[i]:match("^[^%-]+%-([^%-]+)%-.+")
+               -- define one diagram per host, containing the rx and lq values
+               local i
+               for i = 1, #instances, 2 do
+                       local dsn1 = "signal_quality_%s_value" % instances[i]:gsub("[^%w]+", "_")
+                       local dsn2 = "signal_quality_%s_value" % instances[i+1]:gsub("[^%w]+", "_")
+                       local host = instances[i]:match("^[^%-]+%-([^%-]+)%-.+")
 
 
-                               g[#g+1] = {
+                       g[#g+1] = {
                                title = "%H: Signal Quality" .. " (" .. (host or "avg") ..")", vlabel = "ETX",
                                title = "%H: Signal Quality" .. " (" .. (host or "avg") ..")", vlabel = "ETX",
-                               number_format = "%5.2lf", data = {
-                                               types = { "signal_quality" },
+                               number_format = "%5.2lf", detail = true,
+                               data = {
+                                       types = { "signal_quality" },
        
        
-                                               instances = {
-                                                       signal_quality = { instances[i], instances[i+1] },
-                                               },
+                                       instances = {
+                                               signal_quality = { instances[i], instances[i+1] },
+                                       },
 
 
-                                               options = {
-                                                       [dsn1] = {
-                                                               color = "00ff00",
-                                                               title = "LQ (%s)" % (host or "avg"),
-                                                       },
-                                                       [dsn2] = {
-                                                               color = "0000ff",
-                                                               title = "NLQ (%s)" % (host or "avg"),
-                                                               flip  = true
-                                                       }
+                                       options = {
+                                               [dsn1] = {
+                                                       color = "00ff00",
+                                                       title = "LQ (%s)" % (host or "avg"),
+                                               },
+                                               [dsn2] = {
+                                                       color = "0000ff",
+                                                       title = "NLQ (%s)" % (host or "avg"),
+                                                       flip  = true
                                                }
                                        }
                                }
                                                }
                                        }
                                }
-                       end
+                       }
                end
 
        elseif plugin_instance == "topology" then
                end
 
        elseif plugin_instance == "topology" then
@@ -124,7 +120,7 @@ function rrdargs( graph, plugin, plugin_instance, dtype, is_index )
                                instances = { "" },
                                types = { "links" },
                                options = {
                                instances = { "" },
                                types = { "links" },
                                options = {
-                                       links = { -- or: links__value is aber egal weils eh nur eines davon gibt
+                                       links = {
                                                color = "0000ff",
                                                title = "Total number of links"
                                        }
                                                color = "0000ff",
                                                title = "Total number of links"
                                        }
@@ -132,21 +128,20 @@ function rrdargs( graph, plugin, plugin_instance, dtype, is_index )
                        }
                }
 
                        }
                }
 
-               if not is_index then
-                       g[#g+1] = {
-                               title= "%H: Average signal quality", vlabel = "n",
-                               number_format = "%5.2lf", data = {
-                                       instances = { "average" }, -- exclude possible per-ip stuff
-                                       types = { "signal_quality" },
-                                       options = {
-                                               signal_quality = {
-                                                       color = "0000ff",
-                                                       title = "Average signal quality"
-                                               }
+               g[#g+1] = {
+                       title= "%H: Average signal quality", vlabel = "n",
+                       number_format = "%5.2lf", detail = true,
+                       data = {
+                               instances = { "average" }, -- exclude possible per-ip stuff
+                               types = { "signal_quality" },
+                               options = {
+                                       signal_quality = {
+                                               color = "0000ff",
+                                               title = "Average signal quality"
                                        }
                                }
                        }
                                        }
                                }
                        }
-               end
+               }
        end
 
        return g
        end
 
        return g
index 3b77cf1..5707f3a 100644 (file)
@@ -15,7 +15,7 @@ $Id: ping.lua 6810 2011-01-29 03:33:48Z jow $
 
 module("luci.statistics.rrdtool.definitions.ping", package.seeall)
 
 
 module("luci.statistics.rrdtool.definitions.ping", package.seeall)
 
-function rrdargs( graph, plugin, plugin_instance, dtype, is_index )
+function rrdargs( graph, plugin, plugin_instance, dtype )
        return {
                -- Ping roundtrip time
                { title = "%H: ICMP Round Trip Time", vlabel = "ms",
        return {
                -- Ping roundtrip time
                { title = "%H: ICMP Round Trip Time", vlabel = "ms",
index fcbb982..6f83c8e 100644 (file)
@@ -15,10 +15,10 @@ $Id$
 
 module("luci.statistics.rrdtool.definitions.processes", package.seeall)
 
 
 module("luci.statistics.rrdtool.definitions.processes", package.seeall)
 
-function rrdargs( graph, plugin, plugin_instance, dtype, is_index )
+function rrdargs( graph, plugin, plugin_instance, dtype )
 
 
-       if is_index then 
-               return {
+       return {
+               {
                        title = "%H: Processes",
                        vlabel = "Processes/s",
                        data = {
                        title = "%H: Processes",
                        vlabel = "Processes/s",
                        data = {
@@ -37,73 +37,74 @@ function rrdargs( graph, plugin, plugin_instance, dtype, is_index )
                                        ps_state_zombies  = { color = "ff0000" }
                                }
                        }
                                        ps_state_zombies  = { color = "ff0000" }
                                }
                        }
-               }
-       else
-               return {
-                       {
-                               title = "%H: CPU time used by %pi",
-                               vlabel = "Jiffies",
-                               data = {
-                                       sources = {
-                                               ps_cputime = { "syst", "user" }
-                                       },
+               },
 
 
-                                       options = {
-                                               ps_cputime__user = {
-                                                       color   = "0000ff",
-                                                       overlay = true
-                                               },
+               {
+                       title = "%H: CPU time used by %pi",
+                       vlabel = "Jiffies",
+                       data = {
+                               sources = {
+                                       ps_cputime = { "syst", "user" }
+                               },
 
 
-                                               ps_cputime__syst = {
-                                                       color   = "ff0000",
-                                                       overlay = true
-                                               }
-                                       }
-                               }
-                       },
-
-                       {
-                               title = "%H: Threads and processes belonging to %pi",
-                               vlabel = "Count",
-                               data = {
-                                       sources = {
-                                               ps_count = { "threads", "processes" }
+                               options = {
+                                       ps_cputime__user = {
+                                               color   = "0000ff",
+                                               overlay = true
                                        },
 
                                        },
 
-                                       options = {
-                                               ps_count__threads   = { color = "00ff00" },
-                                               ps_count__processes = { color = "0000bb" }
+                                       ps_cputime__syst = {
+                                               color   = "ff0000",
+                                               overlay = true
                                        }
                                }
                                        }
                                }
-                       },
-
-                       {
-                               title = "%H: Page faults in %pi",
-                               vlabel = "Pagefaults",
-                               data = {
-                                       sources = {
-                                               ps_pagefaults = { "minflt", "majflt" }
-                                       },
+                       }
+               },
 
 
-                                       options = {
-                                               ps_pagefaults__minflt = { color = "ff0000" },
-                                               ps_pagefaults__majflt = { color = "ff5500" }
-                                       }
+               {
+                       title = "%H: Threads and processes belonging to %pi",
+                       vlabel = "Count",
+                       detail = true,
+                       data = {
+                               sources = {
+                                       ps_count = { "threads", "processes" }
+                               },
+
+                               options = {
+                                       ps_count__threads   = { color = "00ff00" },
+                                       ps_count__processes = { color = "0000bb" }
                                }
                                }
-                       },
+                       }
+               },
 
 
-                       {
-                               title = "%H: Virtual memory size of %pi",
-                               vlabel = "Bytes",
-                               number_format = "%5.1lf%sB",
-                               data = {
-                                       types = { "ps_rss" },
+               {
+                       title = "%H: Page faults in %pi",
+                       vlabel = "Pagefaults",
+                       detail = true,
+                       data = {
+                               sources = {
+                                       ps_pagefaults = { "minflt", "majflt" }
+                               },
 
 
-                                       options = {
-                                               ps_rss = { color = "0000ff" }
-                                       }
+                               options = {
+                                       ps_pagefaults__minflt = { color = "ff0000" },
+                                       ps_pagefaults__majflt = { color = "ff5500" }
+                               }
+                       }
+               },
+
+               {
+                       title = "%H: Virtual memory size of %pi",
+                       vlabel = "Bytes",
+                       detail = true,
+                       number_format = "%5.1lf%sB",
+                       data = {
+                               types = { "ps_rss" },
+
+                               options = {
+                                       ps_rss = { color = "0000ff" }
                                }
                        }
                }
                                }
                        }
                }
-       end
+       }
 end
 end
index 4e00cbe..4f1c221 100644 (file)
@@ -28,9 +28,8 @@ function rrdargs( graph, plugin, plugin_instance, dtype )
                                        "LAST_ACK", "TIME_WAIT", "CLOSING", "CLOSE_WAIT",
                                        "CLOSED", "FIN_WAIT1", "FIN_WAIT2"
                                },
                                        "LAST_ACK", "TIME_WAIT", "CLOSING", "CLOSE_WAIT",
                                        "CLOSED", "FIN_WAIT1", "FIN_WAIT2"
                                },
-                               options = { for k, v in (tcp_connections) do
-                                       v = { title = "%di", noarea = true }
-                                       end
+                               options = {
+                                       load__ESTABLISHED = { title = "%di", noarea = true }
                                }
                        }
                }
                                }
                        }
                }