#!/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()))
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/hobbit/etc/bb-hosts', 'r')
        except(IOError), e:
          print "couldn't open bb-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  :
				host=cline.split("#")
				host=host[0].split()
				hostlist.append(host[1].strip())
		infile.close()
        try:
                infile = open('/usr/local/share/mythtv/.releasetype')
                mythtype= infile.readline()
                infile.close()
        except(IOError), e:
            print "couldn't open mythfile "
            mythtype='unkown'

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  + ".myth_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  + ".myth_version green" + " " + DATE + " " + BBLINE
    except:
        BBLINE="Something went wrong! \n "
        LINE = "status " + currentclient  + ".myth_version red" + " " + 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:
    client = (fc.Client( currentclient ))
    cmd='/data/srv/hobbit/server/bin/bb 127.0.0.1  "query '
    cmd+=currentclient
    cmd+='.conn"'
    bbresults=os.popen(cmd,'r'	).readline().strip().split()
    bbstate=bbresults[0]
    if bbstate == 'green':
        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'
                    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 " + MACHINE + ".func green" + " " + DATE + " " + BBLINE
#cmd = BB + ' ' + BBDISP + ' "' + LINE + '"'
#os.system(cmd)

#print BBLINE
#print BBCOLOR