add scom
This commit is contained in:
parent
65b5918f7a
commit
df76a66d4f
|
@ -1,6 +1,7 @@
|
|||
from .static_env import verify_user_pwd, verify_token_zabbix
|
||||
from .static_env import verify_user_pwd, verify_token_zabbix, verify_token_scom
|
||||
|
||||
__all__ = [
|
||||
"verify_user_pwd",
|
||||
"verify_token_zabbix",
|
||||
"verify_token_scom",
|
||||
]
|
||||
|
|
|
@ -18,6 +18,16 @@ def verify_token_zabbix(token: str = Depends(api_key_header)):
|
|||
)
|
||||
|
||||
|
||||
def verify_token_scom(token: str = Depends(api_key_header)):
|
||||
if token != conf.scom.token:
|
||||
log.warning("Invalid token")
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||
detail="Invalid authentication credentials",
|
||||
headers={"WWW-Authenticate": "Bearer"},
|
||||
)
|
||||
|
||||
|
||||
def verify_user_pwd(credentials: HTTPBasicCredentials = Depends(security)):
|
||||
if (
|
||||
credentials.username != conf.swagger.login
|
||||
|
|
|
@ -18,4 +18,6 @@ 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
|
||||
OAA_CFG__ZBX__CLOSE_ALERT_PATTERN=^Problem has been resolved
|
||||
|
||||
OAA_CFG__SCOM__TOKEN=string
|
|
@ -35,6 +35,7 @@ class PrefixConfig(BaseModel):
|
|||
tg_v1: str = api_v1 + "/tg"
|
||||
ping: str = "/ping"
|
||||
zbx: str = api_v1 + "/zbx"
|
||||
scom: str = api_v1 + "/scom"
|
||||
|
||||
|
||||
class RedisConfig(BaseModel):
|
||||
|
@ -55,6 +56,10 @@ class FromZabbix(BaseModel):
|
|||
close_alert_pattern: str
|
||||
|
||||
|
||||
class FromScom(BaseModel):
|
||||
token: str
|
||||
|
||||
|
||||
class SwaggerConfig(BaseModel):
|
||||
openapi_url: str = "/openapi.json"
|
||||
title: str = "API"
|
||||
|
@ -83,6 +88,7 @@ class Settings(BaseSettings):
|
|||
redis: RedisConfig
|
||||
tg: TelegramConfig
|
||||
zbx: FromZabbix
|
||||
scom: FromScom
|
||||
|
||||
|
||||
conf = Settings()
|
||||
|
|
|
@ -3,6 +3,7 @@ from fastapi import APIRouter
|
|||
from .swagger import router as swagger_router
|
||||
from .ping import router as ping_router
|
||||
from .from_zbx import router as zbx_router
|
||||
from .from_scom import router as scom_router
|
||||
from config import conf
|
||||
|
||||
|
||||
|
@ -23,3 +24,9 @@ router.include_router(
|
|||
prefix=conf.prefix.zbx,
|
||||
tags=["From Zabbix"],
|
||||
)
|
||||
|
||||
router.include_router(
|
||||
scom_router,
|
||||
prefix=conf.prefix.scom,
|
||||
tags=["From SCOM"],
|
||||
)
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
from fastapi import APIRouter, Depends
|
||||
import logging as log
|
||||
|
||||
from schemas import scomNetworkMessage
|
||||
from auth import verify_token_scom
|
||||
from redis_db import set_value, pop_value
|
||||
from config import conf
|
||||
from telegram import send_message
|
||||
from telegram import del_message
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post("/send-to-dashboard")
|
||||
async def send_message_to_dashboard(
|
||||
message: scomNetworkMessage,
|
||||
token: str = Depends(verify_token_scom),
|
||||
):
|
||||
|
||||
if message.alert_resolution_state == "Closed":
|
||||
msg_id = await pop_value(f"scom:net:{message.alert_source}")
|
||||
if msg_id:
|
||||
msg_id = int(msg_id.decode("utf-8"))
|
||||
await del_message(message_id=msg_id, chat_id=conf.tg.chat_id)
|
||||
return
|
||||
|
||||
result = await send_message(
|
||||
text=f"‼️{message.alert_resolution_state} {message.alert_source} is not responding",
|
||||
chat_id=conf.tg.chat_id,
|
||||
message_thread_id=conf.tg.dashboard_tred_id,
|
||||
)
|
||||
if result and result["status"] == 200:
|
||||
await set_value(f"scom:net:{message.alert_source}", result["msg_id"])
|
||||
|
||||
|
||||
@router.post("/send-to-net-chat")
|
||||
async def send_message_to_net_chat(
|
||||
message: scomNetworkMessage,
|
||||
token: str = Depends(verify_token_scom),
|
||||
):
|
||||
if message.alert_resolution_state == "New":
|
||||
text = f"‼️{message.alert_resolution_state} {message.alert_source} is not responding"
|
||||
else:
|
||||
text = (
|
||||
f"✅{message.alert_resolution_state} {message.alert_source} is responding"
|
||||
)
|
||||
await send_message(
|
||||
text=text,
|
||||
chat_id=conf.tg.chat_id,
|
||||
message_thread_id=conf.tg.net_tred_id,
|
||||
)
|
|
@ -2,8 +2,10 @@ from .from_zabbix import (
|
|||
MessageToDashboard as zbxMessageToDashboard,
|
||||
MessageToNetworkChat as zbxMessageToNetworkChat,
|
||||
)
|
||||
from .from_scom import NetworkMessage as scomNetworkMessage
|
||||
|
||||
__all__ = [
|
||||
"zbxMessageToDashboard",
|
||||
"zbxMessageToNetworkChat",
|
||||
"scomNetworkMessage",
|
||||
]
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class Message(BaseModel):
|
||||
alert_source: str
|
||||
alert_resolution_state: str
|
||||
|
||||
|
||||
class NetworkMessage(Message):
|
||||
pass
|
||||
|
||||
|
||||
class ServerMessage(Message):
|
||||
alert_name: str
|
||||
alert_time: str
|
||||
alert_description: str
|
Loading…
Reference in New Issue