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 Binary files /dev/null and b/doc/check-health.d/notification-01-cpu-load-high.avif 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 Binary files /dev/null and b/doc/check-health.d/notification-02-cpu-load-ok.avif differ diff --git a/doc/check-health.d/notification-01-voltage.avif b/doc/check-health.d/notification-03-voltage.avif similarity index 100% rename from doc/check-health.d/notification-01-voltage.avif rename to doc/check-health.d/notification-03-voltage.avif diff --git a/doc/check-health.d/notification-02-temperature-high.avif b/doc/check-health.d/notification-04-temperature-high.avif similarity index 100% rename from doc/check-health.d/notification-02-temperature-high.avif rename to doc/check-health.d/notification-04-temperature-high.avif diff --git a/doc/check-health.d/notification-03-temperature-ok.avif b/doc/check-health.d/notification-05-temperature-ok.avif similarity index 100% rename from doc/check-health.d/notification-03-temperature-ok.avif rename to doc/check-health.d/notification-05-temperature-ok.avif diff --git a/doc/check-health.d/notification-04-psu-fail.avif b/doc/check-health.d/notification-06-psu-fail.avif similarity index 100% rename from doc/check-health.d/notification-04-psu-fail.avif rename to doc/check-health.d/notification-06-psu-fail.avif diff --git a/doc/check-health.d/notification-05-psu-ok.avif b/doc/check-health.d/notification-07-psu-ok.avif similarity index 100% rename from doc/check-health.d/notification-05-psu-ok.avif rename to doc/check-health.d/notification-07-psu-ok.avif 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";