Простенький скрипт, позволяющий упокоить себя, когда в кармане есть только 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).
Это минимально необходимый набор для работы скрипта.
Обсуждение