#!/usr/bin/env bash : <<=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 function 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;; *) NS=$($CURL -s http://$syncthing_relaysrv_host:$syncthing_relaysrv_port/status | $JQ '.numActiveSessions ') NC=$($CURL -s http://$syncthing_relaysrv_host:$syncthing_relaysrv_port/status | $JQ '.numConnections ') NK=$($CURL -s http://$syncthing_relaysrv_host:$syncthing_relaysrv_port/status | $JQ '.numPendingSessionKeys ') NP=$($CURL -s http://$syncthing_relaysrv_host:$syncthing_relaysrv_port/status | $JQ '.numProxies ') printf "strelaysrv_num_sessions.value $NS\nstrelaysrv_num_connections.value $NC\nstrelaysrv_num_pending.value $NK\nstrelaysrv_num_proxies.value $NP\n" esac } function 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;; *) printf "strelaysrv_uptime.value " $CURL -s http://$syncthing_relaysrv_host:$syncthing_relaysrv_port/status | $JQ '.uptimeSeconds' esac } function 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;; *) printf "strelaysrv_goroutine.value " $CURL -s http://$syncthing_relaysrv_host:$syncthing_relaysrv_port/status | $JQ '.goNumRoutine' esac } function 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;; *) printf "strelaysrv_proxied.value " $CURL -s http://$syncthing_relaysrv_host:$syncthing_relaysrv_port/status | $JQ '.bytesProxied ' esac } function 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;; *) printf "strelaysrv_transfer.value " $CURL -s http://$syncthing_relaysrv_host:$syncthing_relaysrv_port/status | $JQ '.kbps10s1m5m15m30m60m[2] ' esac } cd $(dirname $0) 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