diff --git a/type/__matrix_alertmanager_receiver/files/matrix-alertmanager-receiver.toml.sh b/type/__matrix_alertmanager_receiver/files/matrix-alertmanager-receiver.toml.sh new file mode 100755 index 0000000..821b6fb --- /dev/null +++ b/type/__matrix_alertmanager_receiver/files/matrix-alertmanager-receiver.toml.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +cat << EOF +Homeserver = "${HOMESERVER:?}" +TargetRoomID = "${ROOM_ID:?}" +MXID = "${USER_ID:?}" +MXToken = "${USER_TOKEN:?}" +HTTPPort = ${LISTENING_PORT:?} +HTTPAddress = "${LISTENING_HOST:?}" +EOF diff --git a/type/__matrix_alertmanager_receiver/files/openrc-unit b/type/__matrix_alertmanager_receiver/files/openrc-unit new file mode 100644 index 0000000..8f5a9b6 --- /dev/null +++ b/type/__matrix_alertmanager_receiver/files/openrc-unit @@ -0,0 +1,7 @@ +#!/sbin/openrc-run +name="matrix-alertmanager-receiver" +description="Forwards Prometheus Alerts to a Matrix room" +command=/usr/local/bin/matrix-alertmanager-receiver +command_background=true +command_user="prometheus:prometheus" +pidfile=/run/matrix-alertmanager-receiver.pid diff --git a/type/__matrix_alertmanager_receiver/files/systemd-unit b/type/__matrix_alertmanager_receiver/files/systemd-unit new file mode 100644 index 0000000..43e317c --- /dev/null +++ b/type/__matrix_alertmanager_receiver/files/systemd-unit @@ -0,0 +1,11 @@ +[Unit] +Description=Sends Prometheus Alerts to a Matrix room +After=network.target + +[Service] +Type=simple +User=prometheus +ExecStart=/usr/local/bin/matrix-alertmanager-receiver + +[Install] +WantedBy=multi-user.target diff --git a/type/__matrix_alertmanager_receiver/gencode-remote b/type/__matrix_alertmanager_receiver/gencode-remote new file mode 100644 index 0000000..45c299a --- /dev/null +++ b/type/__matrix_alertmanager_receiver/gencode-remote @@ -0,0 +1,33 @@ +#!/bin/sh + +UPSTREAM=https://git.sr.ht/~fnux/matrix-alertmanager-receiver +VERSION=0.1.1 + +# Fetch, build and install binary. +cat << EOF +if ! command -v matrix-alertmanager-receiver; then + workdir=\$(mktemp -d) + cd \$workdir + + # Fetch source archive. + curl "$UPSTREAM/archive/$VERSION.tar.gz" -o "$VERSION.tar.gz" + tar xf "$VERSION.tar.gz" + cd "matrix-alertmanager-receiver-$VERSION" + + # Build binary. + go build -v + + # Install binary. + install -m 0755 matrix-alertmanager-receiver /usr/local/bin/ + + # Cleanup build directory. + rm -r \$workdir + + # Start service. + service matrix-alertmanager-receiver start +fi +EOF + +if grep -q "^__file/etc/matrix-alertmanager-receiver.toml:" "${__messages_in:?}"; then + echo "service matrix-alertmanager-receiver restart" +fi diff --git a/type/__matrix_alertmanager_receiver/man.rst b/type/__matrix_alertmanager_receiver/man.rst new file mode 100644 index 0000000..5157a20 --- /dev/null +++ b/type/__matrix_alertmanager_receiver/man.rst @@ -0,0 +1,70 @@ +cdist-type__matrix_alertmanager_receiver(7) +===================== + +NAME +---- +cdist-type__matrix_alertmanager_receiver - Deploy a simple Prometheus Alertmanager-to-Matrix service + + +DESCRIPTION +----------- +This (singleton) type deploys `matrix-alertmanager-receiver `_, a simple daemon allowing Prometheus alerts to be sent to a `Matrix `_ room. + +REQUIRED PARAMETERS +------------------- +homeserver + Address of the matrix homeserver to use. + +room-id + ID of the (Matrix) room receiving alerts. Note that it must be the room ID: + an alias won't work! + +user-id + MXID of the (Matrix) user sending alerts. + +user-token + Token of the (Matrix) user sending alerts. Can be found under + Settings/Advanced in the Element web client. + +OPTIONAL PARAMETERS +------------------- +host + Host to bind, defaults to `localhost`. + +port + Port to listen on, defaults to `9088`. + +BOOLEAN PARAMETERS +------------------ +None. + +EXAMPLES +-------- + +.. code-block:: sh + + __matrix_alertmanager_receiver \ + --homeserver 'https://matrix.domain.tld/' \ + --room-id '!patatra:domain.tld' \ + --user-id '@alerts:domain.tls' \ + --user-token 'secretsecretsecret' \ + --host 'localhost' \ + --port 9088 + + +SEE ALSO +-------- +- `Upstream `_ +- `__prometheus_alertmanager(7)` + +AUTHORS +------- +Timothée Floure + + +COPYING +------- +Copyright \(C) 2020 Timothée Floure. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/type/__matrix_alertmanager_receiver/manifest b/type/__matrix_alertmanager_receiver/manifest new file mode 100644 index 0000000..94535d8 --- /dev/null +++ b/type/__matrix_alertmanager_receiver/manifest @@ -0,0 +1,65 @@ +#!/bin/sh + +os="$(cat "${__global:?}/explorer/os")" +init="$(cat "${__global:?}/explorer/init")" + +case "$os" in + alpine) + __package go + __package prometheus + __package curl + ;; + debian|ubuntu) + __package golang + __package prometheus + __package curl + ;; + *) + echo "This type does not support $os. Exiting." >&2 + exit 1 + ;; +esac + +# Type parameters. +HOMESERVER=$(cat "${__object:?}/parameter/homeserver") +ROOM_ID=$(cat "${__object:?}/parameter/room-id") +USER_ID=$(cat "${__object:?}/parameter/user-id") +USER_TOKEN=$(cat "${__object:?}/parameter/user-token") +export HOMESERVER ROOM_ID USER_ID USER_TOKEN + +LISTENING_HOST=$(cat "${__object:?}/parameter/host") +LISTENING_PORT=$(cat "${__object:?}/parameter/port") +export LISTENING_PORT LISTENING_HOST + +# Generate and deploy configuration +mkdir -p "${__object:?}/files" +"${__type:?}/files/matrix-alertmanager-receiver.toml.sh" > \ + "${__object:?}/files/matrix-alertmanager-receiver.toml" + +require="__package/prometheus" __file /etc/matrix-alertmanager-receiver.toml \ + --source "${__object:?}/files/matrix-alertmanager-receiver.toml" \ + --owner prometheus \ + --mode 0644 + +case "$init" in + systemd) + unit_path='/etc/systemd/system/matrix-alertmanager-receiver.service' + __file "$unit_path" \ + --source "${__type:?}/files/systemd-unit" \ + --mode 0644 + ;; + busybox-init+openrc) + unit_path='/etc/init.d/matrix-alertmanager-receiver' + __file "$unit_path" \ + --source "${__type:?}/files/openrc-unit" \ + --owner prometheus \ + --mode 0755 + ;; + *) + echo "Unknown init: $init" >&2 + exit 1 + ;; +esac + +require="__file/$unit_path" \ + __start_on_boot matrix-alertmanager-receiver diff --git a/type/__matrix_alertmanager_receiver/parameter/default/host b/type/__matrix_alertmanager_receiver/parameter/default/host new file mode 100644 index 0000000..2fbb50c --- /dev/null +++ b/type/__matrix_alertmanager_receiver/parameter/default/host @@ -0,0 +1 @@ +localhost diff --git a/type/__matrix_alertmanager_receiver/parameter/default/port b/type/__matrix_alertmanager_receiver/parameter/default/port new file mode 100644 index 0000000..effbdc4 --- /dev/null +++ b/type/__matrix_alertmanager_receiver/parameter/default/port @@ -0,0 +1 @@ +9088 diff --git a/type/__matrix_alertmanager_receiver/parameter/optional b/type/__matrix_alertmanager_receiver/parameter/optional new file mode 100644 index 0000000..11fb32f --- /dev/null +++ b/type/__matrix_alertmanager_receiver/parameter/optional @@ -0,0 +1,2 @@ +host +port diff --git a/type/__matrix_alertmanager_receiver/parameter/required b/type/__matrix_alertmanager_receiver/parameter/required new file mode 100644 index 0000000..7c2c764 --- /dev/null +++ b/type/__matrix_alertmanager_receiver/parameter/required @@ -0,0 +1,4 @@ +homeserver +room-id +user-id +user-token diff --git a/type/__matrix_alertmanager_receiver/singleton b/type/__matrix_alertmanager_receiver/singleton new file mode 100644 index 0000000..e69de29