#!/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