def connectToClusterServer(self, certificatePath, clusterServerIP, clusterServerListenningPort, statusDBUpdateInterval): """ Establishes a connection with the cluster server. Args: certificatePath: the server.crt and server.key directory path. clusterServerIP: the cluster server's IPv4 address clusterServerListenningPort: the cluster server's listenning port. statusDBUpdateInterval: the status database update interval (in seconds) Returns: Nothing """ self.__manager = NetworkManager(certificatePath) self.__manager.startNetworkService() callback = _ClusterServerEndpointCallback(self) # Connect to the main server self.__clusterServerIP = clusterServerIP self.__clusterServerPort = clusterServerListenningPort self.__manager.connectTo(clusterServerIP, clusterServerListenningPort, 5, callback, True) while (not self.__manager.isConnectionReady( clusterServerIP, clusterServerListenningPort)): sleep(0.1) # Create the packet handler self.__pHandler = ClusterServerPacketHandler(self.__manager) # Create the update thread self.__updateRequestThread = StatusDatabaseUpdateThread( _ClusterServerEndpointUpdateHandler(self), statusDBUpdateInterval) # Start it self.__updateRequestThread.start()
def connectToClusterServer(self, certificatePath, clusterServerIP, clusterServerListenningPort, statusDBUpdateInterval, commandTimeout, commandTimeoutCheckInterval): """ Establece la conexión con el servidor de cluster Argumentos: certificatePath: la ruta del directorio con los ficheros server.crt y server.key. clusterServerIP: la IP del servidor de cluster clusterServerListenningPort: el puerto en el que escucha el servidor de cluster statusDBUpdateInterval: el periodo de actualización de la base de datos (en segundos) Devuelve: Nada Lanza: EnpointException: se lanza cuando no se puede establecer una conexión con el servidor web """ self.__manager = NetworkManager(certificatePath) self.__manager.startNetworkService() callback = _ClusterServerEndpointCallback(self) # Establecer la conexión self.__clusterServerIP = clusterServerIP self.__clusterServerPort = clusterServerListenningPort try: self.__manager.connectTo(clusterServerIP, clusterServerListenningPort, 5, callback, True) while (not self.__manager.isConnectionReady( clusterServerIP, clusterServerListenningPort)): sleep(0.1) # TODO: si esto falla, terminar. # Preparar la recepción de paquetes y la actualización automática de la base de datos de estado self.__repositoryPacketHandler = ClusterServerPacketHandler( self.__manager) self.__updateRequestThread = VMServerMonitoringThread( _ClusterServerEndpointUpdateHandler(self), statusDBUpdateInterval) self.__updateRequestThread.start() self.__commandMonitoringThread = CommandMonitoringThread( self.__commandsDBConnector, commandTimeout, commandTimeoutCheckInterval) self.__commandMonitoringThread.start() except NetworkManagerException as e: raise EndpointException(e.message)
def startListenning(self, certificatePath, port): """ Starts the network service and creates a server connection. Args: certificatePath: the server.crt and server.key files path port: the listenning port Returns: Nothing """ self.__loadBalancer = SimpleLoadBalancer(self.__dbConnector) self.__networkManager = NetworkManager(certificatePath) self.__webPort = port self.__networkManager.startNetworkService() self.__webPacketHandler = ClusterServerPacketHandler( self.__networkManager) self.__vmServerPacketHandler = VMServerPacketHandler( self.__networkManager) self.__networkManager.listenIn(port, self.__webCallback, True) self.__vmServerCallback = VMServerCallback(self)