diff --git a/plugins/syncthing/example-graphs/syncthing_-1.png b/plugins/syncthing/example-graphs/syncthing_-1.png new file mode 100644 index 00000000..a71e34d2 Binary files /dev/null and b/plugins/syncthing/example-graphs/syncthing_-1.png differ diff --git a/plugins/syncthing/example-graphs/syncthing_-2.png b/plugins/syncthing/example-graphs/syncthing_-2.png new file mode 100644 index 00000000..a333f2a5 Binary files /dev/null and b/plugins/syncthing/example-graphs/syncthing_-2.png differ diff --git a/plugins/syncthing/example-graphs/syncthing_-3.png b/plugins/syncthing/example-graphs/syncthing_-3.png new file mode 100644 index 00000000..a1704be9 Binary files /dev/null and b/plugins/syncthing/example-graphs/syncthing_-3.png differ diff --git a/plugins/syncthing/example-graphs/syncthing_-4.png b/plugins/syncthing/example-graphs/syncthing_-4.png new file mode 100644 index 00000000..41dc6637 Binary files /dev/null and b/plugins/syncthing/example-graphs/syncthing_-4.png differ diff --git a/plugins/syncthing/example-graphs/syncthing_-5.png b/plugins/syncthing/example-graphs/syncthing_-5.png new file mode 100644 index 00000000..73a640dd Binary files /dev/null and b/plugins/syncthing/example-graphs/syncthing_-5.png differ diff --git a/plugins/syncthing/syncthing_ b/plugins/syncthing/syncthing_ new file mode 100755 index 00000000..b1572cd8 --- /dev/null +++ b/plugins/syncthing/syncthing_ @@ -0,0 +1,151 @@ +#!/bin/sh +# -*- sh -*- +: <<=cut +=head1 NAME +syncthing_ - Plugin to monitor Syncthing server + +=head1 DESCRIPTION +This plugin gathers metrics from a Syncthing server. + +This plugin requires the jq utility : https://stedolan.github.io/jq/ + +Available plugins : +syncthing_cpu # +syncthing_mem # +syncthing_goroutine # +syncthing_transfer # +syncthing_uptime # + +=head1 CONFIGURATION +To make the plugin connect to the Syncthing server one has to use this type of +configuration +[syncthing_*] + +env.ST_APIKEY myapikey0123456789 +env.ST_HOST 127.0.0.1 +env.ST_PORT 8384 +env.ST_PROTO http + +=head1 AUTHOR +Pierre-Alain TORET + +=head1 LICENSE +MIT +=cut + +function cpu { + case $1 in + config) + cat <<'EOM' +graph_title Syncthing server cpu usage +graph_args -u 100 +graph_vlabel % +graph_category network +syncthing_cpu.label cpu +EOM + exit 0;; + *) + printf "syncthing_cpu.value " + curl -s -X GET -H "X-API-Key: $ST_APIKEY" $ST_PROTO://$ST_HOST:$ST_PORT/rest/system/status | jq '.cpuPercent' + esac +} + +function mem { + case $1 in + config) + cat <<'EOM' +graph_title Syncthing server memory +graph_category network +graph_order syncthing_mem_all syncthing_mem_sys +graph_args --base 1000 +graph_vlabel bits +syncthing_mem_all.label allocated +syncthing_mem_all.cdef syncthing_mem_all,8,* +syncthing_mem_sys.label obtained +syncthing_mem_sys.cdef syncthing_mem_sys,8,* +EOM + exit 0;; + *) + ALL=$(curl -s -X GET -H "X-API-Key: $ST_APIKEY" $ST_PROTO://$ST_HOST:$ST_PORT/rest/system/status | jq '.alloc') + SYS=$(curl -s -X GET -H "X-API-Key: $ST_APIKEY" $ST_PROTO://$ST_HOST:$ST_PORT/rest/system/status | jq '.sys') + printf "syncthing_mem_all.value $ALL\nsyncthing_mem_sys.value $SYS\n" + esac +} + +function uptime { + case $1 in + config) + cat <<'EOM' +graph_title Syncthing server uptime +graph_vlabel uptime in seconds +graph_category network +syncthing_uptime.label uptime +EOM + exit 0;; + *) + printf "syncthing_uptime.value " + curl -s -X GET -H "X-API-Key: $ST_APIKEY" $ST_PROTO://$ST_HOST:$ST_PORT/rest/system/status | jq '.uptime' + esac +} + +function goroutine { + case $1 in + config) + cat <<'EOM' +graph_title Syncthing server go routines +graph_vlabel number of go routines +graph_category network +syncthing_goroutine.label routines +EOM + exit 0;; + *) + printf "syncthing_goroutine.value " + curl -s -X GET -H "X-API-Key: $ST_APIKEY" $ST_PROTO://$ST_HOST:$ST_PORT/rest/system/status | jq '.goroutines' + esac +} + +function transfer { + case $1 in + config) + cat <<'EOM' +graph_title Syncthing server total transfer +graph_category network +graph_order syncthing_transfer_down syncthing_transfer_up +graph_args --base 1000 +graph_vlabel bits in (-) / out (+) per ${graph_period} +syncthing_transfer_down.label received +syncthing_transfer_down.type COUNTER +syncthing_transfer_down.graph no +syncthing_transfer_down.cdef syncthing_transfer_down,8,* +syncthing_transfer_up.label bps +syncthing_transfer_up.type COUNTER +syncthing_transfer_up.negative syncthing_transfer_down +syncthing_transfer_up.cdef syncthing_transfer_up,8,* +EOM + exit 0;; + *) + IBT=$(curl -s -X GET -H "X-API-Key: $ST_APIKEY" $ST_PROTO://$ST_HOST:$ST_PORT/rest/system/connections | jq '.total | .inBytesTotal') + OBT=$(curl -s -X GET -H "X-API-Key: $ST_APIKEY" $ST_PROTO://$ST_HOST:$ST_PORT/rest/system/connections | jq '.total | .outBytesTotal') + printf "syncthing_transfer_up.value $IBT\nsyncthing_transfer_down.value $OBT\n" + esac +} + +cd $(dirname $0) + +case $(basename $0) in + syncthing_cpu) + cpu $1 + exit 0;; + syncthing_mem) + mem $1 + exit 0;; + syncthing_uptime) + uptime $1 + exit 0;; + syncthing_goroutine) + goroutine $1 + exit 0;; + syncthing_transfer) + transfer $1 + exit 0;; +esac