diff --git a/auth/static_env.py b/auth/static_env.py index 3831358..255918d 100755 --- a/auth/static_env.py +++ b/auth/static_env.py @@ -9,7 +9,7 @@ api_key_header = APIKeyHeader(name="X-API-KEY", auto_error=False) def verify_token_zabbix(token: str = Depends(api_key_header)): - if token != conf.zbx.token: + if token != conf.auth.from_zbx_token: log.warning("Invalid token") raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, diff --git a/config/.env-template b/config/.env-template index cc2f03d..e9bbe9a 100755 --- a/config/.env-template +++ b/config/.env-template @@ -12,9 +12,4 @@ OAA_CFG__REDIS__HOST=localhost OAA_CFG__REDIS__PORT=6379 OAA_CFG__REDIS__PWD=P@ssw0rd! -OAA_CFG__TG__BOT_TOKEN=string -OAA_CFG__TG__CHAT_ID=0 -OAA_CFG__TG__DASHBOARD_TRED_ID=0 -OAA_CFG__TG__NET_TRED_ID=0 - -OAA_CFG__ZBX__TOKEN=string \ No newline at end of file +OAA_CFG__AUTH__FROM_ZBX_TOKEN=string \ No newline at end of file diff --git a/config/config.py b/config/config.py index e389781..bd0f633 100755 --- a/config/config.py +++ b/config/config.py @@ -32,7 +32,6 @@ class LogConfig(BaseModel): class PrefixConfig(BaseModel): swagger: str = "/docs" api_v1: str = "/api/v1" - tg_v1: str = api_v1 + "/tg" ping: str = "/ping" zbx: str = api_v1 + "/zbx" @@ -43,17 +42,6 @@ class RedisConfig(BaseModel): pwd: str | None = None -class TelegramConfig(BaseModel): - bot_token: str - chat_id: int - dashboard_tred_id: int | None = None - net_tred_id: int | None = None - - -class FromZabbix(BaseModel): - token: str - - class SwaggerConfig(BaseModel): openapi_url: str = "/openapi.json" title: str = "API" @@ -65,6 +53,10 @@ class SwaggerConfig(BaseModel): pwd: str +class AuthConfig(BaseModel): + from_zbx_token: str + + class Settings(BaseSettings): model_config = SettingsConfigDict( env_file=( @@ -80,8 +72,7 @@ class Settings(BaseSettings): log: LogConfig = LogConfig() prefix: PrefixConfig = PrefixConfig() redis: RedisConfig - tg: TelegramConfig - zbx: FromZabbix + auth: AuthConfig conf = Settings() diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index 33acc90..ea830db 100755 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -27,11 +27,3 @@ services: - OAA_CFG__REDIS__HOST=localhost - OAA_CFG__REDIS__PORT=6379 - OAA_CFG__REDIS__PWD=P@ssw0rd! - - - OAA_CFG__TG__BOT_TOKEN=string - - OAA_CFG__TG__CHAT_ID=0 - - OAA_CFG__TG__DASHBOARD_TRED_ID=0 - - OAA_CFG__TG__NET_TRED_ID=0 - - - OAA_CFG__ZBX__TOKEN=string - - OAA_CFG__ZBX__CLOSE_ALERT_PATTERN=^Problem has been resolved \ No newline at end of file diff --git a/routers/from_zbx.py b/routers/from_zbx.py index 74a9a55..a0a272d 100755 --- a/routers/from_zbx.py +++ b/routers/from_zbx.py @@ -6,8 +6,6 @@ from schemas import ( ) from auth import verify_token_zabbix from redis_db import set_value, pop_value -from config import conf -import re from telegram import send_message from telegram import del_message @@ -16,23 +14,25 @@ router = APIRouter() @router.post("/send-to-dashboard") async def send_message_to_dashboard( - message: zbxMessageToDashboard, + data: zbxMessageToDashboard, token: str = Depends(verify_token_zabbix), ): - match = re.search(conf.zbx.close_alert_pattern, message.text) - log.info(f"match: {match}") - if match: - msg_id = await pop_value(message.problem_id) + if data.event_value == 0: + msg_id = await pop_value(data.event_id) if msg_id: msg_id = int(msg_id.decode("utf-8")) - await del_message(message_id=msg_id, chat_id=conf.tg.chat_id) + await del_message( + message_id=msg_id, + chat_id=data.tg_chat_id, + tg_token=data.tg_token, + ) return result = await send_message( - text=message.subject + "\n\n" + message.text, - chat_id=conf.tg.chat_id, - message_thread_id=conf.tg.dashboard_tred_id, + message=data.message, + chat_id=data.tg_chat_id, + message_thread_id=data.tg_tread_id, + tg_token=data.tg_token, ) if result and result["status"] == 200: - await set_value(message.problem_id, result["msg_id"]) - + await set_value(data.event_id, result["msg_id"]) diff --git a/schemas/from_zabbix.py b/schemas/from_zabbix.py index 4c3d1dd..f398239 100755 --- a/schemas/from_zabbix.py +++ b/schemas/from_zabbix.py @@ -1,14 +1,11 @@ from pydantic import BaseModel +from typing import Optional -class Message(BaseModel): - text: str - - -class MessageToDashboard(Message): - subject: str - problem_id: int - - -class MessageToNetworkChat(Message): - subject: str +class MessageToDashboard(BaseModel): + message: str + event_id: int + event_value: int + tg_tread_id: int + tg_chat_id: int + tg_token: str diff --git a/telegram/message.py b/telegram/message.py index 27b0289..662831f 100755 --- a/telegram/message.py +++ b/telegram/message.py @@ -5,17 +5,18 @@ from config import conf async def send_message( - text: str, + message: str, chat_id: int, - message_thread_id: int | None = None, + tg_token: str, + message_thread_id: int, ) -> dict | None: - url = f"https://api.telegram.org/bot{conf.tg.bot_token}/sendMessage" + url = f"https://api.telegram.org/bot{tg_token}/sendMessage" params = { "chat_id": chat_id, - "text": text, + "message_thread_id": message_thread_id, + "text": message, } - if message_thread_id: - params["message_thread_id"] = message_thread_id + async with aiohttp.ClientSession() as session: async with session.post( url, @@ -34,9 +35,10 @@ async def send_message( async def del_message( message_id: int, + tg_token: str, chat_id: int, ) -> dict | None: - url = f"https://api.telegram.org/bot{conf.tg.bot_token}/deleteMessage" + url = f"https://api.telegram.org/bot{tg_token}/deleteMessage" async with aiohttp.ClientSession() as session: async with session.post( url, @@ -50,4 +52,5 @@ async def del_message( return { "status": response.status, } - log.warning(f"Response status: {response.status}") + else: + log.warning(f"Response status: {response.status}")