summaryrefslogtreecommitdiffstats
path: root/abs/core/xymon/hbnotes.py
diff options
context:
space:
mode:
authorJames Meyer <james.meyer@operamail.com>2011-12-07 19:45:02 (GMT)
committerJames Meyer <james.meyer@operamail.com>2011-12-07 19:45:02 (GMT)
commit582455878ef98dfadc0618309686c85b135f7a23 (patch)
treea87b677b96c168524576cf32870487758d0b43ba /abs/core/xymon/hbnotes.py
parent65b2738ba8a6b80a17c5a2953a29be935b15d18c (diff)
downloadlinhes_pkgbuild-582455878ef98dfadc0618309686c85b135f7a23.zip
linhes_pkgbuild-582455878ef98dfadc0618309686c85b135f7a23.tar.gz
linhes_pkgbuild-582455878ef98dfadc0618309686c85b135f7a23.tar.bz2
xymon: first build, includes both server and client builds.
xymon is a system used to monitor various things about each host. Possible to replace rrdtool and monitorx
Diffstat (limited to 'abs/core/xymon/hbnotes.py')
-rw-r--r--abs/core/xymon/hbnotes.py352
1 files changed, 352 insertions, 0 deletions
diff --git a/abs/core/xymon/hbnotes.py b/abs/core/xymon/hbnotes.py
new file mode 100644
index 0000000..e08992c
--- /dev/null
+++ b/abs/core/xymon/hbnotes.py
@@ -0,0 +1,352 @@
+#!/usr/bin/python
+# -*- 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():
+ dir = "/data/database_backup"
+ dropdown=" "
+ #dropdown='''
+ #<input name="param2" type="radio" value="Restore" />Restore database </>
+ #<select name="param1">
+ #'''
+ #if os.path.exists(dir):
+ #files = os.listdir(dir)
+ #for file in os.listdir(dir):
+ #if (file.endswith(".tgz")):
+ #dropdown+='<option value="' + file + '">' + file + '</option> '
+ dropdown+='</select> <br><input name="param2" type="radio" value="Backup" checked="checked" />Backup database<br /> '
+ dropdown+='<input name="param2" type="radio" value="Optimize" />Optimize database<br /> '
+ dropdown+='<input name="param2" type="radio" value="ShutdownAll" />Shutdown All Systems (expect MBE)<br /> '
+ #dropdown+='''<input name="param2" type="radio" value="UpdateAll" />Update All Systems </> <select name="param5">
+ #<option value="Myth_only">Myth only</option>
+ #<option value="All"> Full System</option>
+ #</select>
+ #</br>
+ #</br>
+ #</br>'''
+
+ dropdown+=''' </br></br>'''
+ 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 = {}
+ currenthostype=''
+ 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':
+ print "found MBE"
+ print hostvalues
+ if hostvalues[0][1]=='0':
+ masterbackend+=","+row[0]
+ #dotMBE=row[0] + "\\n Master Backend"
+ #This is wrong, but it's enough to get it working
+ dotMBE=''
+ 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 ] "
+ 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
+ dotfrontend.append(row[0])
+
+ elif hostvalues[1][1] == 'Slave_backend':
+ if hostvalues[0][1]=='0':
+ slave+=","+row[0]
+ dotslave.append(row[0])
+ cursor.execute("select cardtype,defaultinput from capturecard where hostname=%s;",(row))
+ tuners=cursor.fetchall()
+ tstring=""
+ for t in tuners:
+ tstring+=t[0]
+ tstring+=t[1]
+ tstring+='\\n'
+ tunerdict["STUNER"+row[0]]=tstring
+ #dotfrontend.append(row[0])
+ else:
+ cursor.execute("select cardtype,defaultinput from capturecard where hostname=%s;",(row))
+ tuners=cursor.fetchall()
+ tstring=""
+ for t in tuners:
+ tstring+=t[0]
+ tstring+=t[1]
+ tstring+='\\n'
+ tunerdict["STUNER"+row[0]]=tstring
+ print tstring
+
+ slave_w_fe+=","+row[0]
+ dotslave.append(row[0])
+ dotfrontend.append(row[0])
+
+#----------------------------------Create graphviz dot files
+ dotfilename="/data/srv/xymon/server/etc/mythdot"
+
+ dotfile=open(dotfilename,'w')
+ dotfile.write("digraph G { " + "\n" )
+ dotfile.write("graph [bgcolor=transparent]" + "\n" )
+
+
+#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
+ if tunerdict[cslave] != "" :
+ dotfile.write(cslave+ " [ label= \"" + tunerdict[cslave] + "\" , shape=box ] \n" )
+ 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 + "\n" )
+
+
+
+ dotfile.write("} " + "\n" )
+ dotfile.close()
+
+
+ cmd="/usr/bin/unflatten -l6 -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="/data/srv/xymon/server/etc/hobbit-clients.cfg"
+ hobbitfile="/data/srv/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="/data/srv/xymon/server/www/notes/"
+ filename+=str(row[0])
+ filename+=(".html")
+
+ file = open(filename,'w')
+ string='''
+ <html>
+ <head>
+ <style type="text/css">@import "/frame.css";</style>
+ </head>
+ '''
+ file.write(string)
+
+
+ for i in range( 0 , len(hostvalues)):
+ value=hostvalues[i][0]
+ data=hostvalues[i][1]
+ currenthostype=''
+ currenthostname=''
+ if value == "HostHwuuid" :
+ if data != "blank" :
+ found_uuid="true"
+ uuid=data
+ if value == "HostSystemType" :
+
+ currenthostname= str(row[0]).strip()
+ currenthostype=str(data).strip()
+ header="<h1>" + currenthostname + " (" + currenthostype + ") </h1>"
+ file.write(header + '\n')
+
+
+ if found_uuid == "true" :
+ string=str("http://smolt.mythvantage.com/client/show?uuid=")
+ string+=str(uuid)
+ file.write("<A href=\"" )
+ file.write(string)
+ file.write("\" >" + str(uuid) + "</A>")
+ else:
+ file.write( "uuid not found, please submit a hardware profile" )
+
+
+
+ buttonform_top='''
+ <div class="content" style="solid #aaa; width:500px; height:350px; overflow:auto; color:#FFF;text-align:left;">
+ <form action="/process.py" method="get">
+ '''
+
+
+ buttonform_bottom='''
+ <input name="param2" type="radio" value="Update" />Update System </>
+ <select name="param3">
+ <option value="Myth_only">Myth only</option>
+ <option value="All"> Full System</option>
+ </select>
+ </br>
+ <input name="param2" type="radio" value="Kill" />Restart interface: </>
+ <select name="param6">
+ <option value="killX">Full UI</option>
+ <option value="killmyth">MythFrontend</option>
+ </select>
+ </br>
+ <input name="param2" type="radio" value="Shutdown" />Shutdown System<br />
+ <input name="param2" type="radio" value="Reboot" />Reboot System<br />
+ <input name="param2" type="radio" value="WOL" />Wake on Lan<br />
+ <input name="hiddenparam" type="hidden" value="
+ '''
+ oldurlform='''
+ "/>
+ <input name="param4" type="hidden" value="
+ '''
+
+
+ closetag='''
+ "/>
+ </br>
+ <input id="submitbutton" type="submit" />
+ </form>
+ </div>
+ '''
+
+ if currenthostype == "Master_backend":
+ mbeoptions=createdropdown()
+ else:
+ mbeoptions=''
+ returnurl="/xymon/notes/"
+ returnurl+=str(row[0])
+ returnurl+=(".html")
+ file.write('</br> </br> ')
+ file.write(buttonform_top)
+ file.write(mbeoptions)
+ file.write(buttonform_bottom)
+ file.write(str(row[0]))
+ file.write(oldurlform)
+ file.write(returnurl)
+ file.write(closetag)
+
+ string=(' </html>')
+ file.write(string)
+
+if __name__ == "__main__":
+ main(sys.argv[1:])