#!/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/ This plugin requires the cURL utility : https://curl.haxx.se/ 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.syncthing_apikey myapikey0123456789 env.syncthing_host 127.0.0.1 env.syncthing_port 8384 env.syncthing_proto http =head1 AUTHOR Pierre-Alain TORET =head1 LICENSE MIT =cut getstatus() { "$CURL" -s -X GET -H "X-API-Key: $syncthing_apikey" "$syncthing_proto://$syncthing_host:$syncthing_port/rest/system/status" } 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;; *) STATUS=$(getstatus) CPU=$(echo "$STATUS" | "$JQ" '.cpuPercent') printf "syncthing_cpu.value %s\n" "$CPU" esac } 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;; *) STATUS=$(getstatus) ALL=$(echo "$STATUS" | "$JQ" '.alloc') SYS=$(echo "$STATUS" | "$JQ" '.sys') printf "syncthing_mem_all.value %s\n" "$ALL" printf "syncthing_mem_sys.value %s\n" "$SYS" esac } 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;; *) STATUS=$(getstatus) UPTIME=$(echo "$STATUS" | "$JQ" '.uptime') printf "syncthing_uptime.value %s\n" "$UPTIME" esac } 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;; *) STATUS=$(getstatus) GOROUTINES=$(echo "$STATUS" | "$JQ" '.goroutines') printf "syncthing_goroutine.value %s\n" "$GOROUTINES" esac } 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;; *) CONNECTIONS=$("$CURL" -s -X GET -H "X-API-Key: $syncthing_apikey" "$syncthing_proto://$syncthing_host:$syncthing_port/rest/system/connections") IBT=$(echo "$CONNECTIONS" | "$JQ" '.total | .inBytesTotal') OBT=$(echo "$CONNECTIONS" | "$JQ" '.total | .outBytesTotal') printf "syncthing_transfer_up.value %s\n" "$IBT" printf "syncthing_transfer_down.value %s\n" "$OBT" esac } cd "$(dirname "$0")" || exit CURL=$(which curl) JQ=$(which jq) 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