diff options
Diffstat (limited to 'abs/core/xymon/hbfunc.py')
-rw-r--r-- | abs/core/xymon/hbfunc.py | 217 |
1 files changed, 217 insertions, 0 deletions
diff --git a/abs/core/xymon/hbfunc.py b/abs/core/xymon/hbfunc.py new file mode 100644 index 0000000..edd2461 --- /dev/null +++ b/abs/core/xymon/hbfunc.py @@ -0,0 +1,217 @@ +#!/usr/bin/python +#checks that the MBE can connect to the minions + +# =============================================== +import sys +import os +import string +import time +import func.overlord.client as fc +BBLINE = '' +BBCOLOR="green" +DATE = time.strftime("%a %b %d %H:%M:%S %Z %Y", time.localtime(time.time())) +BB="/data/srv/xymon/server/bin/xymon" +BBDISP="127.0.01" + + +#if os.environ['BB']: +# #print os.environ['BB'] +# BB=os.environ['BB'] + +#if os.environ['BBDISP']: +# #print os.environ['BBDISP'] +# BBDISP=os.environ['BBDISP'] + +#if os.environ['MACHINE']: +# #print os.environ['MACHINE'] +# MACHINE=os.environ['MACHINE'] + + +def readbb(): + global hostlist + global mythtype + + try: + infile = open('/data/srv/xymon/etc/hosts.cfg', 'r') + except(IOError), e: + #print "couldn't open xymon hosts file" + sys.exit(1) + else: + bbhostlist = infile.readlines() + infile.close() + for line in bbhostlist: + cline=line.strip() + #if not cline.startswith("#") and cline != '' and cline.find("bbd") == -1 and cline.find("func") != -1 : + if not cline.startswith("#") and cline != '' and cline.find("func") != -1 : + host=cline.split("#") + host=host[0].split() + hostlist.append(host[1].strip()) + #print hostlist + infile.close() + try: + infile = open('/etc/mythtv-releasetype') + mythtype= infile.readline() + infile.close() + except(IOError), e: + #print "couldn't open mythfile " + mythtype='' + +def find_local_myth_version(): + global mythtype + local_pkg_name="not_found" + pkgname="mythtv" + pkgname+=mythtype + cmd="/usr/bin/pacman -Q %s " %pkgname + result = os.popen2(cmd)[1].readlines() + for list in result: + l=list.strip() + if l.startswith('mythtv') : + local_pkg_name=l.strip() + break + return local_pkg_name + + +def mythversion_check(currentclient,local_myth_version): + global mythtype + pkgname="mythtv" + pkgname+=mythtype + remote_pkg_name="remote_pkg_not_found" + client = (fc.Client( currentclient )) + results=client.pacman.pkgversion(pkgname) + #print currentclient + #print local_myth_version + #print results[currentclient][1] + try: + for pkg in results[currentclient][1] : + p=pkg.strip() + if p.startswith('mythtv'): + remote_pkg_name=p + break + if (remote_pkg_name != local_myth_version): + BBLINE="Myth version MBE: %s does not match %s %s \n " %(local_myth_version,currentclient,remote_pkg_name) + LINE = "status " + currentclient + ".version yellow" + " " + DATE + " " + BBLINE + + if (remote_pkg_name == local_myth_version): + BBLINE="%s: success (green) Myth version match %s \n " %(currentclient,remote_pkg_name) + LINE = "status " + currentclient + ".version green" + " " + DATE + " " + BBLINE + except: + BBLINE="Something went wrong! \n " + LINE = "status " + currentclient + ".version red" + " " + DATE + " " + BBLINE + + cmd = BB + ' ' + BBDISP + ' "' + LINE + '"' + os.system(cmd) + return + +def send_myth_clear(currentclient): + BBLINE="could not connect to host to check version\n " + LINE = "status " + currentclient + ".version clear" + " " + DATE + " " + BBLINE + cmd = BB + ' ' + BBDISP + ' "' + LINE + '"' + os.system(cmd) + return +#------------------------- + +global hostlist +global mythtype +mythtype="" +hostlist = [] +readbb() +local_myth_version=find_local_myth_version() + +for currentclient in hostlist: + #print currentclient + cmd='/data/srv/xymon/server/bin/xymon 127.0.0.1 "query ' + cmd+=currentclient + cmd+='.conn"' + bbresults=os.popen(cmd,'r' ).readline().strip().split() + + try: + bbstate=bbresults[0] + except: + bbstate="clear" + + #print bbstate + if bbstate == 'green': + try: + client = (fc.Client( currentclient )) + except Exception as e: + #couldn't find minion in certmaster + #print "couldn't find minion in certmaster:%s" %currentclient + BBLINE="%s: %s (red) \n " %(currentclient,e) + LINE = "status " + currentclient + ".func red" + " " + DATE + " " + BBLINE + cmd = BB + ' ' + BBDISP + ' "' + LINE + '"' + cmd2= "echo " + currentclient + " >> /data/srv/httpd/htdocs/failed_func_hosts" + os.system(cmd2) + os.system(cmd) + BBCOLOR="red" + send_myth_clear(currentclient) + continue + + + results=client.test.add("1","2") + try: + #print currentclient + #print results[currentclient] + #print type(results[currentclient]) + #print "----------" + if type(results[currentclient]) == str: + if results[currentclient] == '12': + BBLINE="%s: success (green) \n " %currentclient + LINE = "status " + currentclient + ".func green" + " " + DATE + " " + BBLINE + cmd = BB + ' ' + BBDISP + ' "' + LINE + '"' + os.system(cmd) + #REMOVE HOST FROM FAILED_FUNC + #cmd='sed -i "/' + currentclient + '/d" /data/srv/httpd/htdocs/failed_func_hosts' + f = open("/data/srv/httpd/htdocs/failed_func_hosts") + failed_lines=f.readlines() + f.close + f = open("/data/srv/httpd/htdocs/failed_func_hosts",'w') + for line in failed_lines: + if line.strip() == currentclient: + continue + f.write(line) + f.close() + + + #os.system(cmd) + mythversion_check(currentclient,local_myth_version) + else: + BBLINE="%s: connected but wtf (yellow) \n " %currentclient + LINE = "status " + currentclient + ".func yellow" + " " + DATE + " " + BBLINE + cmd = BB + ' ' + BBDISP + ' "' + LINE + '"' + os.system(cmd) + if BBCOLOR != "red": + BBCOLOR="yellow" + else: + BBLINE="%s: %s (red) \n " %(currentclient,results[currentclient]) + LINE = "status " + currentclient + ".func red" + " " + DATE + " " + BBLINE + cmd = BB + ' ' + BBDISP + ' "' + LINE + '"' + cmd2= "echo " + currentclient + " >> /data/srv/httpd/htdocs/failed_func_hosts" + cmd3="sudo /usr/bin/certmaster-ca -c " + currentclient + os.system(cmd2) + os.system(cmd3) + os.system(cmd) + BBCOLOR="red" + except: + BBLINE="%s had an error : %s (red) \n " % (currentclient,str(results)) + LINE = "status " + currentclient + ".func red" + " " + DATE + " " + BBLINE + cmd = BB + ' ' + BBDISP + ' "' + LINE + '"' + cmd2= "echo " + currentclient + " >> /data/srv/httpd/htdocs/failed_func_hosts" + os.system(cmd) + os.system(cmd2) + cmd3="sudo /usr/bin/certmaster-ca -c " + currentclient + os.system(cmd3) + BBCOLOR="red" + else: + BBLINE+= "Not testing %s \n " % currentclient + LINE = "status " + currentclient + ".func clear" + " " + DATE + " " + BBLINE + cmd = BB + ' ' + BBDISP + ' "' + LINE + '"' + os.system(cmd) + BBCOLOR="clear" + send_myth_clear(currentclient) + +#LINE = "status " + MACHINE + ".func green" + " " + DATE + " " + BBLINE +#cmd = BB + ' ' + BBDISP + ' "' + LINE + '"' +#os.system(cmd) + +#print BBLINE +#print BBCOLOR |