diff --git a/plugins/nextcloud/signaling b/plugins/nextcloud/signaling new file mode 100755 index 00000000..4ba2e3dc --- /dev/null +++ b/plugins/nextcloud/signaling @@ -0,0 +1,105 @@ +#!/bin/sh + +set -e + +: << =cut + +=head1 NAME + +signaling - Monitor a spreed standalone signaling server + +=head1 APPLICABLE SYSTEMS + +Signaling server used for Nextcloud Talk +(https://github.com/strukturag/nextcloud-spreed-signaling) + +=head1 CONFIGURATION + +Requires an installed jq, a command-line json processor. + +You may specify the URL where to get the statistics. + + url - URL of signalign stats endpoint + max_time - Timeout curl - defaults to 3 seconds + + [signaling] + env.url http://127.0.0.1:8080/api/v1/stats + env.max_time 3 + +=head1 AUTHOR + +Copyright (C) 2021 Sebastian L. (https://momou.ch) + +=head1 LICENSE + +GPLv2 + +=head1 MAGIC MARKERS + + #%# family=auto + #%# capabilities=autoconf + +=cut + +. "$MUNIN_LIBDIR/plugins/plugin.sh" + +STATS_URL=${url:-"http://127.0.0.1:8080/api/v1/stats"} +max_time=${max_time:-3} + +case $1 in + + autoconf) + if [ -x /usr/bin/curl ]; then + if [ -x /usr/bin/jq ]; then + curl -s -f -m "${max_time:-3}" -I "$STATS_URL" | grep -iq "Content-Type: application/json" && echo "yes" && exit 0 || echo "no (invalid or empty response from stats endpoint ($STATS_URL))" && exit 0 + else + echo "no (jq not found)" && exit 0 + fi + else + echo "no (/usr/bin/curl not found)" && exit 0 + fi + ;; + + config) + echo "multigraph signaling_mcu" + echo "graph_title Signaling (Multipoint Conferencing Unit)" + echo "graph_info Statistics from MCU of signaling server" + echo "graph_vlabel mcu statistics" + echo "graph_args --base 1000 -l 0" + echo "mcu_publishers.label publishers" + echo "mcu_publishers.info current number of publishers" + echo "mcu_publishers.min 0" + echo "mcu_clients.label clients" + echo "mcu_clients.info current number of clients" + echo "mcu_clients.min 0" + echo "multigraph signaling_stats" + echo "graph_title Signaling (rooms and sessions)" + echo "graph_info Room and session statistics of signaling server" + echo "graph_vlabel rooms and sessions" + echo "graph_args --base 1000 -l 0" + echo "signaling_rooms.label current rooms" + echo "signaling_rooms.info current number of rooms" + echo "signaling_rooms.min 0" + echo "signaling_rooms.draw AREASTACK" + echo "signaling_sessions.label current sessions" + echo "signaling_sessions.info current number of sessions" + echo "signaling_sessions.min 0" + echo "signaling_sessions.draw AREASTACK" + exit 0 + ;; + +esac + +JSONSTATS=$(curl -s -f -m "$max_time" "$STATS_URL") + +echo "multigraph signaling_mcu" +for KEY in publishers clients; do + VALUE=$(echo "$JSONSTATS" | jq -r ".mcu.$KEY // \"U\"") + echo "mcu_${KEY}.value $VALUE" +done + +echo "multigraph signaling_stats" +for KEY in rooms sessions; do + VALUE=$(echo "$JSONSTATS" | jq -r ".$KEY // \"U\"") + echo "signaling_${KEY}.value $VALUE" +done