Merge pull request 'dev-2.0.2' (#5) from dev-2.0.2 into main
Reviewed-on: #5
This commit is contained in:
		
						commit
						09a890a04a
					
				| 
						 | 
					@ -27,4 +27,9 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
10. Адрес для подключения к redis
 | 
					10. Адрес для подключения к redis
 | 
				
			||||||
11. Порт для подключения к 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__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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -42,6 +42,7 @@ 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):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -33,6 +33,7 @@ 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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										16
									
								
								main.py
								
								
								
								
							
							
						
						
									
										16
									
								
								main.py
								
								
								
								
							| 
						 | 
					@ -8,7 +8,13 @@ from redis_db import (
 | 
				
			||||||
    del_value,
 | 
					    del_value,
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
import asyncio
 | 
					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():
 | 
					async def dashboard():
 | 
				
			||||||
| 
						 | 
					@ -59,8 +65,12 @@ 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:
 | 
				
			||||||
                log.warning(f"remove olg message {msg_id} from reddis")
 | 
					                resp = await edit_message(int(msg_id), conf.tgbot.delete_msg)
 | 
				
			||||||
                await del_value(closed_alert)
 | 
					                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():
 | 
					async def dashboard_loop():
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,6 @@
 | 
				
			||||||
from .message import (
 | 
					from .message import (
 | 
				
			||||||
    send_message,
 | 
					    send_message,
 | 
				
			||||||
 | 
					    edit_message,
 | 
				
			||||||
    del_message,
 | 
					    del_message,
 | 
				
			||||||
    send_zabbix_api_alert,
 | 
					    send_zabbix_api_alert,
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
| 
						 | 
					@ -7,6 +8,7 @@ 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",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -45,6 +45,35 @@ 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:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue