Repository
Munin (contrib)
Last change
2020-10-24
Graph Categories
Capabilities
Keywords
Language
Shell
License
curl
Authors

strelaysrv_

Example graph: 1 Example graph: 2 Example graph: 3 Example graph: 4

Name

strelaysrv_ - Plugin to monitor Syncthing relay server

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 wildcard plugin features:

  • strelaysrv_goroutine
  • strelaysrv_num
  • strelaysrv_proxied
  • strelaysrv_transfer
  • strelaysrv_uptime

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

Author

Pierre-Alain TORET pierre-alain.toret@protonmail.com

License

MIT

SPDX-License-Identifier: MIT

#!/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 wildcard plugin features:

=over 4

=item strelaysrv_goroutine

=item strelaysrv_num

=item strelaysrv_proxied

=item strelaysrv_transfer

=item strelaysrv_uptime

=back


=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 <pierre-alain.toret@protonmail.com>

=head1 LICENSE

MIT

SPDX-License-Identifier: 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