mirror of
https://github.com/moan0s/alertbot.git
synced 2024-06-16 23:32:19 +00:00
Make use of new classification structure
This commit is contained in:
parent
2ff5a6d9ce
commit
e12938b695
97
alertbot.py
97
alertbot.py
|
@ -56,77 +56,94 @@ def get_alert_type(data):
|
||||||
return "not-found"
|
return "not-found"
|
||||||
|
|
||||||
|
|
||||||
def get_alert_messages(alertmanager_data: dict, raw_mode=False) -> list:
|
def get_alert_messages(alert_data: dict, raw_mode=False) -> list:
|
||||||
"""
|
"""
|
||||||
Returns a list of messages in markdown format
|
Returns a list of messages in markdown format
|
||||||
|
|
||||||
|
:param alert_data: The data send to the bot as dict
|
||||||
:param raw_mode: Toggles a mode where the data is not parsed but simply returned as code block in a message
|
:param raw_mode: Toggles a mode where the data is not parsed but simply returned as code block in a message
|
||||||
:param alertmanager_data:
|
|
||||||
:return: List of alert messages in markdown format
|
:return: List of alert messages in markdown format
|
||||||
"""
|
"""
|
||||||
if raw_mode:
|
|
||||||
return ["**Data received**\n```\n" + str(alertmanager_data).strip("\n").strip() + "\n```"]
|
alert_type = get_alert_type(alert_data)
|
||||||
messages = []
|
|
||||||
for alert in alertmanager_data["alerts"]:
|
if raw_mode or alert_type == "not-found":
|
||||||
messages.append(alert_to_markdown(alert))
|
return ["**Data received**\n```\n" + str(alert_data).strip("\n").strip() + "\n```"]
|
||||||
|
else:
|
||||||
|
if alert_type == "grafana-alert":
|
||||||
|
messages = grafana_alert_to_markdown(alert_data)
|
||||||
|
elif alert_type == "grafana-resolved":
|
||||||
|
messages = grafana_alert_to_markdown(alert_data)
|
||||||
|
elif alert_type == "prometheus-alert":
|
||||||
|
messages = prometheus_alert_to_markdown(alert_data)
|
||||||
|
elif alert_type == "uptime-kuma-alert":
|
||||||
|
messages = uptime_kuma_alert_to_markdown(alert_data)
|
||||||
|
elif alert_type == "uptime-kuma-resolved":
|
||||||
|
messages = uptime_kuma_resolved_to_markdown(alert_data)
|
||||||
return messages
|
return messages
|
||||||
|
|
||||||
|
|
||||||
def alert_to_markdown(alert: dict) -> str:
|
def uptime_kuma_alert_to_markdown(alert_data: dict):
|
||||||
if alert["fingerprint"]:
|
return ["**Uptime Kuma Alert Data:**\n```\n" + str(alert_data).strip("\n").strip() + "\n```"]
|
||||||
return grafana_alert_to_markdown(alert)
|
|
||||||
else:
|
|
||||||
return prometheus_alert_to_markdown(alert)
|
|
||||||
|
|
||||||
|
|
||||||
def grafana_alert_to_markdown(alert: dict) -> str:
|
def uptime_kuma_resolved_to_markdown(alert_data: dict):
|
||||||
|
return ["**Uptime Kuma Resolved Data:**\n```\n" + str(alert_data).strip("\n").strip() + "\n```"]
|
||||||
|
|
||||||
|
|
||||||
|
def grafana_alert_to_markdown(alert_data: dict) -> list:
|
||||||
"""
|
"""
|
||||||
Converts a grafana alert json to markdown
|
Converts a grafana alert json to markdown
|
||||||
|
|
||||||
:param alert:
|
:param alert_data:
|
||||||
:return: Alert as fomatted markdown
|
:return: Alerts as formatted markdown string list
|
||||||
"""
|
"""
|
||||||
datetime_format = "%Y-%m-%dT%H:%M:%S%z"
|
messages = []
|
||||||
if alert['status'] == "firing":
|
for alert in alert_data["alerts"]:
|
||||||
message = (
|
datetime_format = "%Y-%m-%dT%H:%M:%S%z"
|
||||||
f"""**Firing 🔥**: {alert['labels']['alertname']}
|
if alert['status'] == "firing":
|
||||||
|
message = (
|
||||||
|
f"""**Firing 🔥**: {alert['labels']['alertname']}
|
||||||
|
|
||||||
* **Instance:** {alert["valueString"]}
|
* **Instance:** {alert["valueString"]}
|
||||||
* **Silence:** {alert["silenceURL"]}
|
* **Silence:** {alert["silenceURL"]}
|
||||||
* **Started at:** {alert['startsAt']}
|
* **Started at:** {alert['startsAt']}
|
||||||
* **Fingerprint:** {alert['fingerprint']}
|
* **Fingerprint:** {alert['fingerprint']}
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
if alert['status'] == "resolved":
|
if alert['status'] == "resolved":
|
||||||
end_at = datetime.datetime.strptime(alert['endsAt'], datetime_format)
|
end_at = datetime.datetime.strptime(alert['endsAt'], datetime_format)
|
||||||
start_at = datetime.datetime.strptime(alert['startsAt'], datetime_format)
|
start_at = datetime.datetime.strptime(alert['startsAt'], datetime_format)
|
||||||
message = (
|
message = (
|
||||||
f"""**Resolved 🥳**: {alert['labels']['alertname']}
|
f"""**Resolved 🥳**: {alert['labels']['alertname']}
|
||||||
|
|
||||||
* **Duration until resolved:** {end_at - start_at}
|
* **Duration until resolved:** {end_at - start_at}
|
||||||
* **Fingerprint:** {alert['fingerprint']}
|
* **Fingerprint:** {alert['fingerprint']}
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
return message
|
messages.append(message)
|
||||||
|
return messages
|
||||||
|
|
||||||
|
|
||||||
def prometheus_alert_to_markdown(alert: dict) -> str:
|
def prometheus_alert_to_markdown(alert_data: dict) -> str:
|
||||||
"""
|
"""
|
||||||
Converts a prometheus alert json to markdown
|
Converts a prometheus alert json to markdown
|
||||||
|
|
||||||
:param alert:
|
:param alert_data:
|
||||||
:return: Alert as fomatted markdown
|
:return: Alert as fomatted markdown
|
||||||
"""
|
"""
|
||||||
|
messages = []
|
||||||
message = (
|
for alert in alert_data["alerts"]:
|
||||||
f"""**{alert['status']}**: {alert['annotations']['description']}
|
message = (
|
||||||
|
f"""**{alert['status']}**: {alert['annotations']['description']}
|
||||||
|
|
||||||
* **Alertname:** {alert["labels"]['alertname']}
|
* **Alertname:** {alert["labels"]['alertname']}
|
||||||
* **Instance:** {alert["labels"]['instance']}
|
* **Instance:** {alert["labels"]['instance']}
|
||||||
* **Job:** {alert["labels"]['job']}
|
* **Job:** {alert["labels"]['job']}
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
return message
|
messages.append(message)
|
||||||
|
return messages
|
||||||
|
|
||||||
|
|
||||||
class AlertBot(Plugin):
|
class AlertBot(Plugin):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user