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