Re: Скрипт оповещения в телеграмм
Добавлено: 29 май 2020, 00:40
Кому нужно, выкладываю обновленный скрипт. Переписал его с нуля. Выкинул все лишнее.. за исключением если кому не надо отслеживать вайфай - сотрите topics~"wireless" ||
Код: Выделить всё
# BEGIN SETUP
:local scheduleName "LogMikrotik"
:local bot "BOT TELEGRAM ANDA"
:local ChatID "CHAT ID ANDA"
:local startBuf [:toarray [/log find message~"logged in" || topics~"wireless" || topics~"error" || topics~"warning" || topics~"critical"]]
:local removeThese {"telnet"}
:local TimeOFF [:toarray ("00:00","03:00")]
# END SETUP
if ([:len [/system scheduler find name="$scheduleName"]] = 0) do={
/log warning "[LOGMON] ERROR: Schedule does not exist. Create schedule and edit script to match name"
}
:local name [/system identity get name]
:local TimeNow [:pick [/system clock get time] 0 5]
:local lastTime [/system scheduler get [find name="$scheduleName"] comment]
:local currentTime
:local message
:local output
:local keepOutput false
:local logTrue
if ([:len $lastTime] = 0) do={
:set keepOutput true
}
:foreach i in=$startBuf do={
:local var true
:foreach j in=$removeThese do={
if ([/log get $i message] ~ $j) do={
:set var false
}
}
if ($var=true) do={:set logTrue ($logTrue, $i)}
}
:foreach l in=$logTrue do={
:set currentTime [ /log get $l time ]
if ([:len $currentTime] = 8 ) do={
:set currentTime ([:pick [/system clock get date] 0 11]." ".$currentTime)
} else={
if ([:len $currentTime] = 15 ) do={
:set currentTime ([:pick $currentTime 0 6]."/".[:pick [/system clock get date] 7 11]." ".[:pick $currentTime 7 15])
}
}
if ($keepOutput=true) do={
:set message [/log get $l message]
if ([/log get $l message] ~ "[0-F][0-F]:[0-F][0-F]:[0-F][0-F]:[0-F][0-F]:[0-F][0-F]:[0-F][0-F]") do={
:foreach k in=[/ip dhcp-server lease find] do={
:local mac [/ip dhcp-server lease get $k value-name=mac-address]
if ([/log get $l message] ~ "$mac") do={
:set message ($message . " / " . [/ip dhcp-server lease get $k value-name=comment])
}
}
}
:set output ($output.$currentTime." ".$message."%0A%0A")
} else={
:set message [/log get $l message]
if ($currentTime = $lastTime) do={
:set keepOutput true
}
}
}
if (([:len $output] > 0) and ($TimeOFF ~ $TimeNow)) do={
/system scheduler set [find name="$scheduleName"] comment=$currentTime
} else={
if (([:len $output] > 0) and ($currentTime != $lastTime)) do={
/system scheduler set [find name="$scheduleName"] comment=$currentTime
/tool fetch url="https://api.telegram.org/bot$bot/sendmessage?chat_id=$ChatID&text= $name : %0A$output" keep-result=no;
} else={
if (([:len $message] > 0) and ($currentTime != $lastTime)) do={
/system scheduler set [find name="$scheduleName"] comment=$currentTime
}
}
}