#!/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 plugins : strelaysrv_goroutine # strelaysrv_num # strelaysrv_proxied # strelaysrv_transfer # strelaysrv_uptime # =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 =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