Не могу победить скрипт, прошу помощи.
Пингуем ya.ru 5 пакетов.
Получаем среднюю задержку avg-rtt
сравниваем с :local threshold "50ms"
если задержка выше чем 50мс - пишем лог
:local threshold "50ms"
:local pingResult [/ping ya.ru interval=1 size=64 count=5]
:if (($pingResult->"sent" != "0") and ($pingResult->"received" != "0")) do={
:local avgRtt ($pingResult->"avg-rtt")
:if ([:tonum [:pick $avgRtt 0 [:len $avgRtt-2]]] > [:tonum [:pick $threshold 0 [:len $threshold-2]]]) do={
:log info "Ping to $host is too high: $avgRtt"
}
}
Скрипт PING с получением avg-rtt и обработкой
Правила форума
Как правильно оформить вопрос.
Прежде чем начать настройку роутера, представьте, как это работает. Попробуйте почитать статьи об устройстве интернет-сетей. Убедитесь, что всё, что Вы задумали выполнимо вообще и на данном оборудовании в частности.
Не нужно изначально строить Наполеоновских планов. Попробуйте настроить простейшую конфигурацию, а усложнения добавлять в случае успеха постепенно.
Пожалуйста, не игнорируйте правила русского языка. Отсутствие знаков препинания и неграмотность автора топика для многих гуру достаточный повод проигнорировать топик вообще.
1. Назовите технологию подключения (динамический DHCP, L2TP, PPTP или что-то иное)
2. Изучите темку "Действия до настройки роутера".
viewtopic.php?f=15&t=2083
3. Настройте согласно выбранного Вами мануала
4. Дочитайте мануал до конца и без пропусков, в 70% случаев люди просто не до конца читают статью и пропускают важные моменты.
5. Если не получается, в Winbox открываем терминал и вбиваем там /export hide-sensitive. Результат в топик под кат, интимные подробности типа личных IP изменить на другие, пароль забить звездочками.
6. Нарисуйте Вашу сеть, рисунок (схему) сюда. На словах может быть одно, в действительности другое.
Как правильно оформить вопрос.
Прежде чем начать настройку роутера, представьте, как это работает. Попробуйте почитать статьи об устройстве интернет-сетей. Убедитесь, что всё, что Вы задумали выполнимо вообще и на данном оборудовании в частности.
Не нужно изначально строить Наполеоновских планов. Попробуйте настроить простейшую конфигурацию, а усложнения добавлять в случае успеха постепенно.
Пожалуйста, не игнорируйте правила русского языка. Отсутствие знаков препинания и неграмотность автора топика для многих гуру достаточный повод проигнорировать топик вообще.
1. Назовите технологию подключения (динамический DHCP, L2TP, PPTP или что-то иное)
2. Изучите темку "Действия до настройки роутера".
viewtopic.php?f=15&t=2083
3. Настройте согласно выбранного Вами мануала
4. Дочитайте мануал до конца и без пропусков, в 70% случаев люди просто не до конца читают статью и пропускают важные моменты.
5. Если не получается, в Winbox открываем терминал и вбиваем там /export hide-sensitive. Результат в топик под кат, интимные подробности типа личных IP изменить на другие, пароль забить звездочками.
6. Нарисуйте Вашу сеть, рисунок (схему) сюда. На словах может быть одно, в действительности другое.
- podarok66
- Модератор
- Сообщения: 4402
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
А вы уверены, что вы хоть одну на свою переменную вообще получили результат, который ожидали? Например команда :put $pingResult вам бы показада, что эта переменная имеет значение 5, и ничего более. А вы тут из нее какие-то данные ещё вытащить хотите
Вот точно рабочая конструкция, которая по идее должна дать начало вашему скрипту:
Кстати, адрес только в виде IP, остальное не примет. Вы бы проверяли каждую строку и каждый промежуточный результат, таких вопросов стало бы поменьше. А то нагромождение кода с кучей вольностей никого не привлечёт и тема останется безответной.

Вот точно рабочая конструкция, которая по идее должна дать начало вашему скрипту:
Код: Выделить всё
:local avgRtt;
:local Sent;
:local Received;
/tool flood-ping 8.8.8.8 count=5 do={
:set Sent $"sent";
:set Received $"received";
:set avgRtt $"avg-rtt";
}
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
-
- Сообщения: 15
- Зарегистрирован: 06 фев 2023, 17:29
этот скрипт работает:
Код: Выделить всё
{
:local test [:ping [:resolve "ya.ru"] count=6 as-value]
:local avg 0
:local fails 0
:local min 00:00:10
:local max 00:00:00
:foreach try in=$test do={
:set avg ($avg + ($try->"time"))
:if ([:typeof ($try->"status")] = "str") do={
:set fails ($fails + 1)
} else={
:if (($try->"time") < $min) do={:set min ($try->"time")}
:if (($try->"time") > $max) do={:set max ($try->"time")}
}
}
:set avg ($avg / [:len $test])
:set avg [:pick $avg 0 15]
:put "sent=$[:len $test] received=$([:len $test]-$fails) packet-loss=$(($fails*100)/[:len $test])% min-rtt=$min avg-rtt=$avg max-rtt=$max"
:if ($avg > "00:00:00.070000") do={
:log info "BAD Ping, Recconect"
/system script run Recon
}
}
-
- Сообщения: 31
- Зарегистрирован: 08 май 2023, 01:29
Что-то не соображу, как сюда добавить сам вывод пингов, тоесть те 6 пингов, которые у вас записаны в каунтSheva писал(а): ↑31 мар 2023, 22:16 этот скрипт работает:Код: Выделить всё
{ :local test [:ping [:resolve "ya.ru"] count=6 as-value] :local avg 0 :local fails 0 :local min 00:00:10 :local max 00:00:00 :foreach try in=$test do={ :set avg ($avg + ($try->"time")) :if ([:typeof ($try->"status")] = "str") do={ :set fails ($fails + 1) } else={ :if (($try->"time") < $min) do={:set min ($try->"time")} :if (($try->"time") > $max) do={:set max ($try->"time")} } } :set avg ($avg / [:len $test]) :set avg [:pick $avg 0 15] :put "sent=$[:len $test] received=$([:len $test]-$fails) packet-loss=$(($fails*100)/[:len $test])% min-rtt=$min avg-rtt=$avg max-rtt=$max" :if ($avg > "00:00:00.070000") do={ :log info "BAD Ping, Recconect" /system script run Recon } }