From 2be8aefe7f7a7e368d82d332b1aeb5494aefa9b5 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Fri, 13 Sep 2019 11:55:36 +0200 Subject: [PATCH] luci-app-statistics: add new cpu plugin options Signed-off-by: Florian Eckert --- .../luasrc/model/cbi/luci_statistics/cpu.lua | 21 +++ .../luasrc/statistics/plugins/cpu.lua | 2 +- .../statistics/rrdtool/definitions/cpu.lua | 176 +++++++++++++++--- 3 files changed, 177 insertions(+), 22 deletions(-) diff --git a/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/cpu.lua b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/cpu.lua index ee3fd254fb..56af1cc96a 100644 --- a/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/cpu.lua +++ b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/cpu.lua @@ -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 diff --git a/applications/luci-app-statistics/luasrc/statistics/plugins/cpu.lua b/applications/luci-app-statistics/luasrc/statistics/plugins/cpu.lua index 004a450eec..bae325990e 100644 --- a/applications/luci-app-statistics/luasrc/statistics/plugins/cpu.lua +++ b/applications/luci-app-statistics/luasrc/statistics/plugins/cpu.lua @@ -1,7 +1,7 @@ return { legend = { { }, - { }, + { "ValuesPercentage" , "ReportByCpu", "ReportByState" }, { } }, label = _("Processor"), diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/cpu.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/cpu.lua index 226c84ee96..3f8910722a 100644 --- a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/cpu.lua +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/cpu.lua @@ -3,33 +3,167 @@ 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 -- 2.30.2