Инструменты пользователя

Инструменты сайта


mikrotik:rb3011uias:routeros:system:scripts:state

Скрипт для запроса состояния MikroTik через SMS

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

Код для импорта

state.rsc
/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.

Пример ответных 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).

Политики запуска

Это минимально необходимый набор для работы скрипта.

  • read,
  • write,
  • policy,
  • test.

Дисклеймер

  • Использование материалов данной базы знаний разрешено на условиях лицензии, указанной внизу каждой страницы! При использовании материалов активная гиперссылка на соответствующую страницу данной базы знаний обязательна!
  • Автор не несет и не может нести какую либо ответственность за последствия использования материалов, размещенных в данной базе знаний. Все материалы предоставляются по принципу «как есть». Используйте их исключительно на свой страх и риск.
  • Все высказывания, мысли или идеи автора, размещенные в материалах данной базе знаний, являются исключительно его личным субъективным мнением и могут не совпадать с мнением читателей!
  • При размещении ссылок в данной базе знаний на интернет-страницы третьих лиц автор не несет ответственности за их техническую функциональность (особенно отсутствие вирусов) и содержание! При обнаружении таких ссылок, можно и желательно сообщить о них в комментариях к соответствующей статье.

Обсуждение

Ваш комментарий:
M R A E N H T U L K F S W V O I
 
Последнее изменение: 2022/02/12 11:40 (внешнее изменение)