add grafana formatter

This was initially designed and implemented in #4

Co-authored-by: Sven Seeberg <mail@sven-seeberg.de>
This commit is contained in:
Guilhem Saurel 2021-07-31 13:06:36 +02:00
parent 3bebc88ee2
commit 2d232fe1f7
3 changed files with 23 additions and 1 deletions

View file

@ -6,6 +6,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
- add grafana formatter
- add formatted_body to bypass markdown with direct - add formatted_body to bypass markdown with direct
[matrix-custom-HTML](https://matrix.org/docs/spec/client_server/r0.6.1#m-room-message-msgtypes) [matrix-custom-HTML](https://matrix.org/docs/spec/client_server/r0.6.1#m-room-message-msgtypes)
- allow "key" to be passed as a parameter - allow "key" to be passed as a parameter

View file

@ -16,7 +16,7 @@ from nio import AsyncClient
from nio.exceptions import LocalProtocolError from nio.exceptions import LocalProtocolError
from nio.responses import RoomSendError from nio.responses import RoomSendError
from . import conf from . import conf, formatters
ERROR_MAP = {"M_FORBIDDEN": HTTPStatus.FORBIDDEN} ERROR_MAP = {"M_FORBIDDEN": HTTPStatus.FORBIDDEN}
@ -46,6 +46,12 @@ async def handler(request):
if "key" in request.rel_url.query and "key" not in data: if "key" in request.rel_url.query and "key" not in data:
data["key"] = request.rel_url.query["key"] data["key"] = request.rel_url.query["key"]
if "formatter" in request.rel_url.query:
try:
data = getattr(formatters, request.rel_url.query["formatter"])(data)
except AttributeError:
return create_json_response(HTTPStatus.BAD_REQUEST, "Unknown formatter")
if not all(key in data for key in ["body", "key"]): if not all(key in data for key in ["body", "key"]):
return create_json_response( return create_json_response(
HTTPStatus.BAD_REQUEST, "Missing body and/or API key property" HTTPStatus.BAD_REQUEST, "Missing body and/or API key property"

View file

@ -0,0 +1,15 @@
"""Formatters for matrix webhook."""
def grafana(data):
"""Pretty-print a grafana notification."""
text = ""
if "title" in data:
text = "### " + data["title"] + "\n"
if "message" in data:
text = text + data["message"] + "\n\n"
if "evalMatches" in data:
for match in data["evalMatches"]:
text = text + "* " + match["metric"] + ": " + str(match["value"]) + "\n"
data["body"] = text
return data