Monitoring With Munin
From MythTV Official Wiki
Munin is a frontend for the popular RRDTool, Munin can produce graphing based on the output of simple shell scripts. The following script can be used with Munin to create a graph of tuner statuses.
Tuner usage statisics
The state values in the script come from https://github.com/MythTV/mythtv/blob/fixes/0.25/mythtv/libs/libmythtv/tv.h#L54. I think you should only ever see -1, 0, 1, and 7 as Encoder states. These values may change in future versions.
#!/usr/bin/env python
""" Place this script in /etc/munin/plugins/
then restart the munin-node service.
Copyright 2012 Tom Hayward <tom@tomh.us>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
import httplib
from lxml import etree
import sys
if "config" in sys.argv:
print """graph_title MythTV Tuners
graph_vlabel Number of Tuners
graph_args --base 1000 -l 0
graph_category mythtv
recording.label Recording
recording.type GAUGE
recording.draw AREASTACK
recording.min 0
available.label Available
available.type GAUGE
available.draw AREASTACK
available.min 0
available.warning 0:
live.label Live TV
live.type GAUGE
live.draw AREASTACK
live.min 0
error.label Error
error.type GAUGE
error.draw AREASTACK
error.min 0
error.critical 0:0"""
sys.exit(0)
conn = httplib.HTTPConnection("localhost:6544")
conn.request("GET", "/Status/GetStatus")
r1 = conn.getresponse()
results = r1.read()
recording = 0
available = 0
live = 0
error = 0
root = etree.fromstring(results)
for encoder in root.find("Encoders").findall("Encoder"):
state = int(encoder.attrib['state'])
if state == -1:
error += 1
elif state == 0:
available += 1
elif state == 1:
live += 1
elif state == 7:
recording += 1
else:
error += 1
print "recording.value", recording
print "available.value", available
print "live.value", live
print "error.value", error
