#!/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():
    dropdown='''
     <input name="param2" type="radio"  value="Restore" />Restore database </>
     <select name="param1">
    '''
    dir = "/data/database_backup"
    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>'''
    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/hobbit/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=row[0] + "\\n Master Backend"
              else:
                  masterbacked_w_fe+=","+row[0]
                  dotMBE="MBE" + " [ label=\"" + row[0]  + "  \\n Master Backend with frontend  \" shapefile=\"/data/srv/httpd/htdocs/hobbit/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/hobbit/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/hobbit/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/hobbit/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/hobbit/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/hobbit/gifs/network.png "
 #   cmd="/usr/bin/circo -Tpng  -o/data/srv/httpd/htdocs/hobbit/gifs/network.png " + dotfilename

    results=os.popen(cmd,'r')

 #--------------------------------------------------
    hobbitfile="/data/srv/hobbit/server/etc/hobbit-clients.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/hobbit/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="/hobbit/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:])