mirror of
https://github.com/Sea-Haven-Industries/afi-backup-monitor.git
synced 2026-10-07 16:19:04 +00:00
51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
"""Slack webhook helper for posting messages."""
|
|
|
|
import json
|
|
import os
|
|
from urllib import request, error
|
|
|
|
_webhook_url = None
|
|
|
|
|
|
def _get_webhook_url():
|
|
global _webhook_url
|
|
if _webhook_url is None:
|
|
import boto3
|
|
|
|
client = boto3.client("secretsmanager")
|
|
secret_arn = os.environ["SLACK_WEBHOOK_SECRET_ARN"]
|
|
response = client.get_secret_value(SecretId=secret_arn)
|
|
_webhook_url = response["SecretString"]
|
|
return _webhook_url
|
|
|
|
|
|
def post_message(blocks, text="Afi Backup Monitor"):
|
|
"""Post a Block Kit message to Slack via webhook."""
|
|
webhook_url = _get_webhook_url()
|
|
payload = json.dumps({"text": text, "blocks": blocks}).encode()
|
|
|
|
req = request.Request(
|
|
webhook_url,
|
|
data=payload,
|
|
headers={"Content-Type": "application/json"},
|
|
method="POST",
|
|
)
|
|
|
|
try:
|
|
with request.urlopen(req) as resp:
|
|
return resp.read().decode()
|
|
except error.HTTPError as e:
|
|
error_body = e.read().decode() if e.fp else ""
|
|
raise RuntimeError(f"Slack webhook failed ({e.code}): {error_body}")
|
|
|
|
|
|
def header_block(text):
|
|
return {"type": "header", "text": {"type": "plain_text", "text": text}}
|
|
|
|
|
|
def section_block(text):
|
|
return {"type": "section", "text": {"type": "mrkdwn", "text": text}}
|
|
|
|
|
|
def divider_block():
|
|
return {"type": "divider"}
|