luci-app-statistics: add new cpu plugin options
authorFlorian Eckert <fe@dev.tdt.de>
Fri, 13 Sep 2019 09:55:36 +0000 (11:55 +0200)
committerFlorian Eckert <fe@dev.tdt.de>
Fri, 13 Sep 2019 10:58:57 +0000 (12:58 +0200)
Signed-off-by: Florian Eckert <fe@dev.tdt.de>
applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/cpu.lua
applications/luci-app-statistics/luasrc/statistics/plugins/cpu.lua
applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/cpu.lua

index ee3fd254fb9b2859f9cce7c55abf90bc86e75f6b..56af1cc96a96fce73bfbf64bd2ad51de185ca6af 100644 (file)
@@ -12,4 +12,25 @@ s = m:section( NamedSection, "collectd_cpu", "luci_statistics" )
 enable = s:option( Flag, "enable", translate("Enable this plugin") )
 enable.default = 0
 
+-- collectd_cpu.reportbycpu (ReportByCpu)
+reportbycpu = s:option( Flag, "ReportByCpu",
+       translate("Report by CPU"),
+       translate("By setting this, CPU is not aggregate of all processors on the system"))
+reportbycpu.default = 1
+reportbycpu:depends( "enable", 1 )
+
+-- collectd_cpu.reportbystate (ReportByState)
+reportbystate = s:option( Flag, "ReportByState",
+       translate("Report by state"),
+       translate("When set to true, reports per-state metric (system, user, idle)"))
+reportbystate.default = 1
+reportbystate:depends( "enable", 1 )
+
+-- collectd_cpu.valuespercentage (ValuesPercentage)
+valuespercentage = s:option( Flag, "ValuesPercentage",
+       translate("Report in percent"),
+       translate("When set to true, we request percentage values"))
+valuespercentage.default = 0
+valuespercentage:depends({ enable = 1, ReportByCpu = 1, ReportByState = 1 })
+
 return m
index 004a450eecefeafe1237b17d2bd41f9bfbf770fa..bae325990e5c5562b6cd9506a719e30411224a28 100644 (file)
@@ -1,7 +1,7 @@
 return {
        legend = {
                { },
-               { },
+               { "ValuesPercentage" , "ReportByCpu", "ReportByState" },
                { }
        },
        label = _("Processor"),
index 226c84ee962171f66ae833cf12074142eceac483..3f8910722a1914bfdb8f2da3f7c0fe75eeb2a276 100644 (file)
 
 module("luci.statistics.rrdtool.definitions.cpu",package.seeall)
 
+local uci = require("luci.model.uci").cursor()
+local reportbystate = uci:get("luci_statistics", "collectd_cpu", "ReportByState") or "0"
+
 function item()
        return luci.i18n.translate("Processor")
 end
 
 function rrdargs( graph, plugin, plugin_instance, dtype )
+       local p = {}
+
+       local title = "%H: Processor usage"
+       if #plugin_instance > 0 then
+               title = "%H: Processor usage on core #%pi"
+       end
+
+       if reportbystate == "1" then
+               local cpu = {
+                       title = title,
+                       y_min = "0",
+                       alt_autoscale_max = true,
+                       vlabel = "Jiffies",
+                       number_format = "%5.1lf",
+                       data = {
+                               instances = {
+                                       cpu = {
+                                               "idle",
+                                               "interrupt",
+                                               "nice",
+                                               "softirq",
+                                               "steal",
+                                               "system",
+                                               "user",
+                                               "wait"
+                                       }
+                               },
+                               options = {
+                                       cpu_idle = {
+                                               color = "ffffff",
+                                               title = "Idle"
+                                       },
+                                       cpu_interrupt = {
+                                               color = "a000a0",
+                                               title = "Interrupt"
+                                       },
+                                       cpu_nice = {
+                                               color = "00e000",
+                                               title = "Nice"
+                                       },
+                                       cpu_softirq = {
+                                               color = "ff00ff",
+                                               title = "Softirq"
+                                       },
+                                       cpu_steal = {
+                                               color = "000000",
+                                               title = "Steal"
+                                       },
+                                       cpu_system = {
+                                               color = "ff0000",
+                                               title = "System"
+                                       },
+                                       cpu_user = {
+                                               color = "0000ff",
+                                               title = "User"
+                                       },
+                                       cpu_wait = {
+                                               color = "ffb000",
+                                               title = "Wait"
+                                       }
+                               }
+                       }
+               }
 
-       return {
-               title = "%H: Processor usage on core #%pi",
-               y_min = "0",
-               alt_autoscale_max = true,
-               vlabel = "Percent",
-               number_format = "%5.1lf%%",
-               data = {
-                       instances = { 
-                               cpu = { "user", "nice", "system", "softirq", "interrupt" }
-                       },
-
-                       options = {
-                               cpu_idle      = { color = "ffffff", title = "Idle" },
-                               cpu_nice      = { color = "00e000", title = "Nice" },
-                               cpu_user      = { color = "0000ff", title = "User" },
-                               cpu_wait      = { color = "ffb000", title = "Wait" },
-                               cpu_system    = { color = "ff0000", title = "System" },
-                               cpu_softirq   = { color = "ff00ff", title = "Softirq" },
-                               cpu_interrupt = { color = "a000a0", title = "Interrupt" },
-                               cpu_steal     = { color = "000000", title = "Steal" }
+               local percent = {
+                       title = title,
+                       y_min = "0",
+                       alt_autoscale_max = true,
+                       vlabel = "Percent",
+                       number_format = "%5.1lf%%",
+                       data = {
+                               instances = {
+                                       percent = {
+                                               "idle",
+                                               "interrupt",
+                                               "nice",
+                                               "softirq",
+                                               "steal",
+                                               "system",
+                                               "user",
+                                               "wait"
+                                       }
+                               },
+                               options = {
+                                       percent_idle = {
+                                               color = "ffffff",
+                                               title = "Idle"
+                                       },
+                                       percent_interrupt = {
+                                               color = "a000a0",
+                                               title = "Interrupt"
+                                       },
+                                       percent_nice = {
+                                               color = "00e000",
+                                               title = "Nice"
+                                       },
+                                       percent_softirq = {
+                                               color = "ff00ff",
+                                               title = "Softirq"
+                                       },
+                                       percent_steal = {
+                                               color = "000000",
+                                               title = "Steal"
+                                       },
+                                       percent_system = {
+                                               color = "ff0000",
+                                               title = "System"
+                                       },
+                                       percent_user = {
+                                               color = "0000ff",
+                                               title = "User"
+                                       },
+                                       percent_wait = {
+                                               color = "ffb000",
+                                               title = "Wait"
+                                       }
+                               }
                        }
                }
-       }
+
+               local types = graph.tree:data_types( plugin, plugin_instance )
+
+               for _, t in ipairs(types) do
+                       if t == "cpu" then
+                               p[#p+1] = cpu
+                       end
+
+                       if t == "percent" then
+                               p[#p+1] = percent
+                       end
+               end
+       else
+               p = {
+                       title = title,
+                       y_min = "0",
+                       alt_autoscale_max = true,
+                       vlabel = "Percent",
+                       number_format = "%5.1lf%%",
+                       data = {
+                               instances = {
+                                       percent = {
+                                               "active",
+                                       }
+                               },
+                               options = {
+                                       percent_active = {
+                                               color = "00e000",
+                                               title = "Active"
+                                       }
+                               }
+                       }
+               }
+       end
+
+       return p
 end