#!/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 = "/myth/system_backup"
    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="/data/srv/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="/data/srv/xymon/server/etc/hobbit-clients.cfg"
    ###WHY WAS THIS HERE??
    #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='''