From d35a620e9f5665a94967f4bd02c93581a1dd7e00 Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Tue, 27 May 2008 12:23:39 +0000 Subject: commit 4f6198094cf4134179d1f9c9fa8f79759a27c87e Author: Felix Fietkau Date: Tue May 27 13:56:12 2008 +0200 rename src/ to luasrc/ --- .../controller/luci_statistics/luci_statistics.lua | 107 + .../luasrc/model/cbi/luci_statistics/collectd.lua | 71 + .../luasrc/model/cbi/luci_statistics/csv.lua | 39 + .../luasrc/model/cbi/luci_statistics/df.lua | 50 + .../luasrc/model/cbi/luci_statistics/disk.lua | 37 + .../luasrc/model/cbi/luci_statistics/dns.lua | 42 + .../luasrc/model/cbi/luci_statistics/email.lua | 55 + .../luasrc/model/cbi/luci_statistics/exec.lua | 77 + .../luasrc/model/cbi/luci_statistics/interface.lua | 42 + .../luasrc/model/cbi/luci_statistics/iptables.lua | 121 + .../luasrc/model/cbi/luci_statistics/irq.lua | 39 + .../luasrc/model/cbi/luci_statistics/netlink.lua | 84 + .../luasrc/model/cbi/luci_statistics/network.lua | 84 + .../luasrc/model/cbi/luci_statistics/ping.lua | 38 + .../luasrc/model/cbi/luci_statistics/processes.lua | 31 + .../luasrc/model/cbi/luci_statistics/rrdtool.lua | 99 + .../luasrc/model/cbi/luci_statistics/tcpconns.lua | 41 + .../luasrc/model/cbi/luci_statistics/unixsock.lua | 46 + .../luci-statistics/luasrc/statistics/datatree.lua | 134 + .../luci-statistics/luasrc/statistics/rrdtool.lua | 264 ++ .../luasrc/statistics/rrdtool/colors.lua | 59 + .../luasrc/statistics/rrdtool/definitions.lua | 3177 ++++++++++++++++++++ .../statistics/rrdtool/definitions/cpu/cpu.lua | 31 + .../rrdtool/definitions/iptables/ipt_packets.lua | 26 + .../statistics/rrdtool/definitions/netlink.lua | 163 + .../statistics/rrdtool/definitions/ping/ping.lua | 23 + .../rrdtool/definitions/processes/ps_state.lua | 31 + .../definitions/tcpconns/tcp_connections.lua | 27 + .../statistics/rrdtool/definitions/wireless.lua | 25 + .../luasrc/view/admin_statistics/index.htm | 8 + .../view/admin_statistics/networkplugins.htm | 18 + .../luasrc/view/admin_statistics/outputplugins.htm | 19 + .../luasrc/view/admin_statistics/systemplugins.htm | 18 + .../luasrc/view/public_statistics/graph.htm | 9 + 34 files changed, 5135 insertions(+) create mode 100644 applications/luci-statistics/luasrc/controller/luci_statistics/luci_statistics.lua create mode 100644 applications/luci-statistics/luasrc/model/cbi/luci_statistics/collectd.lua create mode 100644 applications/luci-statistics/luasrc/model/cbi/luci_statistics/csv.lua create mode 100644 applications/luci-statistics/luasrc/model/cbi/luci_statistics/df.lua create mode 100644 applications/luci-statistics/luasrc/model/cbi/luci_statistics/disk.lua create mode 100644 applications/luci-statistics/luasrc/model/cbi/luci_statistics/dns.lua create mode 100644 applications/luci-statistics/luasrc/model/cbi/luci_statistics/email.lua create mode 100644 applications/luci-statistics/luasrc/model/cbi/luci_statistics/exec.lua create mode 100644 applications/luci-statistics/luasrc/model/cbi/luci_statistics/interface.lua create mode 100644 applications/luci-statistics/luasrc/model/cbi/luci_statistics/iptables.lua create mode 100644 applications/luci-statistics/luasrc/model/cbi/luci_statistics/irq.lua create mode 100644 applications/luci-statistics/luasrc/model/cbi/luci_statistics/netlink.lua create mode 100644 applications/luci-statistics/luasrc/model/cbi/luci_statistics/network.lua create mode 100644 applications/luci-statistics/luasrc/model/cbi/luci_statistics/ping.lua create mode 100644 applications/luci-statistics/luasrc/model/cbi/luci_statistics/processes.lua create mode 100644 applications/luci-statistics/luasrc/model/cbi/luci_statistics/rrdtool.lua create mode 100644 applications/luci-statistics/luasrc/model/cbi/luci_statistics/tcpconns.lua create mode 100644 applications/luci-statistics/luasrc/model/cbi/luci_statistics/unixsock.lua create mode 100644 applications/luci-statistics/luasrc/statistics/datatree.lua create mode 100644 applications/luci-statistics/luasrc/statistics/rrdtool.lua create mode 100644 applications/luci-statistics/luasrc/statistics/rrdtool/colors.lua create mode 100644 applications/luci-statistics/luasrc/statistics/rrdtool/definitions.lua create mode 100644 applications/luci-statistics/luasrc/statistics/rrdtool/definitions/cpu/cpu.lua create mode 100644 applications/luci-statistics/luasrc/statistics/rrdtool/definitions/iptables/ipt_packets.lua create mode 100644 applications/luci-statistics/luasrc/statistics/rrdtool/definitions/netlink.lua create mode 100644 applications/luci-statistics/luasrc/statistics/rrdtool/definitions/ping/ping.lua create mode 100644 applications/luci-statistics/luasrc/statistics/rrdtool/definitions/processes/ps_state.lua create mode 100644 applications/luci-statistics/luasrc/statistics/rrdtool/definitions/tcpconns/tcp_connections.lua create mode 100644 applications/luci-statistics/luasrc/statistics/rrdtool/definitions/wireless.lua create mode 100644 applications/luci-statistics/luasrc/view/admin_statistics/index.htm create mode 100644 applications/luci-statistics/luasrc/view/admin_statistics/networkplugins.htm create mode 100644 applications/luci-statistics/luasrc/view/admin_statistics/outputplugins.htm create mode 100644 applications/luci-statistics/luasrc/view/admin_statistics/systemplugins.htm create mode 100644 applications/luci-statistics/luasrc/view/public_statistics/graph.htm (limited to 'applications/luci-statistics/luasrc') diff --git a/applications/luci-statistics/luasrc/controller/luci_statistics/luci_statistics.lua b/applications/luci-statistics/luasrc/controller/luci_statistics/luci_statistics.lua new file mode 100644 index 000000000..df262a115 --- /dev/null +++ b/applications/luci-statistics/luasrc/controller/luci_statistics/luci_statistics.lua @@ -0,0 +1,107 @@ +module("luci.controller.luci_statistics.luci_statistics", package.seeall) + +local fs = require("luci.fs") +local tpl = require("luci.template") +local rrd = require("luci.statistics.rrdtool") +local data = require("luci.statistics.datatree").Instance() + + +function _entry( path, ... ) + local file = path[4] or path[3] + if fs.isfile( "/usr/lib/collectd/" .. file .. ".so" ) then + entry( path, ... ) + end +end + + +function index() + entry({"admin", "statistics"}, statistics_index, "Statistiken", 80) + entry({"admin", "statistics", "collectd"}, cbi("luci_statistics/collectd"), "Collectd", 10) + + entry({"admin", "statistics", "output"}, statistics_outputplugins, "Ausgabeplugins", 20) + _entry({"admin", "statistics", "output", "rrdtool"}, cbi("luci_statistics/rrdtool"), "RRDTool", 10) + _entry({"admin", "statistics", "output", "network"}, cbi("luci_statistics/network"), "Netzwerk", 20) + _entry({"admin", "statistics", "output", "unixsock"}, cbi("luci_statistics/unixsock"), "Unix Socket", 30) + _entry({"admin", "statistics", "output", "csv"}, cbi("luci_statistics/csv"), "CSV", 40) + + entry({"admin", "statistics", "system"}, statistics_systemplugins, "Systemplugins", 30) + _entry({"admin", "statistics", "system", "exec"}, cbi("luci_statistics/exec"), "Exec", 10) + _entry({"admin", "statistics", "system", "email"}, cbi("luci_statistics/email"), "E-Mail", 20) + _entry({"admin", "statistics", "system", "cpu"}, cbi("luci_statistics/cpu"), "Prozessor", 30) + _entry({"admin", "statistics", "system", "df"}, cbi("luci_statistics/df"), "Speicherplatz", 40) + _entry({"admin", "statistics", "system", "disk"}, cbi("luci_statistics/disk"), "Datenträger", 50) + _entry({"admin", "statistics", "system", "irq"}, cbi("luci_statistics/irq"), "Interrupts", 60) + _entry({"admin", "statistics", "system", "processes"}, cbi("luci_statistics/processes"), "Prozesse", 70) + + entry({"admin", "statistics", "network"}, statistics_networkplugins, "Netzwerkplugins", 40) + _entry({"admin", "statistics", "network", "interface"}, cbi("luci_statistics/interface"), "Schnittstellen", 10) + _entry({"admin", "statistics", "network", "netlink"}, cbi("luci_statistics/netlink"), "Netlink", 20) + _entry({"admin", "statistics", "network", "iptables"}, cbi("luci_statistics/iptables"), "Firewall", 30) + _entry({"admin", "statistics", "network", "tcpconns"}, cbi("luci_statistics/tcpconns"), "Verbindungen", 40) + _entry({"admin", "statistics", "network", "ping"}, cbi("luci_statistics/ping"), "Ping", 50) + _entry({"admin", "statistics", "network", "dns"}, cbi("luci_statistics/dns"), "DNS", 60) + + + -- public views + entry({"freifunk", "statistics"}, statistics_index, "Statistiken", 80) + + for i, plugin in ipairs( data:plugins() ) do + _entry({"freifunk", "statistics", plugin}, statistics_render, plugin, i) + end +end + + +function statistics_index() + tpl.render("admin_statistics/index") +end + +function statistics_outputplugins() + plugins = { + rrdtool="RRDTool", + network="Netzwerk", + unixsock="Unix Socket", + csv="CSV" + } + + tpl.render("admin_statistics/outputplugins", {plugins=plugins}) +end + +function statistics_systemplugins() + plugins = { + exec="Exec", + email="E-Mail", + disk="Datenträger", + irq="Interrupts", + processes="Prozesse" + } + + tpl.render("admin_statistics/systemplugins", {plugins=plugins}) +end + +function statistics_networkplugins() + plugins = { + interface="Schnittstellen", + netlink="Netlink", + iptables="Firewall", + tcpconns="Verbindungen", + ping="Ping", + dns="DNS" + } + + tpl.render("admin_statistics/networkplugins", {plugins=plugins}) +end + + +function statistics_render() + local plugin = luci.dispatcher.request[3] + local images = { } + + for i, inst in ipairs( data:plugin_instances( plugin ) ) do + local graph = rrd.Graph() + for i, img in ipairs( graph:render( "OpenWrt", plugin, inst ) ) do + table.insert( images, img ) + end + end + + tpl.render("public_statistics/graph", { images=images, plugin=plugin } ) +end diff --git a/applications/luci-statistics/luasrc/model/cbi/luci_statistics/collectd.lua b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/collectd.lua new file mode 100644 index 000000000..e09a11df1 --- /dev/null +++ b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/collectd.lua @@ -0,0 +1,71 @@ +--[[ + +Luci configuration model for statistics - general collectd configuration +(c) 2008 Freifunk Leipzig / Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +]]-- + +require("luci.sys") + + +m = Map("luci_statistics", "Collector Daemon", +[[Collectd ist ein kleiner und flexibler Dienst zum Sammeln und Abfragen von Daten +aus verschieden Quellen. Zur weiteren Verarbeitung werden die Daten in RRD Datenbanken +gespeichert oder per Multicast Relaying über das Netzwerk versendet.]]) + +-- general config section +s = m:section( NamedSection, "general", "luci_statistics", "Allgemeine Einstellungen" ) + +-- general.basedir (BaseDir) +basedir = s:option( Value, "BaseDir", "Basisverzeichnis" ) +basedir.default = "/var/run/collectd" + +-- general.include (Include) +include = s:option( Value, "Include", "Verzeichnis für Unterkonfigurationen" ) +include.default = "/etc/collectd/conf.d/*.conf" + +-- general.pidfile (PIDFile) +pidfile = s:option( Value, "PIDFile", "PID-Datei für den Collector Dienst" ) +pidfile.default = "/var/run/collectd.pid" + +-- general.plugindir (PluginDir) +plugindir = s:option( Value, "PluginDir", "Verzeichnis für die Collector-Plugins" ) +plugindir.default = "/usr/lib/collectd/" + +-- general.typesdb (TypesDB) +typesdb = s:option( Value, "TypesDB", "Datenbank mit den Datenset-Beschreibungen" ) +typesdb.default = "/etc/collectd/types.db" + +-- general.interval (Interval) +interval = s:option( Value, "Interval", "Abfrageintervall für die Datenerfassung", "Sekunden" ) +interval.default = 60 +interval.isnumber = true + +-- general.readthreads (ReadThreads) +readthreads = s:option( Value, "ReadThreads", "Anzahl paralleler Prozesse für die Datenabfrage" ) +readthreads.default = 5 +readthreads.isnumber = true + +-- general.hostname (Hostname) +hostname = s:option( Value, "Hostname", "Hostname zur Identifikation des Collector Dienstes (leer lassen um den Namen automatisch zu bestimmen)" ) +hostname.default = luci.sys.hostname() +hostname.optional = true + +-- general.fqdnlookup (FQDNLookup) +fqdnlookup = s:option( Flag, "FQDNLookup", "Versuchen den vollen Hostnamen dieser Installation herauszufinden" ) +fqdnlookup.enabled = "true" +fqdnlookup.disabled = "false" +fqdnlookup.default = "false" +fqdnlookup.optional = true +fqdnlookup:depends( "Hostname", "" ) + + +return m diff --git a/applications/luci-statistics/luasrc/model/cbi/luci_statistics/csv.lua b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/csv.lua new file mode 100644 index 000000000..e1f2c351d --- /dev/null +++ b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/csv.lua @@ -0,0 +1,39 @@ +--[[ + +Luci configuration model for statistics - collectd csv plugin configuration +(c) 2008 Freifunk Leipzig / Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +]]-- + +m = Map("luci_statistics", "CSV Plugin", +[[Das CSV-Plugin schreibt in regelmäßigen Abständen die gesammelten Daten als +CSV-Dateien in das angegebene Verzeichnis. Der Speicherbedarf wächst dabei +kontinuierlich!]]) + +-- collectd_csv config section +s = m:section( NamedSection, "collectd_csv", "luci_statistics", "Pluginkonfiguration" ) + +-- collectd_csv.enable +enable = s:option( Flag, "enable", "Plugin aktivieren" ) +enable.default = 0 + +-- collectd_csv.datadir (DataDir) +datadir = s:option( Value, "DataDir", "Ablageverzeichnis für die CSV-Dateien" ) +datadir.default = "127.0.0.1" +datadir:depends( "enable", 1 ) + +-- collectd_csv.storerates (StoreRates) +storerates = s:option( Flag, "StoreRates", "Werte nicht absolut, sondern als Raten speichern" ) +storerates.default = 0 +storerates:depends( "enable", 1 ) + +return m + diff --git a/applications/luci-statistics/luasrc/model/cbi/luci_statistics/df.lua b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/df.lua new file mode 100644 index 000000000..6e35afcb3 --- /dev/null +++ b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/df.lua @@ -0,0 +1,50 @@ +--[[ + +Luci configuration model for statistics - collectd df plugin configuration +(c) 2008 Freifunk Leipzig / Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +]]-- + +m = Map("luci_statistics", "DF Plugin", +[[Das DF-Plugin sammelt Informationen über den belegten und verfügbaren Speicherplatz auf den +angegebenen Geräten, Mountpunkten oder Dateisystemtypen.]]) + +-- collectd_df config section +s = m:section( NamedSection, "collectd_df", "luci_statistics", "Pluginkonfiguration" ) + +-- collectd_df.enable +enable = s:option( Flag, "enable", "Plugin aktivieren" ) +enable.default = 0 + +-- collectd_df.devices (Device) +devices = s:option( Value, "Devices", "Gerätedateien", "Einträge mit Leerzeichen trennen" ) +devices.default = "/dev/mtdblock/4" +devices.rmempty = true +devices:depends( "enable", 1 ) + +-- collectd_df.mountpoints (MountPoint) +mountpoints = s:option( Value, "MountPoints", "Mountpunkte", "Einträge mit Leerzeichen trennen" ) +mountpoints.default = "/jffs" +mountpoints.rmempty = true +mountpoints:depends( "enable", 1 ) + +-- collectd_df.fstypes (FSType) +fstypes = s:option( Value, "FSTypes", "Dateisystemtypen", "Einträge mit Leerzeichen trennen" ) +fstypes.default = "tmpfs" +fstypes.rmempty = true +fstypes:depends( "enable", 1 ) + +-- collectd_df.ignoreselected (IgnoreSelected) +ignoreselected = s:option( Flag, "IgnoreSelected", "Logik umkehren und alle Datenträger überwachen die nicht auf die obigen Kriterien zutreffen" ) +ignoreselected.default = 0 +ignoreselected:depends( "enable", 1 ) + +return m diff --git a/applications/luci-statistics/luasrc/model/cbi/luci_statistics/disk.lua b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/disk.lua new file mode 100644 index 000000000..587091fbd --- /dev/null +++ b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/disk.lua @@ -0,0 +1,37 @@ +--[[ + +Luci configuration model for statistics - collectd disk plugin configuration +(c) 2008 Freifunk Leipzig / Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +]]-- + +m = Map("luci_statistics", "Disk Plugin", +[[Das Disk-Plugin sammelt Informationen über Augewählte Fesplatten.]]) + +-- collectd_disk config section +s = m:section( NamedSection, "collectd_disk", "luci_statistics", "Pluginkonfiguration" ) + +-- collectd_disk.enable +enable = s:option( Flag, "enable", "Plugin aktivieren" ) +enable.default = 0 + +-- collectd_disk.disks (Disk) +devices = s:option( Value, "Disks", "Fesplatten oder Partitionen", "Einträge mit Leerzeichen trennen" ) +devices.default = "hda1 hdb" +devices.rmempty = true +devices:depends( "enable", 1 ) + +-- collectd_disk.ignoreselected (IgnoreSelected) +ignoreselected = s:option( Flag, "IgnoreSelected", "Logik umkehren und alle Datenträger und Partitionen überwachen die nicht auf die obigen Kriterien zutreffen" ) +ignoreselected.default = 0 +ignoreselected:depends( "enable", 1 ) + +return m diff --git a/applications/luci-statistics/luasrc/model/cbi/luci_statistics/dns.lua b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/dns.lua new file mode 100644 index 000000000..dc7f57d68 --- /dev/null +++ b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/dns.lua @@ -0,0 +1,42 @@ +--[[ + +Luci configuration model for statistics - collectd dns plugin configuration +(c) 2008 Freifunk Leipzig / Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +]]-- + +require("luci.sys") + + +m = Map("luci_statistics", "DNS Plugin", +[[Das DNS-Plugin nutzt die pcap Bibliothek um DNS-Verkehr zu analysieren.]]) + +-- collectd_dns config section +s = m:section( NamedSection, "collectd_dns", "luci_statistics", "Pluginkonfiguration" ) + +-- collectd_dns.enable +enable = s:option( Flag, "enable", "Plugin aktivieren" ) +enable.default = 0 + +-- collectd_dns.interfaces (Interface) +interfaces = s:option( ListValue, "Interface", "Folgende Schnittstelle überwachen:" ) +interfaces:depends( "enable", 1 ) +interfaces:value("any") +for k, v in pairs(luci.sys.net.devices()) do + interfaces:value(v) +end + +-- collectd_dns.ignoresources (IgnoreSource) +ignoresources = s:option( Value, "IgnoreSources", "Verkehr von folgenden IP Adressen ignorieren:", "mehrere Einträge mit Leerzeichen trennen" ) +ignoresources.default = "127.0.0.1" +ignoresources:depends( "enable", 1 ) + +return m diff --git a/applications/luci-statistics/luasrc/model/cbi/luci_statistics/email.lua b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/email.lua new file mode 100644 index 000000000..7b259e829 --- /dev/null +++ b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/email.lua @@ -0,0 +1,55 @@ +--[[ + +Luci configuration model for statistics - collectd email plugin configuration +(c) 2008 Freifunk Leipzig / Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +]]-- + +m = Map("luci_statistics", "E-Mail Plugin", +[[Das E-Mail-Plugin öffnet einen Unix-Socket über welchen E-Mail Statistiken an collectd +übergeben werden können. Dieses Plugin ist primär für die Verwendung mit +Mail::SpamAssassin::Plugin::Collectd gedacht, lässt sich aber auch anderweitig einsetzen.]]) + +-- collectd_email config section +s = m:section( NamedSection, "collectd_email", "luci_statistics", "Pluginkonfiguration" ) + +-- collectd_email.enable +enable = s:option( Flag, "enable", "Plugin aktivieren" ) +enable.default = 0 + +-- collectd_email.socketfile (SocketFile) +socketfile = s:option( Value, "SocketFile", "Pfad für den Unix-Socket" ) +socketfile.default = "/var/run/collect-email.sock" +socketfile:depends( "enable", 1 ) + +-- collectd_email.socketgroup (SocketGroup) +socketgroup = s:option( Value, "SocketGroup", "Dateibesitzergruppe für den Unix-Socket ändern" ) +socketgroup.default = "nobody" +socketgroup.rmempty = true +socketgroup.optional = true +socketgroup:depends( "enable", 1 ) + +-- collectd_email.socketperms (SocketPerms) +socketperms = s:option( Value, "SocketPerms", "Dateiberechtigungen für den Unix-Socket ändern" ) +socketperms.default = "0770" +socketperms.rmempty = true +socketperms.optional = true +socketperms:depends( "enable", 1 ) + +-- collectd_email.maxconns (MaxConns) +maxconns = s:option( Value, "MaxConns", "Maximale Anzahl paralleler Verbindungen", "Werte von 1 bis 16384" ) +maxconns.default = 5 +maxconns.isinteger = true +maxconns.rmempty = true +maxconns.optional = true +maxconns:depends( "enable", 1 ) + +return m diff --git a/applications/luci-statistics/luasrc/model/cbi/luci_statistics/exec.lua b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/exec.lua new file mode 100644 index 000000000..d1fe0f0db --- /dev/null +++ b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/exec.lua @@ -0,0 +1,77 @@ +--[[ + +Luci configuration model for statistics - collectd exec plugin configuration +(c) 2008 Freifunk Leipzig / Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +]]-- + +m = Map("luci_statistics", "Exec Plugin", +[[Das Exec-Plugin ermöglicht das Ausführen von externen Programmen um Werte einzulesen +oder Aktionen beim Eintreten bestimmter Ereignisse anzustoßen.]]) + +-- collectd_exec config section +s = m:section( NamedSection, "collectd_exec", "luci_statistics", "Pluginkonfiguration" ) + +-- collectd_exec.enable +enable = s:option( Flag, "enable", "Plugin aktivieren" ) +enable.default = 0 + + +-- collectd_exec_input config section (Exec directives) +exec = m:section( TypedSection, "collectd_exec_input", "Befehl zum Einlesen von Daten hinzufügen", +[[Hier können externe Kommandos definiert werden welche durch collectd gestartet werden um bestimmte +Daten zu sammeln. Die Werte werden dabei von der Standardausgabe des Programmes gelesen.]]) +exec.addremove = true +exec.anonymous = true + +-- collectd_exec_input.cmdline +exec_cmdline = exec:option( Value, "cmdline", "Kommandozeile" ) +exec_cmdline.default = "/usr/bin/stat-dhcpusers" + +-- collectd_exec_input.cmdline +exec_cmduser = exec:option( Value, "cmduser", "Als anderer Benutzer ausführen" ) +exec_cmduser.default = "nobody" +exec_cmduser.rmempty = true +exec_cmduser.optional = true + +-- collectd_exec_input.cmdline +exec_cmdgroup = exec:option( Value, "cmdgroup", "Als andere Gruppe ausführen" ) +exec_cmdgroup.default = "nogroup" +exec_cmdgroup.rmempty = true +exec_cmdgroup.optional = true + + +-- collectd_exec_notify config section (NotifyExec directives) +notify = m:section( TypedSection, "collectd_exec_notify", "Befehl zum Ausgeben von Daten hinzufügen", +[[Hier können externe Kommandos definiert werden welche zur Ausführung kommen sobald bestimmte +Ereignise eintreten. Die Daten werden dabei an die Standardeingabe des aufgerufenen Programmes gesendet. +Siehe dazu auch die Sektion "Limits".]]) +notify.addremove = true +notify.anonymous = true + +-- collectd_notify_input.cmdline +notify_cmdline = notify:option( Value, "cmdline", "Kommandozeile" ) +notify_cmdline.default = "/usr/bin/stat-dhcpusers" + +-- collectd_notify_input.cmdline +notify_cmduser = notify:option( Value, "cmduser", "Als anderer Benutzer ausführen" ) +notify_cmduser.default = "nobody" +notify_cmduser.rmempty = true +notify_cmduser.optional = true + +-- collectd_notify_input.cmdline +notify_cmdgroup = notify:option( Value, "cmdgroup", "Als andere Gruppe ausführen" ) +notify_cmdgroup.default = "nogroup" +notify_cmdgroup.rmempty = true +notify_cmdgroup.optional = true + + +return m diff --git a/applications/luci-statistics/luasrc/model/cbi/luci_statistics/interface.lua b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/interface.lua new file mode 100644 index 000000000..3cd71a15d --- /dev/null +++ b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/interface.lua @@ -0,0 +1,42 @@ +--[[ + +Luci configuration model for statistics - collectd interface plugin configuration +(c) 2008 Freifunk Leipzig / Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +]]-- + +require("luci.sys") + + +m = Map("luci_statistics", "Interface Plugin", +[[Das Interface-Plugin sammelt Informationen zum Netzwerkverkehr auf den einzelnen Schnittstellen.]]) + +-- collectd_interface config section +s = m:section( NamedSection, "collectd_interface", "luci_statistics", "Pluginkonfiguration" ) + +-- collectd_interface.enable +enable = s:option( Flag, "enable", "Plugin aktivieren" ) +enable.default = 0 + +-- collectd_interface.interfaces (Interface) +interfaces = s:option( MultiValue, "Interfaces", "Ãœberwachte Schnittstellen", "mehrere Einträge mit Strg selektieren" ) +interfaces.widget = "select" +interfaces:depends( "enable", 1 ) +for k, v in pairs(luci.sys.net.devices()) do + interfaces:value(v) +end + +-- collectd_interface.ignoreselected (IgnoreSelected) +ignoreselected = s:option( Flag, "IgnoreSelected", "Alle Schnittstellen außer ausgewählte überwachen" ) +ignoreselected.default = 0 +ignoreselected:depends( "enable", 1 ) + +return m diff --git a/applications/luci-statistics/luasrc/model/cbi/luci_statistics/iptables.lua b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/iptables.lua new file mode 100644 index 000000000..4b6d9dbf4 --- /dev/null +++ b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/iptables.lua @@ -0,0 +1,121 @@ +--[[ + +Luci configuration model for statistics - collectd iptables plugin configuration +(c) 2008 Freifunk Leipzig / Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +]]-- + +require("luci.sys.iptparser") + +ip = luci.sys.iptparser.IptParser() +chains = { } +targets = { } + +for i, rule in ipairs( ip:find() ) do + chains[rule.chain] = true + targets[rule.target] = true +end + + +m = Map("luci_statistics", "Iptables Plugin", +[[Das Iptables-Plugin ermöglicht die Ãœberwachung bestimmter Firewallregeln um +Werte wie die Anzahl der verarbeiteten Pakete oder die insgesamt erfasste Datenmenge +zu speichern.]]) + +-- collectd_iptables config section +s = m:section( NamedSection, "collectd_iptables", "luci_statistics", "Pluginkonfiguration" ) + +-- collectd_iptables.enable +enable = s:option( Flag, "enable", "Plugin aktivieren" ) +enable.default = 0 + + +-- collectd_iptables_match config section (Chain directives) +rule = m:section( TypedSection, "collectd_iptables_match", "Regel hinzufügen", +[[Hier werden die Kriterien festgelegt, nach welchen die Firewall-Regeln zur Ãœberwachung +ausgewählt werden.]]) +rule.addremove = true +rule.anonymous = true + + +-- collectd_iptables_match.name +rule_table = rule:option( Value, "name", "Name der Regel", "wird im Diagram verwendet" ) + +-- collectd_iptables_match.table +rule_table = rule:option( ListValue, "table", "Firewall-Tabelle" ) +rule_table.default = "filter" +rule_table.rmempty = true +rule_table.optional = true +rule_table:value("") +rule_table:value("filter") +rule_table:value("nat") +rule_table:value("mangle") + + +-- collectd_iptables_match.chain +rule_chain = rule:option( ListValue, "chain", "Firewall-Kette (Chain)" ) +rule_chain.rmempty = true +rule_chain.optional = true +rule_chain:value("") + +for chain, void in pairs( chains ) do + rule_chain:value( chain ) +end + + +-- collectd_iptables_match.target +rule_target = rule:option( ListValue, "target", "Firewall-Aktion (Target)" ) +rule_target.rmempty = true +rule_target.optional = true +rule_target:value("") + +for target, void in pairs( targets ) do + rule_target:value( target ) +end + + +-- collectd_iptables_match.protocol +rule_protocol = rule:option( ListValue, "protocol", "Netzwerkprotokoll" ) +rule_protocol.rmempty = true +rule_protocol.optional = true +rule_protocol:value("") +rule_protocol:value("tcp") +rule_protocol:value("udp") +rule_protocol:value("icmp") + +-- collectd_iptables_match.source +rule_source = rule:option( Value, "source", "Quell-IP-Bereich", "Bereich in CIDR Notation" ) +rule_source.default = "0.0.0.0/0" +rule_source.rmempty = true +rule_source.optional = true + +-- collectd_iptables_match.destination +rule_destination = rule:option( Value, "destination", "Ziel-IP-Bereich", "Bereich in CIDR Notation" ) +rule_destination.default = "0.0.0.0/0" +rule_destination.rmempty = true +rule_destination.optional = true + +-- collectd_iptables_match.inputif +rule_inputif = rule:option( Value, "inputif", "eingehende Schnittstelle", "z.B. eth0.0" ) +rule_inputif.rmempty = true +rule_inputif.optional = true + +-- collectd_iptables_match.outputif +rule_outputif = rule:option( Value, "outputif", "ausgehende Schnittstelle", "z.B. eth0.1" ) +rule_outputif.rmempty = true +rule_outputif.optional = true + +-- collectd_iptables_match.options +rule_options = rule:option( Value, "options", "Optionen", "z.B. reject-with tcp-reset" ) +rule_options.rmempty = true +rule_options.optional = true + +return m diff --git a/applications/luci-statistics/luasrc/model/cbi/luci_statistics/irq.lua b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/irq.lua new file mode 100644 index 000000000..2d15e5232 --- /dev/null +++ b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/irq.lua @@ -0,0 +1,39 @@ +--[[ + +Luci configuration model for statistics - collectd irq plugin configuration +(c) 2008 Freifunk Leipzig / Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +]]-- + +m = Map("luci_statistics", "IRQ Plugin", +[[Das IRQ-Plugin sammelt Informationen zur Auslastung einzelner Interrupts. +Werden keine Interrupts angegeben, überwacht das Plugin alle vorhanden IRQs im System. +]]) + +-- collectd_irq config section +s = m:section( NamedSection, "collectd_irq", "luci_statistics", "Pluginkonfiguration" ) + +-- collectd_irq.enable +enable = s:option( Flag, "enable", "Plugin aktivieren" ) +enable.default = 0 + +-- collectd_irq.irqs (Irq) +irqs = s:option( Value, "Irqs", "Ãœberwachte Interrupts", "mehrere mit Leerzeichen trennen" ) +irqs.optional = true +irqs:depends( "enable", 1 ) + +-- collectd_irq.ignoreselected (IgnoreSelected) +ignoreselected = s:option( Flag, "IgnoreSelected", "Alle Interrupts außer ausgewählte überwachen" ) +ignoreselected.default = 0 +ignoreselected.optional = "true" +ignoreselected:depends( "enable", 1 ) + +return m diff --git a/applications/luci-statistics/luasrc/model/cbi/luci_statistics/netlink.lua b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/netlink.lua new file mode 100644 index 000000000..a27def8eb --- /dev/null +++ b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/netlink.lua @@ -0,0 +1,84 @@ +--[[ + +Luci configuration model for statistics - collectd netlink plugin configuration +(c) 2008 Freifunk Leipzig / Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +]]-- + +require("luci.sys") + + +m = Map("luci_statistics", "Interface Plugin", +[[Das Netlink-Plugin sammelt erweiterte Informationen wie Qdisc-, Class- und Filter-Werten auf einzelnen Schnittstellen.]]) + +-- collectd_netlink config section +s = m:section( NamedSection, "collectd_netlink", "luci_statistics", "Pluginkonfiguration" ) + +-- collectd_netlink.enable +enable = s:option( Flag, "enable", "Plugin aktivieren" ) +enable.default = 0 + +-- collectd_netlink.interfaces (Interface) +interfaces = s:option( MultiValue, "Interfaces", "einfach Ãœberwachte Schnittstellen", "mehrere Einträge mit Strg selektieren" ) +interfaces.widget = "select" +interfaces.optional = true +interfaces:depends( "enable", 1 ) +interfaces:value("") +for i, v in ipairs(luci.sys.net.devices()) do + interfaces:value(v) +end + +-- collectd_netlink.verboseinterfaces (VerboseInterface) +verboseinterfaces = s:option( MultiValue, "VerboseInterfaces", "detailliert Ãœberwachte Schnittstellen", "mehrere Einträge mit Strg selektieren" ) +verboseinterfaces.widget = "select" +verboseinterfaces.optional = true +verboseinterfaces:depends( "enable", 1 ) +verboseinterfaces:value("") +for i, v in ipairs(luci.sys.net.devices()) do + verboseinterfaces:value(v) +end + +-- collectd_netlink.qdiscs (QDisc) +qdiscs = s:option( MultiValue, "QDiscs", "Queue Discipline auf Schnittstellen Ãœberwachen", "mehrere Einträge mit Strg selektieren" ) +qdiscs.widget = "select" +qdiscs.optional = true +qdiscs:depends( "enable", 1 ) +qdiscs:value("") +for i, v in ipairs(luci.sys.net.devices()) do + qdiscs:value(v) +end + +-- collectd_netlink.classes (Class) +classs = s:option( MultiValue, "Classes", "Shapingklassen auf Schnittstellen Ãœberwachen", "mehrere Einträge mit Strg selektieren" ) +classs.widget = "select" +classs.optional = true +classs:depends( "enable", 1 ) +classs:value("") +for i, v in ipairs(luci.sys.net.devices()) do + classs:value(v) +end + +-- collectd_netlink.filters (Filter) +filters = s:option( MultiValue, "Filters", "Filterklassen auf Schnittstellen Ãœberwachen", "mehrere Einträge mit Strg selektieren" ) +filters.widget = "select" +filters.optional = true +filters:depends( "enable", 1 ) +filters:value("") +for i, v in ipairs(luci.sys.net.devices()) do + filters:value(v) +end + +-- collectd_netlink.ignoreselected (IgnoreSelected) +ignoreselected = s:option( Flag, "IgnoreSelected", "Alle Schnittstellen außer ausgewählte überwachen" ) +ignoreselected.default = 0 +ignoreselected:depends( "enable", 1 ) + +return m diff --git a/applications/luci-statistics/luasrc/model/cbi/luci_statistics/network.lua b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/network.lua new file mode 100644 index 000000000..ab3c6303c --- /dev/null +++ b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/network.lua @@ -0,0 +1,84 @@ +--[[ + +Luci configuration model for statistics - collectd network plugin configuration +(c) 2008 Freifunk Leipzig / Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +]]-- + + +m = Map("luci_statistics", "Network Plugin", +[[Das Network-Plugin ermöglicht den netzwerkgestützen Austausch von Statistikdaten.]]) + +-- collectd_network config section +s = m:section( NamedSection, "collectd_network", "luci_statistics", "Pluginkonfiguration" ) + +-- collectd_network.enable +enable = s:option( Flag, "enable", "Plugin aktivieren" ) +enable.default = 0 + + +-- collectd_network_listen config section (Listen) +listen = m:section( TypedSection, "collectd_network_listen", "Schnittstellen für eingehende Verbindungen", +[[Legt fest auf welchen Schnittstellen bzw. IP-Adressen collectd auf eingehende Verbindungen wartet.]]) +listen.addremove = true +listen.anonymous = true + + +-- collectd_network_listen.host +listen_host = listen:option( Value, "host", "Listen-Host", "Host-, IP- oder IPv6-Adresse" ) +listen_host.default = "0.0.0.0" + +-- collectd_network_listen.port +listen_port = listen:option( Value, "port", "Listen-Port", "Partnummer 0 - 65535" ) +listen_port.default = 25826 +listen_port.isinteger = true +listen_port.optional = true + + +-- collectd_network_server config section (Server) +server = m:section( TypedSection, "collectd_network_server", "Schnittstellen für ausgehende Verbindungen", +[[Legt fest auf welchen Schnittstellen bzw. IP-Adressen collectd als Server agiert.]]) +server.addremove = true +server.anonymous = true + + +-- collectd_network_server.host +server_host = server:option( Value, "host", "Server-Host", "Host-, IP- oder IPv6-Adresse" ) +server_host.default = "0.0.0.0" + +-- collectd_network_server.port +server_port = server:option( Value, "port", "Server-Port", "Partnummer 0 - 65535" ) +server_port.default = 25826 +server_port.isinteger = true +server_port.optional = true + +-- collectd_network.timetolive (TimeToLive) +ttl = s:option( Value, "TimeToLive", "Time-to-Live für die Pakete", "Werte 0 bis 255" ) +ttl.default = 128 +ttl.isinteger = true +ttl.optional = true +ttl:depends( "enable", 1 ) + +-- collectd_network.forward (Forward) +forward = s:option( Flag, "Forward", "Weiterleitung zwischen verschiedenen Listen- und Server-Adressen" ) +forward.default = 0 +forward.optional = true +forward:depends( "enable", 1 ) + +-- collectd_network.forward (CacheFlush) +forward = s:option( Value, "CacheFlush", "Löschintervall für temporäre Daten", "in Sekunden" ) +forward.default = 86400 +forward.isinteger = true +forward.optional = true +forward:depends( "enable", 1 ) + + +return m diff --git a/applications/luci-statistics/luasrc/model/cbi/luci_statistics/ping.lua b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/ping.lua new file mode 100644 index 000000000..334a0300d --- /dev/null +++ b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/ping.lua @@ -0,0 +1,38 @@ +--[[ + +Luci configuration model for statistics - collectd ping plugin configuration +(c) 2008 Freifunk Leipzig / Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +]]-- + +m = Map("luci_statistics", "Ping Plugin", +[[Das Ping-Plugin veranlasst periodische ICMP-Requests an die angegebenen Adressen und zeichnet +Parameter wie Verfügbarkeit und Antwortzeiten auf.]]) + +-- collectd_ping config section +s = m:section( NamedSection, "collectd_ping", "luci_statistics", "Pluginkonfiguration" ) + +-- collectd_ping.enable +enable = s:option( Flag, "enable", "Plugin aktivieren" ) +enable.default = 0 + +-- collectd_ping.hosts (Host) +hosts = s:option( Value, "Hosts", "Zieladressen", "Einträge durch Leerzeichen trennen" ) +hosts.default = "127.0.0.1" +hosts:depends( "enable", 1 ) + +-- collectd_ping.ttl (TTL) +ttl = s:option( Value, "TTL", "Time-to-Live für die ICMP-Pakete (Werte 0 bis 255)" ) +ttl.isinteger = true +ttl.default = 128 +ttl:depends( "enable", 1 ) + +return m diff --git a/applications/luci-statistics/luasrc/model/cbi/luci_statistics/processes.lua b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/processes.lua new file mode 100644 index 000000000..354cecaf1 --- /dev/null +++ b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/processes.lua @@ -0,0 +1,31 @@ +--[[ + +Luci configuration model for statistics - collectd processes plugin configuration +(c) 2008 Freifunk Leipzig / Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +]]-- + +m = Map("luci_statistics", "Processes Plugin", +[[Das Processes-Plugin sammelt Informationen über ausgewählte Prozesse auf diesem Gerät.]]) + +-- collectd_processes config section +s = m:section( NamedSection, "collectd_processes", "luci_statistics", "Pluginkonfiguration" ) + +-- collectd_processes.enable +enable = s:option( Flag, "enable", "Plugin aktivieren" ) +enable.default = 0 + +-- collectd_processes.processes (Process) +processes = s:option( Value, "Processes", "Ãœberwachte Prozesse", "mehrere mit Leerzeichen trennen" ) +processes.default = "olsrd bmxd httpd dnsmasq dropbear tinc" +processes:depends( "enable", 1 ) + +return m diff --git a/applications/luci-statistics/luasrc/model/cbi/luci_statistics/rrdtool.lua b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/rrdtool.lua new file mode 100644 index 000000000..89adf52a7 --- /dev/null +++ b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/rrdtool.lua @@ -0,0 +1,99 @@ +--[[ + +Luci configuration model for statistics - collectd rrdtool plugin configuration +(c) 2008 Freifunk Leipzig / Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +]]-- + +m = Map("luci_statistics", "RRDTool Plugin", +[[Das RRDTool-Plugin schreibt die gesammelten Werte in sogenannte RRD Datenbanken, welche die +Grundlage für die Statistik-Diagramme bilden.

+Die Einstellungen auf dieser Seite sollten nur in Ausnahmefällen geändert werden, +falsche Einstellungen führen zu einem sehr hohem Platzverbrauch im Temp-Verzeichnis und das +Gerät kann nur noch im Failsafe-Modus repariert werden!]]) + +-- collectd_rrdtool config section +s = m:section( NamedSection, "collectd_rrdtool", "luci_statistics", "Pluginkonfiguration" ) + +-- collectd_rrdtool.enable +enable = s:option( Flag, "enable", "Plugin aktivieren" ) +enable.default = 1 + +-- collectd_rrdtool.datadir (DataDir) +datadir = s:option( Value, "DataDir", "Speicherort für die RRD Datenbanken" ) +datadir.default = "/tmp" +datadir.rmempty = true +datadir.optional = true +datadir:depends( "enable", 1 ) + +-- collectd_rrdtool.stepsize (StepSize) +stepsize = s:option( Value, "StepSize", "Schritt-Interval", "in Sekunden" ) +stepsize.default = 30 +stepsize.isinteger = true +stepsize.rmempty = true +stepsize.optional = true +stepsize:depends( "enable", 1 ) + +-- collectd_rrdtool.heartbeat (HeartBeat) +heartbeat = s:option( Value, "HeartBeat", "Heart-Beat-Interval", "in Sekunden" ) +heartbeat.default = 60 +heartbeat.isinteger = true +heartbeat.rmempty = true +heartbeat.optional = true +heartbeat:depends( "enable", 1 ) + +-- collectd_rrdtool.rrasingle (RRASingle) +rrasingle = s:option( Flag, "RRASingle", 'Jeweils nur ein RRA anlegen', "reduziert die Größe der RRDs" ) +rrasingle.default = true +rrasingle.rmempty = true +rrasingle.optional = true +rrasingle:depends( "enable", 1 ) + +-- collectd_rrdtool.rratimespans (RRATimespan) +rratimespans = s:option( Value, "RRATimespans", "Gespeicherte Zeitspannen", "in Sekunden; mehrere mit Leerzeichen trennen" ) +rratimespans.default = "600 86400 604800 2678400 31622400" +rratimespans.rmempty = true +rratimespans.optional = true +rratimespans:depends( "enable", 1 ) + +-- collectd_rrdtool.rrarows (RRARows) +rrarows = s:option( Value, "RRARows", "Anzahl der Datenpunkte pro Zeitspanne" ) +rrarows.isinteger = true +rrarows.default = 100 +rrarows.rmempty = true +rrarows.optional = true +rrarows:depends( "enable", 1 ) + +-- collectd_rrdtool.xff (XFF) +xff = s:option( Value, "XFF", "RRD XFiles Faktor" ) +xff.default = 0.1 +xff.isnumber = true +xff.rmempty = true +xff.optional = true +xff:depends( "enable", 1 ) + +-- collectd_rrdtool.cachetimeout (CacheTimeout) +cachetimeout = s:option( Value, "CacheTimeout", "Daten für Zeitspanne cachen", "in Sekunden" ) +cachetimeout.isinteger = true +cachetimeout.default = 100 +cachetimeout.rmempty = true +cachetimeout.optional = true +cachetimeout:depends( "enable", 1 ) + +-- collectd_rrdtool.cacheflush (CacheFlush) +cacheflush = s:option( Value, "CacheFlush", "Cache nach Zeitspanne leeren", "in Sekunden" ) +cacheflush.isinteger = true +cacheflush.default = 100 +cacheflush.rmempty = true +cacheflush.optional = true +cacheflush:depends( "enable", 1 ) + +return m diff --git a/applications/luci-statistics/luasrc/model/cbi/luci_statistics/tcpconns.lua b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/tcpconns.lua new file mode 100644 index 000000000..079befac5 --- /dev/null +++ b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/tcpconns.lua @@ -0,0 +1,41 @@ +--[[ + +Luci configuration model for statistics - collectd tcpconns plugin configuration +(c) 2008 Freifunk Leipzig / Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +]]-- + +m = Map("luci_statistics", "Tcpconns Plugin", +[[Das Tcpconns-Plugin zählt TCP-Verbindungen auf einzelnen Ports.]]) + +-- collectd_tcpconns config section +s = m:section( NamedSection, "collectd_tcpconns", "luci_statistics", "Pluginkonfiguration" ) + +-- collectd_tcpconns.enable +enable = s:option( Flag, "enable", "Plugin aktivieren" ) +enable.default = 0 + +-- collectd_tcpconns.listeningports (ListeningPorts) +listeningports = s:option( Flag, "ListeningPorts", "Alle von lokalen Diensten genutzen Ports überwachen" ) +listeningports.default = 1 +listeningports:depends( "enable", 1 ) + +-- collectd_tcpconns.localports (LocalPort) +localports = s:option( Value, "LocalPorts", "Lokale Ports", "mit Leerzeichen trennen" ) +localports.optional = true +localports:depends( "enable", 1 ) + +-- collectd_tcpconns.remoteports (RemotePort) +remoteports = s:option( Value, "RemotePorts", "Entfernte Ports", "mit Leerzeichen trennen" ) +remoteports.optional = true +remoteports:depends( "enable", 1 ) + +return m diff --git a/applications/luci-statistics/luasrc/model/cbi/luci_statistics/unixsock.lua b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/unixsock.lua new file mode 100644 index 000000000..dcedd381b --- /dev/null +++ b/applications/luci-statistics/luasrc/model/cbi/luci_statistics/unixsock.lua @@ -0,0 +1,46 @@ +--[[ + +Luci configuration model for statistics - collectd unixsock plugin configuration +(c) 2008 Freifunk Leipzig / Jo-Philipp Wich + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +$Id$ + +]]-- + +m = Map("luci_statistics", "Unixsock Plugin", +[[Das Unixsock-Plugin öffnet einen Socket über welchen die gesammelten Werte des +laufenden collectd Prozesses abgefragt werden können.]]) + +-- collectd_unixsock config section +s = m:section( NamedSection, "collectd_unixsock", "luci_statistics", "Pluginkonfiguration" ) + +-- collectd_unixsock.enable +enable = s:option( Flag, "enable", "Plugin aktivieren" ) +enable.default = 0 + +-- collectd_unixsock.socketfile (SocketFile) +socketfile = s:option( Value, "SocketFile", "Pfad für den Unix-Socket" ) +socketfile.default = "/var/run/collect-query.socket" +socketfile:depends( "enable", 1 ) + +-- collectd_unixsock.socketgroup (SocketGroup) +socketgroup = s:option( Value, "SocketGroup", "Dateibesitzergruppe für den Unix-Socket ändern" ) +socketgroup.default = "nobody" +socketgroup.rmempty = true +socketgroup.optional = true +socketgroup:depends( "enable", 1 ) + +-- collectd_unixsock.socketperms (SocketPerms) +socketperms = s:option( Value, "SocketPerms", "Dateiberechtigungen für den Unix-Socket ändern" ) +socketperms.default = "0770" +socketperms.rmempty = true +socketperms.optional = true +socketperms:depends( "enable", 1 ) + +return m diff --git a/applications/luci-statistics/luasrc/statistics/datatree.lua b/applications/luci-statistics/luasrc/statistics/datatree.lua new file mode 100644 index 000000000..957b230a9 --- /dev/null +++ b/applications/luci-statistics/luasrc/statistics/datatree.lua @@ -0,0 +1,134 @@ +module("luci.statistics.datatree", package.seeall) + +local util = require("luci.util") +local sys = require("luci.sys") +local fs = require("luci.fs") +local uci = require("luci.model.uci").Session() +local sections, names = uci:sections( "luci_statistics" ) + + +Instance = util.class() + +function Instance.__init__( self, host ) + self._host = host or sections.collectd.Hostname or sys.hostname() + self._libdir = sections.collectd.PluginDir or "/usr/lib/collectd" + self._rrddir = sections.collectd_rrdtool.DataDir or "/tmp" + + self._libdir = self._libdir:gsub("/$","") + self._rrddir = self._rrddir:gsub("/$","") + self._plugins = { } + + self:_scan() +end + +function Instance._mkpath( self, plugin, pinstance ) + local dir = self._rrddir .. "/" .. self._host + + if type(plugin) == "string" and plugin:len() > 0 then + dir = dir .. "/" .. plugin + + if type(pinstance) == "string" and pinstance:len() > 0 then + dir = dir .. "-" .. pinstance + end + end + + return dir +end + +function Instance._notzero( self, table ) + for k in pairs(table) do + return true + end + + return false +end + +function Instance._scan( self ) + for i, plugin in ipairs( fs.dir( self._libdir ) ) do + if plugin:match("%w+.so") then + self._plugins[ plugin:gsub(".so", "") ] = { } + end + end + + for plugin, instances in pairs( self._plugins ) do + for i, dir in ipairs( fs.dir( self:_mkpath() ) ) do + if dir:find( plugin .. "%-" ) or dir == plugin then + local instance = "" + + if dir ~= plugin then + instance = dir:gsub( plugin .. "%-", "", 1 ) + end + + instances[instance] = { } + end + end + + for instance, data_instances in pairs( instances ) do + for i, file in ipairs( fs.dir( self:_mkpath( plugin, instance ) ) ) do + if file:find("%.rrd") then + file = file:gsub("%.rrd","") + + local data_type + local data_instance + + if file:find("%-") then + data_type = file:gsub( "%-.+","" ) + data_instance = file:gsub( "[^%-]-%-", "", 1 ) + else + data_type = file + data_instance = "" + end + + if not data_instances[data_type] then + data_instances[data_type] = { data_instance } + else + table.insert( data_instances[data_type], data_instance ) + end + end + end + end + end +end + + +function Instance.plugins( self ) + local rv = { } + + for plugin, val in pairs( self._plugins ) do + if self:_notzero( val ) then + table.insert( rv, plugin ) + end + end + + return rv +end + +function Instance.plugin_instances( self, plugin ) + local rv = { } + + for instance, val in pairs( self._plugins[plugin] ) do + table.insert( rv, instance ) + end + + return rv +end + +function Instance.data_types( self, plugin, instance ) + local rv = { } + + for type, val in pairs( self._plugins[plugin][instance] ) do + table.insert( rv, type ) + end + + return rv +end + +function Instance.data_instances( self, plugin, instance, type ) + local rv = { } + + for i, instance in ipairs( self._plugins[plugin][instance][type] ) do + table.insert( rv, instance ) + end + + return rv +end diff --git a/applications/luci-statistics/luasrc/statistics/rrdtool.lua b/applications/luci-statistics/luasrc/statistics/rrdtool.lua new file mode 100644 index 000000000..b399866a8 --- /dev/null +++ b/applications/luci-statistics/luasrc/statistics/rrdtool.lua @@ -0,0 +1,264 @@ +module("luci.statistics.rrdtool", package.seeall) + +require("luci.statistics.datatree") +require("luci.statistics.rrdtool.colors") +require("luci.statistics.rrdtool.definitions") +require("luci.util") +require("luci.bits") +require("luci.fs") + + +Graph = luci.util.class() + +function Graph.__init__( self, timespan, opts ) + + opts = opts or { } + opts.width = opts.width or "400" + + self.colors = luci.statistics.rrdtool.colors.Instance() + self.defs = luci.statistics.rrdtool.definitions.Instance() + self.tree = luci.statistics.datatree.Instance() + + -- rrdtool defalt args + self.args = { + "-a", "PNG", + "-s", "NOW-" .. ( timespan or 900 ), + "-w", opts.width + } +end + +function Graph.mktitle( self, host, plugin, plugin_instance, dtype, dtype_instance ) + local t = host .. "/" .. plugin + if type(plugin_instance) == "string" and plugin_instance:len() > 0 then + t = t .. "-" .. plugin_instance + end + t = t .. "/" .. dtype + if type(dtype_instance) == "string" and dtype_instance:len() > 0 then + t = t .. "-" .. dtype_instance + end + return t +end + +function Graph.mkrrdpath( self, ... ) + return string.format( "/tmp/%s.rrd", self:mktitle( ... ) ) +end + +function Graph.mkpngpath( self, ... ) + return string.format( "/tmp/rrdimg/%s.png", self:mktitle( ... ) ) +end + +function Graph._push( self, elem ) + + if type(elem) == "string" then + table.insert( self.args, elem ) + else + for i, item in ipairs(elem) do + table.insert( self.args, item ) + end + end + + return( self.args ) +end + +function Graph._clearargs( self ) + for i = #self.args, 7, -1 do + table.remove( self.args, i ) + end +end + +function Graph._forcelol( self, list ) + if type(list[1]) ~= "table" then + return( { list } ) + end + return( list ) +end + +function Graph._rrdtool( self, png, rrd ) + + -- prepare directory + local dir = png:gsub("/[^/]+$","") + luci.fs.mkdir( dir, true ) + + -- construct commandline + local cmdline = "rrdtool graph " .. png + + for i, opt in ipairs(self.args) do + + opt = opt .. "" -- force string + + if rrd then + opt = opt:gsub( "{file}", rrd ) + end + + if opt:match("[^%w]") then + cmdline = cmdline .. " '" .. opt .. "'" + else + cmdline = cmdline .. " " .. opt + end + end + + -- execute rrdtool + local rrdtool = io.popen( cmdline ) + rrdtool:close() +end + +function Graph._generic( self, opts ) + + local images = { } + + -- remember images + table.insert( images, opts.image ) + + -- insert provided addition rrd options + self:_push( { "-t", opts.title or "Unknown title" } ) + self:_push( opts.rrd ) + + -- construct an array of safe instance names + local inst_names = { } + for i, source in ipairs(opts.sources) do + inst_names[i] = i .. source.name:gsub("[^A-Za-z0-9%-_]","_") + end + + -- create DEF statements for each instance, find longest instance name + local longest_name = 0 + for i, source in ipairs(opts.sources) do + if source.name:len() > longest_name then + longest_name = source.name:len() + end + + local ds = source.ds or "value" + + self:_push( "DEF:" .. inst_names[i] .. "_min=" ..source.rrd .. ":" .. ds .. ":MIN" ) + self:_push( "DEF:" .. inst_names[i] .. "_avg=" ..source.rrd .. ":" .. ds .. ":AVERAGE" ) + self:_push( "DEF:" .. inst_names[i] .. "_max=" ..source.rrd .. ":" .. ds .. ":MAX" ) + self:_push( "CDEF:" .. inst_names[i] .. "_nnl=" .. inst_names[i] .. "_avg,UN,0," .. inst_names[i] .. "_avg,IF" ) + end + + -- create CDEF statement for last instance name + self:_push( "CDEF:" .. inst_names[#inst_names] .. "_stk=" .. inst_names[#inst_names] .. "_nnl" ) + + -- create CDEF statements for each instance + for i, source in ipairs(inst_names) do + if i > 1 then + self:_push( + "CDEF:" .. + inst_names[1 + #inst_names - i] .. "_stk=" .. + inst_names[1 + #inst_names - i] .. "_nnl," .. + inst_names[2 + #inst_names - i] .. "_stk,+" + ) + end + end + + -- create LINE and GPRINT statements for each instance + for i, source in ipairs(opts.sources) do + + local legend = string.format( + "%-" .. longest_name .. "s", + source.name + ) + + local numfmt = opts.number_format or "%6.1lf" + + local line_color + local area_color + + -- find color: try source, then opts.colors; fall back to random color + if type(source.color) == "string" then + line_color = source.color + area_color = self.colors:from_string( line_color ) + elseif type(opts.colors[source.name:gsub("[^%w]","_")]) == "string" then + line_color = opts.colors[source.name:gsub("[^%w]","_")] + area_color = self.colors:from_string( line_color ) + else + area_color = self.colors:random() + line_color = self.colors:to_string( area_color ) + end + + -- derive area background color from line color + area_color = self.colors:to_string( self.colors:faded( area_color ) ) + + + self:_push( "AREA:" .. inst_names[i] .. "_stk#" .. area_color ) + self:_push( "LINE1:" .. inst_names[i] .. "_stk#" .. line_color .. ":" .. legend ) + self:_push( "GPRINT:" .. inst_names[i] .. "_min:MIN:" .. numfmt .. " Min" ) + self:_push( "GPRINT:" .. inst_names[i] .. "_avg:AVERAGE:" .. numfmt .. " Avg" ) + self:_push( "GPRINT:" .. inst_names[i] .. "_max:MAX:" .. numfmt .. " Max" ) + self:_push( "GPRINT:" .. inst_names[i] .. "_avg:LAST:" .. numfmt .. " Last\\l" ) + end + + return images +end + +function Graph.render( self, host, plugin, plugin_instance ) + + dtype_instances = dtype_instances or { "" } + local pngs = { } + + -- check for a whole graph handler + local plugin_def = "luci.statistics.rrdtool.definitions." .. plugin + local stat, def = pcall( require, plugin_def ) + + if stat and def and type(def.rrdargs) == "function" then + for i, opts in ipairs( self:_forcelol( def.rrdargs( self, host, plugin, plugin_instance, dtype ) ) ) do + for i, png in ipairs( self:_generic( opts ) ) do + table.insert( pngs, png ) + + -- exec + self:_rrdtool( png ) + + -- clear args + self:_clearargs() + end + end + else + + -- no graph handler, iterate over data types + for i, dtype in ipairs( self.tree:data_types( plugin, plugin_instance ) ) do + + -- check for data type handler + local dtype_def = plugin_def .. "." .. dtype + local stat, def = pcall( require, dtype_def ) + + if stat and def and type(def.rrdargs) == "function" then + for i, opts in ipairs( self:_forcelol( def.rrdargs( self, host, plugin, plugin_instance, dtype ) ) ) do + for i, png in ipairs( self:_generic( opts ) ) do + table.insert( pngs, png ) + + -- exec + self:_rrdtool( png ) + + -- clear args + self:_clearargs() + end + end + else + + -- no data type handler, fall back to builtin definition + if type(self.defs.definitions[dtype]) == "table" then + + -- iterate over data type instances + for i, inst in ipairs( self.tree:data_instances( plugin, plugin_instance, dtype ) ) do + + local title = self:mktitle( host, plugin, plugin_instance, dtype, inst ) + local png = self:mkpngpath( host, plugin, plugin_instance, dtype, inst ) + local rrd = self:mkrrdpath( host, plugin, plugin_instance, dtype, inst ) + + self:_push( { "-t", title } ) + self:_push( self.defs.definitions[dtype] ) + + table.insert( pngs, png ) + + -- exec + self:_rrdtool( png, rrd ) + + -- clear args + self:_clearargs() + end + end + end + end + end + + return pngs +end + diff --git a/applications/luci-statistics/luasrc/statistics/rrdtool/colors.lua b/applications/luci-statistics/luasrc/statistics/rrdtool/colors.lua new file mode 100644 index 000000000..cdd6f7105 --- /dev/null +++ b/applications/luci-statistics/luasrc/statistics/rrdtool/colors.lua @@ -0,0 +1,59 @@ +module("luci.statistics.rrdtool.colors", package.seeall) + +require("luci.util") +require("luci.bits") + + +Instance = luci.util.class() + +function Instance.from_string( self, s ) + return { + luci.bits.Hex2Dec(s:sub(1,2)), + luci.bits.Hex2Dec(s:sub(3,4)), + luci.bits.Hex2Dec(s:sub(5,6)) + } +end + +function Instance.to_string( self, c ) + return string.format( + "%02x%02x%02x", + math.floor(c[1]), + math.floor(c[2]), + math.floor(c[3]) + ) +end + +function Instance.random( self ) + local r = math.random(255) + local g = math.random(255) + local min = 0 + local max = 255 + + if ( r + g ) < 255 then + min = 255 - r - g + else + max = 511 - r - g + end + + local b = min + math.floor( math.random() * ( max - min ) ) + + return { r, g, b } +end + +function Instance.faded( self, fg, opts ) + opts = opts or {} + opts.background = opts.background or { 255, 255, 255 } + opts.alpha = opts.alpha or 0.25 + + if type(opts.background) == "string" then + opts.background = _string_to_color(opts.background) + end + + local bg = opts.background + + return { + ( opts.alpha * fg[1] ) + ( ( 1.0 - opts.alpha ) * bg[1] ), + ( opts.alpha * fg[2] ) + ( ( 1.0 - opts.alpha ) * bg[2] ), + ( opts.alpha * fg[3] ) + ( ( 1.0 - opts.alpha ) * bg[3] ) + } +end diff --git a/applications/luci-statistics/luasrc/statistics/rrdtool/definitions.lua b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions.lua new file mode 100644 index 000000000..add69e4b6 --- /dev/null +++ b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions.lua @@ -0,0 +1,3177 @@ +module("luci.statistics.rrdtool.definitions", package.seeall) + +require("luci.util") +require("luci.fs") + + +Instance = luci.util.class() + +function Instance.__init__( self, ... ) + + -- used color palette + self.palette = { + Canvas = "FFFFFF", + FullRed = "FF0000", + FullGreen = "00E000", + FullBlue = "0000FF", + FullYellow = "F0A000", + FullCyan = "00A0FF", + FullMagenta = "A000FF", + HalfRed = "F7B7B7", + HalfGreen = "B7EFB7", + HalfBlue = "B7B7F7", + HalfYellow = "F3DFB7", + HalfCyan = "B7DFF7", + HalfMagenta = "DFB7F7", + HalfBlueGreen = "89B3C9" + } + + -- plotting arguments for each defined datasource + self.definitions = { + apache_bytes = { + "DEF:min_raw={file}:count:MIN", + "DEF:avg_raw={file}:count:AVERAGE", + "DEF:max_raw={file}:count:MAX", + "CDEF:min=min_raw,8,*", + "CDEF:avg=avg_raw,8,*", + "CDEF:max=max_raw,8,*", + "CDEF:mytime=avg_raw,TIME,TIME,IF", + "CDEF:sample_len_raw=mytime,PREV(mytime),-", + "CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF", + "CDEF:avg_sample=avg_raw,UN,0,avg_raw,IF,sample_len,*", + "CDEF:avg_sum=PREV,UN,0,PREV,IF,avg_sample,+", + "AREA:avg#" .. self.palette.HalfBlue, + "LINE1:avg#" .. self.palette.FullBlue .. ":Bit/s", + "GPRINT:min:MIN:%5.1lf%s Min,", + "GPRINT:avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:max:MAX:%5.1lf%s Max,", + "GPRINT:avg:LAST:%5.1lf%s Last\\l", + "GPRINT:avg_sum:LAST:(ca. %5.1lf%sB Total)" + }, + + apache_requests = { + "DEF:min={file}:count:MIN", + "DEF:avg={file}:count:AVERAGE", + "DEF:max={file}:count:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Requests/s", + "GPRINT:min:MIN:%6.2lf Min,", + "GPRINT:avg:AVERAGE:%6.2lf Avg,", + "GPRINT:max:MAX:%6.2lf Max,", + "GPRINT:avg:LAST:%6.2lf Last\\l" + }, + + apache_scoreboard = { + "DEF:min={file}:count:MIN", + "DEF:avg={file}:count:AVERAGE", + "DEF:max={file}:count:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Processes", + "GPRINT:min:MIN:%6.2lf Min,", + "GPRINT:avg:AVERAGE:%6.2lf Avg,", + "GPRINT:max:MAX:%6.2lf Max,", + "GPRINT:avg:LAST:%6.2lf Last\\l" + }, + + bitrate = { + "-v", "Bits/s", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Bits/s", + "GPRINT:min:MIN:%5.1lf%s Min,", + "GPRINT:avg:AVERAGE:%5.1lf%s Average,", + "GPRINT:max:MAX:%5.1lf%s Max,", + "GPRINT:avg:LAST:%5.1lf%s Last\\l" + }, + + charge = { + "-v", "Ah", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Charge", + "GPRINT:min:MIN:%5.1lf%sAh Min,", + "GPRINT:avg:AVERAGE:%5.1lf%sAh Avg,", + "GPRINT:max:MAX:%5.1lf%sAh Max,", + "GPRINT:avg:LAST:%5.1lf%sAh Last\\l" + }, + + __cpu = { + "-v", "CPU load", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Percent", + "GPRINT:min:MIN:%6.2lf%% Min,", + "GPRINT:avg:AVERAGE:%6.2lf%% Avg,", + "GPRINT:max:MAX:%6.2lf%% Max,", + "GPRINT:avg:LAST:%6.2lf%% Last\\l" + }, + + current = { + "-v", "Ampere", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Current", + "GPRINT:min:MIN:%5.1lf%sA Min,", + "GPRINT:avg:AVERAGE:%5.1lf%sA Avg,", + "GPRINT:max:MAX:%5.1lf%sA Max,", + "GPRINT:avg:LAST:%5.1lf%sA Last\\l" + }, + + df = { + "-v", "Percent", "-l", "0", + "DEF:free_avg={file}:free:AVERAGE", + "DEF:free_min={file}:free:MIN", + "DEF:free_max={file}:free:MAX", + "DEF:used_avg={file}:used:AVERAGE", + "DEF:used_min={file}:used:MIN", + "DEF:used_max={file}:used:MAX", + "CDEF:total=free_avg,used_avg,+", + "CDEF:free_pct=100,free_avg,*,total,/", + "CDEF:used_pct=100,used_avg,*,total,/", + "CDEF:free_acc=free_pct,used_pct,+", + "CDEF:used_acc=used_pct", + "AREA:free_acc#" .. self.palette.HalfGreen, + "AREA:used_acc#" .. self.palette.HalfRed, + "LINE1:free_acc#" .. self.palette.FullGreen .. ":Free", + "GPRINT:free_min:MIN:%5.1lf%sB Min,", + "GPRINT:free_avg:AVERAGE:%5.1lf%sB Avg,", + "GPRINT:free_max:MAX:%5.1lf%sB Max,", + "GPRINT:free_avg:LAST:%5.1lf%sB Last\\l", + "LINE1:used_acc#" .. self.palette.FullRed .. ":Used", + "GPRINT:used_min:MIN:%5.1lf%sB Min,", + "GPRINT:used_avg:AVERAGE:%5.1lf%sB Avg,", + "GPRINT:used_max:MAX:%5.1lf%sB Max,", + "GPRINT:used_avg:LAST:%5.1lf%sB Last\\l" + }, + + disk = { + "DEF:rtime_avg={file}:rtime:AVERAGE", + "DEF:rtime_min={file}:rtime:MIN", + "DEF:rtime_max={file}:rtime:MAX", + "DEF:wtime_avg={file}:wtime:AVERAGE", + "DEF:wtime_min={file}:wtime:MIN", + "DEF:wtime_max={file}:wtime:MAX", + "CDEF:rtime_avg_ms=rtime_avg,1000,/", + "CDEF:rtime_min_ms=rtime_min,1000,/", + "CDEF:rtime_max_ms=rtime_max,1000,/", + "CDEF:wtime_avg_ms=wtime_avg,1000,/", + "CDEF:wtime_min_ms=wtime_min,1000,/", + "CDEF:wtime_max_ms=wtime_max,1000,/", + "CDEF:total_avg_ms=rtime_avg_ms,wtime_avg_ms,+", + "CDEF:total_min_ms=rtime_min_ms,wtime_min_ms,+", + "CDEF:total_max_ms=rtime_max_ms,wtime_max_ms,+", + "AREA:total_max_ms#" .. self.palette.HalfRed, + "AREA:total_min_ms#" .. self.palette.Canvas, + "LINE1:wtime_avg_ms#" .. self.palette.FullGreen .. ":Write", + "GPRINT:wtime_min_ms:MIN:%5.1lf%s Min,", + "GPRINT:wtime_avg_ms:AVERAGE:%5.1lf%s Avg,", + "GPRINT:wtime_max_ms:MAX:%5.1lf%s Max,", + "GPRINT:wtime_avg_ms:LAST:%5.1lf%s Last\n", + "LINE1:rtime_avg_ms#" .. self.palette.FullBlue .. ":Read ", + "GPRINT:rtime_min_ms:MIN:%5.1lf%s Min,", + "GPRINT:rtime_avg_ms:AVERAGE:%5.1lf%s Avg,", + "GPRINT:rtime_max_ms:MAX:%5.1lf%s Max,", + "GPRINT:rtime_avg_ms:LAST:%5.1lf%s Last\n", + "LINE1:total_avg_ms#" .. self.palette.FullRed .. ":Total", + "GPRINT:total_min_ms:MIN:%5.1lf%s Min,", + "GPRINT:total_avg_ms:AVERAGE:%5.1lf%s Avg,", + "GPRINT:total_max_ms:MAX:%5.1lf%s Max,", + "GPRINT:total_avg_ms:LAST:%5.1lf%s Last\\l" + }, + + disk_octets = { + "-v", "Bytes/s", + "DEF:out_min={file}:write:MIN", + "DEF:out_avg={file}:write:AVERAGE", + "DEF:out_max={file}:write:MAX", + "DEF:inc_min={file}:read:MIN", + "DEF:inc_avg={file}:read:AVERAGE", + "DEF:inc_max={file}:read:MAX", + "CDEF:overlap=out_avg,inc_avg,GT,inc_avg,out_avg,IF", + "CDEF:mytime=out_avg,TIME,TIME,IF", + "CDEF:sample_len_raw=mytime,PREV(mytime),-", + "CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF", + "CDEF:out_avg_sample=out_avg,UN,0,out_avg,IF,sample_len,*", + "CDEF:out_avg_sum=PREV,UN,0,PREV,IF,out_avg_sample,+", + "CDEF:inc_avg_sample=inc_avg,UN,0,inc_avg,IF,sample_len,*", + "CDEF:inc_avg_sum=PREV,UN,0,PREV,IF,inc_avg_sample,+", + "AREA:out_avg#" .. self.palette.HalfGreen, + "AREA:inc_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:out_avg#" .. self.palette.FullGreen .. ":Written", + "GPRINT:out_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:out_max:MAX:%5.1lf%s Max,", + "GPRINT:out_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:out_avg_sum:LAST:(ca. %5.1lf%sB Total)", + "LINE1:inc_avg#" .. self.palette.FullBlue .. ":Read ", + "GPRINT:inc_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:inc_max:MAX:%5.1lf%s Max,", + "GPRINT:inc_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:inc_avg_sum:LAST:(ca. %5.1lf%sB Total)" + }, + + disk_merged = { + "-v", "Merged Ops/s", + "DEF:out_min={file}:write:MIN", + "DEF:out_avg={file}:write:AVERAGE", + "DEF:out_max={file}:write:MAX", + "DEF:inc_min={file}:read:MIN", + "DEF:inc_avg={file}:read:AVERAGE", + "DEF:inc_max={file}:read:MAX", + "CDEF:overlap=out_avg,inc_avg,GT,inc_avg,out_avg,IF", + "AREA:out_avg#" .. self.palette.HalfGreen, + "AREA:inc_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:out_avg#" .. self.palette.FullGreen .. ":Written", + "GPRINT:out_avg:AVERAGE:%6.2lf Avg,", + "GPRINT:out_max:MAX:%6.2lf Max,", + "GPRINT:out_avg:LAST:%6.2lf Last\\l", + "LINE1:inc_avg#" .. self.palette.FullBlue .. ":Read ", + "GPRINT:inc_avg:AVERAGE:%6.2lf Avg,", + "GPRINT:inc_max:MAX:%6.2lf Max,", + "GPRINT:inc_avg:LAST:%6.2lf Last\\l" + }, + + disk_ops = { + "-v", "Ops/s", + "DEF:out_min={file}:write:MIN", + "DEF:out_avg={file}:write:AVERAGE", + "DEF:out_max={file}:write:MAX", + "DEF:inc_min={file}:read:MIN", + "DEF:inc_avg={file}:read:AVERAGE", + "DEF:inc_max={file}:read:MAX", + "CDEF:overlap=out_avg,inc_avg,GT,inc_avg,out_avg,IF", + "AREA:out_avg#" .. self.palette.HalfGreen, + "AREA:inc_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:out_avg#" .. self.palette.FullGreen .. ":Written", + "GPRINT:out_avg:AVERAGE:%6.2lf Avg,", + "GPRINT:out_max:MAX:%6.2lf Max,", + "GPRINT:out_avg:LAST:%6.2lf Last\\l", + "LINE1:inc_avg#" .. self.palette.FullBlue .. ":Read ", + "GPRINT:inc_avg:AVERAGE:%6.2lf Avg,", + "GPRINT:inc_max:MAX:%6.2lf Max,", + "GPRINT:inc_avg:LAST:%6.2lf Last\\l" + }, + + disk_time = { + "-v", "Seconds/s", + "DEF:out_min_raw={file}:write:MIN", + "DEF:out_avg_raw={file}:write:AVERAGE", + "DEF:out_max_raw={file}:write:MAX", + "DEF:inc_min_raw={file}:read:MIN", + "DEF:inc_avg_raw={file}:read:AVERAGE", + "DEF:inc_max_raw={file}:read:MAX", + "CDEF:out_min=out_min_raw,1000,/", + "CDEF:out_avg=out_avg_raw,1000,/", + "CDEF:out_max=out_max_raw,1000,/", + "CDEF:inc_min=inc_min_raw,1000,/", + "CDEF:inc_avg=inc_avg_raw,1000,/", + "CDEF:inc_max=inc_max_raw,1000,/", + "CDEF:overlap=out_avg,inc_avg,GT,inc_avg,out_avg,IF", + "AREA:out_avg#" .. self.palette.HalfGreen, + "AREA:inc_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:out_avg#" .. self.palette.FullGreen .. ":Written", + "GPRINT:out_avg:AVERAGE:%5.1lf%ss Avg,", + "GPRINT:out_max:MAX:%5.1lf%ss Max,", + "GPRINT:out_avg:LAST:%5.1lf%ss Last\\l", + "LINE1:inc_avg#" .. self.palette.FullBlue .. ":Read ", + "GPRINT:inc_avg:AVERAGE:%5.1lf%ss Avg,", + "GPRINT:inc_max:MAX:%5.1lf%ss Max,", + "GPRINT:inc_avg:LAST:%5.1lf%ss Last\\l" + }, + + dns_octets = { + "DEF:rsp_min_raw={file}:responses:MIN", + "DEF:rsp_avg_raw={file}:responses:AVERAGE", + "DEF:rsp_max_raw={file}:responses:MAX", + "DEF:qry_min_raw={file}:queries:MIN", + "DEF:qry_avg_raw={file}:queries:AVERAGE", + "DEF:qry_max_raw={file}:queries:MAX", + "CDEF:rsp_min=rsp_min_raw,8,*", + "CDEF:rsp_avg=rsp_avg_raw,8,*", + "CDEF:rsp_max=rsp_max_raw,8,*", + "CDEF:qry_min=qry_min_raw,8,*", + "CDEF:qry_avg=qry_avg_raw,8,*", + "CDEF:qry_max=qry_max_raw,8,*", + "CDEF:overlap=rsp_avg,qry_avg,GT,qry_avg,rsp_avg,IF", + "CDEF:mytime=rsp_avg_raw,TIME,TIME,IF", + "CDEF:sample_len_raw=mytime,PREV(mytime),-", + "CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF", + "CDEF:rsp_avg_sample=rsp_avg_raw,UN,0,rsp_avg_raw,IF,sample_len,*", + "CDEF:rsp_avg_sum=PREV,UN,0,PREV,IF,rsp_avg_sample,+", + "CDEF:qry_avg_sample=qry_avg_raw,UN,0,qry_avg_raw,IF,sample_len,*", + "CDEF:qry_avg_sum=PREV,UN,0,PREV,IF,qry_avg_sample,+", + "AREA:rsp_avg#" .. self.palette.HalfGreen, + "AREA:qry_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:rsp_avg#" .. self.palette.FullGreen .. ":Responses", + "GPRINT:rsp_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:rsp_max:MAX:%5.1lf%s Max,", + "GPRINT:rsp_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:rsp_avg_sum:LAST:(ca. %5.1lf%sB Total)", + "LINE1:qry_avg#" .. self.palette.FullBlue .. ":Queries ", + #"GPRINT:qry_min:MIN:%5.1lf %s Min,", + "GPRINT:qry_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:qry_max:MAX:%5.1lf%s Max,", + "GPRINT:qry_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:qry_avg_sum:LAST:(ca. %5.1lf%sB Total)" + }, + + dns_opcode = { + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Queries/s", + "GPRINT:min:MIN:%9.3lf Min,", + "GPRINT:avg:AVERAGE:%9.3lf Average,", + "GPRINT:max:MAX:%9.3lf Max,", + "GPRINT:avg:LAST:%9.3lf Last\\l" + }, + + email_count = { + "-v", "Mails", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfMagenta, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullMagenta .. ":Count ", + "GPRINT:min:MIN:%4.1lf Min,", + "GPRINT:avg:AVERAGE:%4.1lf Avg,", + "GPRINT:max:MAX:%4.1lf Max,", + "GPRINT:avg:LAST:%4.1lf Last\\l" + }, + + email_size = { + "-v", "Bytes", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfMagenta, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullMagenta .. ":Count ", + "GPRINT:min:MIN:%4.1lf Min,", + "GPRINT:avg:AVERAGE:%4.1lf Avg,", + "GPRINT:max:MAX:%4.1lf Max,", + "GPRINT:avg:LAST:%4.1lf Last\\l" + }, + + spam_score = { + "-v", "Score", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Score ", + "GPRINT:min:MIN:%4.1lf Min,", + "GPRINT:avg:AVERAGE:%4.1lf Avg,", + "GPRINT:max:MAX:%4.1lf Max,", + "GPRINT:avg:LAST:%4.1lf Last\\l" + }, + + spam_check = { + "DEF:avg={file}:hits:AVERAGE", + "DEF:min={file}:hits:MIN", + "DEF:max={file}:hits:MAX", + "AREA:max#" .. self.palette.HalfMagenta, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullMagenta .. ":Count ", + "GPRINT:min:MIN:%4.1lf Min,", + "GPRINT:avg:AVERAGE:%4.1lf Avg,", + "GPRINT:max:MAX:%4.1lf Max,", + "GPRINT:avg:LAST:%4.1lf Last\\l" + }, + + entropy = { + "-v", "Bits", + "DEF:avg={file}:entropy:AVERAGE", + "DEF:min={file}:entropy:MIN", + "DEF:max={file}:entropy:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Bits", + "GPRINT:min:MIN:%4.0lfbit Min,", + "GPRINT:avg:AVERAGE:%4.0lfbit Avg,", + "GPRINT:max:MAX:%4.0lfbit Max,", + "GPRINT:avg:LAST:%4.0lfbit Last\\l" + }, + + fanspeed = { + "-v", "RPM", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfMagenta, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullMagenta .. ":RPM", + "GPRINT:min:MIN:%4.1lf Min,", + "GPRINT:avg:AVERAGE:%4.1lf Avg,", + "GPRINT:max:MAX:%4.1lf Max,", + "GPRINT:avg:LAST:%4.1lf Last\\l" + }, + + frequency = { + "-v", "Hertz", + "DEF:avg={file}:frequency:AVERAGE", + "DEF:min={file}:frequency:MIN", + "DEF:max={file}:frequency:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Frequency [Hz]", + "GPRINT:min:MIN:%4.1lf Min,", + "GPRINT:avg:AVERAGE:%4.1lf Avg,", + "GPRINT:max:MAX:%4.1lf Max,", + "GPRINT:avg:LAST:%4.1lf Last\\l" + }, + + frequency_offset = { + "DEF:ppm_avg={file}:ppm:AVERAGE", + "DEF:ppm_min={file}:ppm:MIN", + "DEF:ppm_max={file}:ppm:MAX", + "AREA:ppm_max#" .. self.palette.HalfBlue, + "AREA:ppm_min#" .. self.palette.Canvas, + "LINE1:ppm_avg#" .. self.palette.FullBlue .. ":{inst}", + "GPRINT:ppm_min:MIN:%5.2lf Min,", + "GPRINT:ppm_avg:AVERAGE:%5.2lf Avg,", + "GPRINT:ppm_max:MAX:%5.2lf Max,", + "GPRINT:ppm_avg:LAST:%5.2lf Last\\l" + }, + + gauge = { + "-v", "Exec value", + "DEF:temp_avg={file}:value:AVERAGE", + "DEF:temp_min={file}:value:MIN", + "DEF:temp_max={file}:value:MAX", + "AREA:temp_max#" .. self.palette.HalfBlue, + "AREA:temp_min#" .. self.palette.Canvas, + "LINE1:temp_avg#" .. self.palette.FullBlue .. ":Exec value", + "GPRINT:temp_min:MIN:%6.2lf Min,", + "GPRINT:temp_avg:AVERAGE:%6.2lf Avg,", + "GPRINT:temp_max:MAX:%6.2lf Max,", + "GPRINT:temp_avg:LAST:%6.2lf Last\\l" + }, + + hddtemp = { + "DEF:temp_avg={file}:value:AVERAGE", + "DEF:temp_min={file}:value:MIN", + "DEF:temp_max={file}:value:MAX", + "AREA:temp_max#" .. self.palette.HalfRed, + "AREA:temp_min#" .. self.palette.Canvas, + "LINE1:temp_avg#" .. self.palette.FullRed .. ":Temperature", + "GPRINT:temp_min:MIN:%4.1lf Min,", + "GPRINT:temp_avg:AVERAGE:%4.1lf Avg,", + "GPRINT:temp_max:MAX:%4.1lf Max,", + "GPRINT:temp_avg:LAST:%4.1lf Last\\l" + }, + + humidity = { + "-v", "Percent", + "DEF:temp_avg={file}:value:AVERAGE", + "DEF:temp_min={file}:value:MIN", + "DEF:temp_max={file}:value:MAX", + "AREA:temp_max#" .. self.palette.HalfGreen, + "AREA:temp_min#" .. self.palette.Canvas, + "LINE1:temp_avg#" .. self.palette.FullGreen .. ":Temperature", + "GPRINT:temp_min:MIN:%4.1lf%% Min,", + "GPRINT:temp_avg:AVERAGE:%4.1lf%% Avg,", + "GPRINT:temp_max:MAX:%4.1lf%% Max,", + "GPRINT:temp_avg:LAST:%4.1lf%% Last\\l" + }, + + if_errors = { + "-v", "Errors/s", + "DEF:tx_min={file}:tx:MIN", + "DEF:tx_avg={file}:tx:AVERAGE", + "DEF:tx_max={file}:tx:MAX", + "DEF:rx_min={file}:rx:MIN", + "DEF:rx_avg={file}:rx:AVERAGE", + "DEF:rx_max={file}:rx:MAX", + "CDEF:overlap=tx_avg,rx_avg,GT,rx_avg,tx_avg,IF", + "CDEF:mytime=tx_avg,TIME,TIME,IF", + "CDEF:sample_len_raw=mytime,PREV(mytime),-", + "CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF", + "CDEF:tx_avg_sample=tx_avg,UN,0,tx_avg,IF,sample_len,*", + "CDEF:tx_avg_sum=PREV,UN,0,PREV,IF,tx_avg_sample,+", + "CDEF:rx_avg_sample=rx_avg,UN,0,rx_avg,IF,sample_len,*", + "CDEF:rx_avg_sum=PREV,UN,0,PREV,IF,rx_avg_sample,+", + "AREA:tx_avg#" .. self.palette.HalfGreen, + "AREA:rx_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:tx_avg#" .. self.palette.FullGreen .. ":TX", + "GPRINT:tx_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:tx_max:MAX:%5.1lf%s Max,", + "GPRINT:tx_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:tx_avg_sum:LAST:(ca. %4.0lf%s Total)", + "LINE1:rx_avg#" .. self.palette.FullBlue .. ":RX", + #"GPRINT:rx_min:MIN:%5.1lf %s Min,", + "GPRINT:rx_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:rx_max:MAX:%5.1lf%s Max,", + "GPRINT:rx_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:rx_avg_sum:LAST:(ca. %4.0lf%s Total)" + }, + + if_collisions = { + "-v", "Collisions/s", + "DEF:min_raw={file}:value:MIN", + "DEF:avg_raw={file}:value:AVERAGE", + "DEF:max_raw={file}:value:MAX", + "CDEF:min=min_raw,8,*", + "CDEF:avg=avg_raw,8,*", + "CDEF:max=max_raw,8,*", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Collisions/s", + "GPRINT:min:MIN:%5.1lf %s Min,", + "GPRINT:avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:max:MAX:%5.1lf%s Max,", + "GPRINT:avg:LAST:%5.1lf%s Last\\l" + }, + + if_dropped = { + "-v", "Packets/s", + "DEF:tx_min={file}:tx:MIN", + "DEF:tx_avg={file}:tx:AVERAGE", + "DEF:tx_max={file}:tx:MAX", + "DEF:rx_min={file}:rx:MIN", + "DEF:rx_avg={file}:rx:AVERAGE", + "DEF:rx_max={file}:rx:MAX", + "CDEF:overlap=tx_avg,rx_avg,GT,rx_avg,tx_avg,IF", + "CDEF:mytime=tx_avg,TIME,TIME,IF", + "CDEF:sample_len_raw=mytime,PREV(mytime),-", + "CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF", + "CDEF:tx_avg_sample=tx_avg,UN,0,tx_avg,IF,sample_len,*", + "CDEF:tx_avg_sum=PREV,UN,0,PREV,IF,tx_avg_sample,+", + "CDEF:rx_avg_sample=rx_avg,UN,0,rx_avg,IF,sample_len,*", + "CDEF:rx_avg_sum=PREV,UN,0,PREV,IF,rx_avg_sample,+", + "AREA:tx_avg#" .. self.palette.HalfGreen, + "AREA:rx_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:tx_avg#" .. self.palette.FullGreen .. ":TX", + "GPRINT:tx_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:tx_max:MAX:%5.1lf%s Max,", + "GPRINT:tx_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:tx_avg_sum:LAST:(ca. %4.0lf%s Total)", + "LINE1:rx_avg#" .. self.palette.FullBlue .. ":RX", + #"GPRINT:rx_min:MIN:%5.1lf %s Min,", + "GPRINT:rx_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:rx_max:MAX:%5.1lf%s Max,", + "GPRINT:rx_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:rx_avg_sum:LAST:(ca. %4.0lf%s Total)" + }, + + if_packets = { + "-v", "Packets/s", + "DEF:tx_min={file}:tx:MIN", + "DEF:tx_avg={file}:tx:AVERAGE", + "DEF:tx_max={file}:tx:MAX", + "DEF:rx_min={file}:rx:MIN", + "DEF:rx_avg={file}:rx:AVERAGE", + "DEF:rx_max={file}:rx:MAX", + "CDEF:overlap=tx_avg,rx_avg,GT,rx_avg,tx_avg,IF", + "CDEF:mytime=tx_avg,TIME,TIME,IF", + "CDEF:sample_len_raw=mytime,PREV(mytime),-", + "CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF", + "CDEF:tx_avg_sample=tx_avg,UN,0,tx_avg,IF,sample_len,*", + "CDEF:tx_avg_sum=PREV,UN,0,PREV,IF,tx_avg_sample,+", + "CDEF:rx_avg_sample=rx_avg,UN,0,rx_avg,IF,sample_len,*", + "CDEF:rx_avg_sum=PREV,UN,0,PREV,IF,rx_avg_sample,+", + "AREA:tx_avg#" .. self.palette.HalfGreen, + "AREA:rx_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:tx_avg#" .. self.palette.FullGreen .. ":TX", + "GPRINT:tx_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:tx_max:MAX:%5.1lf%s Max,", + "GPRINT:tx_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:tx_avg_sum:LAST:(ca. %4.0lf%s Total)", + "LINE1:rx_avg#" .. self.palette.FullBlue .. ":RX", + #"GPRINT:rx_min:MIN:%5.1lf %s Min,", + "GPRINT:rx_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:rx_max:MAX:%5.1lf%s Max,", + "GPRINT:rx_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:rx_avg_sum:LAST:(ca. %4.0lf%s Total)" + }, + + if_rx_errors = { + "-v", "Errors/s", + "DEF:min={file}:value:MIN", + "DEF:avg={file}:value:AVERAGE", + "DEF:max={file}:value:MAX", + "CDEF:mytime=avg,TIME,TIME,IF", + "CDEF:sample_len_raw=mytime,PREV(mytime),-", + "CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF", + "CDEF:avg_sample=avg,UN,0,avg,IF,sample_len,*", + "CDEF:avg_sum=PREV,UN,0,PREV,IF,avg_sample,+", + "AREA:avg#" .. self.palette.HalfBlue, + "LINE1:avg#" .. self.palette.FullBlue .. ":Errors/s", + "GPRINT:avg:AVERAGE:%3.1lf%s Avg,", + "GPRINT:max:MAX:%3.1lf%s Max,", + "GPRINT:avg:LAST:%3.1lf%s Last\\l", + "GPRINT:avg_sum:LAST:(ca. %2.0lf%s Total)" + }, + + ipt_bytes = { + "-v", "Bits/s", + "DEF:min_raw={file}:value:MIN", + "DEF:avg_raw={file}:value:AVERAGE", + "DEF:max_raw={file}:value:MAX", + "CDEF:min=min_raw,8,*", + "CDEF:avg=avg_raw,8,*", + "CDEF:max=max_raw,8,*", + "CDEF:mytime=avg_raw,TIME,TIME,IF", + "CDEF:sample_len_raw=mytime,PREV(mytime),-", + "CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF", + "CDEF:avg_sample=avg_raw,UN,0,avg_raw,IF,sample_len,*", + "CDEF:avg_sum=PREV,UN,0,PREV,IF,avg_sample,+", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Bits/s", + #"GPRINT:min:MIN:%5.1lf %s Min,", + "GPRINT:avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:max:MAX:%5.1lf%s Max,", + "GPRINT:avg:LAST:%5.1lf%s Last\\l", + "GPRINT:avg_sum:LAST:(ca. %5.1lf%sB Total)" + }, + + ipt_packets = { + "-v", "Packets/s", + "DEF:min_raw={file}:value:MIN", + "DEF:avg_raw={file}:value:AVERAGE", + "DEF:max_raw={file}:value:MAX", + "CDEF:min=min_raw,8,*", + "CDEF:avg=avg_raw,8,*", + "CDEF:max=max_raw,8,*", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Packets/s", + "GPRINT:min:MIN:%5.1lf %s Min,", + "GPRINT:avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:max:MAX:%5.1lf%s Max,", + "GPRINT:avg:LAST:%5.1lf%s Last\\l" + }, + + irq = { + "-v", "Issues/s", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Issues/s", + "GPRINT:min:MIN:%6.2lf Min,", + "GPRINT:avg:AVERAGE:%6.2lf Avg,", + "GPRINT:max:MAX:%6.2lf Max,", + "GPRINT:avg:LAST:%6.2lf Last\\l" + }, + + load = { + "-v", "System load", + "DEF:s_avg={file}:shortterm:AVERAGE", + "DEF:s_min={file}:shortterm:MIN", + "DEF:s_max={file}:shortterm:MAX", + "DEF:m_avg={file}:midterm:AVERAGE", + "DEF:m_min={file}:midterm:MIN", + "DEF:m_max={file}:midterm:MAX", + "DEF:l_avg={file}:longterm:AVERAGE", + "DEF:l_min={file}:longterm:MIN", + "DEF:l_max={file}:longterm:MAX", + "AREA:s_max#" .. self.palette.HalfGreen, + "AREA:s_min#" .. self.palette.Canvas, + "LINE1:s_avg#" .. self.palette.FullGreen .. ": 1m average", + "GPRINT:s_min:MIN:%4.2lf Min,", + "GPRINT:s_avg:AVERAGE:%4.2lf Avg,", + "GPRINT:s_max:MAX:%4.2lf Max,", + "GPRINT:s_avg:LAST:%4.2lf Last\n", + "LINE1:m_avg#" .. self.palette.FullBlue .. ": 5m average", + "GPRINT:m_min:MIN:%4.2lf Min,", + "GPRINT:m_avg:AVERAGE:%4.2lf Avg,", + "GPRINT:m_max:MAX:%4.2lf Max,", + "GPRINT:m_avg:LAST:%4.2lf Last\n", + "LINE1:l_avg#" .. self.palette.FullRed .. ":15m average", + "GPRINT:l_min:MIN:%4.2lf Min,", + "GPRINT:l_avg:AVERAGE:%4.2lf Avg,", + "GPRINT:l_max:MAX:%4.2lf Max,", + "GPRINT:l_avg:LAST:%4.2lf Last\\l" + }, + + load_percent = { + "DEF:avg={file}:percent:AVERAGE", + "DEF:min={file}:percent:MIN", + "DEF:max={file}:percent:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Load", + "GPRINT:min:MIN:%5.1lf%s%% Min,", + "GPRINT:avg:AVERAGE:%5.1lf%s%% Avg,", + "GPRINT:max:MAX:%5.1lf%s%% Max,", + "GPRINT:avg:LAST:%5.1lf%s%% Last\\l" + }, + + mails = { + "DEF:rawgood={file}:good:AVERAGE", + "DEF:rawspam={file}:spam:AVERAGE", + "CDEF:good=rawgood,UN,0,rawgood,IF", + "CDEF:spam=rawspam,UN,0,rawspam,IF", + "CDEF:negspam=spam,-1,*", + "AREA:good#" .. self.palette.HalfGreen, + "LINE1:good#" .. self.palette.FullGreen .. ":Good mails", + "GPRINT:good:AVERAGE:%4.1lf Avg,", + "GPRINT:good:MAX:%4.1lf Max,", + "GPRINT:good:LAST:%4.1lf Last\n", + "AREA:negspam#" .. self.palette.HalfRed, + "LINE1:negspam#" .. self.palette.FullRed .. ":Spam mails", + "GPRINT:spam:AVERAGE:%4.1lf Avg,", + "GPRINT:spam:MAX:%4.1lf Max,", + "GPRINT:spam:LAST:%4.1lf Last\\l", + "HRULE:0#000000" + }, + + memory = { + "-b", "1024", "-v", "Bytes", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Memory", + "GPRINT:min:MIN:%5.1lf%sbyte Min,", + "GPRINT:avg:AVERAGE:%5.1lf%sbyte Avg,", + "GPRINT:max:MAX:%5.1lf%sbyte Max,", + "GPRINT:avg:LAST:%5.1lf%sbyte Last\\l" + }, + + old_memory = { + "DEF:used_avg={file}:used:AVERAGE", + "DEF:free_avg={file}:free:AVERAGE", + "DEF:buffers_avg={file}:buffers:AVERAGE", + "DEF:cached_avg={file}:cached:AVERAGE", + "DEF:used_min={file}:used:MIN", + "DEF:free_min={file}:free:MIN", + "DEF:buffers_min={file}:buffers:MIN", + "DEF:cached_min={file}:cached:MIN", + "DEF:used_max={file}:used:MAX", + "DEF:free_max={file}:free:MAX", + "DEF:buffers_max={file}:buffers:MAX", + "DEF:cached_max={file}:cached:MAX", + "CDEF:cached_avg_nn=cached_avg,UN,0,cached_avg,IF", + "CDEF:buffers_avg_nn=buffers_avg,UN,0,buffers_avg,IF", + "CDEF:free_cached_buffers_used=free_avg,cached_avg_nn,+,buffers_avg_nn,+,used_avg,+", + "CDEF:cached_buffers_used=cached_avg,buffers_avg_nn,+,used_avg,+", + "CDEF:buffers_used=buffers_avg,used_avg,+", + "AREA:free_cached_buffers_used#" .. self.palette.HalfGreen, + "AREA:cached_buffers_used#" .. self.palette.HalfBlue, + "AREA:buffers_used#" .. self.palette.HalfYellow, + "AREA:used_avg#" .. self.palette.HalfRed, + "LINE1:free_cached_buffers_used#" .. self.palette.FullGreen .. ":Free ", + "GPRINT:free_min:MIN:%5.1lf%s Min,", + "GPRINT:free_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:free_max:MAX:%5.1lf%s Max,", + "GPRINT:free_avg:LAST:%5.1lf%s Last\n", + "LINE1:cached_buffers_used#" .. self.palette.FullBlue .. ":Page cache ", + "GPRINT:cached_min:MIN:%5.1lf%s Min,", + "GPRINT:cached_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:cached_max:MAX:%5.1lf%s Max,", + "GPRINT:cached_avg:LAST:%5.1lf%s Last\n", + "LINE1:buffers_used#" .. self.palette.FullYellow .. ":Buffer cache", + "GPRINT:buffers_min:MIN:%5.1lf%s Min,", + "GPRINT:buffers_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:buffers_max:MAX:%5.1lf%s Max,", + "GPRINT:buffers_avg:LAST:%5.1lf%s Last\n", + "LINE1:used_avg#" .. self.palette.FullRed .. ":Used ", + "GPRINT:used_min:MIN:%5.1lf%s Min,", + "GPRINT:used_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:used_max:MAX:%5.1lf%s Max,", + "GPRINT:used_avg:LAST:%5.1lf%s Last\\l" + }, + + mysql_commands = { + "-v", "Issues/s", + "DEF:val_avg={file}:value:AVERAGE", + "DEF:val_min={file}:value:MIN", + "DEF:val_max={file}:value:MAX", + "AREA:val_max#" .. self.palette.HalfBlue, + "AREA:val_min#" .. self.palette.Canvas, + "LINE1:val_avg#" .. self.palette.FullBlue .. ":Issues/s", + "GPRINT:val_min:MIN:%5.2lf Min,", + "GPRINT:val_avg:AVERAGE:%5.2lf Avg,", + "GPRINT:val_max:MAX:%5.2lf Max,", + "GPRINT:val_avg:LAST:%5.2lf Last\\l" + }, + + mysql_handler = { + "-v", "Issues/s", + "DEF:val_avg={file}:value:AVERAGE", + "DEF:val_min={file}:value:MIN", + "DEF:val_max={file}:value:MAX", + "AREA:val_max#" .. self.palette.HalfBlue, + "AREA:val_min#" .. self.palette.Canvas, + "LINE1:val_avg#" .. self.palette.FullBlue .. ":Issues/s", + "GPRINT:val_min:MIN:%5.2lf Min,", + "GPRINT:val_avg:AVERAGE:%5.2lf Avg,", + "GPRINT:val_max:MAX:%5.2lf Max,", + "GPRINT:val_avg:LAST:%5.2lf Last\\l" + }, + + mysql_octets = { + "-v", "Bits/s", + "DEF:out_min={file}:tx:MIN", + "DEF:out_avg={file}:tx:AVERAGE", + "DEF:out_max={file}:tx:MAX", + "DEF:inc_min={file}:rx:MIN", + "DEF:inc_avg={file}:rx:AVERAGE", + "DEF:inc_max={file}:rx:MAX", + "CDEF:mytime=out_avg,TIME,TIME,IF", + "CDEF:sample_len_raw=mytime,PREV(mytime),-", + "CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF", + "CDEF:out_avg_sample=out_avg,UN,0,out_avg,IF,sample_len,*", + "CDEF:out_avg_sum=PREV,UN,0,PREV,IF,out_avg_sample,+", + "CDEF:inc_avg_sample=inc_avg,UN,0,inc_avg,IF,sample_len,*", + "CDEF:inc_avg_sum=PREV,UN,0,PREV,IF,inc_avg_sample,+", + "CDEF:out_bit_min=out_min,8,*", + "CDEF:out_bit_avg=out_avg,8,*", + "CDEF:out_bit_max=out_max,8,*", + "CDEF:inc_bit_min=inc_min,8,*", + "CDEF:inc_bit_avg=inc_avg,8,*", + "CDEF:inc_bit_max=inc_max,8,*", + "CDEF:overlap=out_bit_avg,inc_bit_avg,GT,inc_bit_avg,out_bit_avg,IF", + "AREA:out_bit_avg#" .. self.palette.HalfGreen, + "AREA:inc_bit_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:out_bit_avg#" .. self.palette.FullGreen .. ":Written", + "GPRINT:out_bit_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:out_bit_max:MAX:%5.1lf%s Max,", + "GPRINT:out_bit_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:out_avg_sum:LAST:(ca. %5.1lf%sB Total)", + "LINE1:inc_bit_avg#" .. self.palette.FullBlue .. ":Read ", + "GPRINT:inc_bit_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:inc_bit_max:MAX:%5.1lf%s Max,", + "GPRINT:inc_bit_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:inc_avg_sum:LAST:(ca. %5.1lf%sB Total)" + }, + + mysql_qcache = { + "-v", "Queries/s", + "DEF:hits_min={file}:hits:MIN", + "DEF:hits_avg={file}:hits:AVERAGE", + "DEF:hits_max={file}:hits:MAX", + "DEF:inserts_min={file}:inserts:MIN", + "DEF:inserts_avg={file}:inserts:AVERAGE", + "DEF:inserts_max={file}:inserts:MAX", + "DEF:not_cached_min={file}:not_cached:MIN", + "DEF:not_cached_avg={file}:not_cached:AVERAGE", + "DEF:not_cached_max={file}:not_cached:MAX", + "DEF:lowmem_prunes_min={file}:lowmem_prunes:MIN", + "DEF:lowmem_prunes_avg={file}:lowmem_prunes:AVERAGE", + "DEF:lowmem_prunes_max={file}:lowmem_prunes:MAX", + "DEF:queries_min={file}:queries_in_cache:MIN", + "DEF:queries_avg={file}:queries_in_cache:AVERAGE", + "DEF:queries_max={file}:queries_in_cache:MAX", + "CDEF:unknown=queries_avg,UNKN,+", + "CDEF:not_cached_agg=hits_avg,inserts_avg,+,not_cached_avg,+", + "CDEF:inserts_agg=hits_avg,inserts_avg,+", + "CDEF:hits_agg=hits_avg", + "AREA:not_cached_agg#" .. self.palette.HalfYellow, + "AREA:inserts_agg#" .. self.palette.HalfBlue, + "AREA:hits_agg#" .. self.palette.HalfGreen, + "LINE1:not_cached_agg#" .. self.palette.FullYellow .. ":Not Cached ", + "GPRINT:not_cached_min:MIN:%5.2lf Min,", + "GPRINT:not_cached_avg:AVERAGE:%5.2lf Avg,", + "GPRINT:not_cached_max:MAX:%5.2lf Max,", + "GPRINT:not_cached_avg:LAST:%5.2lf Last\\l", + "LINE1:inserts_agg#" .. self.palette.FullBlue .. ":Inserts ", + "GPRINT:inserts_min:MIN:%5.2lf Min,", + "GPRINT:inserts_avg:AVERAGE:%5.2lf Avg,", + "GPRINT:inserts_max:MAX:%5.2lf Max,", + "GPRINT:inserts_avg:LAST:%5.2lf Last\\l", + "LINE1:hits_agg#" .. self.palette.FullGreen .. ":Hits ", + "GPRINT:hits_min:MIN:%5.2lf Min,", + "GPRINT:hits_avg:AVERAGE:%5.2lf Avg,", + "GPRINT:hits_max:MAX:%5.2lf Max,", + "GPRINT:hits_avg:LAST:%5.2lf Last\\l", + "LINE1:lowmem_prunes_avg#" .. self.palette.FullRed .. ":Lowmem Prunes ", + "GPRINT:lowmem_prunes_min:MIN:%5.2lf Min,", + "GPRINT:lowmem_prunes_avg:AVERAGE:%5.2lf Avg,", + "GPRINT:lowmem_prunes_max:MAX:%5.2lf Max,", + "GPRINT:lowmem_prunes_avg:LAST:%5.2lf Last\\l", + "LINE1:unknown#" .. self.palette.Canvas .. ":Queries in cache", + "GPRINT:queries_min:MIN:%5.0lf Min,", + "GPRINT:queries_avg:AVERAGE:%5.0lf Avg,", + "GPRINT:queries_max:MAX:%5.0lf Max,", + "GPRINT:queries_avg:LAST:%5.0lf Last\\l" + }, + + mysql_threads = { + "-v", "Threads", + "DEF:running_min={file}:running:MIN", + "DEF:running_avg={file}:running:AVERAGE", + "DEF:running_max={file}:running:MAX", + "DEF:connected_min={file}:connected:MIN", + "DEF:connected_avg={file}:connected:AVERAGE", + "DEF:connected_max={file}:connected:MAX", + "DEF:cached_min={file}:cached:MIN", + "DEF:cached_avg={file}:cached:AVERAGE", + "DEF:cached_max={file}:cached:MAX", + "DEF:created_min={file}:created:MIN", + "DEF:created_avg={file}:created:AVERAGE", + "DEF:created_max={file}:created:MAX", + "CDEF:unknown=created_avg,UNKN,+", + "CDEF:cached_agg=connected_avg,cached_avg,+", + "AREA:cached_agg#" .. self.palette.HalfGreen, + "AREA:connected_avg#" .. self.palette.HalfBlue, + "AREA:running_avg#" .. self.palette.HalfRed, + "LINE1:cached_agg#" .. self.palette.FullGreen .. ":Cached ", + "GPRINT:cached_min:MIN:%5.1lf Min,", + "GPRINT:cached_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:cached_max:MAX:%5.1lf Max,", + "GPRINT:cached_avg:LAST:%5.1lf Last\\l", + "LINE1:connected_avg#" .. self.palette.FullBlue .. ":Connected", + "GPRINT:connected_min:MIN:%5.1lf Min,", + "GPRINT:connected_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:connected_max:MAX:%5.1lf Max,", + "GPRINT:connected_avg:LAST:%5.1lf Last\\l", + "LINE1:running_avg#" .. self.palette.FullRed .. ":Running ", + "GPRINT:running_min:MIN:%5.1lf Min,", + "GPRINT:running_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:running_max:MAX:%5.1lf Max,", + "GPRINT:running_avg:LAST:%5.1lf Last\\l", + "LINE1:unknown#" .. self.palette.Canvas .. ":Created ", + "GPRINT:created_min:MIN:%5.0lf Min,", + "GPRINT:created_avg:AVERAGE:%5.0lf Avg,", + "GPRINT:created_max:MAX:%5.0lf Max,", + "GPRINT:created_avg:LAST:%5.0lf Last\\l" + }, + + nfs_procedure = { + "-v", "Issues/s", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Issues/s", + "GPRINT:min:MIN:%6.2lf Min,", + "GPRINT:avg:AVERAGE:%6.2lf Avg,", + "GPRINT:max:MAX:%6.2lf Max,", + "GPRINT:avg:LAST:%6.2lf Last\\l" + }, + + nfs3_procedures = { + "DEF:null_avg={file}:null:AVERAGE", + "DEF:getattr_avg={file}:getattr:AVERAGE", + "DEF:setattr_avg={file}:setattr:AVERAGE", + "DEF:lookup_avg={file}:lookup:AVERAGE", + "DEF:access_avg={file}:access:AVERAGE", + "DEF:readlink_avg={file}:readlink:AVERAGE", + "DEF:read_avg={file}:read:AVERAGE", + "DEF:write_avg={file}:write:AVERAGE", + "DEF:create_avg={file}:create:AVERAGE", + "DEF:mkdir_avg={file}:mkdir:AVERAGE", + "DEF:symlink_avg={file}:symlink:AVERAGE", + "DEF:mknod_avg={file}:mknod:AVERAGE", + "DEF:remove_avg={file}:remove:AVERAGE", + "DEF:rmdir_avg={file}:rmdir:AVERAGE", + "DEF:rename_avg={file}:rename:AVERAGE", + "DEF:link_avg={file}:link:AVERAGE", + "DEF:readdir_avg={file}:readdir:AVERAGE", + "DEF:readdirplus_avg={file}:readdirplus:AVERAGE", + "DEF:fsstat_avg={file}:fsstat:AVERAGE", + "DEF:fsinfo_avg={file}:fsinfo:AVERAGE", + "DEF:pathconf_avg={file}:pathconf:AVERAGE", + "DEF:commit_avg={file}:commit:AVERAGE", + "DEF:null_max={file}:null:MAX", + "DEF:getattr_max={file}:getattr:MAX", + "DEF:setattr_max={file}:setattr:MAX", + "DEF:lookup_max={file}:lookup:MAX", + "DEF:access_max={file}:access:MAX", + "DEF:readlink_max={file}:readlink:MAX", + "DEF:read_max={file}:read:MAX", + "DEF:write_max={file}:write:MAX", + "DEF:create_max={file}:create:MAX", + "DEF:mkdir_max={file}:mkdir:MAX", + "DEF:symlink_max={file}:symlink:MAX", + "DEF:mknod_max={file}:mknod:MAX", + "DEF:remove_max={file}:remove:MAX", + "DEF:rmdir_max={file}:rmdir:MAX", + "DEF:rename_max={file}:rename:MAX", + "DEF:link_max={file}:link:MAX", + "DEF:readdir_max={file}:readdir:MAX", + "DEF:readdirplus_max={file}:readdirplus:MAX", + "DEF:fsstat_max={file}:fsstat:MAX", + "DEF:fsinfo_max={file}:fsinfo:MAX", + "DEF:pathconf_max={file}:pathconf:MAX", + "DEF:commit_max={file}:commit:MAX", + "CDEF:other_avg=null_avg,readlink_avg,create_avg,mkdir_avg,symlink_avg,mknod_avg,remove_avg,rmdir_avg,rename_avg,link_avg,readdir_avg,readdirplus_avg,fsstat_avg,fsinfo_avg,pathconf_avg,+,+,+,+,+,+,+,+,+,+,+,+,+,+", + "CDEF:other_max=null_max,readlink_max,create_max,mkdir_max,symlink_max,mknod_max,remove_max,rmdir_max,rename_max,link_max,readdir_max,readdirplus_max,fsstat_max,fsinfo_max,pathconf_max,+,+,+,+,+,+,+,+,+,+,+,+,+,+", + "CDEF:stack_read=read_avg", + "CDEF:stack_getattr=stack_read,getattr_avg,+", + "CDEF:stack_access=stack_getattr,access_avg,+", + "CDEF:stack_lookup=stack_access,lookup_avg,+", + "CDEF:stack_write=stack_lookup,write_avg,+", + "CDEF:stack_commit=stack_write,commit_avg,+", + "CDEF:stack_setattr=stack_commit,setattr_avg,+", + "CDEF:stack_other=stack_setattr,other_avg,+", + "AREA:stack_other#" .. self.palette.HalfRed, + "AREA:stack_setattr#" .. self.palette.HalfGreen, + "AREA:stack_commit#" .. self.palette.HalfYellow, + "AREA:stack_write#" .. self.palette.HalfGreen, + "AREA:stack_lookup#" .. self.palette.HalfBlue, + "AREA:stack_access#" .. self.palette.HalfMagenta, + "AREA:stack_getattr#" .. self.palette.HalfCyan, + "AREA:stack_read#" .. self.palette.HalfBlue, + "LINE1:stack_other#" .. self.palette.FullRed .. ":Other ", + "GPRINT:other_max:MAX:%5.1lf Max,", + "GPRINT:other_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:other_avg:LAST:%5.1lf Last\\l", + "LINE1:stack_setattr#" .. self.palette.FullGreen .. ":setattr", + "GPRINT:setattr_max:MAX:%5.1lf Max,", + "GPRINT:setattr_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:setattr_avg:LAST:%5.1lf Last\\l", + "LINE1:stack_commit#" .. self.palette.FullYellow .. ":commit ", + "GPRINT:commit_max:MAX:%5.1lf Max,", + "GPRINT:commit_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:commit_avg:LAST:%5.1lf Last\\l", + "LINE1:stack_write#" .. self.palette.FullGreen .. ":write ", + "GPRINT:write_max:MAX:%5.1lf Max,", + "GPRINT:write_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:write_avg:LAST:%5.1lf Last\\l", + "LINE1:stack_lookup#" .. self.palette.FullBlue .. ":lookup ", + "GPRINT:lookup_max:MAX:%5.1lf Max,", + "GPRINT:lookup_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:lookup_avg:LAST:%5.1lf Last\\l", + "LINE1:stack_access#" .. self.palette.FullMagenta .. ":access ", + "GPRINT:access_max:MAX:%5.1lf Max,", + "GPRINT:access_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:access_avg:LAST:%5.1lf Last\\l", + "LINE1:stack_getattr#" .. self.palette.FullCyan .. ":getattr", + "GPRINT:getattr_max:MAX:%5.1lf Max,", + "GPRINT:getattr_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:getattr_avg:LAST:%5.1lf Last\\l", + "LINE1:stack_read#" .. self.palette.FullBlue .. ":read ", + "GPRINT:read_max:MAX:%5.1lf Max,", + "GPRINT:read_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:read_avg:LAST:%5.1lf Last\\l" + }, + + partition = { + "DEF:rbyte_avg={file}:rbytes:AVERAGE", + "DEF:rbyte_min={file}:rbytes:MIN", + "DEF:rbyte_max={file}:rbytes:MAX", + "DEF:wbyte_avg={file}:wbytes:AVERAGE", + "DEF:wbyte_min={file}:wbytes:MIN", + "DEF:wbyte_max={file}:wbytes:MAX", + "CDEF:overlap=wbyte_avg,rbyte_avg,GT,rbyte_avg,wbyte_avg,IF", + "AREA:wbyte_avg#" .. self.palette.HalfGreen, + "AREA:rbyte_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:wbyte_avg#" .. self.palette.FullGreen .. ":Write", + "GPRINT:wbyte_min:MIN:%5.1lf%s Min,", + "GPRINT:wbyte_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:wbyte_max:MAX:%5.1lf%s Max,", + "GPRINT:wbyte_avg:LAST:%5.1lf%s Last\\l", + "LINE1:rbyte_avg#" .. self.palette.FullBlue .. ":Read ", + "GPRINT:rbyte_min:MIN:%5.1lf%s Min,", + "GPRINT:rbyte_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:rbyte_max:MAX:%5.1lf%s Max,", + "GPRINT:rbyte_avg:LAST:%5.1lf%s Last\\l" + }, + + percent = { + "-v", "Percent", + "DEF:avg={file}:percent:AVERAGE", + "DEF:min={file}:percent:MIN", + "DEF:max={file}:percent:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Percent", + "GPRINT:min:MIN:%5.1lf%% Min,", + "GPRINT:avg:AVERAGE:%5.1lf%% Avg,", + "GPRINT:max:MAX:%5.1lf%% Max,", + "GPRINT:avg:LAST:%5.1lf%% Last\\l" + }, + + ping = { + "DEF:ping_avg={file}:ping:AVERAGE", + "DEF:ping_min={file}:ping:MIN", + "DEF:ping_max={file}:ping:MAX", + "AREA:ping_max#" .. self.palette.HalfBlue, + "AREA:ping_min#" .. self.palette.Canvas, + "LINE1:ping_avg#" .. self.palette.FullBlue .. ":Ping", + "GPRINT:ping_min:MIN:%4.1lf ms Min,", + "GPRINT:ping_avg:AVERAGE:%4.1lf ms Avg,", + "GPRINT:ping_max:MAX:%4.1lf ms Max,", + "GPRINT:ping_avg:LAST:%4.1lf ms Last\\l" + }, + + power = { + "-v", "Watt", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Watt", + "GPRINT:min:MIN:%5.1lf%sW Min,", + "GPRINT:avg:AVERAGE:%5.1lf%sW Avg,", + "GPRINT:max:MAX:%5.1lf%sW Max,", + "GPRINT:avg:LAST:%5.1lf%sW Last\\l" + }, + + _processes = { + "DEF:running_avg={file}:running:AVERAGE", + "DEF:running_min={file}:running:MIN", + "DEF:running_max={file}:running:MAX", + "DEF:sleeping_avg={file}:sleeping:AVERAGE", + "DEF:sleeping_min={file}:sleeping:MIN", + "DEF:sleeping_max={file}:sleeping:MAX", + "DEF:zombies_avg={file}:zombies:AVERAGE", + "DEF:zombies_min={file}:zombies:MIN", + "DEF:zombies_max={file}:zombies:MAX", + "DEF:stopped_avg={file}:stopped:AVERAGE", + "DEF:stopped_min={file}:stopped:MIN", + "DEF:stopped_max={file}:stopped:MAX", + "DEF:paging_avg={file}:paging:AVERAGE", + "DEF:paging_min={file}:paging:MIN", + "DEF:paging_max={file}:paging:MAX", + "DEF:blocked_avg={file}:blocked:AVERAGE", + "DEF:blocked_min={file}:blocked:MIN", + "DEF:blocked_max={file}:blocked:MAX", + "CDEF:paging_acc=sleeping_avg,running_avg,stopped_avg,zombies_avg,blocked_avg,paging_avg,+,+,+,+,+", + "CDEF:blocked_acc=sleeping_avg,running_avg,stopped_avg,zombies_avg,blocked_avg,+,+,+,+", + "CDEF:zombies_acc=sleeping_avg,running_avg,stopped_avg,zombies_avg,+,+,+", + "CDEF:stopped_acc=sleeping_avg,running_avg,stopped_avg,+,+", + "CDEF:running_acc=sleeping_avg,running_avg,+", + "CDEF:sleeping_acc=sleeping_avg", + "AREA:paging_acc#" .. self.palette.HalfYellow, + "AREA:blocked_acc#" .. self.palette.HalfCyan, + "AREA:zombies_acc#" .. self.palette.HalfRed, + "AREA:stopped_acc#" .. self.palette.HalfMagenta, + "AREA:running_acc#" .. self.palette.HalfGreen, + "AREA:sleeping_acc#" .. self.palette.HalfBlue, + "LINE1:paging_acc#" .. self.palette.FullYellow .. ":Paging ", + "GPRINT:paging_min:MIN:%5.1lf Min,", + "GPRINT:paging_avg:AVERAGE:%5.1lf Average,", + "GPRINT:paging_max:MAX:%5.1lf Max,", + "GPRINT:paging_avg:LAST:%5.1lf Last\\l", + "LINE1:blocked_acc#" .. self.palette.FullCyan .. ":Blocked ", + "GPRINT:blocked_min:MIN:%5.1lf Min,", + "GPRINT:blocked_avg:AVERAGE:%5.1lf Average,", + "GPRINT:blocked_max:MAX:%5.1lf Max,", + "GPRINT:blocked_avg:LAST:%5.1lf Last\\l", + "LINE1:zombies_acc#" .. self.palette.FullRed .. ":Zombies ", + "GPRINT:zombies_min:MIN:%5.1lf Min,", + "GPRINT:zombies_avg:AVERAGE:%5.1lf Average,", + "GPRINT:zombies_max:MAX:%5.1lf Max,", + "GPRINT:zombies_avg:LAST:%5.1lf Last\\l", + "LINE1:stopped_acc#" .. self.palette.FullMagenta .. ":Stopped ", + "GPRINT:stopped_min:MIN:%5.1lf Min,", + "GPRINT:stopped_avg:AVERAGE:%5.1lf Average,", + "GPRINT:stopped_max:MAX:%5.1lf Max,", + "GPRINT:stopped_avg:LAST:%5.1lf Last\\l", + "LINE1:running_acc#" .. self.palette.FullGreen .. ":Running ", + "GPRINT:running_min:MIN:%5.1lf Min,", + "GPRINT:running_avg:AVERAGE:%5.1lf Average,", + "GPRINT:running_max:MAX:%5.1lf Max,", + "GPRINT:running_avg:LAST:%5.1lf Last\\l", + "LINE1:sleeping_acc#" .. self.palette.FullBlue .. ":Sleeping", + "GPRINT:sleeping_min:MIN:%5.1lf Min,", + "GPRINT:sleeping_avg:AVERAGE:%5.1lf Average,", + "GPRINT:sleeping_max:MAX:%5.1lf Max,", + "GPRINT:sleeping_avg:LAST:%5.1lf Last\\l" + }, + + ps_count = { + "-v", "Processes", + "DEF:procs_avg={file}:processes:AVERAGE", + "DEF:procs_min={file}:processes:MIN", + "DEF:procs_max={file}:processes:MAX", + "DEF:thrds_avg={file}:threads:AVERAGE", + "DEF:thrds_min={file}:threads:MIN", + "DEF:thrds_max={file}:threads:MAX", + "AREA:thrds_avg#" .. self.palette.HalfBlue, + "AREA:procs_avg#" .. self.palette.HalfRed, + "LINE1:thrds_avg#" .. self.palette.FullBlue .. ":Threads ", + "GPRINT:thrds_min:MIN:%5.1lf Min,", + "GPRINT:thrds_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:thrds_max:MAX:%5.1lf Max,", + "GPRINT:thrds_avg:LAST:%5.1lf Last\\l", + "LINE1:procs_avg#" .. self.palette.FullRed .. ":Processes", + "GPRINT:procs_min:MIN:%5.1lf Min,", + "GPRINT:procs_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:procs_max:MAX:%5.1lf Max,", + "GPRINT:procs_avg:LAST:%5.1lf Last\\l" + }, + + ps_cputime = { + "-v", "Jiffies", + "DEF:user_avg_raw={file}:user:AVERAGE", + "DEF:user_min_raw={file}:user:MIN", + "DEF:user_max_raw={file}:user:MAX", + "DEF:syst_avg_raw={file}:syst:AVERAGE", + "DEF:syst_min_raw={file}:syst:MIN", + "DEF:syst_max_raw={file}:syst:MAX", + "CDEF:user_avg=user_avg_raw,1000000,/", + "CDEF:user_min=user_min_raw,1000000,/", + "CDEF:user_max=user_max_raw,1000000,/", + "CDEF:syst_avg=syst_avg_raw,1000000,/", + "CDEF:syst_min=syst_min_raw,1000000,/", + "CDEF:syst_max=syst_max_raw,1000000,/", + "CDEF:user_syst=syst_avg,UN,0,syst_avg,IF,user_avg,+", + "AREA:user_syst#" .. self.palette.HalfBlue, + "AREA:syst_avg#" .. self.palette.HalfRed, + "LINE1:user_syst#" .. self.palette.FullBlue .. ":User ", + "GPRINT:user_min:MIN:%5.1lf%s Min,", + "GPRINT:user_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:user_max:MAX:%5.1lf%s Max,", + "GPRINT:user_avg:LAST:%5.1lf%s Last\\l", + "LINE1:syst_avg#" .. self.palette.FullRed .. ":System", + "GPRINT:syst_min:MIN:%5.1lf%s Min,", + "GPRINT:syst_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:syst_max:MAX:%5.1lf%s Max,", + "GPRINT:syst_avg:LAST:%5.1lf%s Last\\l" + }, + + ps_pagefaults = { + "-v", "Pagefaults/s", + "DEF:minor_avg={file}:minflt:AVERAGE", + "DEF:minor_min={file}:minflt:MIN", + "DEF:minor_max={file}:minflt:MAX", + "DEF:major_avg={file}:majflt:AVERAGE", + "DEF:major_min={file}:majflt:MIN", + "DEF:major_max={file}:majflt:MAX", + "CDEF:minor_major=major_avg,UN,0,major_avg,IF,minor_avg,+", + "AREA:minor_major#" .. self.palette.HalfBlue, + "AREA:major_avg#" .. self.palette.HalfRed, + "LINE1:minor_major#" .. self.palette.FullBlue .. ":Minor", + "GPRINT:minor_min:MIN:%5.1lf%s Min,", + "GPRINT:minor_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:minor_max:MAX:%5.1lf%s Max,", + "GPRINT:minor_avg:LAST:%5.1lf%s Last\\l", + "LINE1:major_avg#" .. self.palette.FullRed .. ":Major", + "GPRINT:major_min:MIN:%5.1lf%s Min,", + "GPRINT:major_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:major_max:MAX:%5.1lf%s Max,", + "GPRINT:major_avg:LAST:%5.1lf%s Last\\l" + }, + + ps_rss = { + "-v", "Bytes", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:avg#" .. self.palette.HalfBlue, + "LINE1:avg#" .. self.palette.FullBlue .. ":RSS", + "GPRINT:min:MIN:%5.1lf%s Min,", + "GPRINT:avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:max:MAX:%5.1lf%s Max,", + "GPRINT:avg:LAST:%5.1lf%s Last\\l" + }, + + _ps_state = { + "-v", "Processes", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Processes", + "GPRINT:min:MIN:%6.2lf Min,", + "GPRINT:avg:AVERAGE:%6.2lf Avg,", + "GPRINT:max:MAX:%6.2lf Max,", + "GPRINT:avg:LAST:%6.2lf Last\\l" + }, + + _signal_noise = { + "-v", "dBm", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Noise", + "GPRINT:min:MIN:%5.1lf%sdBm Min,", + "GPRINT:avg:AVERAGE:%5.1lf%sdBm Avg,", + "GPRINT:max:MAX:%5.1lf%sdBm Max,", + "GPRINT:avg:LAST:%5.1lf%sdBm Last\\l" + }, + + _signal_power = { + "-v", "dBm", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Power", + "GPRINT:min:MIN:%5.1lf%sdBm Min,", + "GPRINT:avg:AVERAGE:%5.1lf%sdBm Avg,", + "GPRINT:max:MAX:%5.1lf%sdBm Max,", + "GPRINT:avg:LAST:%5.1lf%sdBm Last\\l" + }, + + _signal_quality = { + "-v", "%", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Quality", + "GPRINT:min:MIN:%5.1lf%s%% Min,", + "GPRINT:avg:AVERAGE:%5.1lf%s%% Avg,", + "GPRINT:max:MAX:%5.1lf%s%% Max,", + "GPRINT:avg:LAST:%5.1lf%s%% Last\\l" + }, + + swap = { + "-v", "Bytes", "-b", "1024", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Bytes", + "GPRINT:min:MIN:%6.2lf%sByte Min,", + "GPRINT:avg:AVERAGE:%6.2lf%sByte Avg,", + "GPRINT:max:MAX:%6.2lf%sByte Max,", + "GPRINT:avg:LAST:%6.2lf%sByte Last\\l" + }, + + old_swap = { + "DEF:used_avg={file}:used:AVERAGE", + "DEF:used_min={file}:used:MIN", + "DEF:used_max={file}:used:MAX", + "DEF:free_avg={file}:free:AVERAGE", + "DEF:free_min={file}:free:MIN", + "DEF:free_max={file}:free:MAX", + "DEF:cach_avg={file}:cached:AVERAGE", + "DEF:cach_min={file}:cached:MIN", + "DEF:cach_max={file}:cached:MAX", + "DEF:resv_avg={file}:resv:AVERAGE", + "DEF:resv_min={file}:resv:MIN", + "DEF:resv_max={file}:resv:MAX", + "CDEF:cach_avg_notnull=cach_avg,UN,0,cach_avg,IF", + "CDEF:resv_avg_notnull=resv_avg,UN,0,resv_avg,IF", + "CDEF:used_acc=used_avg", + "CDEF:resv_acc=used_acc,resv_avg_notnull,+", + "CDEF:cach_acc=resv_acc,cach_avg_notnull,+", + "CDEF:free_acc=cach_acc,free_avg,+", + "AREA:free_acc#" .. self.palette.HalfGreen, + "AREA:cach_acc#" .. self.palette.HalfBlue, + "AREA:resv_acc#" .. self.palette.HalfYellow, + "AREA:used_acc#" .. self.palette.HalfRed, + "LINE1:free_acc#" .. self.palette.FullGreen .. ":Free ", + "GPRINT:free_min:MIN:%5.1lf%s Min,", + "GPRINT:free_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:free_max:MAX:%5.1lf%s Max,", + "GPRINT:free_avg:LAST:%5.1lf%s Last\n", + "LINE1:cach_acc#" .. self.palette.FullBlue .. ":Cached ", + "GPRINT:cach_min:MIN:%5.1lf%s Min,", + "GPRINT:cach_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:cach_max:MAX:%5.1lf%s Max,", + "GPRINT:cach_avg:LAST:%5.1lf%s Last\\l", + "LINE1:resv_acc#" .. self.palette.FullYellow .. ":Reserved", + "GPRINT:resv_min:MIN:%5.1lf%s Min,", + "GPRINT:resv_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:resv_max:MAX:%5.1lf%s Max,", + "GPRINT:resv_avg:LAST:%5.1lf%s Last\n", + "LINE1:used_acc#" .. self.palette.FullRed .. ":Used ", + "GPRINT:used_min:MIN:%5.1lf%s Min,", + "GPRINT:used_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:used_max:MAX:%5.1lf%s Max,", + "GPRINT:used_avg:LAST:%5.1lf%s Last\\l" + }, + + tcp_connections = { + "-v", "Connections", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Connections", + "GPRINT:min:MIN:%4.1lf Min,", + "GPRINT:avg:AVERAGE:%4.1lf Avg,", + "GPRINT:max:MAX:%4.1lf Max,", + "GPRINT:avg:LAST:%4.1lf Last\\l" + }, + + temperature = { + "-v", "Celsius", + "DEF:temp_avg={file}:value:AVERAGE", + "DEF:temp_min={file}:value:MIN", + "DEF:temp_max={file}:value:MAX", + "CDEF:average=temp_avg,0.2,*,PREV,UN,temp_avg,PREV,IF,0.8,*,+", + "AREA:temp_max#" .. self.palette.HalfRed, + "AREA:temp_min#" .. self.palette.Canvas, + "LINE1:temp_avg#" .. self.palette.FullRed .. ":Temperature", + "GPRINT:temp_min:MIN:%4.1lf Min,", + "GPRINT:temp_avg:AVERAGE:%4.1lf Avg,", + "GPRINT:temp_max:MAX:%4.1lf Max,", + "GPRINT:temp_avg:LAST:%4.1lf Last\\l" + }, + + timeleft = { + "-v", "Minutes", + "DEF:avg={file}:timeleft:AVERAGE", + "DEF:min={file}:timeleft:MIN", + "DEF:max={file}:timeleft:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Time left [min]", + "GPRINT:min:MIN:%5.1lf%s Min,", + "GPRINT:avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:max:MAX:%5.1lf%s Max,", + "GPRINT:avg:LAST:%5.1lf%s Last\\l" + }, + + time_offset = { + "DEF:s_avg={file}:seconds:AVERAGE", + "DEF:s_min={file}:seconds:MIN", + "DEF:s_max={file}:seconds:MAX", + "AREA:s_max#" .. self.palette.HalfBlue, + "AREA:s_min#" .. self.palette.Canvas, + "LINE1:s_avg#" .. self.palette.FullBlue .. ":{inst}", + "GPRINT:s_min:MIN:%7.3lf%s Min,", + "GPRINT:s_avg:AVERAGE:%7.3lf%s Avg,", + "GPRINT:s_max:MAX:%7.3lf%s Max,", + "GPRINT:s_avg:LAST:%7.3lf%s Last\\l" + }, + + if_octets = { + "-v", "Bits/s", "-l", "0", + "DEF:out_min_raw={file}:tx:MIN", + "DEF:out_avg_raw={file}:tx:AVERAGE", + "DEF:out_max_raw={file}:tx:MAX", + "DEF:inc_min_raw={file}:rx:MIN", + "DEF:inc_avg_raw={file}:rx:AVERAGE", + "DEF:inc_max_raw={file}:rx:MAX", + "CDEF:out_min=out_min_raw,8,*", + "CDEF:out_avg=out_avg_raw,8,*", + "CDEF:out_max=out_max_raw,8,*", + "CDEF:inc_min=inc_min_raw,8,*", + "CDEF:inc_avg=inc_avg_raw,8,*", + "CDEF:inc_max=inc_max_raw,8,*", + "CDEF:overlap=out_avg,inc_avg,GT,inc_avg,out_avg,IF", + "CDEF:mytime=out_avg_raw,TIME,TIME,IF", + "CDEF:sample_len_raw=mytime,PREV(mytime),-", + "CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF", + "CDEF:out_avg_sample=out_avg_raw,UN,0,out_avg_raw,IF,sample_len,*", + "CDEF:out_avg_sum=PREV,UN,0,PREV,IF,out_avg_sample,+", + "CDEF:inc_avg_sample=inc_avg_raw,UN,0,inc_avg_raw,IF,sample_len,*", + "CDEF:inc_avg_sum=PREV,UN,0,PREV,IF,inc_avg_sample,+", + "AREA:out_avg#" .. self.palette.HalfGreen, + "AREA:inc_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:out_avg#" .. self.palette.FullGreen .. ":Outgoing", + "GPRINT:out_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:out_max:MAX:%5.1lf%s Max,", + "GPRINT:out_avg:LAST:%5.1lf%s Last", + "GPRINT:out_avg_sum:LAST:(ca. %5.1lf%sB Total)\\l", + "LINE1:inc_avg#" .. self.palette.FullBlue .. ":Incoming", + --"GPRINT:inc_min:MIN:%5.1lf %s Min,", + "GPRINT:inc_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:inc_max:MAX:%5.1lf%s Max,", + "GPRINT:inc_avg:LAST:%5.1lf%s Last", + "GPRINT:inc_avg_sum:LAST:(ca. %5.1lf%sB Total)\\l" + }, + + cpufreq = { + "DEF:cpufreq_avg={file}:value:AVERAGE", + "DEF:cpufreq_min={file}:value:MIN", + "DEF:cpufreq_max={file}:value:MAX", + "AREA:cpufreq_max#" .. self.palette.HalfBlue, + "AREA:cpufreq_min#" .. self.palette.Canvas, + "LINE1:cpufreq_avg#" .. self.palette.FullBlue .. ":Frequency", + "GPRINT:cpufreq_min:MIN:%5.1lf%s Min,", + "GPRINT:cpufreq_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:cpufreq_max:MAX:%5.1lf%s Max,", + "GPRINT:cpufreq_avg:LAST:%5.1lf%s Last\\l" + }, + + multimeter = { + "DEF:multimeter_avg={file}:value:AVERAGE", + "DEF:multimeter_min={file}:value:MIN", + "DEF:multimeter_max={file}:value:MAX", + "AREA:multimeter_max#" .. self.palette.HalfBlue, + "AREA:multimeter_min#" .. self.palette.Canvas, + "LINE1:multimeter_avg#" .. self.palette.FullBlue .. ":Multimeter", + "GPRINT:multimeter_min:MIN:%4.1lf Min,", + "GPRINT:multimeter_avg:AVERAGE:%4.1lf Average,", + "GPRINT:multimeter_max:MAX:%4.1lf Max,", + "GPRINT:multimeter_avg:LAST:%4.1lf Last\\l" + }, + + users = { + "-v", "Users", + "DEF:users_avg={file}:users:AVERAGE", + "DEF:users_min={file}:users:MIN", + "DEF:users_max={file}:users:MAX", + "AREA:users_max#" .. self.palette.HalfBlue, + "AREA:users_min#" .. self.palette.Canvas, + "LINE1:users_avg#" .. self.palette.FullBlue .. ":Users", + "GPRINT:users_min:MIN:%4.1lf Min,", + "GPRINT:users_avg:AVERAGE:%4.1lf Average,", + "GPRINT:users_max:MAX:%4.1lf Max,", + "GPRINT:users_avg:LAST:%4.1lf Last\\l" + }, + + voltage = { + "-v", "Voltage", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Voltage", + "GPRINT:min:MIN:%5.1lf%sV Min,", + "GPRINT:avg:AVERAGE:%5.1lf%sV Avg,", + "GPRINT:max:MAX:%5.1lf%sV Max,", + "GPRINT:avg:LAST:%5.1lf%sV Last\\l" + }, + + vs_threads = { + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Threads", + "GPRINT:min:MIN:%5.1lf Min,", + "GPRINT:avg:AVERAGE:%5.1lf Avg.,", + "GPRINT:max:MAX:%5.1lf Max,", + "GPRINT:avg:LAST:%5.1lf Last\\l", + }, + + vs_memory = { + "-b", "1024", "-v", "Bytes", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":", + "GPRINT:min:MIN:%5.1lf%sbytes Min,", + "GPRINT:avg:AVERAGE:%5.1lf%sbytes Avg.,", + "GPRINT:max:MAX:%5.1lf%sbytes Max,", + "GPRINT:avg:LAST:%5.1lf%sbytes Last\\l", + }, + + vs_processes = { + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Processes", + "GPRINT:min:MIN:%5.1lf Min,", + "GPRINT:avg:AVERAGE:%5.1lf Avg.,", + "GPRINT:max:MAX:%5.1lf Max,", + "GPRINT:avg:LAST:%5.1lf Last\\l", + }, + } + + + + -- used color palette + colors = { + Canvas = "FFFFFF", + + FullRed = "FF0000", + FullGreen = "00E000", + FullBlue = "0000FF", + FullYellow = "F0A000", + FullCyan = "00A0FF", + FullMagenta = "A000FF", + + HalfRed = "F7B7B7", + HalfGreen = "B7EFB7", + HalfBlue = "B7B7F7", + HalfYellow = "F3DFB7", + HalfCyan = "B7DFF7", + HalfMagenta = "DFB7F7", + + HalfBlueGreen = "89B3C9" + } + + + -- plotting arguments for each defined datasource + rrd_args = { + apache_bytes = { + "DEF:min_raw={file}:count:MIN", + "DEF:avg_raw={file}:count:AVERAGE", + "DEF:max_raw={file}:count:MAX", + "CDEF:min=min_raw,8,*", + "CDEF:avg=avg_raw,8,*", + "CDEF:max=max_raw,8,*", + "CDEF:mytime=avg_raw,TIME,TIME,IF", + "CDEF:sample_len_raw=mytime,PREV(mytime),-", + "CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF", + "CDEF:avg_sample=avg_raw,UN,0,avg_raw,IF,sample_len,*", + "CDEF:avg_sum=PREV,UN,0,PREV,IF,avg_sample,+", + "AREA:avg#" .. self.palette.HalfBlue, + "LINE1:avg#" .. self.palette.FullBlue .. ":Bit/s", + "GPRINT:min:MIN:%5.1lf%s Min,", + "GPRINT:avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:max:MAX:%5.1lf%s Max,", + "GPRINT:avg:LAST:%5.1lf%s Last\\l", + "GPRINT:avg_sum:LAST:(ca. %5.1lf%sB Total)" + }, + + apache_requests = { + "DEF:min={file}:count:MIN", + "DEF:avg={file}:count:AVERAGE", + "DEF:max={file}:count:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Requests/s", + "GPRINT:min:MIN:%6.2lf Min,", + "GPRINT:avg:AVERAGE:%6.2lf Avg,", + "GPRINT:max:MAX:%6.2lf Max,", + "GPRINT:avg:LAST:%6.2lf Last\\l" + }, + + apache_scoreboard = { + "DEF:min={file}:count:MIN", + "DEF:avg={file}:count:AVERAGE", + "DEF:max={file}:count:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Processes", + "GPRINT:min:MIN:%6.2lf Min,", + "GPRINT:avg:AVERAGE:%6.2lf Avg,", + "GPRINT:max:MAX:%6.2lf Max,", + "GPRINT:avg:LAST:%6.2lf Last\\l" + }, + + bitrate = { + "-v", "Bits/s", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Bits/s", + "GPRINT:min:MIN:%5.1lf%s Min,", + "GPRINT:avg:AVERAGE:%5.1lf%s Average,", + "GPRINT:max:MAX:%5.1lf%s Max,", + "GPRINT:avg:LAST:%5.1lf%s Last\\l" + }, + + charge = { + "-v", "Ah", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Charge", + "GPRINT:min:MIN:%5.1lf%sAh Min,", + "GPRINT:avg:AVERAGE:%5.1lf%sAh Avg,", + "GPRINT:max:MAX:%5.1lf%sAh Max,", + "GPRINT:avg:LAST:%5.1lf%sAh Last\\l" + }, + + cpu = { + "-v", "CPU load", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Percent", + "GPRINT:min:MIN:%6.2lf%% Min,", + "GPRINT:avg:AVERAGE:%6.2lf%% Avg,", + "GPRINT:max:MAX:%6.2lf%% Max,", + "GPRINT:avg:LAST:%6.2lf%% Last\\l" + }, + + current = { + "-v", "Ampere", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Current", + "GPRINT:min:MIN:%5.1lf%sA Min,", + "GPRINT:avg:AVERAGE:%5.1lf%sA Avg,", + "GPRINT:max:MAX:%5.1lf%sA Max,", + "GPRINT:avg:LAST:%5.1lf%sA Last\\l" + }, + + df = { + "-v", "Percent", "-l", "0", + "DEF:free_avg={file}:free:AVERAGE", + "DEF:free_min={file}:free:MIN", + "DEF:free_max={file}:free:MAX", + "DEF:used_avg={file}:used:AVERAGE", + "DEF:used_min={file}:used:MIN", + "DEF:used_max={file}:used:MAX", + "CDEF:total=free_avg,used_avg,+", + "CDEF:free_pct=100,free_avg,*,total,/", + "CDEF:used_pct=100,used_avg,*,total,/", + "CDEF:free_acc=free_pct,used_pct,+", + "CDEF:used_acc=used_pct", + "AREA:free_acc#" .. self.palette.HalfGreen, + "AREA:used_acc#" .. self.palette.HalfRed, + "LINE1:free_acc#" .. self.palette.FullGreen .. ":Free", + "GPRINT:free_min:MIN:%5.1lf%sB Min,", + "GPRINT:free_avg:AVERAGE:%5.1lf%sB Avg,", + "GPRINT:free_max:MAX:%5.1lf%sB Max,", + "GPRINT:free_avg:LAST:%5.1lf%sB Last\\l", + "LINE1:used_acc#" .. self.palette.FullRed .. ":Used", + "GPRINT:used_min:MIN:%5.1lf%sB Min,", + "GPRINT:used_avg:AVERAGE:%5.1lf%sB Avg,", + "GPRINT:used_max:MAX:%5.1lf%sB Max,", + "GPRINT:used_avg:LAST:%5.1lf%sB Last\\l" + }, + + disk = { + "DEF:rtime_avg={file}:rtime:AVERAGE", + "DEF:rtime_min={file}:rtime:MIN", + "DEF:rtime_max={file}:rtime:MAX", + "DEF:wtime_avg={file}:wtime:AVERAGE", + "DEF:wtime_min={file}:wtime:MIN", + "DEF:wtime_max={file}:wtime:MAX", + "CDEF:rtime_avg_ms=rtime_avg,1000,/", + "CDEF:rtime_min_ms=rtime_min,1000,/", + "CDEF:rtime_max_ms=rtime_max,1000,/", + "CDEF:wtime_avg_ms=wtime_avg,1000,/", + "CDEF:wtime_min_ms=wtime_min,1000,/", + "CDEF:wtime_max_ms=wtime_max,1000,/", + "CDEF:total_avg_ms=rtime_avg_ms,wtime_avg_ms,+", + "CDEF:total_min_ms=rtime_min_ms,wtime_min_ms,+", + "CDEF:total_max_ms=rtime_max_ms,wtime_max_ms,+", + "AREA:total_max_ms#" .. self.palette.HalfRed, + "AREA:total_min_ms#" .. self.palette.Canvas, + "LINE1:wtime_avg_ms#" .. self.palette.FullGreen .. ":Write", + "GPRINT:wtime_min_ms:MIN:%5.1lf%s Min,", + "GPRINT:wtime_avg_ms:AVERAGE:%5.1lf%s Avg,", + "GPRINT:wtime_max_ms:MAX:%5.1lf%s Max,", + "GPRINT:wtime_avg_ms:LAST:%5.1lf%s Last\n", + "LINE1:rtime_avg_ms#" .. self.palette.FullBlue .. ":Read ", + "GPRINT:rtime_min_ms:MIN:%5.1lf%s Min,", + "GPRINT:rtime_avg_ms:AVERAGE:%5.1lf%s Avg,", + "GPRINT:rtime_max_ms:MAX:%5.1lf%s Max,", + "GPRINT:rtime_avg_ms:LAST:%5.1lf%s Last\n", + "LINE1:total_avg_ms#" .. self.palette.FullRed .. ":Total", + "GPRINT:total_min_ms:MIN:%5.1lf%s Min,", + "GPRINT:total_avg_ms:AVERAGE:%5.1lf%s Avg,", + "GPRINT:total_max_ms:MAX:%5.1lf%s Max,", + "GPRINT:total_avg_ms:LAST:%5.1lf%s Last\\l" + }, + + disk_octets = { + "-v", "Bytes/s", + "DEF:out_min={file}:write:MIN", + "DEF:out_avg={file}:write:AVERAGE", + "DEF:out_max={file}:write:MAX", + "DEF:inc_min={file}:read:MIN", + "DEF:inc_avg={file}:read:AVERAGE", + "DEF:inc_max={file}:read:MAX", + "CDEF:overlap=out_avg,inc_avg,GT,inc_avg,out_avg,IF", + "CDEF:mytime=out_avg,TIME,TIME,IF", + "CDEF:sample_len_raw=mytime,PREV(mytime),-", + "CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF", + "CDEF:out_avg_sample=out_avg,UN,0,out_avg,IF,sample_len,*", + "CDEF:out_avg_sum=PREV,UN,0,PREV,IF,out_avg_sample,+", + "CDEF:inc_avg_sample=inc_avg,UN,0,inc_avg,IF,sample_len,*", + "CDEF:inc_avg_sum=PREV,UN,0,PREV,IF,inc_avg_sample,+", + "AREA:out_avg#" .. self.palette.HalfGreen, + "AREA:inc_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:out_avg#" .. self.palette.FullGreen .. ":Written", + "GPRINT:out_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:out_max:MAX:%5.1lf%s Max,", + "GPRINT:out_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:out_avg_sum:LAST:(ca. %5.1lf%sB Total)", + "LINE1:inc_avg#" .. self.palette.FullBlue .. ":Read ", + "GPRINT:inc_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:inc_max:MAX:%5.1lf%s Max,", + "GPRINT:inc_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:inc_avg_sum:LAST:(ca. %5.1lf%sB Total)" + }, + + disk_merged = { + "-v", "Merged Ops/s", + "DEF:out_min={file}:write:MIN", + "DEF:out_avg={file}:write:AVERAGE", + "DEF:out_max={file}:write:MAX", + "DEF:inc_min={file}:read:MIN", + "DEF:inc_avg={file}:read:AVERAGE", + "DEF:inc_max={file}:read:MAX", + "CDEF:overlap=out_avg,inc_avg,GT,inc_avg,out_avg,IF", + "AREA:out_avg#" .. self.palette.HalfGreen, + "AREA:inc_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:out_avg#" .. self.palette.FullGreen .. ":Written", + "GPRINT:out_avg:AVERAGE:%6.2lf Avg,", + "GPRINT:out_max:MAX:%6.2lf Max,", + "GPRINT:out_avg:LAST:%6.2lf Last\\l", + "LINE1:inc_avg#" .. self.palette.FullBlue .. ":Read ", + "GPRINT:inc_avg:AVERAGE:%6.2lf Avg,", + "GPRINT:inc_max:MAX:%6.2lf Max,", + "GPRINT:inc_avg:LAST:%6.2lf Last\\l" + }, + + disk_ops = { + "-v", "Ops/s", + "DEF:out_min={file}:write:MIN", + "DEF:out_avg={file}:write:AVERAGE", + "DEF:out_max={file}:write:MAX", + "DEF:inc_min={file}:read:MIN", + "DEF:inc_avg={file}:read:AVERAGE", + "DEF:inc_max={file}:read:MAX", + "CDEF:overlap=out_avg,inc_avg,GT,inc_avg,out_avg,IF", + "AREA:out_avg#" .. self.palette.HalfGreen, + "AREA:inc_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:out_avg#" .. self.palette.FullGreen .. ":Written", + "GPRINT:out_avg:AVERAGE:%6.2lf Avg,", + "GPRINT:out_max:MAX:%6.2lf Max,", + "GPRINT:out_avg:LAST:%6.2lf Last\\l", + "LINE1:inc_avg#" .. self.palette.FullBlue .. ":Read ", + "GPRINT:inc_avg:AVERAGE:%6.2lf Avg,", + "GPRINT:inc_max:MAX:%6.2lf Max,", + "GPRINT:inc_avg:LAST:%6.2lf Last\\l" + }, + + disk_time = { + "-v", "Seconds/s", + "DEF:out_min_raw={file}:write:MIN", + "DEF:out_avg_raw={file}:write:AVERAGE", + "DEF:out_max_raw={file}:write:MAX", + "DEF:inc_min_raw={file}:read:MIN", + "DEF:inc_avg_raw={file}:read:AVERAGE", + "DEF:inc_max_raw={file}:read:MAX", + "CDEF:out_min=out_min_raw,1000,/", + "CDEF:out_avg=out_avg_raw,1000,/", + "CDEF:out_max=out_max_raw,1000,/", + "CDEF:inc_min=inc_min_raw,1000,/", + "CDEF:inc_avg=inc_avg_raw,1000,/", + "CDEF:inc_max=inc_max_raw,1000,/", + "CDEF:overlap=out_avg,inc_avg,GT,inc_avg,out_avg,IF", + "AREA:out_avg#" .. self.palette.HalfGreen, + "AREA:inc_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:out_avg#" .. self.palette.FullGreen .. ":Written", + "GPRINT:out_avg:AVERAGE:%5.1lf%ss Avg,", + "GPRINT:out_max:MAX:%5.1lf%ss Max,", + "GPRINT:out_avg:LAST:%5.1lf%ss Last\\l", + "LINE1:inc_avg#" .. self.palette.FullBlue .. ":Read ", + "GPRINT:inc_avg:AVERAGE:%5.1lf%ss Avg,", + "GPRINT:inc_max:MAX:%5.1lf%ss Max,", + "GPRINT:inc_avg:LAST:%5.1lf%ss Last\\l" + }, + + dns_octets = { + "DEF:rsp_min_raw={file}:responses:MIN", + "DEF:rsp_avg_raw={file}:responses:AVERAGE", + "DEF:rsp_max_raw={file}:responses:MAX", + "DEF:qry_min_raw={file}:queries:MIN", + "DEF:qry_avg_raw={file}:queries:AVERAGE", + "DEF:qry_max_raw={file}:queries:MAX", + "CDEF:rsp_min=rsp_min_raw,8,*", + "CDEF:rsp_avg=rsp_avg_raw,8,*", + "CDEF:rsp_max=rsp_max_raw,8,*", + "CDEF:qry_min=qry_min_raw,8,*", + "CDEF:qry_avg=qry_avg_raw,8,*", + "CDEF:qry_max=qry_max_raw,8,*", + "CDEF:overlap=rsp_avg,qry_avg,GT,qry_avg,rsp_avg,IF", + "CDEF:mytime=rsp_avg_raw,TIME,TIME,IF", + "CDEF:sample_len_raw=mytime,PREV(mytime),-", + "CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF", + "CDEF:rsp_avg_sample=rsp_avg_raw,UN,0,rsp_avg_raw,IF,sample_len,*", + "CDEF:rsp_avg_sum=PREV,UN,0,PREV,IF,rsp_avg_sample,+", + "CDEF:qry_avg_sample=qry_avg_raw,UN,0,qry_avg_raw,IF,sample_len,*", + "CDEF:qry_avg_sum=PREV,UN,0,PREV,IF,qry_avg_sample,+", + "AREA:rsp_avg#" .. self.palette.HalfGreen, + "AREA:qry_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:rsp_avg#" .. self.palette.FullGreen .. ":Responses", + "GPRINT:rsp_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:rsp_max:MAX:%5.1lf%s Max,", + "GPRINT:rsp_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:rsp_avg_sum:LAST:(ca. %5.1lf%sB Total)", + "LINE1:qry_avg#" .. self.palette.FullBlue .. ":Queries ", + #"GPRINT:qry_min:MIN:%5.1lf %s Min,", + "GPRINT:qry_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:qry_max:MAX:%5.1lf%s Max,", + "GPRINT:qry_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:qry_avg_sum:LAST:(ca. %5.1lf%sB Total)" + }, + + dns_opcode = { + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Queries/s", + "GPRINT:min:MIN:%9.3lf Min,", + "GPRINT:avg:AVERAGE:%9.3lf Average,", + "GPRINT:max:MAX:%9.3lf Max,", + "GPRINT:avg:LAST:%9.3lf Last\\l" + }, + + email_count = { + "-v", "Mails", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfMagenta, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullMagenta .. ":Count ", + "GPRINT:min:MIN:%4.1lf Min,", + "GPRINT:avg:AVERAGE:%4.1lf Avg,", + "GPRINT:max:MAX:%4.1lf Max,", + "GPRINT:avg:LAST:%4.1lf Last\\l" + }, + + email_size = { + "-v", "Bytes", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfMagenta, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullMagenta .. ":Count ", + "GPRINT:min:MIN:%4.1lf Min,", + "GPRINT:avg:AVERAGE:%4.1lf Avg,", + "GPRINT:max:MAX:%4.1lf Max,", + "GPRINT:avg:LAST:%4.1lf Last\\l" + }, + + spam_score = { + "-v", "Score", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Score ", + "GPRINT:min:MIN:%4.1lf Min,", + "GPRINT:avg:AVERAGE:%4.1lf Avg,", + "GPRINT:max:MAX:%4.1lf Max,", + "GPRINT:avg:LAST:%4.1lf Last\\l" + }, + + spam_check = { + "DEF:avg={file}:hits:AVERAGE", + "DEF:min={file}:hits:MIN", + "DEF:max={file}:hits:MAX", + "AREA:max#" .. self.palette.HalfMagenta, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullMagenta .. ":Count ", + "GPRINT:min:MIN:%4.1lf Min,", + "GPRINT:avg:AVERAGE:%4.1lf Avg,", + "GPRINT:max:MAX:%4.1lf Max,", + "GPRINT:avg:LAST:%4.1lf Last\\l" + }, + + entropy = { + "-v", "Bits", + "DEF:avg={file}:entropy:AVERAGE", + "DEF:min={file}:entropy:MIN", + "DEF:max={file}:entropy:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Bits", + "GPRINT:min:MIN:%4.0lfbit Min,", + "GPRINT:avg:AVERAGE:%4.0lfbit Avg,", + "GPRINT:max:MAX:%4.0lfbit Max,", + "GPRINT:avg:LAST:%4.0lfbit Last\\l" + }, + + fanspeed = { + "-v", "RPM", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfMagenta, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullMagenta .. ":RPM", + "GPRINT:min:MIN:%4.1lf Min,", + "GPRINT:avg:AVERAGE:%4.1lf Avg,", + "GPRINT:max:MAX:%4.1lf Max,", + "GPRINT:avg:LAST:%4.1lf Last\\l" + }, + + frequency = { + "-v", "Hertz", + "DEF:avg={file}:frequency:AVERAGE", + "DEF:min={file}:frequency:MIN", + "DEF:max={file}:frequency:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Frequency [Hz]", + "GPRINT:min:MIN:%4.1lf Min,", + "GPRINT:avg:AVERAGE:%4.1lf Avg,", + "GPRINT:max:MAX:%4.1lf Max,", + "GPRINT:avg:LAST:%4.1lf Last\\l" + }, + + frequency_offset = { + "DEF:ppm_avg={file}:ppm:AVERAGE", + "DEF:ppm_min={file}:ppm:MIN", + "DEF:ppm_max={file}:ppm:MAX", + "AREA:ppm_max#" .. self.palette.HalfBlue, + "AREA:ppm_min#" .. self.palette.Canvas, + "LINE1:ppm_avg#" .. self.palette.FullBlue .. ":{inst}", + "GPRINT:ppm_min:MIN:%5.2lf Min,", + "GPRINT:ppm_avg:AVERAGE:%5.2lf Avg,", + "GPRINT:ppm_max:MAX:%5.2lf Max,", + "GPRINT:ppm_avg:LAST:%5.2lf Last\\l" + }, + + gauge = { + "-v", "Exec value", + "DEF:temp_avg={file}:value:AVERAGE", + "DEF:temp_min={file}:value:MIN", + "DEF:temp_max={file}:value:MAX", + "AREA:temp_max#" .. self.palette.HalfBlue, + "AREA:temp_min#" .. self.palette.Canvas, + "LINE1:temp_avg#" .. self.palette.FullBlue .. ":Exec value", + "GPRINT:temp_min:MIN:%6.2lf Min,", + "GPRINT:temp_avg:AVERAGE:%6.2lf Avg,", + "GPRINT:temp_max:MAX:%6.2lf Max,", + "GPRINT:temp_avg:LAST:%6.2lf Last\\l" + }, + + hddtemp = { + "DEF:temp_avg={file}:value:AVERAGE", + "DEF:temp_min={file}:value:MIN", + "DEF:temp_max={file}:value:MAX", + "AREA:temp_max#" .. self.palette.HalfRed, + "AREA:temp_min#" .. self.palette.Canvas, + "LINE1:temp_avg#" .. self.palette.FullRed .. ":Temperature", + "GPRINT:temp_min:MIN:%4.1lf Min,", + "GPRINT:temp_avg:AVERAGE:%4.1lf Avg,", + "GPRINT:temp_max:MAX:%4.1lf Max,", + "GPRINT:temp_avg:LAST:%4.1lf Last\\l" + }, + + humidity = { + "-v", "Percent", + "DEF:temp_avg={file}:value:AVERAGE", + "DEF:temp_min={file}:value:MIN", + "DEF:temp_max={file}:value:MAX", + "AREA:temp_max#" .. self.palette.HalfGreen, + "AREA:temp_min#" .. self.palette.Canvas, + "LINE1:temp_avg#" .. self.palette.FullGreen .. ":Temperature", + "GPRINT:temp_min:MIN:%4.1lf%% Min,", + "GPRINT:temp_avg:AVERAGE:%4.1lf%% Avg,", + "GPRINT:temp_max:MAX:%4.1lf%% Max,", + "GPRINT:temp_avg:LAST:%4.1lf%% Last\\l" + }, + + if_errors = { + "-v", "Errors/s", + "DEF:tx_min={file}:tx:MIN", + "DEF:tx_avg={file}:tx:AVERAGE", + "DEF:tx_max={file}:tx:MAX", + "DEF:rx_min={file}:rx:MIN", + "DEF:rx_avg={file}:rx:AVERAGE", + "DEF:rx_max={file}:rx:MAX", + "CDEF:overlap=tx_avg,rx_avg,GT,rx_avg,tx_avg,IF", + "CDEF:mytime=tx_avg,TIME,TIME,IF", + "CDEF:sample_len_raw=mytime,PREV(mytime),-", + "CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF", + "CDEF:tx_avg_sample=tx_avg,UN,0,tx_avg,IF,sample_len,*", + "CDEF:tx_avg_sum=PREV,UN,0,PREV,IF,tx_avg_sample,+", + "CDEF:rx_avg_sample=rx_avg,UN,0,rx_avg,IF,sample_len,*", + "CDEF:rx_avg_sum=PREV,UN,0,PREV,IF,rx_avg_sample,+", + "AREA:tx_avg#" .. self.palette.HalfGreen, + "AREA:rx_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:tx_avg#" .. self.palette.FullGreen .. ":TX", + "GPRINT:tx_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:tx_max:MAX:%5.1lf%s Max,", + "GPRINT:tx_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:tx_avg_sum:LAST:(ca. %4.0lf%s Total)", + "LINE1:rx_avg#" .. self.palette.FullBlue .. ":RX", + #"GPRINT:rx_min:MIN:%5.1lf %s Min,", + "GPRINT:rx_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:rx_max:MAX:%5.1lf%s Max,", + "GPRINT:rx_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:rx_avg_sum:LAST:(ca. %4.0lf%s Total)" + }, + + if_collisions = { + "-v", "Collisions/s", + "DEF:min_raw={file}:value:MIN", + "DEF:avg_raw={file}:value:AVERAGE", + "DEF:max_raw={file}:value:MAX", + "CDEF:min=min_raw,8,*", + "CDEF:avg=avg_raw,8,*", + "CDEF:max=max_raw,8,*", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Collisions/s", + "GPRINT:min:MIN:%5.1lf %s Min,", + "GPRINT:avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:max:MAX:%5.1lf%s Max,", + "GPRINT:avg:LAST:%5.1lf%s Last\\l" + }, + + if_dropped = { + "-v", "Packets/s", + "DEF:tx_min={file}:tx:MIN", + "DEF:tx_avg={file}:tx:AVERAGE", + "DEF:tx_max={file}:tx:MAX", + "DEF:rx_min={file}:rx:MIN", + "DEF:rx_avg={file}:rx:AVERAGE", + "DEF:rx_max={file}:rx:MAX", + "CDEF:overlap=tx_avg,rx_avg,GT,rx_avg,tx_avg,IF", + "CDEF:mytime=tx_avg,TIME,TIME,IF", + "CDEF:sample_len_raw=mytime,PREV(mytime),-", + "CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF", + "CDEF:tx_avg_sample=tx_avg,UN,0,tx_avg,IF,sample_len,*", + "CDEF:tx_avg_sum=PREV,UN,0,PREV,IF,tx_avg_sample,+", + "CDEF:rx_avg_sample=rx_avg,UN,0,rx_avg,IF,sample_len,*", + "CDEF:rx_avg_sum=PREV,UN,0,PREV,IF,rx_avg_sample,+", + "AREA:tx_avg#" .. self.palette.HalfGreen, + "AREA:rx_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:tx_avg#" .. self.palette.FullGreen .. ":TX", + "GPRINT:tx_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:tx_max:MAX:%5.1lf%s Max,", + "GPRINT:tx_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:tx_avg_sum:LAST:(ca. %4.0lf%s Total)", + "LINE1:rx_avg#" .. self.palette.FullBlue .. ":RX", + #"GPRINT:rx_min:MIN:%5.1lf %s Min,", + "GPRINT:rx_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:rx_max:MAX:%5.1lf%s Max,", + "GPRINT:rx_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:rx_avg_sum:LAST:(ca. %4.0lf%s Total)" + }, + + if_packets = { + "-v", "Packets/s", + "DEF:tx_min={file}:tx:MIN", + "DEF:tx_avg={file}:tx:AVERAGE", + "DEF:tx_max={file}:tx:MAX", + "DEF:rx_min={file}:rx:MIN", + "DEF:rx_avg={file}:rx:AVERAGE", + "DEF:rx_max={file}:rx:MAX", + "CDEF:overlap=tx_avg,rx_avg,GT,rx_avg,tx_avg,IF", + "CDEF:mytime=tx_avg,TIME,TIME,IF", + "CDEF:sample_len_raw=mytime,PREV(mytime),-", + "CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF", + "CDEF:tx_avg_sample=tx_avg,UN,0,tx_avg,IF,sample_len,*", + "CDEF:tx_avg_sum=PREV,UN,0,PREV,IF,tx_avg_sample,+", + "CDEF:rx_avg_sample=rx_avg,UN,0,rx_avg,IF,sample_len,*", + "CDEF:rx_avg_sum=PREV,UN,0,PREV,IF,rx_avg_sample,+", + "AREA:tx_avg#" .. self.palette.HalfGreen, + "AREA:rx_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:tx_avg#" .. self.palette.FullGreen .. ":TX", + "GPRINT:tx_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:tx_max:MAX:%5.1lf%s Max,", + "GPRINT:tx_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:tx_avg_sum:LAST:(ca. %4.0lf%s Total)", + "LINE1:rx_avg#" .. self.palette.FullBlue .. ":RX", + #"GPRINT:rx_min:MIN:%5.1lf %s Min,", + "GPRINT:rx_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:rx_max:MAX:%5.1lf%s Max,", + "GPRINT:rx_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:rx_avg_sum:LAST:(ca. %4.0lf%s Total)" + }, + + if_rx_errors = { + "-v", "Errors/s", + "DEF:min={file}:value:MIN", + "DEF:avg={file}:value:AVERAGE", + "DEF:max={file}:value:MAX", + "CDEF:mytime=avg,TIME,TIME,IF", + "CDEF:sample_len_raw=mytime,PREV(mytime),-", + "CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF", + "CDEF:avg_sample=avg,UN,0,avg,IF,sample_len,*", + "CDEF:avg_sum=PREV,UN,0,PREV,IF,avg_sample,+", + "AREA:avg#" .. self.palette.HalfBlue, + "LINE1:avg#" .. self.palette.FullBlue .. ":Errors/s", + "GPRINT:avg:AVERAGE:%3.1lf%s Avg,", + "GPRINT:max:MAX:%3.1lf%s Max,", + "GPRINT:avg:LAST:%3.1lf%s Last\\l", + "GPRINT:avg_sum:LAST:(ca. %2.0lf%s Total)" + }, + + ipt_bytes = { + "-v", "Bits/s", + "DEF:min_raw={file}:value:MIN", + "DEF:avg_raw={file}:value:AVERAGE", + "DEF:max_raw={file}:value:MAX", + "CDEF:min=min_raw,8,*", + "CDEF:avg=avg_raw,8,*", + "CDEF:max=max_raw,8,*", + "CDEF:mytime=avg_raw,TIME,TIME,IF", + "CDEF:sample_len_raw=mytime,PREV(mytime),-", + "CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF", + "CDEF:avg_sample=avg_raw,UN,0,avg_raw,IF,sample_len,*", + "CDEF:avg_sum=PREV,UN,0,PREV,IF,avg_sample,+", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Bits/s", + #"GPRINT:min:MIN:%5.1lf %s Min,", + "GPRINT:avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:max:MAX:%5.1lf%s Max,", + "GPRINT:avg:LAST:%5.1lf%s Last\\l", + "GPRINT:avg_sum:LAST:(ca. %5.1lf%sB Total)" + }, + + ipt_packets = { + "-v", "Packets/s", + "DEF:min_raw={file}:value:MIN", + "DEF:avg_raw={file}:value:AVERAGE", + "DEF:max_raw={file}:value:MAX", + "CDEF:min=min_raw,8,*", + "CDEF:avg=avg_raw,8,*", + "CDEF:max=max_raw,8,*", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Packets/s", + "GPRINT:min:MIN:%5.1lf %s Min,", + "GPRINT:avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:max:MAX:%5.1lf%s Max,", + "GPRINT:avg:LAST:%5.1lf%s Last\\l" + }, + + irq = { + "-v", "Issues/s", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Issues/s", + "GPRINT:min:MIN:%6.2lf Min,", + "GPRINT:avg:AVERAGE:%6.2lf Avg,", + "GPRINT:max:MAX:%6.2lf Max,", + "GPRINT:avg:LAST:%6.2lf Last\\l" + }, + + load = { + "-v", "System load", + "DEF:s_avg={file}:shortterm:AVERAGE", + "DEF:s_min={file}:shortterm:MIN", + "DEF:s_max={file}:shortterm:MAX", + "DEF:m_avg={file}:midterm:AVERAGE", + "DEF:m_min={file}:midterm:MIN", + "DEF:m_max={file}:midterm:MAX", + "DEF:l_avg={file}:longterm:AVERAGE", + "DEF:l_min={file}:longterm:MIN", + "DEF:l_max={file}:longterm:MAX", + "AREA:s_max#" .. self.palette.HalfGreen, + "AREA:s_min#" .. self.palette.Canvas, + "LINE1:s_avg#" .. self.palette.FullGreen .. ": 1m average", + "GPRINT:s_min:MIN:%4.2lf Min,", + "GPRINT:s_avg:AVERAGE:%4.2lf Avg,", + "GPRINT:s_max:MAX:%4.2lf Max,", + "GPRINT:s_avg:LAST:%4.2lf Last\n", + "LINE1:m_avg#" .. self.palette.FullBlue .. ": 5m average", + "GPRINT:m_min:MIN:%4.2lf Min,", + "GPRINT:m_avg:AVERAGE:%4.2lf Avg,", + "GPRINT:m_max:MAX:%4.2lf Max,", + "GPRINT:m_avg:LAST:%4.2lf Last\n", + "LINE1:l_avg#" .. self.palette.FullRed .. ":15m average", + "GPRINT:l_min:MIN:%4.2lf Min,", + "GPRINT:l_avg:AVERAGE:%4.2lf Avg,", + "GPRINT:l_max:MAX:%4.2lf Max,", + "GPRINT:l_avg:LAST:%4.2lf Last\\l" + }, + + load_percent = { + "DEF:avg={file}:percent:AVERAGE", + "DEF:min={file}:percent:MIN", + "DEF:max={file}:percent:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Load", + "GPRINT:min:MIN:%5.1lf%s%% Min,", + "GPRINT:avg:AVERAGE:%5.1lf%s%% Avg,", + "GPRINT:max:MAX:%5.1lf%s%% Max,", + "GPRINT:avg:LAST:%5.1lf%s%% Last\\l" + }, + + mails = { + "DEF:rawgood={file}:good:AVERAGE", + "DEF:rawspam={file}:spam:AVERAGE", + "CDEF:good=rawgood,UN,0,rawgood,IF", + "CDEF:spam=rawspam,UN,0,rawspam,IF", + "CDEF:negspam=spam,-1,*", + "AREA:good#" .. self.palette.HalfGreen, + "LINE1:good#" .. self.palette.FullGreen .. ":Good mails", + "GPRINT:good:AVERAGE:%4.1lf Avg,", + "GPRINT:good:MAX:%4.1lf Max,", + "GPRINT:good:LAST:%4.1lf Last\n", + "AREA:negspam#" .. self.palette.HalfRed, + "LINE1:negspam#" .. self.palette.FullRed .. ":Spam mails", + "GPRINT:spam:AVERAGE:%4.1lf Avg,", + "GPRINT:spam:MAX:%4.1lf Max,", + "GPRINT:spam:LAST:%4.1lf Last\\l", + "HRULE:0#000000" + }, + + memory = { + "-b", "1024", "-v", "Bytes", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Memory", + "GPRINT:min:MIN:%5.1lf%sbyte Min,", + "GPRINT:avg:AVERAGE:%5.1lf%sbyte Avg,", + "GPRINT:max:MAX:%5.1lf%sbyte Max,", + "GPRINT:avg:LAST:%5.1lf%sbyte Last\\l" + }, + + old_memory = { + "DEF:used_avg={file}:used:AVERAGE", + "DEF:free_avg={file}:free:AVERAGE", + "DEF:buffers_avg={file}:buffers:AVERAGE", + "DEF:cached_avg={file}:cached:AVERAGE", + "DEF:used_min={file}:used:MIN", + "DEF:free_min={file}:free:MIN", + "DEF:buffers_min={file}:buffers:MIN", + "DEF:cached_min={file}:cached:MIN", + "DEF:used_max={file}:used:MAX", + "DEF:free_max={file}:free:MAX", + "DEF:buffers_max={file}:buffers:MAX", + "DEF:cached_max={file}:cached:MAX", + "CDEF:cached_avg_nn=cached_avg,UN,0,cached_avg,IF", + "CDEF:buffers_avg_nn=buffers_avg,UN,0,buffers_avg,IF", + "CDEF:free_cached_buffers_used=free_avg,cached_avg_nn,+,buffers_avg_nn,+,used_avg,+", + "CDEF:cached_buffers_used=cached_avg,buffers_avg_nn,+,used_avg,+", + "CDEF:buffers_used=buffers_avg,used_avg,+", + "AREA:free_cached_buffers_used#" .. self.palette.HalfGreen, + "AREA:cached_buffers_used#" .. self.palette.HalfBlue, + "AREA:buffers_used#" .. self.palette.HalfYellow, + "AREA:used_avg#" .. self.palette.HalfRed, + "LINE1:free_cached_buffers_used#" .. self.palette.FullGreen .. ":Free ", + "GPRINT:free_min:MIN:%5.1lf%s Min,", + "GPRINT:free_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:free_max:MAX:%5.1lf%s Max,", + "GPRINT:free_avg:LAST:%5.1lf%s Last\n", + "LINE1:cached_buffers_used#" .. self.palette.FullBlue .. ":Page cache ", + "GPRINT:cached_min:MIN:%5.1lf%s Min,", + "GPRINT:cached_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:cached_max:MAX:%5.1lf%s Max,", + "GPRINT:cached_avg:LAST:%5.1lf%s Last\n", + "LINE1:buffers_used#" .. self.palette.FullYellow .. ":Buffer cache", + "GPRINT:buffers_min:MIN:%5.1lf%s Min,", + "GPRINT:buffers_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:buffers_max:MAX:%5.1lf%s Max,", + "GPRINT:buffers_avg:LAST:%5.1lf%s Last\n", + "LINE1:used_avg#" .. self.palette.FullRed .. ":Used ", + "GPRINT:used_min:MIN:%5.1lf%s Min,", + "GPRINT:used_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:used_max:MAX:%5.1lf%s Max,", + "GPRINT:used_avg:LAST:%5.1lf%s Last\\l" + }, + + mysql_commands = { + "-v", "Issues/s", + "DEF:val_avg={file}:value:AVERAGE", + "DEF:val_min={file}:value:MIN", + "DEF:val_max={file}:value:MAX", + "AREA:val_max#" .. self.palette.HalfBlue, + "AREA:val_min#" .. self.palette.Canvas, + "LINE1:val_avg#" .. self.palette.FullBlue .. ":Issues/s", + "GPRINT:val_min:MIN:%5.2lf Min,", + "GPRINT:val_avg:AVERAGE:%5.2lf Avg,", + "GPRINT:val_max:MAX:%5.2lf Max,", + "GPRINT:val_avg:LAST:%5.2lf Last\\l" + }, + + mysql_handler = { + "-v", "Issues/s", + "DEF:val_avg={file}:value:AVERAGE", + "DEF:val_min={file}:value:MIN", + "DEF:val_max={file}:value:MAX", + "AREA:val_max#" .. self.palette.HalfBlue, + "AREA:val_min#" .. self.palette.Canvas, + "LINE1:val_avg#" .. self.palette.FullBlue .. ":Issues/s", + "GPRINT:val_min:MIN:%5.2lf Min,", + "GPRINT:val_avg:AVERAGE:%5.2lf Avg,", + "GPRINT:val_max:MAX:%5.2lf Max,", + "GPRINT:val_avg:LAST:%5.2lf Last\\l" + }, + + mysql_octets = { + "-v", "Bits/s", + "DEF:out_min={file}:tx:MIN", + "DEF:out_avg={file}:tx:AVERAGE", + "DEF:out_max={file}:tx:MAX", + "DEF:inc_min={file}:rx:MIN", + "DEF:inc_avg={file}:rx:AVERAGE", + "DEF:inc_max={file}:rx:MAX", + "CDEF:mytime=out_avg,TIME,TIME,IF", + "CDEF:sample_len_raw=mytime,PREV(mytime),-", + "CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF", + "CDEF:out_avg_sample=out_avg,UN,0,out_avg,IF,sample_len,*", + "CDEF:out_avg_sum=PREV,UN,0,PREV,IF,out_avg_sample,+", + "CDEF:inc_avg_sample=inc_avg,UN,0,inc_avg,IF,sample_len,*", + "CDEF:inc_avg_sum=PREV,UN,0,PREV,IF,inc_avg_sample,+", + "CDEF:out_bit_min=out_min,8,*", + "CDEF:out_bit_avg=out_avg,8,*", + "CDEF:out_bit_max=out_max,8,*", + "CDEF:inc_bit_min=inc_min,8,*", + "CDEF:inc_bit_avg=inc_avg,8,*", + "CDEF:inc_bit_max=inc_max,8,*", + "CDEF:overlap=out_bit_avg,inc_bit_avg,GT,inc_bit_avg,out_bit_avg,IF", + "AREA:out_bit_avg#" .. self.palette.HalfGreen, + "AREA:inc_bit_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:out_bit_avg#" .. self.palette.FullGreen .. ":Written", + "GPRINT:out_bit_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:out_bit_max:MAX:%5.1lf%s Max,", + "GPRINT:out_bit_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:out_avg_sum:LAST:(ca. %5.1lf%sB Total)", + "LINE1:inc_bit_avg#" .. self.palette.FullBlue .. ":Read ", + "GPRINT:inc_bit_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:inc_bit_max:MAX:%5.1lf%s Max,", + "GPRINT:inc_bit_avg:LAST:%5.1lf%s Last\\l", + "GPRINT:inc_avg_sum:LAST:(ca. %5.1lf%sB Total)" + }, + + mysql_qcache = { + "-v", "Queries/s", + "DEF:hits_min={file}:hits:MIN", + "DEF:hits_avg={file}:hits:AVERAGE", + "DEF:hits_max={file}:hits:MAX", + "DEF:inserts_min={file}:inserts:MIN", + "DEF:inserts_avg={file}:inserts:AVERAGE", + "DEF:inserts_max={file}:inserts:MAX", + "DEF:not_cached_min={file}:not_cached:MIN", + "DEF:not_cached_avg={file}:not_cached:AVERAGE", + "DEF:not_cached_max={file}:not_cached:MAX", + "DEF:lowmem_prunes_min={file}:lowmem_prunes:MIN", + "DEF:lowmem_prunes_avg={file}:lowmem_prunes:AVERAGE", + "DEF:lowmem_prunes_max={file}:lowmem_prunes:MAX", + "DEF:queries_min={file}:queries_in_cache:MIN", + "DEF:queries_avg={file}:queries_in_cache:AVERAGE", + "DEF:queries_max={file}:queries_in_cache:MAX", + "CDEF:unknown=queries_avg,UNKN,+", + "CDEF:not_cached_agg=hits_avg,inserts_avg,+,not_cached_avg,+", + "CDEF:inserts_agg=hits_avg,inserts_avg,+", + "CDEF:hits_agg=hits_avg", + "AREA:not_cached_agg#" .. self.palette.HalfYellow, + "AREA:inserts_agg#" .. self.palette.HalfBlue, + "AREA:hits_agg#" .. self.palette.HalfGreen, + "LINE1:not_cached_agg#" .. self.palette.FullYellow .. ":Not Cached ", + "GPRINT:not_cached_min:MIN:%5.2lf Min,", + "GPRINT:not_cached_avg:AVERAGE:%5.2lf Avg,", + "GPRINT:not_cached_max:MAX:%5.2lf Max,", + "GPRINT:not_cached_avg:LAST:%5.2lf Last\\l", + "LINE1:inserts_agg#" .. self.palette.FullBlue .. ":Inserts ", + "GPRINT:inserts_min:MIN:%5.2lf Min,", + "GPRINT:inserts_avg:AVERAGE:%5.2lf Avg,", + "GPRINT:inserts_max:MAX:%5.2lf Max,", + "GPRINT:inserts_avg:LAST:%5.2lf Last\\l", + "LINE1:hits_agg#" .. self.palette.FullGreen .. ":Hits ", + "GPRINT:hits_min:MIN:%5.2lf Min,", + "GPRINT:hits_avg:AVERAGE:%5.2lf Avg,", + "GPRINT:hits_max:MAX:%5.2lf Max,", + "GPRINT:hits_avg:LAST:%5.2lf Last\\l", + "LINE1:lowmem_prunes_avg#" .. self.palette.FullRed .. ":Lowmem Prunes ", + "GPRINT:lowmem_prunes_min:MIN:%5.2lf Min,", + "GPRINT:lowmem_prunes_avg:AVERAGE:%5.2lf Avg,", + "GPRINT:lowmem_prunes_max:MAX:%5.2lf Max,", + "GPRINT:lowmem_prunes_avg:LAST:%5.2lf Last\\l", + "LINE1:unknown#" .. self.palette.Canvas .. ":Queries in cache", + "GPRINT:queries_min:MIN:%5.0lf Min,", + "GPRINT:queries_avg:AVERAGE:%5.0lf Avg,", + "GPRINT:queries_max:MAX:%5.0lf Max,", + "GPRINT:queries_avg:LAST:%5.0lf Last\\l" + }, + + mysql_threads = { + "-v", "Threads", + "DEF:running_min={file}:running:MIN", + "DEF:running_avg={file}:running:AVERAGE", + "DEF:running_max={file}:running:MAX", + "DEF:connected_min={file}:connected:MIN", + "DEF:connected_avg={file}:connected:AVERAGE", + "DEF:connected_max={file}:connected:MAX", + "DEF:cached_min={file}:cached:MIN", + "DEF:cached_avg={file}:cached:AVERAGE", + "DEF:cached_max={file}:cached:MAX", + "DEF:created_min={file}:created:MIN", + "DEF:created_avg={file}:created:AVERAGE", + "DEF:created_max={file}:created:MAX", + "CDEF:unknown=created_avg,UNKN,+", + "CDEF:cached_agg=connected_avg,cached_avg,+", + "AREA:cached_agg#" .. self.palette.HalfGreen, + "AREA:connected_avg#" .. self.palette.HalfBlue, + "AREA:running_avg#" .. self.palette.HalfRed, + "LINE1:cached_agg#" .. self.palette.FullGreen .. ":Cached ", + "GPRINT:cached_min:MIN:%5.1lf Min,", + "GPRINT:cached_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:cached_max:MAX:%5.1lf Max,", + "GPRINT:cached_avg:LAST:%5.1lf Last\\l", + "LINE1:connected_avg#" .. self.palette.FullBlue .. ":Connected", + "GPRINT:connected_min:MIN:%5.1lf Min,", + "GPRINT:connected_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:connected_max:MAX:%5.1lf Max,", + "GPRINT:connected_avg:LAST:%5.1lf Last\\l", + "LINE1:running_avg#" .. self.palette.FullRed .. ":Running ", + "GPRINT:running_min:MIN:%5.1lf Min,", + "GPRINT:running_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:running_max:MAX:%5.1lf Max,", + "GPRINT:running_avg:LAST:%5.1lf Last\\l", + "LINE1:unknown#" .. self.palette.Canvas .. ":Created ", + "GPRINT:created_min:MIN:%5.0lf Min,", + "GPRINT:created_avg:AVERAGE:%5.0lf Avg,", + "GPRINT:created_max:MAX:%5.0lf Max,", + "GPRINT:created_avg:LAST:%5.0lf Last\\l" + }, + + nfs_procedure = { + "-v", "Issues/s", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Issues/s", + "GPRINT:min:MIN:%6.2lf Min,", + "GPRINT:avg:AVERAGE:%6.2lf Avg,", + "GPRINT:max:MAX:%6.2lf Max,", + "GPRINT:avg:LAST:%6.2lf Last\\l" + }, + + nfs3_procedures = { + "DEF:null_avg={file}:null:AVERAGE", + "DEF:getattr_avg={file}:getattr:AVERAGE", + "DEF:setattr_avg={file}:setattr:AVERAGE", + "DEF:lookup_avg={file}:lookup:AVERAGE", + "DEF:access_avg={file}:access:AVERAGE", + "DEF:readlink_avg={file}:readlink:AVERAGE", + "DEF:read_avg={file}:read:AVERAGE", + "DEF:write_avg={file}:write:AVERAGE", + "DEF:create_avg={file}:create:AVERAGE", + "DEF:mkdir_avg={file}:mkdir:AVERAGE", + "DEF:symlink_avg={file}:symlink:AVERAGE", + "DEF:mknod_avg={file}:mknod:AVERAGE", + "DEF:remove_avg={file}:remove:AVERAGE", + "DEF:rmdir_avg={file}:rmdir:AVERAGE", + "DEF:rename_avg={file}:rename:AVERAGE", + "DEF:link_avg={file}:link:AVERAGE", + "DEF:readdir_avg={file}:readdir:AVERAGE", + "DEF:readdirplus_avg={file}:readdirplus:AVERAGE", + "DEF:fsstat_avg={file}:fsstat:AVERAGE", + "DEF:fsinfo_avg={file}:fsinfo:AVERAGE", + "DEF:pathconf_avg={file}:pathconf:AVERAGE", + "DEF:commit_avg={file}:commit:AVERAGE", + "DEF:null_max={file}:null:MAX", + "DEF:getattr_max={file}:getattr:MAX", + "DEF:setattr_max={file}:setattr:MAX", + "DEF:lookup_max={file}:lookup:MAX", + "DEF:access_max={file}:access:MAX", + "DEF:readlink_max={file}:readlink:MAX", + "DEF:read_max={file}:read:MAX", + "DEF:write_max={file}:write:MAX", + "DEF:create_max={file}:create:MAX", + "DEF:mkdir_max={file}:mkdir:MAX", + "DEF:symlink_max={file}:symlink:MAX", + "DEF:mknod_max={file}:mknod:MAX", + "DEF:remove_max={file}:remove:MAX", + "DEF:rmdir_max={file}:rmdir:MAX", + "DEF:rename_max={file}:rename:MAX", + "DEF:link_max={file}:link:MAX", + "DEF:readdir_max={file}:readdir:MAX", + "DEF:readdirplus_max={file}:readdirplus:MAX", + "DEF:fsstat_max={file}:fsstat:MAX", + "DEF:fsinfo_max={file}:fsinfo:MAX", + "DEF:pathconf_max={file}:pathconf:MAX", + "DEF:commit_max={file}:commit:MAX", + "CDEF:other_avg=null_avg,readlink_avg,create_avg,mkdir_avg,symlink_avg,mknod_avg,remove_avg,rmdir_avg,rename_avg,link_avg,readdir_avg,readdirplus_avg,fsstat_avg,fsinfo_avg,pathconf_avg,+,+,+,+,+,+,+,+,+,+,+,+,+,+", + "CDEF:other_max=null_max,readlink_max,create_max,mkdir_max,symlink_max,mknod_max,remove_max,rmdir_max,rename_max,link_max,readdir_max,readdirplus_max,fsstat_max,fsinfo_max,pathconf_max,+,+,+,+,+,+,+,+,+,+,+,+,+,+", + "CDEF:stack_read=read_avg", + "CDEF:stack_getattr=stack_read,getattr_avg,+", + "CDEF:stack_access=stack_getattr,access_avg,+", + "CDEF:stack_lookup=stack_access,lookup_avg,+", + "CDEF:stack_write=stack_lookup,write_avg,+", + "CDEF:stack_commit=stack_write,commit_avg,+", + "CDEF:stack_setattr=stack_commit,setattr_avg,+", + "CDEF:stack_other=stack_setattr,other_avg,+", + "AREA:stack_other#" .. self.palette.HalfRed, + "AREA:stack_setattr#" .. self.palette.HalfGreen, + "AREA:stack_commit#" .. self.palette.HalfYellow, + "AREA:stack_write#" .. self.palette.HalfGreen, + "AREA:stack_lookup#" .. self.palette.HalfBlue, + "AREA:stack_access#" .. self.palette.HalfMagenta, + "AREA:stack_getattr#" .. self.palette.HalfCyan, + "AREA:stack_read#" .. self.palette.HalfBlue, + "LINE1:stack_other#" .. self.palette.FullRed .. ":Other ", + "GPRINT:other_max:MAX:%5.1lf Max,", + "GPRINT:other_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:other_avg:LAST:%5.1lf Last\\l", + "LINE1:stack_setattr#" .. self.palette.FullGreen .. ":setattr", + "GPRINT:setattr_max:MAX:%5.1lf Max,", + "GPRINT:setattr_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:setattr_avg:LAST:%5.1lf Last\\l", + "LINE1:stack_commit#" .. self.palette.FullYellow .. ":commit ", + "GPRINT:commit_max:MAX:%5.1lf Max,", + "GPRINT:commit_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:commit_avg:LAST:%5.1lf Last\\l", + "LINE1:stack_write#" .. self.palette.FullGreen .. ":write ", + "GPRINT:write_max:MAX:%5.1lf Max,", + "GPRINT:write_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:write_avg:LAST:%5.1lf Last\\l", + "LINE1:stack_lookup#" .. self.palette.FullBlue .. ":lookup ", + "GPRINT:lookup_max:MAX:%5.1lf Max,", + "GPRINT:lookup_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:lookup_avg:LAST:%5.1lf Last\\l", + "LINE1:stack_access#" .. self.palette.FullMagenta .. ":access ", + "GPRINT:access_max:MAX:%5.1lf Max,", + "GPRINT:access_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:access_avg:LAST:%5.1lf Last\\l", + "LINE1:stack_getattr#" .. self.palette.FullCyan .. ":getattr", + "GPRINT:getattr_max:MAX:%5.1lf Max,", + "GPRINT:getattr_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:getattr_avg:LAST:%5.1lf Last\\l", + "LINE1:stack_read#" .. self.palette.FullBlue .. ":read ", + "GPRINT:read_max:MAX:%5.1lf Max,", + "GPRINT:read_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:read_avg:LAST:%5.1lf Last\\l" + }, + + partition = { + "DEF:rbyte_avg={file}:rbytes:AVERAGE", + "DEF:rbyte_min={file}:rbytes:MIN", + "DEF:rbyte_max={file}:rbytes:MAX", + "DEF:wbyte_avg={file}:wbytes:AVERAGE", + "DEF:wbyte_min={file}:wbytes:MIN", + "DEF:wbyte_max={file}:wbytes:MAX", + "CDEF:overlap=wbyte_avg,rbyte_avg,GT,rbyte_avg,wbyte_avg,IF", + "AREA:wbyte_avg#" .. self.palette.HalfGreen, + "AREA:rbyte_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:wbyte_avg#" .. self.palette.FullGreen .. ":Write", + "GPRINT:wbyte_min:MIN:%5.1lf%s Min,", + "GPRINT:wbyte_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:wbyte_max:MAX:%5.1lf%s Max,", + "GPRINT:wbyte_avg:LAST:%5.1lf%s Last\\l", + "LINE1:rbyte_avg#" .. self.palette.FullBlue .. ":Read ", + "GPRINT:rbyte_min:MIN:%5.1lf%s Min,", + "GPRINT:rbyte_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:rbyte_max:MAX:%5.1lf%s Max,", + "GPRINT:rbyte_avg:LAST:%5.1lf%s Last\\l" + }, + + percent = { + "-v", "Percent", + "DEF:avg={file}:percent:AVERAGE", + "DEF:min={file}:percent:MIN", + "DEF:max={file}:percent:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Percent", + "GPRINT:min:MIN:%5.1lf%% Min,", + "GPRINT:avg:AVERAGE:%5.1lf%% Avg,", + "GPRINT:max:MAX:%5.1lf%% Max,", + "GPRINT:avg:LAST:%5.1lf%% Last\\l" + }, + + ping = { + "DEF:ping_avg={file}:ping:AVERAGE", + "DEF:ping_min={file}:ping:MIN", + "DEF:ping_max={file}:ping:MAX", + "AREA:ping_max#" .. self.palette.HalfBlue, + "AREA:ping_min#" .. self.palette.Canvas, + "LINE1:ping_avg#" .. self.palette.FullBlue .. ":Ping", + "GPRINT:ping_min:MIN:%4.1lf ms Min,", + "GPRINT:ping_avg:AVERAGE:%4.1lf ms Avg,", + "GPRINT:ping_max:MAX:%4.1lf ms Max,", + "GPRINT:ping_avg:LAST:%4.1lf ms Last\\l" + }, + + power = { + "-v", "Watt", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Watt", + "GPRINT:min:MIN:%5.1lf%sW Min,", + "GPRINT:avg:AVERAGE:%5.1lf%sW Avg,", + "GPRINT:max:MAX:%5.1lf%sW Max,", + "GPRINT:avg:LAST:%5.1lf%sW Last\\l" + }, + + processes = { + "DEF:running_avg={file}:running:AVERAGE", + "DEF:running_min={file}:running:MIN", + "DEF:running_max={file}:running:MAX", + "DEF:sleeping_avg={file}:sleeping:AVERAGE", + "DEF:sleeping_min={file}:sleeping:MIN", + "DEF:sleeping_max={file}:sleeping:MAX", + "DEF:zombies_avg={file}:zombies:AVERAGE", + "DEF:zombies_min={file}:zombies:MIN", + "DEF:zombies_max={file}:zombies:MAX", + "DEF:stopped_avg={file}:stopped:AVERAGE", + "DEF:stopped_min={file}:stopped:MIN", + "DEF:stopped_max={file}:stopped:MAX", + "DEF:paging_avg={file}:paging:AVERAGE", + "DEF:paging_min={file}:paging:MIN", + "DEF:paging_max={file}:paging:MAX", + "DEF:blocked_avg={file}:blocked:AVERAGE", + "DEF:blocked_min={file}:blocked:MIN", + "DEF:blocked_max={file}:blocked:MAX", + "CDEF:paging_acc=sleeping_avg,running_avg,stopped_avg,zombies_avg,blocked_avg,paging_avg,+,+,+,+,+", + "CDEF:blocked_acc=sleeping_avg,running_avg,stopped_avg,zombies_avg,blocked_avg,+,+,+,+", + "CDEF:zombies_acc=sleeping_avg,running_avg,stopped_avg,zombies_avg,+,+,+", + "CDEF:stopped_acc=sleeping_avg,running_avg,stopped_avg,+,+", + "CDEF:running_acc=sleeping_avg,running_avg,+", + "CDEF:sleeping_acc=sleeping_avg", + "AREA:paging_acc#" .. self.palette.HalfYellow, + "AREA:blocked_acc#" .. self.palette.HalfCyan, + "AREA:zombies_acc#" .. self.palette.HalfRed, + "AREA:stopped_acc#" .. self.palette.HalfMagenta, + "AREA:running_acc#" .. self.palette.HalfGreen, + "AREA:sleeping_acc#" .. self.palette.HalfBlue, + "LINE1:paging_acc#" .. self.palette.FullYellow .. ":Paging ", + "GPRINT:paging_min:MIN:%5.1lf Min,", + "GPRINT:paging_avg:AVERAGE:%5.1lf Average,", + "GPRINT:paging_max:MAX:%5.1lf Max,", + "GPRINT:paging_avg:LAST:%5.1lf Last\\l", + "LINE1:blocked_acc#" .. self.palette.FullCyan .. ":Blocked ", + "GPRINT:blocked_min:MIN:%5.1lf Min,", + "GPRINT:blocked_avg:AVERAGE:%5.1lf Average,", + "GPRINT:blocked_max:MAX:%5.1lf Max,", + "GPRINT:blocked_avg:LAST:%5.1lf Last\\l", + "LINE1:zombies_acc#" .. self.palette.FullRed .. ":Zombies ", + "GPRINT:zombies_min:MIN:%5.1lf Min,", + "GPRINT:zombies_avg:AVERAGE:%5.1lf Average,", + "GPRINT:zombies_max:MAX:%5.1lf Max,", + "GPRINT:zombies_avg:LAST:%5.1lf Last\\l", + "LINE1:stopped_acc#" .. self.palette.FullMagenta .. ":Stopped ", + "GPRINT:stopped_min:MIN:%5.1lf Min,", + "GPRINT:stopped_avg:AVERAGE:%5.1lf Average,", + "GPRINT:stopped_max:MAX:%5.1lf Max,", + "GPRINT:stopped_avg:LAST:%5.1lf Last\\l", + "LINE1:running_acc#" .. self.palette.FullGreen .. ":Running ", + "GPRINT:running_min:MIN:%5.1lf Min,", + "GPRINT:running_avg:AVERAGE:%5.1lf Average,", + "GPRINT:running_max:MAX:%5.1lf Max,", + "GPRINT:running_avg:LAST:%5.1lf Last\\l", + "LINE1:sleeping_acc#" .. self.palette.FullBlue .. ":Sleeping", + "GPRINT:sleeping_min:MIN:%5.1lf Min,", + "GPRINT:sleeping_avg:AVERAGE:%5.1lf Average,", + "GPRINT:sleeping_max:MAX:%5.1lf Max,", + "GPRINT:sleeping_avg:LAST:%5.1lf Last\\l" + }, + + ps_count = { + "-v", "Processes", + "DEF:procs_avg={file}:processes:AVERAGE", + "DEF:procs_min={file}:processes:MIN", + "DEF:procs_max={file}:processes:MAX", + "DEF:thrds_avg={file}:threads:AVERAGE", + "DEF:thrds_min={file}:threads:MIN", + "DEF:thrds_max={file}:threads:MAX", + "AREA:thrds_avg#" .. self.palette.HalfBlue, + "AREA:procs_avg#" .. self.palette.HalfRed, + "LINE1:thrds_avg#" .. self.palette.FullBlue .. ":Threads ", + "GPRINT:thrds_min:MIN:%5.1lf Min,", + "GPRINT:thrds_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:thrds_max:MAX:%5.1lf Max,", + "GPRINT:thrds_avg:LAST:%5.1lf Last\\l", + "LINE1:procs_avg#" .. self.palette.FullRed .. ":Processes", + "GPRINT:procs_min:MIN:%5.1lf Min,", + "GPRINT:procs_avg:AVERAGE:%5.1lf Avg,", + "GPRINT:procs_max:MAX:%5.1lf Max,", + "GPRINT:procs_avg:LAST:%5.1lf Last\\l" + }, + + ps_cputime = { + "-v", "Jiffies", + "DEF:user_avg_raw={file}:user:AVERAGE", + "DEF:user_min_raw={file}:user:MIN", + "DEF:user_max_raw={file}:user:MAX", + "DEF:syst_avg_raw={file}:syst:AVERAGE", + "DEF:syst_min_raw={file}:syst:MIN", + "DEF:syst_max_raw={file}:syst:MAX", + "CDEF:user_avg=user_avg_raw,1000000,/", + "CDEF:user_min=user_min_raw,1000000,/", + "CDEF:user_max=user_max_raw,1000000,/", + "CDEF:syst_avg=syst_avg_raw,1000000,/", + "CDEF:syst_min=syst_min_raw,1000000,/", + "CDEF:syst_max=syst_max_raw,1000000,/", + "CDEF:user_syst=syst_avg,UN,0,syst_avg,IF,user_avg,+", + "AREA:user_syst#" .. self.palette.HalfBlue, + "AREA:syst_avg#" .. self.palette.HalfRed, + "LINE1:user_syst#" .. self.palette.FullBlue .. ":User ", + "GPRINT:user_min:MIN:%5.1lf%s Min,", + "GPRINT:user_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:user_max:MAX:%5.1lf%s Max,", + "GPRINT:user_avg:LAST:%5.1lf%s Last\\l", + "LINE1:syst_avg#" .. self.palette.FullRed .. ":System", + "GPRINT:syst_min:MIN:%5.1lf%s Min,", + "GPRINT:syst_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:syst_max:MAX:%5.1lf%s Max,", + "GPRINT:syst_avg:LAST:%5.1lf%s Last\\l" + }, + + ps_pagefaults = { + "-v", "Pagefaults/s", + "DEF:minor_avg={file}:minflt:AVERAGE", + "DEF:minor_min={file}:minflt:MIN", + "DEF:minor_max={file}:minflt:MAX", + "DEF:major_avg={file}:majflt:AVERAGE", + "DEF:major_min={file}:majflt:MIN", + "DEF:major_max={file}:majflt:MAX", + "CDEF:minor_major=major_avg,UN,0,major_avg,IF,minor_avg,+", + "AREA:minor_major#" .. self.palette.HalfBlue, + "AREA:major_avg#" .. self.palette.HalfRed, + "LINE1:minor_major#" .. self.palette.FullBlue .. ":Minor", + "GPRINT:minor_min:MIN:%5.1lf%s Min,", + "GPRINT:minor_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:minor_max:MAX:%5.1lf%s Max,", + "GPRINT:minor_avg:LAST:%5.1lf%s Last\\l", + "LINE1:major_avg#" .. self.palette.FullRed .. ":Major", + "GPRINT:major_min:MIN:%5.1lf%s Min,", + "GPRINT:major_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:major_max:MAX:%5.1lf%s Max,", + "GPRINT:major_avg:LAST:%5.1lf%s Last\\l" + }, + + ps_rss = { + "-v", "Bytes", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:avg#" .. self.palette.HalfBlue, + "LINE1:avg#" .. self.palette.FullBlue .. ":RSS", + "GPRINT:min:MIN:%5.1lf%s Min,", + "GPRINT:avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:max:MAX:%5.1lf%s Max,", + "GPRINT:avg:LAST:%5.1lf%s Last\\l" + }, + + ps_state = { + "-v", "Processes", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Processes", + "GPRINT:min:MIN:%6.2lf Min,", + "GPRINT:avg:AVERAGE:%6.2lf Avg,", + "GPRINT:max:MAX:%6.2lf Max,", + "GPRINT:avg:LAST:%6.2lf Last\\l" + }, + + signal_noise = { + "-v", "dBm", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Noise", + "GPRINT:min:MIN:%5.1lf%sdBm Min,", + "GPRINT:avg:AVERAGE:%5.1lf%sdBm Avg,", + "GPRINT:max:MAX:%5.1lf%sdBm Max,", + "GPRINT:avg:LAST:%5.1lf%sdBm Last\\l" + }, + + signal_power = { + "-v", "dBm", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Power", + "GPRINT:min:MIN:%5.1lf%sdBm Min,", + "GPRINT:avg:AVERAGE:%5.1lf%sdBm Avg,", + "GPRINT:max:MAX:%5.1lf%sdBm Max,", + "GPRINT:avg:LAST:%5.1lf%sdBm Last\\l" + }, + + signal_quality = { + "-v", "%", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Quality", + "GPRINT:min:MIN:%5.1lf%s%% Min,", + "GPRINT:avg:AVERAGE:%5.1lf%s%% Avg,", + "GPRINT:max:MAX:%5.1lf%s%% Max,", + "GPRINT:avg:LAST:%5.1lf%s%% Last\\l" + }, + + swap = { + "-v", "Bytes", "-b", "1024", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Bytes", + "GPRINT:min:MIN:%6.2lf%sByte Min,", + "GPRINT:avg:AVERAGE:%6.2lf%sByte Avg,", + "GPRINT:max:MAX:%6.2lf%sByte Max,", + "GPRINT:avg:LAST:%6.2lf%sByte Last\\l" + }, + + old_swap = { + "DEF:used_avg={file}:used:AVERAGE", + "DEF:used_min={file}:used:MIN", + "DEF:used_max={file}:used:MAX", + "DEF:free_avg={file}:free:AVERAGE", + "DEF:free_min={file}:free:MIN", + "DEF:free_max={file}:free:MAX", + "DEF:cach_avg={file}:cached:AVERAGE", + "DEF:cach_min={file}:cached:MIN", + "DEF:cach_max={file}:cached:MAX", + "DEF:resv_avg={file}:resv:AVERAGE", + "DEF:resv_min={file}:resv:MIN", + "DEF:resv_max={file}:resv:MAX", + "CDEF:cach_avg_notnull=cach_avg,UN,0,cach_avg,IF", + "CDEF:resv_avg_notnull=resv_avg,UN,0,resv_avg,IF", + "CDEF:used_acc=used_avg", + "CDEF:resv_acc=used_acc,resv_avg_notnull,+", + "CDEF:cach_acc=resv_acc,cach_avg_notnull,+", + "CDEF:free_acc=cach_acc,free_avg,+", + "AREA:free_acc#" .. self.palette.HalfGreen, + "AREA:cach_acc#" .. self.palette.HalfBlue, + "AREA:resv_acc#" .. self.palette.HalfYellow, + "AREA:used_acc#" .. self.palette.HalfRed, + "LINE1:free_acc#" .. self.palette.FullGreen .. ":Free ", + "GPRINT:free_min:MIN:%5.1lf%s Min,", + "GPRINT:free_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:free_max:MAX:%5.1lf%s Max,", + "GPRINT:free_avg:LAST:%5.1lf%s Last\n", + "LINE1:cach_acc#" .. self.palette.FullBlue .. ":Cached ", + "GPRINT:cach_min:MIN:%5.1lf%s Min,", + "GPRINT:cach_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:cach_max:MAX:%5.1lf%s Max,", + "GPRINT:cach_avg:LAST:%5.1lf%s Last\\l", + "LINE1:resv_acc#" .. self.palette.FullYellow .. ":Reserved", + "GPRINT:resv_min:MIN:%5.1lf%s Min,", + "GPRINT:resv_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:resv_max:MAX:%5.1lf%s Max,", + "GPRINT:resv_avg:LAST:%5.1lf%s Last\n", + "LINE1:used_acc#" .. self.palette.FullRed .. ":Used ", + "GPRINT:used_min:MIN:%5.1lf%s Min,", + "GPRINT:used_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:used_max:MAX:%5.1lf%s Max,", + "GPRINT:used_avg:LAST:%5.1lf%s Last\\l" + }, + + tcp_connections = { + "-v", "Connections", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Connections", + "GPRINT:min:MIN:%4.1lf Min,", + "GPRINT:avg:AVERAGE:%4.1lf Avg,", + "GPRINT:max:MAX:%4.1lf Max,", + "GPRINT:avg:LAST:%4.1lf Last\\l" + }, + + temperature = { + "-v", "Celsius", + "DEF:temp_avg={file}:value:AVERAGE", + "DEF:temp_min={file}:value:MIN", + "DEF:temp_max={file}:value:MAX", + "CDEF:average=temp_avg,0.2,*,PREV,UN,temp_avg,PREV,IF,0.8,*,+", + "AREA:temp_max#" .. self.palette.HalfRed, + "AREA:temp_min#" .. self.palette.Canvas, + "LINE1:temp_avg#" .. self.palette.FullRed .. ":Temperature", + "GPRINT:temp_min:MIN:%4.1lf Min,", + "GPRINT:temp_avg:AVERAGE:%4.1lf Avg,", + "GPRINT:temp_max:MAX:%4.1lf Max,", + "GPRINT:temp_avg:LAST:%4.1lf Last\\l" + }, + + timeleft = { + "-v", "Minutes", + "DEF:avg={file}:timeleft:AVERAGE", + "DEF:min={file}:timeleft:MIN", + "DEF:max={file}:timeleft:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Time left [min]", + "GPRINT:min:MIN:%5.1lf%s Min,", + "GPRINT:avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:max:MAX:%5.1lf%s Max,", + "GPRINT:avg:LAST:%5.1lf%s Last\\l" + }, + + time_offset = { + "DEF:s_avg={file}:seconds:AVERAGE", + "DEF:s_min={file}:seconds:MIN", + "DEF:s_max={file}:seconds:MAX", + "AREA:s_max#" .. self.palette.HalfBlue, + "AREA:s_min#" .. self.palette.Canvas, + "LINE1:s_avg#" .. self.palette.FullBlue .. ":{inst}", + "GPRINT:s_min:MIN:%7.3lf%s Min,", + "GPRINT:s_avg:AVERAGE:%7.3lf%s Avg,", + "GPRINT:s_max:MAX:%7.3lf%s Max,", + "GPRINT:s_avg:LAST:%7.3lf%s Last\\l" + }, + + if_octets = { + "-v", "Bits/s", "-l", "0", + "DEF:out_min_raw={file}:tx:MIN", + "DEF:out_avg_raw={file}:tx:AVERAGE", + "DEF:out_max_raw={file}:tx:MAX", + "DEF:inc_min_raw={file}:rx:MIN", + "DEF:inc_avg_raw={file}:rx:AVERAGE", + "DEF:inc_max_raw={file}:rx:MAX", + "CDEF:out_min=out_min_raw,8,*", + "CDEF:out_avg=out_avg_raw,8,*", + "CDEF:out_max=out_max_raw,8,*", + "CDEF:inc_min=inc_min_raw,8,*", + "CDEF:inc_avg=inc_avg_raw,8,*", + "CDEF:inc_max=inc_max_raw,8,*", + "CDEF:overlap=out_avg,inc_avg,GT,inc_avg,out_avg,IF", + "CDEF:mytime=out_avg_raw,TIME,TIME,IF", + "CDEF:sample_len_raw=mytime,PREV(mytime),-", + "CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF", + "CDEF:out_avg_sample=out_avg_raw,UN,0,out_avg_raw,IF,sample_len,*", + "CDEF:out_avg_sum=PREV,UN,0,PREV,IF,out_avg_sample,+", + "CDEF:inc_avg_sample=inc_avg_raw,UN,0,inc_avg_raw,IF,sample_len,*", + "CDEF:inc_avg_sum=PREV,UN,0,PREV,IF,inc_avg_sample,+", + "AREA:out_avg#" .. self.palette.HalfGreen, + "AREA:inc_avg#" .. self.palette.HalfBlue, + "AREA:overlap#" .. self.palette.HalfBlueGreen, + "LINE1:out_avg#" .. self.palette.FullGreen .. ":Outgoing", + "GPRINT:out_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:out_max:MAX:%5.1lf%s Max,", + "GPRINT:out_avg:LAST:%5.1lf%s Last", + "GPRINT:out_avg_sum:LAST:(ca. %5.1lf%sB Total)\\l", + "LINE1:inc_avg#" .. self.palette.FullBlue .. ":Incoming", + --"GPRINT:inc_min:MIN:%5.1lf %s Min,", + "GPRINT:inc_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:inc_max:MAX:%5.1lf%s Max,", + "GPRINT:inc_avg:LAST:%5.1lf%s Last", + "GPRINT:inc_avg_sum:LAST:(ca. %5.1lf%sB Total)\\l" + }, + + cpufreq = { + "DEF:cpufreq_avg={file}:value:AVERAGE", + "DEF:cpufreq_min={file}:value:MIN", + "DEF:cpufreq_max={file}:value:MAX", + "AREA:cpufreq_max#" .. self.palette.HalfBlue, + "AREA:cpufreq_min#" .. self.palette.Canvas, + "LINE1:cpufreq_avg#" .. self.palette.FullBlue .. ":Frequency", + "GPRINT:cpufreq_min:MIN:%5.1lf%s Min,", + "GPRINT:cpufreq_avg:AVERAGE:%5.1lf%s Avg,", + "GPRINT:cpufreq_max:MAX:%5.1lf%s Max,", + "GPRINT:cpufreq_avg:LAST:%5.1lf%s Last\\l" + }, + + multimeter = { + "DEF:multimeter_avg={file}:value:AVERAGE", + "DEF:multimeter_min={file}:value:MIN", + "DEF:multimeter_max={file}:value:MAX", + "AREA:multimeter_max#" .. self.palette.HalfBlue, + "AREA:multimeter_min#" .. self.palette.Canvas, + "LINE1:multimeter_avg#" .. self.palette.FullBlue .. ":Multimeter", + "GPRINT:multimeter_min:MIN:%4.1lf Min,", + "GPRINT:multimeter_avg:AVERAGE:%4.1lf Average,", + "GPRINT:multimeter_max:MAX:%4.1lf Max,", + "GPRINT:multimeter_avg:LAST:%4.1lf Last\\l" + }, + + users = { + "-v", "Users", + "DEF:users_avg={file}:users:AVERAGE", + "DEF:users_min={file}:users:MIN", + "DEF:users_max={file}:users:MAX", + "AREA:users_max#" .. self.palette.HalfBlue, + "AREA:users_min#" .. self.palette.Canvas, + "LINE1:users_avg#" .. self.palette.FullBlue .. ":Users", + "GPRINT:users_min:MIN:%4.1lf Min,", + "GPRINT:users_avg:AVERAGE:%4.1lf Average,", + "GPRINT:users_max:MAX:%4.1lf Max,", + "GPRINT:users_avg:LAST:%4.1lf Last\\l" + }, + + voltage = { + "-v", "Voltage", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Voltage", + "GPRINT:min:MIN:%5.1lf%sV Min,", + "GPRINT:avg:AVERAGE:%5.1lf%sV Avg,", + "GPRINT:max:MAX:%5.1lf%sV Max,", + "GPRINT:avg:LAST:%5.1lf%sV Last\\l" + }, + + vs_threads = { + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Threads", + "GPRINT:min:MIN:%5.1lf Min,", + "GPRINT:avg:AVERAGE:%5.1lf Avg.,", + "GPRINT:max:MAX:%5.1lf Max,", + "GPRINT:avg:LAST:%5.1lf Last\\l", + }, + + vs_memory = { + "-b", "1024", "-v", "Bytes", + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":", + "GPRINT:min:MIN:%5.1lf%sbytes Min,", + "GPRINT:avg:AVERAGE:%5.1lf%sbytes Avg.,", + "GPRINT:max:MAX:%5.1lf%sbytes Max,", + "GPRINT:avg:LAST:%5.1lf%sbytes Last\\l", + }, + + vs_processes = { + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#" .. self.palette.HalfBlue, + "AREA:min#" .. self.palette.Canvas, + "LINE1:avg#" .. self.palette.FullBlue .. ":Processes", + "GPRINT:min:MIN:%5.1lf Min,", + "GPRINT:avg:AVERAGE:%5.1lf Avg.,", + "GPRINT:max:MAX:%5.1lf Max,", + "GPRINT:avg:LAST:%5.1lf Last\\l", + }, + } +end + diff --git a/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/cpu/cpu.lua b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/cpu/cpu.lua new file mode 100644 index 000000000..2626d276d --- /dev/null +++ b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/cpu/cpu.lua @@ -0,0 +1,31 @@ +module("luci.statistics.rrdtool.definitions.cpu.cpu",package.seeall) + +function rrdargs( graph, host, plugin, plugin_instance, dtype ) + + dtype_instances = { "idle", "nice", "system", "user" } + + opts = { } + opts.sources = { } + opts.image = graph:mkpngpath( host, plugin, plugin_instance, dtype ) + opts.title = host .. ": Prozessorauslastung" + opts.rrd = { "-v", "Percent" } + opts.colors = { + idle = 'ffffff', + nice = '00e000', + user = '0000ff', + wait = 'ffb000', + system = 'ff0000', + softirq = 'ff00ff', + interrupt = 'a000a0', + steal = '000000' + } + + for i, inst in ipairs(dtype_instances) do + opts.sources[i] = { + name = inst, + rrd = graph:mkrrdpath( host, plugin, plugin_instance, dtype, inst ) + } + end + + return opts +end diff --git a/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/iptables/ipt_packets.lua b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/iptables/ipt_packets.lua new file mode 100644 index 000000000..b16add995 --- /dev/null +++ b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/iptables/ipt_packets.lua @@ -0,0 +1,26 @@ +module("luci.statistics.rrdtool.definitions.iptables.ipt_packets", package.seeall) + +function rrdargs( graph, host, plugin, plugin_instance, dtype ) + + dtype_instances = graph.tree:data_instances( plugin, plugin_instance, dtype ) + opts = { } + + for i, inst in ipairs(dtype_instances) do + + opts[i] = { } + opts[i].image = graph:mkpngpath( host, plugin, plugin_instance, dtype, inst ) + opts[i].title = host .. ": Firewall - " .. inst:gsub("_"," ") + opts[i].rrd = { "-v", "Pakete/s" } + + opts[i].colors = { + + } + + opts[i].sources = { { + name = inst, + rrd = graph:mkrrdpath( host, plugin, plugin_instance, dtype, inst ) + } } + end + + return opts +end diff --git a/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/netlink.lua b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/netlink.lua new file mode 100644 index 000000000..3cee6abc0 --- /dev/null +++ b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/netlink.lua @@ -0,0 +1,163 @@ +module("luci.statistics.rrdtool.definitions.netlink", package.seeall) + +function rrdargs( graph, host, plugin, plugin_instance ) + + local diagram_list = { } + + -- diagram names + local dtypes_names = { + "Pakete", + "Paketkollisionen", + "Paketfehler", + "Verkehr", + "RX-Fehler", + "TX-Fehler" + } + + -- diagram units + local dtypes_units = { + "Pakete/s", + "Kollisionen/s", + "Fehler/s", -- (?) + "Bytes/s", + "Fehler/s", + "Fehler/s" + } + + -- data source overrides + local dtypes_sources = { + if_errors = { "rx", "tx" }, -- if_errors has rx and tx + if_octets = { "rx", "tx" } -- if_octets has rx and tx + } + + -- diagram data types + local dtypes_list = { + + -- diagram 1: combined interface packet statistics + { + if_dropped = { "" }, -- packets/s + if_multicast = { "" }, -- packets/s + if_packets = { "" } -- packets/s + }, + + -- diagram 2: interface collision statistics + { + if_collisions = { "" } -- collisions/s + }, + + -- diagram 3: interface error statistics + { + if_errors = { "" } -- errors/s (?) + }, + + -- diagram 4: interface traffic statistics + { + if_octets = { "" } -- bytes/s + }, + + -- diagram 5: interface rx error statistics + { + if_rx_errors = { -- errors/s + "length", "missed", "over", "crc", "fifo", "frame" + } + }, + + -- diagram 6: interface tx error statistics + { + if_tx_errors = { -- errors/s + "aborted", "carrier", "fifo", "heartbeat", "window" + } + } + } + + -- diagram colors + local dtypes_colors = { + + -- diagram 1 + { + if_dropped = "ff0000", + if_multicast = "0000ff", + if_packets = "00ff00" + }, + + -- diagram 2 + { + if_collisions = "ff0000" + }, + + -- diagram 3 + { + if_errors__tx_ = "ff0000", + if_errors__rx_ = "ff5500" + }, + + -- diagram 4 + { + if_octets__tx_ = "00ff00", + if_octets__rx_ = "0000ff" + }, + + -- diagram 5 + { + length = "0000ff", + missed = "ff5500", + over = "ff0066", + crc = "ff0000", + fifo = "00ff00", + frame = "ffff00" + }, + + -- diagram 6 + { + aborted = "ff0000", + carrier = "ffff00", + fifo = "00ff00", + heartbeat = "0000ff", + window = "8800ff" + } + } + + + for i, name in ipairs(dtypes_names) do + + local dtypes = dtypes_list[i] + local opts = { } + + opts.sources = { } + opts.image = graph:mkpngpath( host, plugin, plugin_instance, "netlink" .. i ) + opts.title = host .. ": Netlink Statistiken - " .. name .. " auf " .. plugin_instance + opts.rrd = { "-v", dtypes_units[i] } + opts.colors = dtypes_colors[i] + + for dtype, dinstances in pairs(dtypes) do + for i, inst in ipairs(dinstances) do + + local name = inst + if name:len() == 0 then name = dtype end + + -- check for data source override + if dtypes_sources[dtype] then + + -- has override + for i, ds in ipairs(dtypes_sources[dtype]) do + table.insert( opts.sources, { + ds = ds, -- override + name = name .. " (" .. ds .. ")", + rrd = graph:mkrrdpath( host, plugin, plugin_instance, dtype, inst ) + } ) + end + else + -- no override, assume single "value" data source + table.insert( opts.sources, { + name = name, + rrd = graph:mkrrdpath( host, plugin, plugin_instance, dtype, inst ) + } ) + end + end + end + + table.insert( diagram_list, opts ) + end + + return diagram_list +end diff --git a/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/ping/ping.lua b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/ping/ping.lua new file mode 100644 index 000000000..b041c015d --- /dev/null +++ b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/ping/ping.lua @@ -0,0 +1,23 @@ +module("luci.statistics.rrdtool.definitions.ping.ping", package.seeall) + +function rrdargs( graph, host, plugin, plugin_instance, dtype ) + + dtype_instances = graph.tree:data_instances( plugin, plugin_instance, dtype ) + + opts = { } + opts.sources = { } + opts.image = graph:mkpngpath( host, plugin, plugin_instance, dtype ) + opts.title = host .. ": Pingzeiten" + opts.rrd = { "-v", "Millisekunden" } + opts.colors = { } + + for i, inst in ipairs(dtype_instances) do + opts.sources[i] = { + ds = "ping", + name = inst, + rrd = graph:mkrrdpath( host, plugin, plugin_instance, dtype, inst ) + } + end + + return opts +end diff --git a/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/processes/ps_state.lua b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/processes/ps_state.lua new file mode 100644 index 000000000..07cbe1d4a --- /dev/null +++ b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/processes/ps_state.lua @@ -0,0 +1,31 @@ +module("luci.statistics.rrdtool.definitions.processes.ps_state", package.seeall) + +function rrdargs( graph, host, plugin, plugin_instance, dtype ) + + dtype_instances = { + "sleeping", "running", "paging", "blocked", "stopped", "zombies" + } + + opts = { } + opts.sources = { } + opts.image = graph:mkpngpath( host, plugin, plugin_instance, dtype ) + opts.title = host .. ": Prozesse" + opts.rrd = { "-v", "Anzahl" } + opts.colors = { + sleeping = "008080", + running = "008000", + paging = "ffff00", + blocked = "ff5000", + stopped = "555555", + zombies = "ff0000" + } + + for i, inst in ipairs(dtype_instances) do + opts.sources[i] = { + name = inst, + rrd = graph:mkrrdpath( host, plugin, plugin_instance, "ps_state", inst ) + } + end + + return opts +end diff --git a/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/tcpconns/tcp_connections.lua b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/tcpconns/tcp_connections.lua new file mode 100644 index 000000000..049357494 --- /dev/null +++ b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/tcpconns/tcp_connections.lua @@ -0,0 +1,27 @@ +module("luci.statistics.rrdtool.definitions.tcpconns.tcp_connections", package.seeall) + +function rrdargs( graph, host, plugin, plugin_instance, dtype ) + + dtype_instances = { + "SYN_SENT", "SYN_RECV", "LISTEN", "ESTABLISHED", "LAST_ACK", "TIME_WAIT", + "CLOSING", "CLOSE_WAIT", "CLOSED", "FIN_WAIT1", "FIN_WAIT2" + } + + opts = { } + opts.sources = { } + opts.image = graph:mkpngpath( host, plugin, plugin_instance, dtype ) + opts.title = host .. ": TCP-Verbindungen - Port " .. plugin_instance + opts.rrd = { "-v", "Anzahl" } + opts.colors = { + + } + + for i, inst in ipairs(dtype_instances) do + opts.sources[i] = { + name = inst, + rrd = graph:mkrrdpath( host, plugin, plugin_instance, dtype, inst ) + } + end + + return opts +end diff --git a/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/wireless.lua b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/wireless.lua new file mode 100644 index 000000000..e315ca521 --- /dev/null +++ b/applications/luci-statistics/luasrc/statistics/rrdtool/definitions/wireless.lua @@ -0,0 +1,25 @@ +module("luci.statistics.rrdtool.definitions.wireless", package.seeall) + +function rrdargs( graph, host, plugin, plugin_instance ) + + dtypes = { "signal_power", "signal_noise" } + + opts = { } + opts.sources = { } + opts.image = graph:mkpngpath( host, plugin, plugin_instance, "wireless" ) + opts.title = host .. ": WLAN Signal" + opts.rrd = { "-v", "dBm" } + opts.colors = { + signal_power = '0000ff', + signal_noise = 'ff0000' + } + + for i, dtype in ipairs(dtypes) do + opts.sources[i] = { + name = dtype, + rrd = graph:mkrrdpath( host, plugin, plugin_instance, dtype ) + } + end + + return opts +end diff --git a/applications/luci-statistics/luasrc/view/admin_statistics/index.htm b/applications/luci-statistics/luasrc/view/admin_statistics/index.htm new file mode 100644 index 000000000..2c1befa50 --- /dev/null +++ b/applications/luci-statistics/luasrc/view/admin_statistics/index.htm @@ -0,0 +1,8 @@ +<%+header%> + +

<%:stat Statistiken%>

+ +

<%:stat_desc Die Statistiken bauen auf Collectd auf und nutzen +RRD Tool um Graphen aus den erfassten Daten zu rendern.%>

+ +<%+footer%> diff --git a/applications/luci-statistics/luasrc/view/admin_statistics/networkplugins.htm b/applications/luci-statistics/luasrc/view/admin_statistics/networkplugins.htm new file mode 100644 index 000000000..d3aa87eb1 --- /dev/null +++ b/applications/luci-statistics/luasrc/view/admin_statistics/networkplugins.htm @@ -0,0 +1,18 @@ +<%+header%> + +

<%:stat_networkplugins Netzwerkplugins%>

+ +

<%:stat_networkplugins_desc Netzwerkplugins sammeln Werte über offene TCP-Verbindung, allgemeines Verkehrsaufkommen +auf verschiedenen Schnittstellen, DNS-Verkehr u.v.m.%>

+ +

<%:stat_networkplugins_installed Installierte Netzwerkplugins:%> +

    + <% for plugin, desc in pairs(plugins) do %> + <% if luci.fs.isfile("/usr/lib/collectd/" .. plugin .. ".so") then %> +
  • <%=desc%>
  • + <% end %> + <% end %> +
+

+ +<%+footer%> diff --git a/applications/luci-statistics/luasrc/view/admin_statistics/outputplugins.htm b/applications/luci-statistics/luasrc/view/admin_statistics/outputplugins.htm new file mode 100644 index 000000000..5a8a76045 --- /dev/null +++ b/applications/luci-statistics/luasrc/view/admin_statistics/outputplugins.htm @@ -0,0 +1,19 @@ +<%+header%> + +

<%:stat_outputplugins Ausgabeplugins%>

+ +

<%:stat_outputplugins_desc Ausgabeplugins stellen verschiedene Möglichkeiten zur Speicherung +der Daten bereit. Es können auch mehrere Plugins gleichzeitig aktiviert werden um beispielsweise +die gesammelten Werte in RRD-Datenbanken zu sichern und zusätzlich über das Netzwerk zu versenden.%>

+ +

<%:stat_outputplugins_installed Installierte Ausgabeplugins:%> +

    + <% for plugin, desc in pairs(plugins) do %> + <% if luci.fs.isfile("/usr/lib/collectd/" .. plugin .. ".so") then %> +
  • <%=desc%>
  • + <% end %> + <% end %> +
+

+ +<%+footer%> diff --git a/applications/luci-statistics/luasrc/view/admin_statistics/systemplugins.htm b/applications/luci-statistics/luasrc/view/admin_statistics/systemplugins.htm new file mode 100644 index 000000000..2a32bf5ca --- /dev/null +++ b/applications/luci-statistics/luasrc/view/admin_statistics/systemplugins.htm @@ -0,0 +1,18 @@ +<%+header%> + +

<%:stat_systemplugins Systemplugins%>

+ +

<%:stat_systemplugins_desc Systemplugins sammeln Werte über den aktuellen Systemzustand und den Ressourcenverbrauch +auf dem Gerät.%>

+ +

<%:stat_systemplugins_installed Installierte Systemplugins:%> +

    + <% for plugin, desc in pairs(plugins) do %> + <% if luci.fs.isfile("/usr/lib/collectd/" .. plugin .. ".so") then %> +
  • <%=desc%>
  • + <% end %> + <% end %> +
+

+ +<%+footer%> diff --git a/applications/luci-statistics/luasrc/view/public_statistics/graph.htm b/applications/luci-statistics/luasrc/view/public_statistics/graph.htm new file mode 100644 index 000000000..093d76d0e --- /dev/null +++ b/applications/luci-statistics/luasrc/view/public_statistics/graph.htm @@ -0,0 +1,9 @@ +<%+header%> + +

Statistik

+ +<% for i, img in ipairs(images) do %> + " /> +<% end %> + +<%+footer%> -- cgit v1.2.3