Страница 1 из 3
[Beta] Мониторинг интернета с уведомлением в Telegram
Добавлено: 25 дек 2016, 04:09
Dragon_Knight
Благодаря
одной теме на форуме я познакомился с сервисом Telegram, особенно с их ботами и осознал что это идеальная площадка для уведомлений, как в моих поделках, так и для моего непосредственного заработка
Собственно набросал скрипт, который пингует указанный хост, и если пинг нестабильный или его вообще нет, то дожидается нормального пинга и отправляет сообщение в Telegram с пометкой начала и окончания сбоя.
Пока писал вспомнил, какая-же гадость [s]это ваша заливная рыба[/s] этот скриптовый язык... Сделали-бы уже урезанную учётку в ядре и дали писать скрипты на привычном shell...
Код: Выделить всё
# ISP Checker
# Developed by Dragon_Knight, 2016 - 2017.
:local CFGSchedulerName "schedule1";
:local CFGSchedulerNormalInterval 00:00:30;
:local CFGPingCount 10;
:local CFGPingError 1;
:local CFGPingInterval "100ms";
:local CFGPingInterface "ether1";
:local CFGPingAddress "77.88.8.1";
:global CFGTelegramBotToken "XXX";
:global CFGTelegramChatId YYY;
:global LastPingStatus;
:global SendString;
:local GetCurrentTime do={
:local currentDate [/system clock get date];
:local mouth {"jan"="01";"feb"="02";"mar"="03";"apr"="04";"may"="05";"jun"="06";"jul"="07";"aug"="08";"sep"="09";"oct"=10;"nov"="11";"dec"="12"};
:return ([:pick $currentDate 7 11] . "." . $mouth -> [:pick $currentDate 0 3] . "." . [:pick $currentDate 4 6] . " " . [/system clock get time]);
};
:local Send2Telegram do={
:do {
:local URLEncodeString "";
:for i from=0 to=([:len $string] - 1) do={
:local char [:pick $string $i];
:if ($char = " ") do={:set $char "%20";};
:if ($char = "-") do={:set $char "%2D";};
:if ($char = ":") do={:set $char "%3A";};
:set URLEncodeString ($URLEncodeString . $char);
};
/tool fetch keep-result=no mode=https url=("https://api.telegram.org/bot" . $CFGTelegramBotToken . "/sendmessage\?chat_id=" . $CFGTelegramChatId . "&text=" . $URLEncodeString);
} on-error={
:log error "[ISP Checker]: Error sending message.";
};
};
:local pingResult [ping count=$CFGPingCount interval=$CFGPingInterval interface=$CFGPingInterface $CFGPingAddress];
:if ($pingResult < ($CFGPingCount - $CFGPingError)) do={
:if ($pingResult = 0) do={
:if ($LastPingStatus != 1) do={
:set LastPingStatus 1;
:set SendString ($SendString . [$GetCurrentTime] . ": Ping failed (all " . $CFGPingCount . " packets lost)!%0A");
/system scheduler set [find name=$CFGSchedulerName] interval=((CFGPingInterval * CFGPingCount) + 00:00:01.500);
};
} else={
:if ($LastPingStatus != 2) do={
:set LastPingStatus 2;
:set SendString ($SendString . [$GetCurrentTime] . ": Ping unstable (" . $pingResult . " of " . $CFGPingCount . " received)!%0A");
/system scheduler set [find name=$CFGSchedulerName] interval=((CFGPingInterval * CFGPingCount) + 00:00:01.500);
};
};
} else={
:if ($LastPingStatus != 3) do={
:set LastPingStatus 3;
:set SendString ($SendString . [$GetCurrentTime] . ": Ping ok!%0A");
[$Send2Telegram string=$SendString];
:set SendString "";
/system scheduler set [find name=$CFGSchedulerName] interval=$CFGSchedulerNormalInterval;
};
};
Настройки:
Код: Выделить всё
:local CFGSchedulerName "schedule1" # Имя этого скрипта.
:local CFGSchedulerNormalInterval 00:00:30 # Интервал проверки пинга в нормальных условиях.
:local CFGPingCount 10; # Кол-во пакетов проверки пинга.
:local CFGPingError 1; # Кол-во потерянных пакетов, при котором считается что пинг нормальный.
:local CFGPingInterval "100ms"; # Интервал оправки пакетов пинга.
:local CFGPingInterface "MAIN-BRIDGE"; # Интерфейс выхода в мир.
:local CFGPingAddress "77.88.8.1"; # Пингуемый узел.
:global CFGTelegramBotToken "XXX"; # Token бота Telegram.
:global CFGTelegramChatId YYY; # ID чата с ботом Telegram.
Интересно услышать Ваше мнение.
Re: [Beta] Мониторинг интернета с уведомлением в Telegram
Добавлено: 28 дек 2016, 16:50
Dragon_Knight
Добавил режим, при котором в случае проблем с пингом, скрипт начинает работать непрерывно и возвращается в исходное состояние в случае возобновления пинга.
PS: Если кто знает, как можно редактировать параметры скрипта из тела самого скрипта, без указания его имени, то прошу подсказать.
Типа такого: "set [find on-event="# ISP Checker\r"] interval=25".
Re: [Beta] Мониторинг интернета с уведомлением в Telegram
Добавлено: 28 дек 2016, 16:54
Vladimir22
а если интернет пропал ?
как в телеграм отправить сообщение ?
Re: [Beta] Мониторинг интернета с уведомлением в Telegram
Добавлено: 28 дек 2016, 16:56
Dragon_Knight
Vladimir22, Сообщение отправляется только после его возобновления.
Скрипит предназначен не для мониторинга интернета, а для учёта статистики, - когда и как долго его не было, или был но с провалами.
Сами понимаете, - что-бы мониторить само подключение, то нужно или пинговать хост снаружи, что не всегда даёт верную картину, или иметь другой канал связи, - SMS, GPRS...
Re: [Beta] Мониторинг интернета с уведомлением в Telegram
Добавлено: 10 янв 2017, 21:55
root_s
Dragon_Knight писал(а):Благодаря
одной теме на форуме я познакомился с сервисом Telegram, особенно с их ботами и осознал что это идеальная площадка для уведомлений, как в моих поделках, так и для моего непосредственного заработка
Интересно услышать Ваше мнение.
Извините за вопрос начинающего, а как его правильно прикрутить в Mikrotik ?
Ставлю в Scripts, вроде все выполняется, а в telegram не приходит
все настройки бота в телеграмме выполнил
если выполняю вот так
/tool fetch url="https://api.telegram.org/botXXXXXXXXXXXXXXXXXXXXXXXXXX/sendMessage?chat_id=XXXXXXXXXX&text=Host OK
то сообщение приходит
Спасибо !
Re: [Beta] Мониторинг интернета с уведомлением в Telegram
Добавлено: 11 янв 2017, 20:22
Dragon_Knight
Нужно не скрипт а планировщик создать, и вызывать его, скажем каждые 30сек.
Если Вы пишите свой скрипт, то можете взять функцию Send2Telegram и использовать по своему, только поправить ID и токен или использовать глагольные переменные.
Re: [Beta] Мониторинг интернета с уведомлением в Telegram
Добавлено: 11 янв 2017, 21:38
root_s
Dragon_Knight писал(а):Нужно не скрипт а планировщик создать, и вызывать его, скажем каждые 30сек.
Если Вы пишите свой скрипт, то можете взять функцию Send2Telegram и использовать по своему, только поправить ID и токен или использовать глагольные переменные.
Создал шедулер
на скриншоте видно
в телеграм не идет
опять что-то не так
Извините начинающего
Re: [Beta] Мониторинг интернета с уведомлением в Telegram
Добавлено: 11 янв 2017, 21:45
Dragon_Knight
А Вы уверены что происходят сбои? Попробуйте изменить время обновления в 2 секунды и кратковременно, на пол секунды вытащить WAN кабель из роутера, или вытащить на продолжительное время (больше чем время обновления планировщика) и потом обратно подключить.
При возобновлении пинга должно прийти сообщение.
Re: [Beta] Мониторинг интернета с уведомлением в Telegram
Добавлено: 11 янв 2017, 22:36
root_s
Спасибо !!!!
Все работает отлично !
Re: [Beta] Мониторинг интернета с уведомлением в Telegram
Добавлено: 12 янв 2017, 13:32
podarok66
А у меня вот странность такая, если оставить переменную $string - не работает шедулер, если заменяю на "There has been a drop interface" - отрабатывает на ура. Никак не въеду, что не так...