From e046455389f1030accf1341a6d75992c9b0a9447 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Mon, 5 Dec 2011 14:09:24 +0000 Subject: [PATCH] applications/luci-statistics: rework handling of index and detail graphs 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. --- .../luasrc/statistics/rrdtool.lua | 22 ++-- .../statistics/rrdtool/definitions/disk.lua | 2 + .../rrdtool/definitions/netlink.lua | 8 +- .../statistics/rrdtool/definitions/olsrd.lua | 117 +++++++++-------- .../statistics/rrdtool/definitions/ping.lua | 2 +- .../rrdtool/definitions/processes.lua | 119 +++++++++--------- .../rrdtool/definitions/tcpconns.lua | 5 +- 7 files changed, 136 insertions(+), 139 deletions(-) diff --git a/applications/luci-statistics/luasrc/statistics/rrdtool.lua b/applications/luci-statistics/luasrc/statistics/rrdtool.lua index 871e055d9..b540dd15f 100644 --- a/applications/luci-statistics/luasrc/statistics/rrdtool.lua +++ b/applications/luci-statistics/luasrc/statistics/rrdtool.lua @@ -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 + 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 diff --git a/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/disk.lua b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/disk.lua index b42faac42..ebc37ef3a 100644 --- a/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/disk.lua +++ b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/disk.lua @@ -49,6 +49,8 @@ function rrdargs( graph, plugin, plugin_instance, dtype ) vlabel = "Bytes/s", number_format = "%5.1lf%sB/s", + detail = true, + data = { types = { "disk_octets" }, sources = { diff --git a/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/netlink.lua b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/netlink.lua index 0b4c6c21b..931395251 100644 --- a/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/netlink.lua +++ b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/netlink.lua @@ -53,7 +53,7 @@ function rrdargs( graph, plugin, plugin_instance ) -- local packets = { title = "%H: Netlink - Packets on %pi", - vlabel = "Packets/s", + vlabel = "Packets/s", detail = true, -- diagram data description data = { @@ -123,7 +123,7 @@ function rrdargs( graph, plugin, plugin_instance ) -- local multicast = { title = "%H: Netlink - Multicast on %pi", - vlabel = "Packets/s", + vlabel = "Packets/s", detail = true, -- diagram data description data = { @@ -147,7 +147,7 @@ function rrdargs( graph, plugin, plugin_instance ) -- local collisions = { title = "%H: Netlink - Collisions on %pi", - vlabel = "Collisions/s", + vlabel = "Collisions/s", detail = true, -- diagram data description data = { @@ -171,7 +171,7 @@ function rrdargs( graph, plugin, plugin_instance ) -- local errors = { title = "%H: Netlink - Errors on %pi", - vlabel = "Errors/s", + vlabel = "Errors/s", detail = true, -- diagram data description data = { diff --git a/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/olsrd.lua b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/olsrd.lua index 0ba38357c..3ee39102e 100644 --- a/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/olsrd.lua +++ b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/olsrd.lua @@ -15,8 +15,7 @@ module("luci.statistics.rrdtool.definitions.olsrd", package.seeall) 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 @@ -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 @@ -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", - 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 @@ -124,7 +120,7 @@ function rrdargs( graph, plugin, plugin_instance, dtype, is_index ) 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" } @@ -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 diff --git a/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/ping.lua b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/ping.lua index 3b77cf140..5707f3aba 100644 --- a/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/ping.lua +++ b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/ping.lua @@ -15,7 +15,7 @@ $Id: ping.lua 6810 2011-01-29 03:33:48Z jow $ 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", diff --git a/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/processes.lua b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/processes.lua index fcbb98255..6f83c8e28 100644 --- a/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/processes.lua +++ b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/processes.lua @@ -15,10 +15,10 @@ $Id$ 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 = { @@ -37,73 +37,74 @@ function rrdargs( graph, plugin, plugin_instance, dtype, is_index ) 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 diff --git a/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/tcpconns.lua b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/tcpconns.lua index 4e00cbed0..4f1c221f9 100644 --- a/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/tcpconns.lua +++ b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/tcpconns.lua @@ -28,9 +28,8 @@ function rrdargs( graph, plugin, plugin_instance, dtype ) "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 } } } } -- 2.25.1