luci-app-statistics: cpufreq: changes in data structure
authorHannu Nyman <hannu.nyman@iki.fi>
Tue, 30 Jul 2019 17:47:02 +0000 (20:47 +0300)
committerHannu Nyman <hannu.nyman@iki.fi>
Tue, 30 Jul 2019 18:03:03 +0000 (21:03 +0300)
Collectd 5.9.0 changed the data structure of the cpufreq plugin:
CPU cores are now handled as separate plugin instances.

There are also new data items per core:
 * time spent at each frequency
 * amount of frequency transitions

Enable these new data items, but initially hide them behind
a new config option "ExtraItems" (default: disabled), as
the amount of graphs in multi-core systems could be rather large.

Note that the frequencies are not (yet) sorted, so the
information value of the time-spent graph is semi-random.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit e6f30bb7f39c67e1b2eaf312aa8d1f06e7b0a0ab)

applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/cpufreq.lua
applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/cpufreq.lua

index d1116630b48da2d9c96aa9d0ab8894d9a6a60105..435f186e0d6b4c4ebd290cdd88279e52b520b2aa 100644 (file)
@@ -11,4 +11,10 @@ s = m:section( NamedSection, "collectd_cpufreq", "luci_statistics" )
 enable = s:option( Flag, "enable", translate("Enable this plugin") )
 enable.default = 0
 
+-- collectd_cpufreq.extraitems
+extraitems = s:option( Flag, "ExtraItems", translate("Extra items"), translate("More details about frequency usage and transitions"))
+extraitems.default = "0"
+extraitems.optional = true
+extraitems:depends( "enable", 1 )
+
 return m
index 08aab04b8549fbbd0a68c758533d5fdb111e00b3..40a6955e53a13dfd3ff4c20829f49db208c5a252 100644 (file)
@@ -2,28 +2,59 @@
 
 module("luci.statistics.rrdtool.definitions.cpufreq",package.seeall)
 
+local uci = require("luci.model.uci").cursor()
+local extraitems = uci:get("luci_statistics", "collectd_cpufreq", "ExtraItems") or nil
+
 function item()
        return luci.i18n.translate("CPU Frequency")
 end
 
 function rrdargs( graph, plugin, plugin_instance, dtype )
 
-       return {
-               title = "%H: Processor frequency",
+       local cpufreq =  {
+               title = "%H: Processor frequency - core %pi",
                alt_autoscale = true,
                vlabel = "Frequency (Hz)",
                number_format = "%3.2lf%s",
                data = {
-                       sources = {
-                               cpufreq = { "" }
-                       },
+                       types = {"cpufreq" },
+                       options = {
+                               cpufreq = { color = "ff0000", title = "Frequency" },
+                       }
+               }
+       }
+
+    if extraitems then
+
+       local transitions = {
+               title = "%H: Frequency transitions - core %pi",
+               alt_autoscale = true,
+               vlabel = "Transitions",
+               number_format = "%3.2lf%s",
+               data = {
+                       types = { "transitions" },
                        options = {
-                               cpufreq_0 = { color = "ff0000", title = "Core 0", noarea=true, overlay=true },
-                               cpufreq_1 = { color = "0000ff", title = "Core 1", noarea=true, overlay=true },
-                               cpufreq_2 = { color = "00ff00", title = "Core 2", noarea=true, overlay=true },
-                               cpufreq_3 = { color = "00ffff", title = "Core 3", noarea=true, overlay=true }
+                               transitions = { color = "0000ff", title = "Transitions", noarea=true },
                        }
                }
        }
+
+       local percentage = {
+               title = "%H: Frequency distribution - core %pi",
+               alt_autoscale = true,
+               vlabel = "Frequency (Hz)",
+               number_format = "%5.2lf%%",
+               data = {
+                       types = { "percent" },
+                       options = {
+                               percent = { title = "Frequency %di" },
+                       }
+               }
+       }
+
+       return { cpufreq, transitions, percentage }
+    else
+       return { cpufreq }
+    end
 end