Нужна помощь со скриптом

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
rossiysky
Сообщения: 2
Зарегистрирован: 17 янв 2025, 23:09

Есть скрипт, отправки в телеграмм сообщений из лога по заданному фильтру:

Код: Выделить всё

:global lastTime;
:global output;
:global ChatId;
:global TelegramApi;
:local bridgeIP;
:set TelegramApi "7335196162";
:set ChatId "073";
:set bridgeIP [/ip address get [find interface="bridge1"] address];;
:global mtIdentity [/system identity get name];

#:local LogGet [ :toarray [ /log find topics~"system" || message~"login failure" || message~"logged" || message~"connected" || message~"[Ff]ailure" ]];
:local LogGet [ :toarray [ /log find topics~"interface" || topics~"script" || topics~"l2tp"]];

:local LogtLineCount [ :len $LogGet ];

if ($LogtLineCount > 0) do={
:local currentTime "$[ /log get [ :pick $LogGet ($LogtLineCount -1) ] time ]";
:if ([:len $currentTime] = 10 ) do={
:set currentTime [ :pick $currentTime 0 10 ];
}
:set output "$currentTime - $[/log get [ :pick $LogGet ($LogtLineCount-1) ] message]";
:if (([:len $lastTime] < 1) || (([:len $lastTime] > 0) && ($lastTime != $currentTime))) do={
:set lastTime $currentTime ;
:tool fetch url=("https://api.telegram.org/bot$TelegramApi/sendmessage\?chat_id=$ChatId&text=%F0%9F%93%A1\"$mtIdentity\" :  $bridgeIP, $output") keep-result=no 
}

}
работает, но отправляет только последнюю подходящую строчку из лог-файла, при этом если планировщиком запускам раз в минуту - пропускам часть сообщений, соотвественно информация неполная.

Требуется помощь в модификации скрипта, чтобы он выводил по одному сообщению, но все подходящие, но не отправлять те, что были ранее отправлены.

Вижу такой алгоритм:

- Запускам по планировщику скрипт раз в 1 минуту
- Задаем критерии выборки из лог-файла, например: topics~"interface" || topics~"script" || topics~"l2tp" || topics~"system"
- Считываем лог-файл, выбираем строки подходящие под заданный критерий и грузим последовательно в массив, фиксируем дату и время последней отправленной в телеграмм записи в глобальную переменную или куда-то еще.
- При повторном запуске считываем дату и время последней отправленной записи (из файла или глобальной переменно), читаем лог-файл, отступаем за дату после ранее отправленной, по заданному фильтру ищем строки, если есть - отправляем последовательно в телегарам и фиксируем дату и время последней отправленной записи.

считал весь лог,
отфильтровал по ключам и дате-времени (ниже указанной в сохраненном файле)
записал в массив отфильрованное,
поставил дату и время последней записи в лог,
отправил телегу


Аватара пользователя
Brook
Сообщения: 156
Зарегистрирован: 24 май 2022, 00:29

Посмотрите на это решение
viewtopic.php?p=95767#p95767


rossiysky
Сообщения: 2
Зарегистрирован: 17 янв 2025, 23:09

Brook писал(а): 19 янв 2025, 13:10 Посмотрите на это решение
viewtopic.php?p=95767#p95767
За оплату сможете помочь привести скрипт в рабочее состояние?


Ответить