dev-2.0.2 #5
			
				
			
		
		
		
	| 
						 | 
				
			
			@ -27,4 +27,9 @@
 | 
			
		|||
 | 
			
		||||
10. Адрес для подключения к redis
 | 
			
		||||
11. Порт для подключения к redis
 | 
			
		||||
12. Пароль для подключения к redis (если нужен)
 | 
			
		||||
12. Пароль для подключения к redis (если нужен)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
UPD
 | 
			
		||||
Добавлена проверка доступности апи заббикса и алерт в телегу, если не доступен.
 | 
			
		||||
Добавлено изменнеие алерта на произвольный текст, если сообщение нельзя удалить из-за срока давности.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,6 +14,7 @@ CFG__ZABBIX__ALERT_TEXT_DOWN=Zabbix service DOWN
 | 
			
		|||
CFG__TGBOT__TOKEN=string
 | 
			
		||||
CFG__TGBOT__CHAT_ID=00000000
 | 
			
		||||
CFG__TGBOT__TREAD_ID=0
 | 
			
		||||
CFG__TGBOT__DELETE_MSG=string
 | 
			
		||||
 | 
			
		||||
CFG__REDIS__HOST=localhost
 | 
			
		||||
CFG__REDIS__PORT=6379
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,6 +42,7 @@ class TelegramBotConfig(BaseModel):
 | 
			
		|||
    token: str
 | 
			
		||||
    chat_id: int
 | 
			
		||||
    tread_id: int
 | 
			
		||||
    delete_msg: str
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ZabbixConfig(BaseModel):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,6 +33,7 @@ services:
 | 
			
		|||
      - CFG__TGBOT__TOKEN=string
 | 
			
		||||
      - CFG__TGBOT__CHAT_ID=000000
 | 
			
		||||
      - CFG__TGBOT__TREAD_ID=0
 | 
			
		||||
      - CFG__TGBOT__DELETE_MSG=Deleted
 | 
			
		||||
 | 
			
		||||
      - CFG__REDIS__HOST=redis
 | 
			
		||||
      - CFG__REDIS__PORT=6379
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										16
									
								
								main.py
								
								
								
								
							
							
						
						
									
										16
									
								
								main.py
								
								
								
								
							| 
						 | 
				
			
			@ -8,7 +8,13 @@ from redis_db import (
 | 
			
		|||
    del_value,
 | 
			
		||||
)
 | 
			
		||||
import asyncio
 | 
			
		||||
from telegram import del_message, send_message, start_bot, send_zabbix_api_alert
 | 
			
		||||
from telegram import (
 | 
			
		||||
    del_message,
 | 
			
		||||
    send_message,
 | 
			
		||||
    start_bot,
 | 
			
		||||
    send_zabbix_api_alert,
 | 
			
		||||
    edit_message,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def dashboard():
 | 
			
		||||
| 
						 | 
				
			
			@ -59,8 +65,12 @@ async def dashboard():
 | 
			
		|||
            if resp["status"] == 200:
 | 
			
		||||
                await del_value(closed_alert)
 | 
			
		||||
            if resp["status"] == 400:
 | 
			
		||||
                log.warning(f"remove olg message {msg_id} from reddis")
 | 
			
		||||
                await del_value(closed_alert)
 | 
			
		||||
                resp = await edit_message(int(msg_id), conf.tgbot.delete_msg)
 | 
			
		||||
                if resp["status"] == 200:
 | 
			
		||||
                    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():
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
from .message import (
 | 
			
		||||
    send_message,
 | 
			
		||||
    edit_message,
 | 
			
		||||
    del_message,
 | 
			
		||||
    send_zabbix_api_alert,
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -7,6 +8,7 @@ from .bot import start_bot
 | 
			
		|||
 | 
			
		||||
__all__ = [
 | 
			
		||||
    "send_message",
 | 
			
		||||
    "edit_message",
 | 
			
		||||
    "del_message",
 | 
			
		||||
    "start_bot",
 | 
			
		||||
    "send_zabbix_api_alert",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,6 +45,35 @@ async def send_message(message: str, event_id: int) -> dict:
 | 
			
		|||
            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(
 | 
			
		||||
    message_id: int,
 | 
			
		||||
) -> dict:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue