diff options
Diffstat (limited to 'linhes/linhes-web/website/contents/fe_status.py')
-rw-r--r-- | linhes/linhes-web/website/contents/fe_status.py | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/linhes/linhes-web/website/contents/fe_status.py b/linhes/linhes-web/website/contents/fe_status.py new file mode 100644 index 0000000..0b400e0 --- /dev/null +++ b/linhes/linhes-web/website/contents/fe_status.py @@ -0,0 +1,144 @@ +#!/usr/bin/python + +import urllib2 +import xml.etree.ElementTree as ET +import socket +from MythTV import Frontend +import sys +#socket.setdefaulttimeout(1) +#socket.setdefaulttimeout(.00001) + +def msg(msg): + #if cmdargs.silent is False: + print "%s" %msg + + +def parse_xml(frontend): + temp_dict = {'state':" --- ", + 'title':" --- ", + 'subtitle':" --- ", + 'location':" --- "} + url = "http://%s:6547/Frontend/GetStatus" %frontend + try: + request = urllib2.Request(url) + xml = urllib2.urlopen(request,timeout=1) + tree = ET.parse(xml) + root = tree.getroot() + except: + #msg(" Couldn't connect to %s" %frontend) + temp_dict['state'] = "offline" + return temp_dict + + lst = root.find("State") + for item in lst: + try: + keyitem = (item.find('Key').text).strip() + valueitem = (item.find('Value').text).strip() + except: + continue + if keyitem == "state": + temp_dict['state'] = valueitem + + elif keyitem == "title": + temp_dict['title'] = valueitem + + elif keyitem == "subtitle": + temp_dict['subtitle'] = valueitem + + elif keyitem == "currentlocation": + temp_dict['location'] = valueitem + + return temp_dict + + +def mythfe_status(cursor,mythDB): + status_dict={} + try: + #frontends = mythDB.getFrontends() #use cursor instead so it doesn't test connection + cursor.execute("select distinct hostname from settings where hostname is not null;") + frontends=cursor.fetchall() + except: + #msg("Exceptions") + return + + for i in frontends: + i=''.join(i) + try: + fe_hostname = socket.gethostbyaddr(i)[0] + except: + #print "DNS lookup failed for %s" %i + fe_hostname = i + try: + ip_addr = socket.gethostbyname(i) + fe_hostname = "%s (%s)" %(fe_hostname,ip_addr) + status_dict[fe_hostname] = parse_xml(ip_addr) + except: + fe_hostname = "%s" %fe_hostname + status_dict[fe_hostname] = parse_xml(fe_hostname) + return status_dict + + +def print_html(status_dict): + print '<div> <p></p>' + print '</br> </br> ' + print '<table class="calllog">' + + #print "Current state of all online frontends" + #print '</br> </br> ' + + #print status_dict + row = ''' +<tr> + <td> %s </td> + <td> %s </td> + <td> %s </td> + <td> %s </td> + <td> %s </td> +</tr> +''' + print row %(" MythFrontend Host "," State "," Title "," Subtitle "," MythFrontend Location ") + for fe in status_dict.keys(): + temp_dict = status_dict[fe] + print row %(fe, + temp_dict['state'], + temp_dict['title'], + temp_dict['subtitle'], + temp_dict['location']) + + print "</table>" + print '</div>' + +# print ''' +# <div id="footer"> +# </br> +# <p>Offline systems are not listed</p> +# </div> +#''' + + +def main(): + try: + from MythTV import MythDB + mythDB = MythDB() + cursor = mythDB.cursor() + db_conn=True + except: + msg("Couldn't connect to MythTV database.") + db_conn=False + + try: + from MythTV import MythBE + mythBE = MythBE() + be_conn=True + except: + msg("Couldn't connect to MythTV backend.") + be_conn=False + + if (db_conn): + status_dict = mythfe_status(cursor,mythDB) + print_html(status_dict) + + + +if __name__ == "__main__": + main() |