Простенький скрипт, позволяющий упокоить себя, когда в кармане есть только SMS, а Интернет куда-то делся. Админы тоже иногда отдыхают, иногда даже там, где Интернет в жизни не видывали.
Инициализируем функцию отправки SMS и Email.
:global sendEvent;
Набираем груду локальных переменных, куда потом будем писать интересные в лесу значения. Вообще, думал-думал, но так и не придумал, как это сократить…
:local cDate; :local cTime; :local idName; :local bName; :local utm; :local ver; :local fMem; :local tMem; :local fSpace; :local tSpace; :local cpu0arr; :local cpu1arr; :local uMem; :local uSpace; :local cpu0Load; :local cpu0Disk; :local cpu1Load; :local cpu1Disk; :local cpuAvr; :local diskAvr;
Собираем дату и время.
/system clock { :set cDate [get date]; :set cTime [get time]; }
Вытаскиваем идентику.
/system identity { :set idName [get name]; }
Еще чуток данных собираем и некоторые сразу же превращаем из байт в мегабайты.
/system resource { :set bName [get board-name]; :set utm [get uptime]; :set ver [get version]; :set fMem ([get free-memory]/1048576); :set tMem ([get total-memory]/1048576); :set fSpace ([get free-hdd-space]/1048576); :set tSpace ([get total-hdd-space]/1048576); }
Считаем сколько ресурсов еще есть.
:set uMem ($tMem-$fMem); :set uSpace ($tSpace-$fSpace);
Записываем в массивы загрузку процессора и диска.
/system resource cpu { :set cpu0arr [get 0]; :set cpu1arr [get 1]; }
Раскладываем ее по переменным.
:set cpu0Load ($cpu0arr -> "load"); :set cpu1Load ($cpu1arr -> "load"); :set cpu0Disk ($cpu0arr -> "disk"); :set cpu1Disk ($cpu1arr -> "disk");
Высчитываем среднюю для ЦП и диска.
:set cpuAvr (($cpu0Load+$cpu1Load)/2); :set diskAvr (($cpu0Disk+$cpu1Disk)/2);
Составляем две SMS, т.к. в одну все это не лезет.
:local txtMsg1 "System identity: $idName ($bName / $ver);\r\nCurrent time: $cDate $cTime;\r\nUptime: $utm;"; :local txtMsg2 "Memory used/free: $uMem/$fMem MiB (total $tMem);\r\nHDD used/free: $uSpace/$fSpace MiB (total $tSpace);\r\nCPU load/disk: AVG $cpuAvr/$diskAvr% (cp0 - $cpu0Load/$cpu0Disk, cp1 - $cpu1Load/$cpu1Disk).";
Отправляем, запуская функцию в режиме отправки только SMS.
$sendEvent mode=sms msg=$txtMsg1; $sendEvent mode=sms msg=$txtMsg2;
/system script
add comment="\D1\EA\F0\E8\EF\F2 \E4\EB\FF \E7\E0\EF\F0\EE\F1\E0 \F1\EE\F1\F2\
\EE\FF\ED\E8\FF \F1\E8\F1\F2\E5\EC\FB \F7\E5\F0\E5\E7 SMS" \
dont-require-permissions=no name=state owner=petya policy=\
read,write,policy,test source="# Written by Nikolay Soloshin (nikolay@solo\
shin.su) for RouterOS v6.46.3 on RB3011UiAS (arm) @ 2020.08\r\
\n\r\
\n:global sendEvent;\r\
\n\r\
\n:local cDate;\r\
\n:local cTime;\r\
\n:local idName;\r\
\n:local bName;\r\
\n:local utm;\r\
\n:local ver;\r\
\n:local fMem;\r\
\n:local tMem;\r\
\n:local fSpace;\r\
\n:local tSpace;\r\
\n:local cpu0arr;\r\
\n:local cpu1arr;\r\
\n:local uMem;\r\
\n:local uSpace;\r\
\n:local cpu0Load;\r\
\n:local cpu0Disk;\r\
\n:local cpu1Load;\r\
\n:local cpu1Disk;\r\
\n:local cpuAvr;\r\
\n:local diskAvr;\r\
\n\r\
\n/system clock {\r\
\n :set cDate [get date];\r\
\n :set cTime [get time];\r\
\n}\r\
\n\r\
\n/system identity {\r\
\n :set idName [get name];\r\
\n}\r\
\n\r\
\n/system resource {\r\
\n :set bName [get board-name];\r\
\n :set utm [get uptime];\r\
\n :set ver [get version];\r\
\n :set fMem ([get free-memory]/1048576);\r\
\n :set tMem ([get total-memory]/1048576);\r\
\n :set fSpace ([get free-hdd-space]/1048576);\r\
\n :set tSpace ([get total-hdd-space]/1048576);\r\
\n}\r\
\n\r\
\n:set uMem (\$tMem-\$fMem);\r\
\n:set uSpace (\$tSpace-\$fSpace);\r\
\n\r\
\n/system resource cpu {\r\
\n :set cpu0arr [get 0];\r\
\n :set cpu1arr [get 1];\r\
\n}\r\
\n\r\
\n:set cpu0Load (\$cpu0arr -> \"load\");\r\
\n:set cpu1Load (\$cpu1arr -> \"load\");\r\
\n:set cpu0Disk (\$cpu0arr -> \"disk\");\r\
\n:set cpu1Disk (\$cpu1arr -> \"disk\");\r\
\n\r\
\n:set cpuAvr ((\$cpu0Load+\$cpu1Load)/2);\r\
\n:set diskAvr ((\$cpu0Disk+\$cpu1Disk)/2);\r\
\n\r\
\n:local txtMsg1 \"System identity: \$idName (\$bName / \$ver);\\r\\nCurre\
nt time: \\\r\
\n\$cDate \$cTime;\\r\\nUptime: \$utm;\";\r\
\n:local txtMsg2 \"Memory used/free: \$uMem/\$fMem MiB (total \$tMem);\\r\
\\nHDD \\\r\
\nused/free: \$uSpace/\$fSpace MiB (total \$tSpace);\\r\\nCPU load/disk: A\
VG \\\r\
\n\$cpuAvr/\$diskAvr% (cp0 - \$cpu0Load/\$cpu0Disk, cp1 - \$cpu1Load/\$cpu\
1Disk).\";\r\
\n\r\
\n\$sendEvent mode=sms msg=\$txtMsg1;\r\
\n\$sendEvent mode=sms msg=\$txtMsg2;\r\
\n\r\
\n# With love from Vladivostok."
Скрипт запускается через SMS на номер модема с синтаксисом :cmd 12345 script state
, где 12345
, это секрет, назначенный при настройке приема SMS.
System identity: MK-01 (RB3011UiAS / 6.46.3 (stable)); Current time: oct/10/2020 19:51:32; Uptime: 11w6d02:07:23;
Memory used/free: 77/947 MiB (total 1024); HDD used/free: 41/87 MiB (total 128); CPU load/disk: AVG 4/0% (cp0 - 1/0, cp1 - 7/0).
Это минимально необходимый набор для работы скрипта.
Обсуждение