streammonitor constantly monitors a Shoutcast/Icecast stream (only MP3 supported right now), and offers a simple HTTP API which returns basic information about the stream, how long it has been online/offline, and the current duration of silence (signal below a certain threshold).
streammonitor is designed to run as a Docker container.
To build the container, download/clone this repository, and run:
docker build -t mairlist/streammonitor .
Then run the container, binding the HTTP port (8000), and passing the stream URL and silence threshold (in dBFS) as environment variables:
docker run -p 8000:8000 -e STREAM_URL=http://sender.eldoradio.de:8000/192 \
-e SILENCE_THRESHOLD=-20 -e CHECK_INTERVAL=1000 \
mairlist/streammonitor
STREAM_URL
is a required parameter. SILENCE_THRESHOLD
can be ommited, in which case
-20 dBFS is assumed. CHECK_INTERVAL
is also optional and defaults to 1000 ms.
The stream URL must be the actual URL for the stream (where the MP3 data is delivered), not the URL of a pls/m3u file.
When streammonitor is running, you can access the HTTP interface on the port you have
configured, e.g. at http://localhost:8000
.
Under the root URL, streammonitor returns a JSON object with all data about the current stream:
{
"url": "http://sender.eldoradio.de:8000/192",
"silenceThreshold": -20,
"status": "OK",
"now": "2015-06-23T12:53:22.091Z",
"onlinceSince": "2015-06-23T12:53:05.629Z",
"onlineDuration": 16,
"offlinceSince": null,
"offlineDuration": 0,
"silenceSince": "2015-06-23T12:53:21.903Z",
"silenceDuration": 0
}
Meaning of the individual fields:
url
andsilenceThreshold
are what you specified when you started streammonitor.status
is eitherOK
(stream is connected) orERROR
(stream is offline)now
is the date/time this page was generated, for referenceonlineSince
is the date/time streammonitor (re-)connected to the stream, ornull
if the stream is offlineonlineDuration
is the number of seconds betweenonlineSince
andnow
, or 0 if the stream is offlineofflineSince
is the date/time streammonitor lost connection to the, ornull
if the stream is onlineofflineDuration
is the number of seconds betweenofflineSince
andnow
, or 0 if the stream is onlinesilenceSince
is the date/time streammonitor received a sample louder than the specified silence thresholdsilenceDuration
is the number of seconds betweensilenceSince
andnow
You can also make an HTTP GET call to http://localhost:8000/value/<key>
(where <key>
is one of the field names above) to retrieve only a single field, as a plain text string (no JSON).
streammonitor is released under the GNU AGPL v3.0.
Commercial licenses are available on request.
- Nagios plugin