1#!/bin/sh
2
3set -e
4
5: << =cut
6
7=head1 NAME
8
9coturn_sessions - Simple plugin to monitor sessions on coturn server
10
11=head1 CONFIGURATION
12
13This plugin requires a password set in /etc/turnserver.conf for telnet
14cli access. A telnet client has to be installed. Optionally you can
15specify the port of the cli interface.
16
17 [coturn_sessions]
18 env.password VERYSECUREPASSWORD
19 env.port PORT
20
21=head1 AUTHOR
22
23Copyright (C) 2020 Sebastian L. (https://momou.ch)
24
25=head1 LICENSE
26
27GPLv2
28
29=head1 MAGIC MARKERS
30
31 #%# family=manual
32 #%# capabilities=autoconf
33
34=cut
35
36. "$MUNIN_LIBDIR/plugins/plugin.sh"
37
38cliport=${port:-5766}
39clipassword=${password:-}
40
41get_coturn_stats() {
42	echo "open 127.0.0.1 $cliport"
43	sleep 1
44	echo "$clipassword"
45	sleep 1
46	for i in udp tcp dtls tls
47	do
48		echo "pu $i"
49		sleep 1
50	done
51}
52
53pick_line() {
54    local result
55    result=$(echo "$1" | sed -n "$2"p )
56    echo "${result:-"U"}"
57}
58
59
60case $1 in
61    autoconf)
62        if [ -x /usr/bin/turnserver ]; then
63            if [ -z "$(command -v telnet)" ]; then
64                echo "no (telnet not found)"
65                exit 0
66            else
67                echo "yes"
68                exit 0
69            fi
70        else
71            echo "no (/usr/bin/turnserver not found)"
72            exit 0
73        fi
74        ;;
75   config)
76
77		echo "graph_title Sessions on coturn server"
78		echo "graph_vlabel turn sessions by protocols"
79		echo "graph_info This graph shows active sessions sorted by different protocols on the coturn server."
80		echo "graph_args --base 1000 --lower-limit 0"
81		echo "udp_sessions.label udp sessions"
82		echo "udp_sessions.draw AREASTACK"
83		echo "udp_sessions.info Current number of udp sessions"
84		echo "udp_sessions.min 0"
85		echo "tcp_sessions.label tcp sessions"
86		echo "tcp_sessions.draw AREASTACK"
87		echo "tcp_sessions.info Current number of tcp sessions"
88		echo "tcp_sessions.min 0"
89		echo "dtls_sessions.label dtls sessions"
90		echo "dtls_sessions.draw AREASTACK"
91		echo "dtls_sessions.info Current number of dtls sessions"
92		echo "dtls_sessions.min 0"
93		echo "tls_sessions.label tls sessions"
94		echo "tls_sessions.draw AREASTACK"
95		echo "tls_sessions.info Current number of tls sessions"
96		echo "tls_sessions.min 0"
97
98        exit 0
99        ;;
100
101esac
102
103SESSIONS=$(get_coturn_stats | telnet 2> /dev/null | grep "Total sessions: " | sed 's/  Total sessions: //')
104
105echo "udp_sessions.value $(pick_line "$SESSIONS" 1)"
106echo "tcp_sessions.value $(pick_line "$SESSIONS" 2)"
107echo "dtls_sessions.value $(pick_line "$SESSIONS" 3)"
108echo "tls_sessions.value $(pick_line "$SESSIONS" 4)"
109
110