diff --git a/roles/services/handlers/main.yaml b/roles/services/handlers/main.yaml index ba797c1..b4feeb3 100644 --- a/roles/services/handlers/main.yaml +++ b/roles/services/handlers/main.yaml @@ -42,3 +42,9 @@ name: mastodon-spacestate state: restarted daemon_reload: true + +- name: restart mqtt-graphite + systemd: + name: mqtt-graphite + state: restarted + daemon_reload: true diff --git a/roles/services/tasks/main.yaml b/roles/services/tasks/main.yaml index d6d4d17..eff7acc 100644 --- a/roles/services/tasks/main.yaml +++ b/roles/services/tasks/main.yaml @@ -13,3 +13,6 @@ - tags: services_mastodon_spacestate import_tasks: mastodon_spacestate.yaml + +- tags: services_mqtt_graphite + import_tasks: mqtt_graphite.yaml diff --git a/roles/services/tasks/mqtt_graphite.yaml b/roles/services/tasks/mqtt_graphite.yaml new file mode 100644 index 0000000..bbb36f9 --- /dev/null +++ b/roles/services/tasks/mqtt_graphite.yaml @@ -0,0 +1,25 @@ +- name: Install mqtt-graphite + template: + src: mqtt-graphite.sh + dest: /var/lib/mqtt-graphite.sh + owner: root + group: root + mode: 0755 + notify: restart mqtt-graphite + +- name: Install mqtt-graphite service + template: + src: mqtt-graphite.service + dest: /etc/systemd/system/mqtt-graphite.service + owner: root + group: root + mode: 0644 + notify: restart mqtt-graphite + +- name: Start mqtt-graphite + systemd: + name: mqtt-graphite + state: started + enabled: yes + daemon_reload: true + diff --git a/roles/services/templates/mqtt-graphite.service b/roles/services/templates/mqtt-graphite.service new file mode 100644 index 0000000..5ec8a09 --- /dev/null +++ b/roles/services/templates/mqtt-graphite.service @@ -0,0 +1,15 @@ +# Managed by Ansible + +[Unit] +Description=MQTT to Graphite bridge +After=network.target + +[Service] +Type=simple +ExecStart=/bin/bash /var/lib/mqtt-graphite.sh +Restart=on-failure +RestartSec=10s +DynamicUser=true + +[Install] +WantedBy=multi-user.target diff --git a/roles/services/templates/mqtt-graphite.sh b/roles/services/templates/mqtt-graphite.sh new file mode 100644 index 0000000..b05c973 --- /dev/null +++ b/roles/services/templates/mqtt-graphite.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +GRAPHITE_HOST="100.64.0.11" +GRAPHITE_PORT="2003" + +set -eu +set -o pipefail + +mqtt-simple -h {{ mqtt_internal_host }} -t "#" | + while read line; do + topic=$(echo "$line" | cut -d' ' -f1 | sed 's/\//./g' | tr '[:upper:]' '[:lower:]') + value=$(echo "$line" | cut -s -d' ' -f2- | sed 's/closed/0/g;s/open/1/g') + + # Only relay numeric values. + if [[ $value =~ ^-?[0-9]+\.?[0-9]*$ ]]; then + echo "$topic $value $(date +%s)" | nc -q0 "$GRAPHITE_HOST" "$GRAPHITE_PORT" + echo "$topic $value $(date +%s)" + fi + done +