#!/bin/sh : <<=cut =head1 NAME strelaysrv_ - Plugin to monitor Syncthing relay server =head1 DESCRIPTION This plugin gathers metrics from a Syncthing relay server. This plugin requires the jq utility : https://stedolan.github.io/jq/ This plugin requires the curl utility : https://curl.haxx.se/ Available wildcard plugin features: =over 4 =item strelaysrv_goroutine =item strelaysrv_num =item strelaysrv_proxied =item strelaysrv_transfer =item strelaysrv_uptime =back =head1 CONFIGURATION To make the plugin connect to the Syncthing relay server one has to use this type of configuration: [strelaysrv_*] env.syncthing_relaysrv_host 127.0.0.1 env.syncthing_relaysrv_port 22070 =head1 AUTHOR Pierre-Alain TORET =head1 LICENSE MIT SPDX-License-Identifier: MIT =cut syncthing_relaysrv_host=${syncthing_relaysrv_host:-} syncthing_relaysrv_port=${syncthing_relaysrv_port:-} getstatus() { "$CURL" -s "http://$syncthing_relaysrv_host:$syncthing_relaysrv_port/status" } num() { case $1 in config) cat <<'EOM' graph_title Syncthing relay numbers graph_category network graph_vlabel numbers strelaysrv_num_sessions.label sessions strelaysrv_num_connections.label connections strelaysrv_num_pending.label pending session keys strelaysrv_num_proxies.label proxies EOM exit 0;; *) STATUS=$(getstatus) NS=$(echo "$STATUS" | $JQ '.numActiveSessions ') NC=$(echo "$STATUS" | $JQ '.numConnections ') NK=$(echo "$STATUS" | $JQ '.numPendingSessionKeys ') NP=$(echo "$STATUS" | $JQ '.numProxies ') printf 'strelaysrv_num_sessions.value %s\n' "$NS" printf 'strelaysrv_num_connections.value %s\n' "$NC" printf 'strelaysrv_num_pending.value %s\n' "$NK" printf 'strelaysrv_num_proxies.value %s\n' "$NP" esac } uptime() { case $1 in config) cat <<'EOM' graph_title Syncthing relay uptime graph_vlabel uptime in seconds graph_category network strelaysrv_uptime.label uptime EOM exit 0;; *) STATUS=$(getstatus) UPTIME=$(echo "$STATUS" | "$JQ" '.uptimeSeconds') printf 'strelaysrv_uptime.value %s\n' "$UPTIME" esac } goroutine() { case $1 in config) cat <<'EOM' graph_title Syncthing relay go routines graph_vlabel number of go routines graph_category network strelaysrv_goroutine.label routines EOM exit 0;; *) STATUS=$(getstatus) GOROUTINE=$(echo "$STATUS" | "$JQ" '.goNumRoutine') printf 'strelaysrv_goroutine.value %s\n' "$GOROUTINE" esac } proxied() { case $1 in config) cat <<'EOM' graph_title Syncthing relay total proxied bits graph_category network graph_vlabel bits graph_args --base 1000 strelaysrv_proxied.label bits strelaysrv_proxied.cdef strelaysrv_proxied,8,* EOM exit 0;; *) STATUS=$(getstatus) BP=$(echo "$STATUS" | "$JQ" '.bytesProxied ') printf 'strelaysrv_proxied.value %s\n' "$BP" esac } transfer() { case $1 in config) cat <<'EOM' graph_title Syncthing relay transfer rate graph_category network graph_vlabel bps graph_args --base 1000 strelaysrv_transfer.label bps strelaysrv_transfer.cdef strelaysrv_transfer,1000,* EOM exit 0;; *) STATUS=$(getstatus) TRANSFER=$(echo "$STATUS" | "$JQ" '.kbps10s1m5m15m30m60m[2] ') printf 'strelaysrv_transfer.value %s\n' "$TRANSFER" esac } cd "$(dirname "$0")" || exit CURL=$(which curl) JQ=$(which jq) case $(basename "$0") in strelaysrv_num) num "$1" exit 0;; strelaysrv_uptime) uptime "$1" exit 0;; strelaysrv_goroutine) goroutine "$1" exit 0;; strelaysrv_proxied) proxied "$1" exit 0;; strelaysrv_transfer) transfer "$1" exit 0;; esac