#!/usr/bin/python2
# -*- coding: utf-8 -*-
# import MySQL module
import MySQLdb
import sys
import getopt
import socket
import os
global ignorehostlist
try:
import ignoreclient
ignorehostlist=ignoreclient.ignorehosts
except:
print "could not find the ignore list"
ignorehostlist="'ignoreme'"
def createdropdown(currenthostype):
dir = "/data/storage/disk0/backup/system_backups"
dropdown=" "
dropdown='''
Restore database >
Backup database
'
dropdown+='Optimize database
'
if currenthostype == "Master_backend":
dropdown+='Shutdown All Systems (expect MBE)
'
#dropdown+='''Update All Systems >
#
#
#'''
dropdown+=''' '''
return dropdown
def main(argv):
db = MySQLdb.connect(host="localhost", user="mythtv", passwd="mythtv", db="mythconverg")
# create a cursor
cursor = db.cursor()
#------------------------------write client-config------------------------------------------------
SQL="SELECT DISTINCT(hostname) from settings where hostname not in(%s)"
cursor.execute(SQL %ignorehostlist)
result = cursor.fetchall()
frontonly="_FRONTEND_"
masterbackend="_MASTERBACKEND_"
masterbacked_w_fe="_MASTERFE_"
slave_w_fe="_SLAVEFE_"
slave="_SLAVEBACKEND_"
stand_alone="_STANDALONE_"
dotMBE=""
dotfrontend=list()
dotslave=list()
dotslavefe=list()
tunerdict = {}
for row in result:
#print row[0]
#Find the system type
cursor.execute("select value,data from settings where hostname=%s and value in ('HostSystemType','HostRunFrontend');",(row))
hostvalues=cursor.fetchall()
if len(hostvalues) == 2:
if hostvalues[1][1] == 'Frontend_only':
frontonly+=","+row[0]
dotfrontend.append(row[0])
elif hostvalues[1][1] == 'Standalone':
stand_alone+=","+row[0]
dotMBE="MBE" + " [ label=\"" + row[0] + " \\n Standalone \" shapefile=\"/data/srv/httpd/htdocs/xymon/gifs/be.png\" fontcolor=\"white\" color=blue4 style=filled ] "
dotfrontend.append(row[0])
cursor.execute("select cardtype,defaultinput from capturecard where hostname=%s;",(row))
tuners=cursor.fetchall()
tstring=""
if len(tuners) == 0:
tunerdict["MBE"]="no tuners \\n"
else:
for t in tuners:
tstring+=t[0]
tstring+=t[1]
tstring+='\\n'
tunerdict["MBE"]=tstring
elif hostvalues[1][1] == 'Master_backend':
if hostvalues[0][1]=='0':
masterbackend+=","+row[0]
dotMBE="MBE" + " [ label=\"" + row[0] + " \\n Master Backend \" shapefile=\"/data/srv/httpd/htdocs/xymon/gifs/be.png\" fontcolor=\"white\" color=blue4 style=filled ] "
else:
masterbacked_w_fe+=","+row[0]
dotMBE="MBE" + " [ label=\"" + row[0] + " \\n Master Backend with frontend \" shapefile=\"/data/srv/httpd/htdocs/xymon/gifs/be.png\" fontcolor=\"white\" color=blue4 style=filled ] "
dotfrontend.append(row[0])
cursor.execute("select cardtype,defaultinput from capturecard where hostname=%s;",(row))
tuners=cursor.fetchall()
tstring=""
if len(tuners) <= 0:
tunerdict["MBE"]="no tuners \\n"
else:
#print tuners
for t in tuners:
tstring+=t[0]
tstring+=t[1]
tstring+='\\n'
tunerdict["MBE"]=tstring
elif hostvalues[1][1] == 'Slave_backend':
cursor.execute("select cardtype,defaultinput from capturecard where hostname=%s;",(row))
tuners=cursor.fetchall()
#slave withoutfe
if hostvalues[0][1]=='0':
slave+=","+row[0]
dotslave.append(row[0])
tstring=""
if len(tuners) <= 0:
tunerdict["STUNER"+row[0]]="No Tuners"
else:
for t in tuners:
tstring+=t[0]
tstring+=t[1]
tstring+='\\n'
tunerdict["STUNER"+row[0]]=tstring
else:
#slave with fe
tstring=""
if len(tuners) <= 0:
tunerdict["STUNER"+row[0]]="No Tuners"
else:
for t in tuners:
tstring+=t[0]
tstring+=t[1]
tstring+='\\n'
tunerdict["STUNER"+row[0]]=tstring
slave_w_fe+=","+row[0]
dotslave.append(row[0])
dotfrontend.append(row[0])
#----------------------------------Create graphviz dot files
dotfilename="/home/xymon/server/etc/mythdot"
dotfile=open(dotfilename,'w')
dotfile.write("digraph G { " + "\n" )
dotfile.write("graph [bgcolor=transparent]" + "\n" )
#print tunerdict
#define the nodes
dotfile.write( dotMBE + " \n" )
dotfile.write("tunermbe"+ " [ label= \"" + tunerdict["MBE"] + "\" , shapefile=\"/data/srv/httpd/htdocs/xymon/gifs/tuner.png\" fontcolor=\"white\" color=red ] \n" )
for fe in dotfrontend:
dotfile.write("FEND"+fe + "[ label=\"frontend \\n " + fe + "\" ,shapefile=\"/data/srv/httpd/htdocs/xymon/gifs/tv.png\" , fontcolor=\"white\" , imagescale=\"true\" color=\"gold2\" ] \n" )
for fe in dotslave:
cslave="STUNER"+fe
#adding tuners to dot file
if tunerdict[cslave] != "" :
dotfile.write(cslave+ " [ label= \"" + tunerdict[cslave] + "\" , shapefile=\"/data/srv/httpd/htdocs/xymon/gifs/tuner.png\" fontcolor=\"white\" color=red ] \n" )
#adding slave to dot file
dotfile.write("SLAVE"+fe + "[ label=\"slave backend \\n " + fe + "\" shapefile=\"/data/srv/httpd/htdocs/xymon/gifs/be.png\" fontcolor=\"white\" color=green ] \n" )
#connect up the nodes!
dotfile.write("tunermbe -> MBE [color=\"red\"] \n " )
for fe in dotfrontend:
dotfile.write("MBE -> FEND" + fe + "[color=\"gold2\"] \n " )
for fe in dotslave:
cslave="STUNER"+fe
dotfile.write("SLAVE" + fe + "-> MBE [color=\"green\"] \n " )
if tunerdict[cslave] != "" :
dotfile.write(cslave + "-> SLAVE"+fe + "[color=\"red\"]" "\n" )
dotfile.write("} " + "\n" )
dotfile.close()
cmd="/usr/bin/unflatten -l1 -c3 -f " + dotfilename + " |/usr/bin/dot -Tpng -o/data/srv/httpd/htdocs/xymon/gifs/network.png "
# cmd="/usr/bin/circo -Tpng -o/data/srv/httpd/htdocs/xymon/gifs/network.png " + dotfilename
results=os.popen(cmd,'r')
#--------------------------------------------------
#hobbitfile="/home/xymon/server/etc/hobbit-clients.cfg"
###WHY WAS THIS HERE??
#hobbitfile="/home/xymon/server/etc/tasks.cfg"
#hobbitf=open(hobbitfile,'r')
#hobbitconfig=hobbitf.readlines()
#hobbitf.close()
#hobbitf=open(hobbitfile,'w')
#print "FE",frontonly
#print "MBE",masterbackend
#print "MBEwFW",masterbacked_w_fe
#print "SLAVEwFW",slave_w_fe
#print "SLAVE",slave
#print "STD",stand_alone
#for line in hobbitconfig:
#if line.startswith("HOST"):
#cline=line.split("=")
#if cline[1].startswith("_FRONTEND_"):
#pline="HOST="
#pline+=frontonly.strip()
#hobbitf.write(pline + "\n")
#elif cline[1].startswith("_MASTERBACKEND_"):
#pline="HOST="
#pline+=masterbackend.strip()
##print pline
#hobbitf.write(pline+ "\n")
#elif cline[1].startswith("_MASTERFRONTEND_"):
#pline="HOST="
#pline+=masterbacked_w_fe.strip()
##print pline
#hobbitf.write(pline+ "\n")
#elif cline[1].startswith("_SLAVEBACKEND_"):
#pline="HOST="
#pline+=slave.strip()
##print pline
#hobbitf.write(pline+ "\n")
#elif cline[1].startswith("_SLAVEFE_"):
#pline="HOST="
#pline+=slave_w_fe.strip()
##print pline
#hobbitf.write(pline+ "\n")
#else:
##print line
#hobbitf.write(line)
#else:
##print line
#hobbitf.write(line)
#-----------------------------------------------------------END CLIENT CONFIG
# execute SQL statement
cursor.execute("SELECT DISTINCT(hostname) from settings")
result = cursor.fetchall()
for row in result:
cursor.execute("select value,data from settings where hostname=%s and value in ('HostSystemType','HostHwuuid');",(row))
hostvalues=cursor.fetchall()
found_uuid="false"
filename="/home/xymon/server/www/notes/"
filename+=str(row[0])
filename+=(".html")
file = open(filename,'w')
string='''