diff --git a/plugins/syncthing/strelaysrv_ b/plugins/syncthing/strelaysrv_ new file mode 100755 index 00000000..8ca9bcb7 --- /dev/null +++ b/plugins/syncthing/strelaysrv_ @@ -0,0 +1,145 @@ +#!/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.STR_HOST 127.0.0.1 +env.STR_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://$STR_HOST:$STR_PORT/status | $JQ '.numActiveSessions ') + NC=$($CURL -s http://$STR_HOST:$STR_PORT/status | $JQ '.numConnections ') + NK=$($CURL -s http://$STR_HOST:$STR_PORT/status | $JQ '.numPendingSessionKeys ') + NP=$($CURL -s http://$STR_HOST:$STR_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://$STR_HOST:$STR_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://$STR_HOST:$STR_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://$STR_HOST:$STR_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://$STR_HOST:$STR_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