Tweak pagerduty colors and log all payloads

This commit is contained in:
Abel Luck 2022-07-22 14:32:49 +00:00
parent f4a36a3ce7
commit 29757b2e7d
2 changed files with 14 additions and 4 deletions

View file

@ -1,4 +1,6 @@
import asyncio import asyncio
import json
import logging
from typing import Any, Dict, Optional, cast from typing import Any, Dict, Optional, cast
import uvicorn import uvicorn
@ -87,6 +89,8 @@ async def pagerduty_hook(
raise HTTPException( raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND, detail="Unknown routing key" status_code=status.HTTP_404_NOT_FOUND, detail="Unknown routing key"
) )
payload_str = json.dumps(payload, sort_keys=True, indent=2)
logging.info(f"received pagerduty payload: \n {payload_str}")
msg_plain, msg_formatted = pagerduty.parse_pagerduty_event(payload) msg_plain, msg_formatted = pagerduty.parse_pagerduty_event(payload)
await matrix_client.room_send( await matrix_client.room_send(
room_id, room_id,

View file

@ -4,9 +4,10 @@ from typing import Any, Tuple
def urgency_color(urgency: str) -> str: def urgency_color(urgency: str) -> str:
if urgency == "high": if urgency == "high":
return "#dc3545" return "#dc3545" # red
else: else:
return "#17a2b8" return "#ffc107" # orange
# return "#17a2b8" # blue
def parse_pagerduty_event(payload: Any) -> Tuple[str, str]: def parse_pagerduty_event(payload: Any) -> Tuple[str, str]:
@ -29,13 +30,18 @@ def parse_pagerduty_event(payload: Any) -> Tuple[str, str]:
service_name: str = data["service"]["summary"] service_name: str = data["service"]["summary"]
urgency: str = data.get("urgency", "high") urgency: str = data.get("urgency", "high")
plain = f"{status}: on {service_name}: {title} {url}" plain = f"{status}: on {service_name}: {title} {url}"
formatted = f"<strong><font color={urgency_color(urgency)}>{status.upper()}</font></strong> on {service_name}: [{title}]({url})" header_str = f"{status.upper()}[{urgency}]"
if status == "resolved":
color = "#33cc33" # green
else:
color = urgency_color(urgency)
formatted = f"<strong><font color={color}>{header_str}</font></strong> on {service_name}: [{title}]({url})"
return plain, formatted return plain, formatted
payload_str = json.dumps(payload, sort_keys=True, indent=2) payload_str = json.dumps(payload, sort_keys=True, indent=2)
return ( return (
"unhandled", "unhandled",
f"""**unhandled pager duty event** f"""**unhandled pager duty event** (this may or may not be a critical problem, please look carefully)
<pre><code class="language-json">{payload_str}</code></pre> <pre><code class="language-json">{payload_str}</code></pre>
""", """,
) )