Compare commits

..

No commits in common. "main" and "dev-2.0.1" have entirely different histories.

8 changed files with 8 additions and 57 deletions

View File

@ -27,9 +27,4 @@
10. Адрес для подключения к redis 10. Адрес для подключения к redis
11. Порт для подключения к redis 11. Порт для подключения к redis
12. Пароль для подключения к redis (если нужен) 12. Пароль для подключения к redis (если нужен)
UPD
Добавлена проверка доступности апи заббикса и алерт в телегу, если не доступен.
Добавлено изменнеие алерта на произвольный текст, если сообщение нельзя удалить из-за срока давности.

View File

@ -14,7 +14,6 @@ CFG__ZABBIX__ALERT_TEXT_DOWN=Zabbix service DOWN
CFG__TGBOT__TOKEN=string CFG__TGBOT__TOKEN=string
CFG__TGBOT__CHAT_ID=00000000 CFG__TGBOT__CHAT_ID=00000000
CFG__TGBOT__TREAD_ID=0 CFG__TGBOT__TREAD_ID=0
CFG__TGBOT__DELETE_MSG=string
CFG__REDIS__HOST=localhost CFG__REDIS__HOST=localhost
CFG__REDIS__PORT=6379 CFG__REDIS__PORT=6379

View File

@ -42,7 +42,6 @@ class TelegramBotConfig(BaseModel):
token: str token: str
chat_id: int chat_id: int
tread_id: int tread_id: int
delete_msg: str
class ZabbixConfig(BaseModel): class ZabbixConfig(BaseModel):

View File

@ -33,7 +33,6 @@ services:
- CFG__TGBOT__TOKEN=string - CFG__TGBOT__TOKEN=string
- CFG__TGBOT__CHAT_ID=000000 - CFG__TGBOT__CHAT_ID=000000
- CFG__TGBOT__TREAD_ID=0 - CFG__TGBOT__TREAD_ID=0
- CFG__TGBOT__DELETE_MSG=Deleted
- CFG__REDIS__HOST=redis - CFG__REDIS__HOST=redis
- CFG__REDIS__PORT=6379 - CFG__REDIS__PORT=6379

18
main.py
View File

@ -8,13 +8,7 @@ from redis_db import (
del_value, del_value,
) )
import asyncio import asyncio
from telegram import ( from telegram import del_message, send_message, start_bot, send_zabbix_api_alert
del_message,
send_message,
start_bot,
send_zabbix_api_alert,
edit_message,
)
async def dashboard(): async def dashboard():
@ -51,7 +45,7 @@ async def dashboard():
for new_alert in new_alerts_id: for new_alert in new_alerts_id:
message = ( message = (
icon_dict[active_alerts[new_alert]["severity"]] icon_dict[active_alerts[new_alert]["severity"]]
+ f" {active_alerts[new_alert]['host']}\n" + f"{active_alerts[new_alert]['host']}\n"
+ f"{active_alerts[new_alert]['name']}" + f"{active_alerts[new_alert]['name']}"
) )
msg_id = await send_message(message=message, event_id=new_alert) msg_id = await send_message(message=message, event_id=new_alert)
@ -65,12 +59,8 @@ async def dashboard():
if resp["status"] == 200: if resp["status"] == 200:
await del_value(closed_alert) await del_value(closed_alert)
if resp["status"] == 400: if resp["status"] == 400:
resp = await edit_message(int(msg_id), conf.tgbot.delete_msg) log.warning(f"remove olg message {msg_id} from reddis")
if resp["status"] == 200: await del_value(closed_alert)
await del_value(closed_alert)
if resp["status"] == 400:
log.warning(f"remove olg message {msg_id} from reddis")
await del_value(closed_alert)
async def dashboard_loop(): async def dashboard_loop():

View File

@ -1,6 +1,5 @@
from .message import ( from .message import (
send_message, send_message,
edit_message,
del_message, del_message,
send_zabbix_api_alert, send_zabbix_api_alert,
) )
@ -8,7 +7,6 @@ from .bot import start_bot
__all__ = [ __all__ = [
"send_message", "send_message",
"edit_message",
"del_message", "del_message",
"start_bot", "start_bot",
"send_zabbix_api_alert", "send_zabbix_api_alert",

View File

@ -45,35 +45,6 @@ async def send_message(message: str, event_id: int) -> dict:
return {"status": e} return {"status": e}
async def edit_message(message_id: int, message: str) -> dict:
url = f"https://api.telegram.org/bot{conf.tgbot.token}/editMessageText"
async with aiohttp.ClientSession() as session:
try:
async with session.post(
url,
json={
"chat_id": conf.tgbot.chat_id,
"message_id": message_id,
"text": message,
},
) as response:
if response.status == 200:
log.info(f"Message ID {message_id} edited")
return {
"status": response.status,
}
else:
log.warning(
f"Message ID {message_id} NOT edit. Response status: {response.status}"
)
return {
"status": response.status,
}
except Exception as e:
log.warning(f"Exception: {e}")
return {"status": e}
async def del_message( async def del_message(
message_id: int, message_id: int,
) -> dict: ) -> dict:

View File

@ -10,8 +10,8 @@ from datetime import datetime, timedelta
def get_active_problems() -> dict: def get_active_problems() -> dict:
api = ZabbixAPI(url=conf.zabbix.url, token=conf.zabbix.token)
try: try:
api = ZabbixAPI(url=conf.zabbix.url, token=conf.zabbix.token)
problems = api.problem.get( problems = api.problem.get(
output=[ output=[
"eventid", "eventid",
@ -28,7 +28,7 @@ def get_active_problems() -> dict:
event_ids.append(problem["eventid"]) event_ids.append(problem["eventid"])
events = api.event.get( events = api.event.get(
selectHosts=["name"], selectHosts=["host"],
eventids=event_ids, eventids=event_ids,
output=[ output=[
"eventid", "eventid",
@ -38,7 +38,7 @@ def get_active_problems() -> dict:
) )
events_dict = {"event_ids": []} events_dict = {"event_ids": []}
for event in events: for event in events:
event["host"] = event.pop("hosts", None)[0]["name"] event["host"] = event.pop("hosts", None)[0]["host"]
events_dict[event["eventid"]] = event events_dict[event["eventid"]] = event
events_dict["event_ids"].append(event["eventid"]) events_dict["event_ids"].append(event["eventid"])
return events_dict return events_dict