#!/usr/bin/python2 # -*- coding: utf-8 -*- # import MySQL module #used to import the zipcode/timezone/nfs info fromMBE import MySQLdb import sys import getopt import socket import urllib2 socket.setdefaulttimeout(10) try: from json import loads as jsonparse nojson = False except ImportError: try: from simplejson import loads as jsonparse nojson = False except ImportError: def jsonparse(js): if unsafe: return eval(js) raise RuntimeError("Neither the json or simplejson module is available.\nUse the --unsafe option to use python eval() as an ad-hoc json decoder") def no_update(data): print "* not updating %s, because a value is already present" %data def usage(): print " -h --help" print " -d --installdb" print " -m --masterdb" print " -n --hostname of current machine" def latlong2_olsen(lat,lng): olsenttz = '' geo_url = "http://api.geonames.org/timezoneJSON?lat=%s&lng=%s&username=linhes_timezone" %(lat,lng) try: json_stream = urllib2.urlopen(geo_url,timeout=10) json_dict = jsonparse(json_stream.read().replace("\r\n","")) olsenttz = json_dict['timezoneId'] except: print "error with geonames" return olsenttz def geo_locate(): print " Trying to geo locate in timezip.py" gtz = '' gtz_region = '' gtz_subregion = '' #get long/lat from ip try: geo_url = "http://www.geobytes.com/IpLocator.htm?GetLocation&template=json.txt" json_stream = urllib2.urlopen(geo_url,timeout=10) json_dict = jsonparse(json_stream.read().replace("\r\n",""))['geobytes'] latitude = json_dict['latitude'] longitude = json_dict['longitude'] except: print "error with geobytes/geolocate" latitude = '' longitude = '' if latitude != '': try: olsenttz = latlong2_olsen (latitude,longitude) gtz = olsenttz gtz_region , gtz_subregion = olsenttz.split("/") except: print "error with geolocate" return gtz, gtz_region , gtz_subregion def printvars(): print "masterdb: " + masterdb print "installdb:" + installdb print "hostname: " + thishostname print "BEhostname:" + BEhostname #print "zipcode:" + zipcode print "timezone:" + tz print "timezone region:" + tz_region print "timezone subregion:" + tz_subregion print "nfsip:" + nfsip print "nfstoggle:" + nfstoggle print "nfsmount:" + nfsmount print "nfsshare:" + nfsshareall #print "hobbitclient:" + hobbitclient print "windowmanager:" + windowmanager print "windowmanager style:" + wmstyle print "Gallery Dir:" + gallerydir print "Music dir:" + musicdir print "Music template:" + filenametemplate for key,value in video_dict.items(): print "%s: %s" %(key,value) print "-----------------------------------" print "\n\n\n" # connect def selectvars(): global BEhostname global zipcode global tz global tz_region global tz_subregion global nfsip global nfstoggle global nfsmount global nfsshareall #global hobbitclient global windowmanager global wmstyle global musicdir global gallerydir global filenametemplate #video parent level global video_dict db = MySQLdb.connect(host=masterdb, user="mythtv", passwd="mythtv", db="mythconverg") # create a cursor cursor = db.cursor() # execute SQL statement try: cursor.execute("select hostname from settings where value='BackendServerIP' and data=(%s)",(masterdb)) result = cursor.fetchone() BEhostname=result[0] except TypeError: BEhostname="" try: cursor.execute("select data from settings where value='HostCentralNFSIP' and hostname=(%s)",(BEhostname)) result = cursor.fetchone() nfsip=result[0] except TypeError: nfsip="" try: cursor.execute("select data from settings where value='HostHaveCentralNFS' and hostname=(%s)",(BEhostname)) result = cursor.fetchone() nfstoggle=result[0] except TypeError: nfstoggle="no" try: cursor.execute("select data from settings where value='HostNFSmountpoint' and hostname=(%s)",(BEhostname)) result = cursor.fetchone() nfsmount=result[0] except TypeError: nfsmount="" try: cursor.execute("select data from settings where value='HostCentralNFSallhosts' and hostname=(%s)",(BEhostname)) result = cursor.fetchone() nfsshareall=result[0] except TypeError: nfsshareall="0" try: #cursor.execute("select data from settings where value='HostTimeZonetemp' and hostname=(%s)",(BEhostname)) cursor.execute("select data from settings where value='HostTimeZone' and hostname=(%s)",(BEhostname)) result = cursor.fetchone() tz=result[0] except TypeError: tz = "" if tz == "": tz,tz_region, tz_subregion = geo_locate() else: try: cursor.execute("select data from settings where value='HostTimeZoneRegion' and hostname=(%s)",(BEhostname)) result = cursor.fetchone() tz_region=result[0] except TypeError: tz_region="" tempsubregion="HostTimeZoneRegion_" + tz_region try: cursor.execute("select data from settings where value=%s and hostname=(%s)",(tempsubregion,BEhostname)) result = cursor.fetchone() tz_subregion=result[0] except TypeError: tz_subregion="" ############### #if ( thishostname != BEhostname ): #cursor.execute("select data from settings where value='GlobalServiceHobbitserver'") #result = cursor.fetchone() #try: #hobbitclient=result[0] #except: #hobbitclient="1" #else: #hobbitclient="1" try: cursor.execute("select data from settings where value='HostWindowManager' and hostname=(%s)",(BEhostname)) result = cursor.fetchone() windowmanager=result[0] except TypeError: windowmanager="" try: cursor.execute("select data from settings where value='HostEnhancedWMStyle' and hostname=(%s)",(BEhostname)) result = cursor.fetchone() wmstyle=result[0] except TypeError: wmstyle="" try: cursor.execute("select data from settings where value='MusicLocation' and hostname=(%s)",(BEhostname)) result = cursor.fetchone() musicdir=result[0] except TypeError: musicdir="" try: cursor.execute("select data from settings where value='FilenameTemplate' and hostname=(%s)",(BEhostname)) result = cursor.fetchone() filenametemplate=result[0] except TypeError: filenametemplate="" try: cursor.execute("select data from settings where value='GalleryDir' and hostname=(%s)",(BEhostname)) result = cursor.fetchone() gallerydir=result[0] except TypeError: gallerydir="" # video parental level video_list=['VideoAdminPassword', 'VideoAdminPasswordThree', 'VideoAdminPasswordTwo', 'VideoAggressivePC', 'VideoDefaultParentalLevel', 'mythvideo.ParentalLevelFromRating'] for i in video_list: sql_query="select data from settings where value='%s' and hostname='%s'" %(i,BEhostname) try: cursor.execute(sql_query) result = cursor.fetchone() video_dict[i]=result[0] except TypeError: video_dict[i]='' def insertvars(): db = MySQLdb.connect(host=installdb, user="mythtv", passwd="mythtv", db="mythconverg") cursor = db.cursor() ##inserting the zipcode #cursor.execute("select * from settings where value='HostZipcode' and hostname=(%s)",(thishostname)) #result = cursor.fetchone() #if ( zipcode!="" ): #if (result == None): #cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('HostZipcode',(%s),(%s))",(zipcode,thishostname)) #print "inserting zipcode" #else: #cursor.execute("update settings set data=(%s) where hostname=(%s) and value='HostZipcode'",(zipcode,thishostname)) #print "updating zipcode" #inserting the timezone if ( tz != ""): cursor.execute("select * from settings where value='HostTimeZone' and hostname=(%s)",(thishostname)) result = cursor.fetchone() if (result == None): cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('HostTimeZone',(%s),(%s))",(tz,thishostname)) print "inserting timezone" else: cursor.execute("update settings set data=(%s) where hostname=(%s) and value='HostTimeZone'",(tz,thishostname)) print "updating timezone" cursor.execute("select * from settings where value='HostTimeZoneRegion' and hostname=(%s)",(thishostname)) result = cursor.fetchone() if (result == None): cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('HostTimeZoneRegion',(%s),(%s))",(tz_region,thishostname)) print "inserting timezone region" else: cursor.execute("update settings set data=(%s) where hostname=(%s) and value='HostTimeZoneRegion'",(tz_region,thishostname)) print "updating timezone region" tempsubregion="HostTimeZoneRegion_" + tz_region cursor.execute("select * from settings where value=%s and hostname=(%s)",(tempsubregion,thishostname)) result = cursor.fetchone() if (result == None): cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ((%s),(%s),(%s))",(tempsubregion,tz_subregion,thishostname)) print "inserting timezone subregion" else: cursor.execute("update settings set data=(%s) where hostname=(%s) and value=(%s)",(tz_subregion,thishostname,tempsubregion)) print "updating timezone subregion" ##start of NFSIP if nfstoggle == "yes" : print "BE has a central storage" #if nfsshareall == "0": #print "BE is not sharing central, starting config" if ( nfsip != ""): cursor.execute("select data from settings where value='HostCentralNFSIP' and hostname=(%s)",(thishostname)) result = cursor.fetchone() if (result == None): cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('HostCentralNFSIP',(%s),(%s))",(nfsip,thishostname)) print "inserting nfsip" else: no_update("HostCentralNFSIP") #cursor.execute("update settings set data=(%s) where hostname=(%s) and value='HostCentralNFSIP'",(nfsip,thishostname)) #print "updating nfsip" if ( nfsmount !="") : cursor.execute("select data from settings where value='HostNFSmountpoint' and hostname=(%s)",(thishostname)) result = cursor.fetchone() if (result == None): cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('HostNFSmountpoint',(%s),(%s))",(nfsmount,thishostname)) print "inserting nfsmountpoint" else: no_update("nfsmount") #cursor.execute("update settings set data=(%s) where hostname=(%s) and value='HostNFSmountpoint'",(nfsmount,thishostname)) #print "updating nfsmount" #else: #print "BE is sharing, config sync skipped" else: print "BE has no central storage" #windowmanager if windowmanager != "": cursor.execute("select * from settings where value='HostWindowManager' and hostname=(%s)",(thishostname)) result = cursor.fetchone() if (result == None): cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('HostWindowManager',(%s),(%s))",(windowmanager,thishostname)) print "inserting windowmanager" else: no_update("windowmanager") #cursor.execute("update settings set data=(%s) where hostname=(%s) and value='HostWindowManager'",(windowmanager,thishostname)) #print "updating windowmanager" if wmstyle != "" : cursor.execute("select * from settings where value='HostEnhancedWMStyle' and hostname=(%s)",(thishostname)) result = cursor.fetchone() if (result == None): cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('HostEnhancedWMStyle',(%s),(%s))",(wmstyle,thishostname)) print "inserting windowmanager style" else: no_update("wm_style") #cursor.execute("update settings set data=(%s) where hostname=(%s) and value='HostEnhancedWMStyle'",(wmstyle,thishostname)) #print "updating windowmanager style" #music and gallery if ( musicdir != "" ): cursor.execute("select * from settings where value='MusicLocation' and hostname=(%s)",(thishostname)) result = cursor.fetchone() if (result == None): cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('MusicLocation',(%s),(%s))",(musicdir,thishostname)) print "inserting musicdir" else: #no_update("musicdir") cursor.execute("update settings set data=(%s) where hostname=(%s) and value='MusicLocation'",(musicdir,thishostname)) print "updating musicdir" if ( filenametemplate != "" ): cursor.execute("select * from settings where value='FilenameTemplate' and hostname=(%s)",(thishostname)) result = cursor.fetchone() if (result == None): cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('FilenameTemplate',(%s),(%s))",(filenametemplate,thishostname)) print "inserting filenametemplate" else: no_update("filenametemplate") #cursor.execute("update settings set data=(%s) where hostname=(%s) and value='FilenameTemplate'",(filenametemplate,thishostname)) #print "updating filenametemplate" if ( gallerydir != "" ): cursor.execute("select * from settings where value='GalleryDir' and hostname=(%s)",(thishostname)) result = cursor.fetchone() if (result == None): cursor.execute("INSERT INTO settings (value,data,hostname) VALUES ('GalleryDir',(%s),(%s))",(gallerydir,thishostname)) print "inserting gallerydir" else: #no_update("gallerydir") cursor.execute("update settings set data=(%s) where hostname=(%s) and value='GalleryDir'",(gallerydir,thishostname)) print "updating gallerydir" # parental level for key,value in video_dict.items(): if ( value != "" ): sql_query = "select * from settings where value='%s' and hostname='%s'" %(key,thishostname) cursor.execute(sql_query) result = cursor.fetchone() if (result == None): insert_sql ="INSERT INTO settings (value,data,hostname) VALUES ('%s','%s','%s')" %(key,value,thishostname) cursor.execute(insert_sql) print "inserting %s" %(key) else: no_update(key) #update_sql="update settings set data='%s' where hostname='%s' and value='%s'" %(value,thishostname,key) #cursor.execute(update_sql) #print "updating %s" %(key) def main(argv): global masterdb global installdb global thishostname thishostname="" global BEhostname global zipcode global tz global tz_region global tz_subregion #global nfsip #global hobbitclient global musicdir global gallerydir global filenametemplate global video_dict video_dict = {} try: opts, args = getopt.getopt(argv, "hm:d:n:", ["help", "masterdb=", "installdb=" , "hostname=" ] ) except getopt.GetoptError: sys.exit(2) for opt, arg in opts: if opt in ("-h", "--help"): usage() sys.exit() elif opt in ( "-d" , "--installdb"): installdb = arg elif opt in ("-m", "--masterdb"): masterdb = arg elif opt in ("-n", "--hostname"): thishostname = arg if ( thishostname == "" ): thishostname = socket.gethostname() selectvars() printvars() insertvars() if __name__ == "__main__": main(sys.argv[1:])