1#!/bin/sh
2#
3# Plugin to monitor icecast2 streams / listeners
4#
5# Contributed by drew Roberts
6#
7# based on the postfix_mailqueue plugin as per below
8#
9# Plugin to monitor postfix mail spools
10#
11# Contributed by Nicolai Langfeldt
12#
13# $Log$
14# Revision 1.0  2008/07/04 16:02:36  zotz
15# Initial work
16
17#
18#
19#%# family=auto
20#%# capabilities=autoconf
21
22# Can be set via environment, but default is /var/spool/postfix
23ICEDIR=${icedir:-/var/www/rrd/logs/stream_stats/}
24
25case $1 in
26    autoconf|detect)
27	if [ -d $ICEDIR/ ] ; then
28	    echo yes
29        else
30	    echo "no (icedir not found)"
31        fi
32        exit 0
33        ;;
34    config)
35	cat <<'EOF'
36graph_title Icecast2 Stream Listeners
37graph_args --base 1000 -l 0
38graph_vlabel Listeners for Streams
39graph_category streaming
40cool_ogg.label cool_ogg
41cool_ogg.draw AREA
42cool_ogg.type GAUGE
43cool_mp3.label cool_mp3
44cool_mp3.draw STACK
45cool_mp3.type GAGUE
46jamz_ogg.label jamz_ogg
47jamz_ogg.draw STACK
48jamz_ogg.type GAGUE
49jamz_mp3.label jamz_mp3
50jamz_mp3.draw STACK
51jamz_mp3.type GAGUE
52joy_ogg.label joy_ogg
53joy_ogg.draw STACK
54joy_ogg.type GAGUE
55joy_mp3.label joy_mp3
56joy_mp3.draw STACK
57joy_mp3.type GAGUE
58y_ogg.label y_ogg
59y_ogg.draw STACK
60y_ogg.type GAGUE
61y_mp3.label y_mp3
62y_mp3.draw STACK
63y_mp3.type GAGUE
64EOF
65	exit 0;;
66esac
67
68cd $ICEDIR >/dev/null 2>/dev/null || {
69     echo "# Cannot cd to $ICEDIR"
70     exit 1
71}
72
73/usr/bin/curl -s localhost:7144/status2.xsl > /tmp/ice.txt
74/usr/bin/tail -n 1 /tmp/ice.txt > /tmp/ice1.txt
75
76awk 'BEGIN {FS=","} {tot = 0 ; i = (NF-1)/6 ; j=1 ; while (j <= i) {tot = (tot + $(((j-1)*6)+4)) ; print $(((j-1)*6)+1), ":", $(((j-1)*6)+4) > "/tmp/ice2.txt" ; j++}; print "total :", tot >> "/tmp/ice2.txt"} ' /tmp/ice1.txt
77
78# Cool ogg stream
79grep cool.ogg /tmp/ice2.txt > /dev/null 2>&1
80if [ "$?" -ne "0" ]; then
81  coologg="0"
82else
83  coologg=`grep cool.ogg /tmp/ice2.txt | cut -d ":" -f 2 - `
84  coologg=$(($coologg+0))
85fi
86#echo $coologg
87
88# Cool mp3 stream
89grep coolmp3 /tmp/ice2.txt > /dev/null 2>&1
90if [ "$?" -ne "0" ]; then
91  coolmp3="0"
92else
93  coolmp3=`grep coolmp3 /tmp/ice2.txt | cut -d ":" -f 2 - `
94  coolmp3=$(($coolmp3+0))
95fi
96#echo $coolmp3
97
98# Jamz ogg stream
99grep jamz.ogg /tmp/ice2.txt > /dev/null 2>&1
100if [ "$?" -ne "0" ]; then
101  jamzogg="0"
102else
103  jamzogg=`grep jamz.ogg /tmp/ice2.txt | cut -d ":" -f 2 - `
104  jamzogg=$(($jamzogg+0))
105fi
106#echo $jamzogg
107
108# Jamz mp3 stream
109grep jamzmp3 /tmp/ice2.txt > /dev/null 2>&1
110if [ "$?" -ne "0" ]; then
111  jamzmp3="0"
112else
113  jamzmp3=`grep jamzmp3 /tmp/ice2.txt | cut -d ":" -f 2 - `
114  jamzmp3=$(($jamzmp3+0))
115fi
116#echo $jamzmp3
117
118# Joy ogg stream
119grep joy.ogg /tmp/ice2.txt > /dev/null 2>&1
120if [ "$?" -ne "0" ]; then
121  joyogg="0"
122else
123  joyogg=`grep joy.ogg /tmp/ice2.txt | cut -d ":" -f 2 - `
124  joyogg=$(($joyogg+0))
125fi
126#echo $joyogg
127
128# Joy mp3 stream
129grep joymp3 /tmp/ice2.txt > /dev/null 2>&1
130if [ "$?" -ne "0" ]; then
131  joymp3="0"
132else
133  joymp3=`grep joymp3 /tmp/ice2.txt | cut -d ":" -f 2 - `
134  joymp3=$(($joymp3+0))
135fi
136#echo $joymp3
137
138# Y ogg stream
139grep "/y.ogg" /tmp/ice2.txt > /dev/null 2>&1
140if [ "$?" -ne "0" ]; then
141  yogg="0"
142else
143  yogg=`grep "/y.ogg" /tmp/ice2.txt | cut -d ":" -f 2 - `
144  yogg=$(($yogg+0))
145fi
146#echo $yogg
147
148# Y mp3 stream
149grep "/ymp3" /tmp/ice2.txt > /dev/null 2>&1
150if [ "$?" -ne "0" ]; then
151  ymp3="0"
152else
153  ymp3=`grep "/ymp3" /tmp/ice2.txt | cut -d ":" -f 2 - `
154  ymp3=$(($ymp3+0))
155fi
156#echo $ymp3
157
158# total streams
159grep total /tmp/ice2.txt > /dev/null 2>&1
160if [ "$?" -ne "0" ]; then
161  totals="0"
162else
163  totals=`grep total /tmp/ice2.txt | cut -d ":" -f 2 - `
164  totals=$(($totals+0))
165fi
166#echo $totals
167
168# output=`echo $coologg:$coolmp3:$jamzogg:$jamzmp3:$joyogg:$joymp3:$yogg:$ymp3:$totals`
169
170
171cat <<EOF
172cool_ogg.value $coologg
173cool_mp3.value $coolmp3
174jamz_ogg.value $jamzogg
175jamz_mp3.value $jamzmp3
176joy_ogg.value $joyogg
177joy_mp3.value $joymp3
178y_ogg.value $yogg
179y_mp3.value $ymp3
180EOF
181
182