its life
This commit is contained in:
parent
8371a1d4e8
commit
3d1ab1cbaa
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
OAA_CFG__AUTH__FROM_ZBX_TOKEN=string
|
|
@ -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()
|
||||
|
|
|
@ -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
|
|
@ -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"])
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
else:
|
||||
log.warning(f"Response status: {response.status}")
|
||||
|
|
Loading…
Reference in New Issue