2025-02-04 12:27:35 +01:00
|
|
|
#!rsc by RouterOS
|
|
|
|
# RouterOS script: check-health.d/state
|
|
|
|
# Copyright (c) 2019-2025 Christian Hesse <mail@eworm.de>
|
|
|
|
# https://rsc.eworm.de/COPYING.md
|
|
|
|
#
|
2025-02-07 17:39:48 +01:00
|
|
|
# requires RouterOS, version=7.15
|
2025-02-04 12:27:35 +01:00
|
|
|
#
|
|
|
|
# check for RouterOS health state - state plugin
|
|
|
|
# https://rsc.eworm.de/doc/check-health.md
|
|
|
|
|
|
|
|
:global CheckHealthPlugins;
|
|
|
|
|
|
|
|
:set ($CheckHealthPlugins->[ :jobname ]) do={
|
|
|
|
:local FuncName [ :tostr $0 ];
|
|
|
|
|
|
|
|
:global CheckHealthLast;
|
|
|
|
:global Identity;
|
|
|
|
|
|
|
|
:global LogPrint;
|
|
|
|
:global SendNotification2;
|
|
|
|
:global SymbolForNotification;
|
|
|
|
|
|
|
|
:if ([ :len [ /system/health/find where type="" name~"-state\$"] ] = 0) do={
|
|
|
|
$LogPrint debug $FuncName ("Your device does not provide any state health values.");
|
|
|
|
:return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
:foreach State in=[ /system/health/find where type="" name~"-state\$" ] do={
|
|
|
|
:local Name [ /system/health/get $State name ];
|
|
|
|
:local Value [ /system/health/get $State value ];
|
|
|
|
|
|
|
|
:if ([ :typeof ($CheckHealthLast->$Name) ] != "nothing") do={
|
|
|
|
:if ($CheckHealthLast->$Name = "ok" && \
|
|
|
|
$Value != "ok") do={
|
|
|
|
$SendNotification2 ({ origin=$FuncName; \
|
|
|
|
subject=([ $SymbolForNotification "cross-mark" ] . "Health warning: " . $Name); \
|
|
|
|
message=("The device '" . $Name . "' on " . $Identity . " failed!") });
|
|
|
|
}
|
|
|
|
:if ($CheckHealthLast->$Name != "ok" && \
|
|
|
|
$Value = "ok") do={
|
|
|
|
$SendNotification2 ({ origin=$FuncName; \
|
|
|
|
subject=([ $SymbolForNotification "white-heavy-check-mark" ] . "Health recovery: " . $Name); \
|
|
|
|
message=("The device '" . $Name . "' on " . $Identity . " recovered!") });
|
|
|
|
}
|
|
|
|
}
|
|
|
|
:set ($CheckHealthLast->$Name) $Value;
|
|
|
|
}
|
|
|
|
}
|