summaryrefslogblamecommitdiffstats
path: root/Code/Server-Code/truthtableClass.py
blob: 0d7a633e1844139b372faf421f47cab3e9abaded (plain) (tree)
1
2
3
4
5
6
7





                                                     
                                              






                                              
                                             




                                           
                                  




                                                                        

                                                 








                                                                             
 




































                                                                                                               
 

                                                                                                                   

                                                                            
                                                                                                                                          




                                                                                            

                                                                                           
                                                               








                                                                                                                                                                     
                                                               


                                                                                                         
                                                               






                                                                                                         
                                                                                            



                                                                                            


                                                                                  

                                                                                         








                                                                                         
 


                                                                                
                                                                                                         



                                           
                                                                         







                                                                                                             


                                                                                                                                        




                                                                                                                
                                                                                








                                                                  


                                                                                                                                                            



                                                                          
 
 
                                         
                                                         
                                              

 
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		= None

     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 len(self.nanoBts) == 0:
		self.found = False
	else:
		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 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' and key == call:
						self.lookingBTSname(key)
						if self.found != True:
							self.nanoBts.append([key,result])

					elif str(result) == '802'and key == dest:
						self.lookingBTSname(key)
						if self.found != True:
							self.nanoBts.append([key,result])
							
					if str(result) == '998' and key == dest:
						self.lookingBTSname(key)
						if self.found != True:
							self.nanoBts.append([key,result])

					if str(result) == '999' and key == call:
						self.lookingBTSname(key)
						if self.found != 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:
							if int(y[1]) == 486 or int(y[1]) == 999 or int(y[1]) == 998 or int(y[1]) == 801:
								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:
							if int(y[1]) == 486 or int(y[1]) == 999 or int(y[1]) == 998 or int(y[1]) == 402 or int(y[1]) == 802:
								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