Страница 1 из 1

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

Добавлено: 19 янв 2025, 11:08
rossiysky
Есть скрипт, отправки в телеграмм сообщений из лога по заданному фильтру:

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

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

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

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

Добавлено: 19 янв 2025, 13:10
Brook
Посмотрите на это решение
viewtopic.php?p=95767#p95767

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

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