aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Christian Hesse <mail@eworm.de>2023-01-20 14:24:20 +0100
committerGravatar Christian Hesse <mail@eworm.de>2023-01-20 23:13:27 +0100
commit75bd14267e7a5507e0d58b9945dbb24e5d831af8 (patch)
tree1a9b59bf9eb675ba57a5c55693364aad77ab6fe2
parent2694f8d2b1d15d16fa5f062612dd7fcf2d392ea8 (diff)
check-health: monitor CPU load
---- ✂️ ---- 🧮️📈️ Health warning: CPU load The average CPU load on MikroTik is at 76%! ---- ✂️ ---- 🧮️📉️ Health recovery: CPU load The average CPU load on MikroTik decreased to 64%. ---- ✂️ ----
-rw-r--r--check-health16
-rw-r--r--doc/check-health.d/notification-01-cpu-load-high.avifbin0 -> 6066 bytes
-rw-r--r--doc/check-health.d/notification-02-cpu-load-ok.avifbin0 -> 6378 bytes
-rw-r--r--doc/check-health.d/notification-03-voltage.avif (renamed from doc/check-health.d/notification-01-voltage.avif)bin4053 -> 4053 bytes
-rw-r--r--doc/check-health.d/notification-04-temperature-high.avif (renamed from doc/check-health.d/notification-02-temperature-high.avif)bin3615 -> 3615 bytes
-rw-r--r--doc/check-health.d/notification-05-temperature-ok.avif (renamed from doc/check-health.d/notification-03-temperature-ok.avif)bin3763 -> 3763 bytes
-rw-r--r--doc/check-health.d/notification-06-psu-fail.avif (renamed from doc/check-health.d/notification-04-psu-fail.avif)bin3544 -> 3544 bytes
-rw-r--r--doc/check-health.d/notification-07-psu-ok.avif (renamed from doc/check-health.d/notification-05-psu-ok.avif)bin3561 -> 3561 bytes
-rw-r--r--doc/check-health.md20
-rw-r--r--global-functions1
10 files changed, 30 insertions, 7 deletions
diff --git a/check-health b/check-health
index e754d69..3957ad1 100644
--- a/check-health
+++ b/check-health
@@ -10,6 +10,8 @@
:global GlobalFunctionsReady;
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
+:global CheckHealthCPULoad;
+:global CheckHealthCPULoadNotified;
:global CheckHealthLast;
:global CheckHealthTemperature;
:global CheckHealthTemperatureDeviation;
@@ -43,6 +45,20 @@
$ScriptLock $0;
+:set CheckHealthCPULoad (($CheckHealthCPULoad * 4 + [ /system/resource/get cpu-load ] * 10) / 5);
+:if ($CheckHealthCPULoad > 750 && $CheckHealthCPULoadNotified != true) do={
+ $SendNotification2 ({ origin=$0; \
+ subject=([ $SymbolForNotification "abacus,chart-increasing" ] . "Health warning: CPU load"); \
+ message=("The average CPU load on " . $Identity . " is at " . ($CheckHealthCPULoad / 10) . "%!") });
+ :set CheckHealthCPULoadNotified true;
+}
+:if ($CheckHealthCPULoad < 650 && $CheckHealthCPULoadNotified = true) do={
+ $SendNotification2 ({ origin=$0; \
+ subject=([ $SymbolForNotification "abacus,chart-decreasing" ] . "Health recovery: CPU load"); \
+ message=("The average CPU load on " . $Identity . " decreased to " . ($CheckHealthCPULoad / 10) . "%.") });
+ :set CheckHealthCPULoadNotified false;
+}
+
:foreach Voltage in=[ /system/health/find where type="V" ] do={
:local Name [ /system/health/get $Voltage name ];
:local Value [ /system/health/get $Voltage value ];
diff --git a/doc/check-health.d/notification-01-cpu-load-high.avif b/doc/check-health.d/notification-01-cpu-load-high.avif
new file mode 100644
index 0000000..3c1a468
--- /dev/null
+++ b/doc/check-health.d/notification-01-cpu-load-high.avif
Binary files differ
diff --git a/doc/check-health.d/notification-02-cpu-load-ok.avif b/doc/check-health.d/notification-02-cpu-load-ok.avif
new file mode 100644
index 0000000..4f12b70
--- /dev/null
+++ b/doc/check-health.d/notification-02-cpu-load-ok.avif
Binary files differ
diff --git a/doc/check-health.d/notification-01-voltage.avif b/doc/check-health.d/notification-03-voltage.avif
index f4d6005..f4d6005 100644
--- a/doc/check-health.d/notification-01-voltage.avif
+++ b/doc/check-health.d/notification-03-voltage.avif
Binary files differ
diff --git a/doc/check-health.d/notification-02-temperature-high.avif b/doc/check-health.d/notification-04-temperature-high.avif
index 1a93610..1a93610 100644
--- a/doc/check-health.d/notification-02-temperature-high.avif
+++ b/doc/check-health.d/notification-04-temperature-high.avif
Binary files differ
diff --git a/doc/check-health.d/notification-03-temperature-ok.avif b/doc/check-health.d/notification-05-temperature-ok.avif
index 3bb9c68..3bb9c68 100644
--- a/doc/check-health.d/notification-03-temperature-ok.avif
+++ b/doc/check-health.d/notification-05-temperature-ok.avif
Binary files differ
diff --git a/doc/check-health.d/notification-04-psu-fail.avif b/doc/check-health.d/notification-06-psu-fail.avif
index a4e52a9..a4e52a9 100644
--- a/doc/check-health.d/notification-04-psu-fail.avif
+++ b/doc/check-health.d/notification-06-psu-fail.avif
Binary files differ
diff --git a/doc/check-health.d/notification-05-psu-ok.avif b/doc/check-health.d/notification-07-psu-ok.avif
index bcc5a39..bcc5a39 100644
--- a/doc/check-health.d/notification-05-psu-ok.avif
+++ b/doc/check-health.d/notification-07-psu-ok.avif
Binary files differ
diff --git a/doc/check-health.md b/doc/check-health.md
index 07151ff..b498998 100644
--- a/doc/check-health.md
+++ b/doc/check-health.md
@@ -12,32 +12,38 @@ Description
This script is run from scheduler periodically, sending notification on
health related events:
+* high CPU load
* voltage jumps up or down more than configured threshold or drops below limit
* power supply failed or recovered
* temperature is above or below threshold
Note that bad initial state will not trigger an event.
-Only sensors available in hardware can be checked. See what your
-hardware supports:
+Monitoring CPU load works on all devices. Other than that only sensors
+available in hardware can be checked. See what your hardware supports:
/system/health/print;
### Sample notifications
+#### CPU load
+
+![check-health notification cpu load high](check-health.d/notification-01-cpu-load-high.avif)
+![check-health notification cpu load ok](check-health.d/notification-02-cpu-load-ok.avif)
+
#### Voltage
-![check-health notification voltage](check-health.d/notification-01-voltage.avif)
+![check-health notification voltage](check-health.d/notification-03-voltage.avif)
#### Temperature
-![check-health notification](check-health.d/notification-02-temperature-high.avif)
-![check-health notification](check-health.d/notification-03-temperature-ok.avif)
+![check-health notification temperature high](check-health.d/notification-04-temperature-high.avif)
+![check-health notification temperature ok](check-health.d/notification-05-temperature-ok.avif)
#### PSU state
-![check-health notification](check-health.d/notification-04-psu-fail.avif)
-![check-health notification](check-health.d/notification-05-psu-ok.avif)
+![check-health notification psu fail](check-health.d/notification-06-psu-fail.avif)
+![check-health notification psu ok](check-health.d/notification-07-psu-ok.avif)
Requirements and installation
-----------------------------
diff --git a/global-functions b/global-functions
index bfb7b01..0e94dea 100644
--- a/global-functions
+++ b/global-functions
@@ -1075,6 +1075,7 @@
# return UTF-8 symbol for unicode name
:set SymbolByUnicodeName do={
:local Symbols {
+ "abacus"="\F0\9F\A7\AE";
"alarm-clock"="\E2\8F\B0";
"calendar"="\F0\9F\93\85";
"chart-decreasing"="\F0\9F\93\89";