import DbClass class trueTable: def __init__(self, resultsList): self.resultsList = resultsList self.outGoingRZ = None self.asteriskServer = None self.incomingRZ = None self.openBSC = None self.nanoBTS = '' self.deviceStatus = list() self.testMount = len(resultsList) self.OK = 0 self.FAILED = 0 self.handlerError = 0 def initDB(self): # function for connect to database self.db = DbClass.DBMySQLConnection() self.db.connectDB() self.dbStatus = self.db.connectDB() def lookingBTSname(self, btsname): if self.nanoBts == '': self.found = False else: self.found = False for y in self.nanoBts: #find the existing nanoBts result name = y[0] if name == btsName: self.found = True return self.found def findStatusInList(self,key): if len(self.deviceStatus) == 0: update = False else: update = False for item in self.deviceStatus: if key == item[0]: if str(item[1]) != 'OK': update = True else: update = None return update def initNagiosResult(self): self.initDB() deviceLists = self.db.deviceList() self.db.closeDBConn() for items in deviceLists: device = items[0] for result in self.resultsList: if device == result[0] or device == result[1]: if int(result[2]) == 200: if self.findStatusInList(device) == True: try: self.deviceStatus.remove([device,'NOT OK']) except: try: self.deviceStatus.remove([device,'UNKNOWN']) except: continue self.deviceStatus.append([device,'OK']) elif self.findStatusInList(device) == False: self.deviceStatus.append([device,'OK']) else: continue elif int(result[2]) == 486: found = False for item in self.deviceStatus: if device == item[0]: if str(item[1]) != 'OK' or str(item[1]) == 'OK': found = True if found == False: self.deviceStatus.append([device,'NOT OK']) else: found = False for item in self.deviceStatus: if device == item[0]: if str(item[1]) != 'OK' or str(item[1]) == 'OK': found = True if found == False: self.deviceStatus.append([device,'UNKNOWN']) for status in self.deviceStatus: if status[1] == 'OK': self.OK = self.OK+1 elif status[1] == 'NOT OK': self.FAILED = self.FAILED+1 else: self.handlerError = self.handlerError+1 def initTrueTable(self): global btsName self.initDB() deviceLists = self.db.deviceList() #fetch device list from database externalRZList = list() for devLists in deviceLists: #define category of the external devices device = devLists[0] if device[0:5] == 'GSMEx' or device == 'landline': externalRZList.append(device) # fetch into the list self.db.closeDBConn() lists = self.resultsList self.nanoBts = list() gsmResultList = list() i= 1 for w in lists: call=w[0] dest=w[1] if call[0:5]=='GSMRZ': if i <= int(call[5:]): i = int(call[5:]) if dest[0:5]=='GSMRZ': if i <= int(dest[5:]): i = int(dest[5:]) i = i+1 for x in lists: # to find nanoBts, asterik server and open BSC status regarding result test for GSM RZ call=x[0] dest=x[1] result=x[2] stop = False j=1 if call[0:5]=='GSMRZ' or dest[0:5]=='GSMRZ': while stop != True: if j != i: key = 'GSMRZ'+str(j) if key == call or key == dest: btsName = 'nanoBts '+str(j) if result == '200': btsName = 'nanoBts '+str(j) self.asteriskServer = True #set status of asterik server as working self.lookingBTSname(btsName) if self.found != True: #if doesnt found the nanoBts, add the result to the list, otherwise just ignoring try: self.nanoBts.remove(btsName) except ValueError: message = 'Error' self.nanoBts.append([btsName,True]) if key == call: for z in externalRZList:# find the result for outgoing call from GSM RZ to external RZ network if dest == z: self.outGoingRZ = True #set status as working for outgoing RZ if key == dest: for z in externalRZList: if call == z: self.incomingRZ = True # find the result for imcoming call to GSM RZ from external RZ network elif result == '486': found = False if key == call: for z in externalRZList: if dest == z and self.outGoingRZ != True: self.outGoingRZ = False if key == dest: for z in externalRZList: if call == z and self.incomingRZ != True: self.incomingRZ = False if self.nanoBts == '': self.nanoBts.append([btsName,False]) for y in self.nanoBts: #find the existing nanoBts result name = y[0] if name == btsName and y[1] == True: found = True if found != True: self.nanoBts.append([btsName,False]) elif (str(result) == '801' or str(result) == '999') and key == call: exist = False if self.nanoBts != '': for device in self.nanoBts: if device[0]== key: exist = True if exist!= True: self.nanoBts.append([key,result]) elif (str(result) == '802' or str(result) == '998') and key == dest: exist = False if self.nanoBts != '': for device in self.nanoBts: if device[0]== key: exist = True if exist!= True: self.nanoBts.append([key,result]) elif (key == call or key == dest ) and str(result) == '402': exist = False if self.nanoBts != '': for device in self.nanoBts: if device[0]== key: exist = True if exist!= True: self.nanoBts.append([key,result]) j = j+1 elif j == i: stop = True if call[0:5]=='GSMEx': # looking for calling from GSMexternal found = False if len(self.nanoBts) == 0: self.nanoBts.append([call,result]) found = False else: for y in self.nanoBts: #find the existing result for GSM external in the list name = y[0] if name == call: if int(result) == 200 or int(y[1]) == 402: if int(y[1]) == 486 or int(y[1]) == 999 or int(y[1]) == 998 or int(y[1]) == 801 or int(y[1]) == 802 or int(y[1]) == 402: self.nanoBts.remove(y) else: found = True if found != True: self.nanoBts.append([call,result]) if dest[0:5]=='GSMEx': # looking for destination call to GSMexternal found = False if len(self.nanoBts) == 0: self.nanoBts.append([dest,result]) found = False else: for y in self.nanoBts: name = y[0] if name == dest: if int(result) == 200 or int(y[1]) == 402: if int(y[1]) == 486 or int(y[1]) == 999 or int(y[1]) == 998 or int(y[1]) == 802 or int(y[1]) == 801: self.nanoBts.remove(y) else: found = True if found != True: self.nanoBts.append([dest,result]) for device in externalRZList: if device == dest and int(result) == 200: self.outGoingRZ = True