예제 #1
0
 def _processIncomingPacket(self, packet):
     """
     Processes an incoming package (sent from the cluster server).
     Args:
         packet: the packet to process
     Returns:
         Nothing
     """
     if (self.__stopped):
         return
     data = self.__pHandler.readPacket(packet)
     if (data["packet_type"] == PACKET_T.VM_SERVERS_STATUS_DATA):
         self.__writer.processVMServerSegment(data["Segment"],
                                              data["SequenceSize"],
                                              data["Data"])
     elif (data["packet_type"] == PACKET_T.VM_DISTRIBUTION_DATA):
         self.__writer.processVMDistributionSegment(data["Segment"],
                                                    data["SequenceSize"],
                                                    data["Data"])
     elif (data["packet_type"] == PACKET_T.ACTIVE_VM_DATA):
         self.__writer.processActiveVMSegment(data["Segment"],
                                              data["SequenceSize"],
                                              data["VMServerIP"],
                                              data["Data"])
     else:
         l = data["CommandID"].split("|")
         commandID = (int(l[0]), float(l[1]))
         if (data["packet_type"] == PACKET_T.COMMAND_EXECUTED):
             self.__commandsDBConnector.removeExecutedCommand(commandID)
         else:
             # Command outputs => serialize and add them to the commands database
             if (data["packet_type"] == PACKET_T.VM_SERVER_BOOTUP_ERROR
                     or data["packet_type"]
                     == PACKET_T.VM_SERVER_UNREGISTRATION_ERROR
                     or data["packet_type"]
                     == PACKET_T.VM_SERVER_SHUTDOWN_ERROR):
                 (outputType, outputContent
                  ) = CommandsHandler.createVMServerGenericErrorOutput(
                      data["packet_type"], data["ServerNameOrIPAddress"],
                      data["ErrorMessage"])
             elif (data["packet_type"] ==
                   PACKET_T.VM_SERVER_REGISTRATION_ERROR):
                 (outputType, outputContent
                  ) = CommandsHandler.createVMServerRegistrationErrorOutput(
                      data["VMServerIP"], data["VMServerPort"],
                      data["VMServerName"], data["ErrorMessage"])
             elif (data["packet_type"] == PACKET_T.VM_BOOT_FAILURE):
                 (outputType, outputContent
                  ) = CommandsHandler.createVMBootFailureErrorOutput(
                      data["VMID"], data["ErrorMessage"])
             elif (data["packet_type"] == PACKET_T.VM_CONNECTION_DATA):
                 (outputType, outputContent
                  ) = CommandsHandler.createVMConnectionDataOutput(
                      data["VNCServerIPAddress"], data["VNCServerPort"],
                      data["VNCServerPassword"])
             self.__commandsDBConnector.addCommandOutput(
                 commandID, outputType, outputContent)
예제 #2
0
 def processCommands(self):
     """
     Processes the commands sent from the web connectors.
     Args:
         None
     Returns:
         Nothing
     @attention: This method will only finish after processing a halt command.
     """
     while not self.__stopped :
         commandData = self.__commandsDBConnector.popCommand()
         if (commandData == None) :
             sleep(0.1)
         else :
             (commandID, commandType, commandArgs) = commandData
             parsedArgs = CommandsHandler.deserializeCommandArgs(commandType, commandArgs)
             if (commandType != COMMAND_TYPE.HALT) :
                 serializedCommandID = "{0}|{1}".format(commandID[0], commandID[1])                    
                 if (commandType == COMMAND_TYPE.BOOTUP_VM_SERVER) :                    
                     packet = self.__pHandler.createVMServerBootUpPacket(parsedArgs["VMServerNameOrIP"], serializedCommandID)
                 elif (commandType == COMMAND_TYPE.REGISTER_VM_SERVER) :
                     packet = self.__pHandler.createVMServerRegistrationPacket(parsedArgs["VMServerIP"], 
                         parsedArgs["VMServerPort"], parsedArgs["VMServerName"], serializedCommandID)
                 elif (commandType == COMMAND_TYPE.UNREGISTER_OR_SHUTDOWN_VM_SERVER) :
                     packet = self.__pHandler.createVMServerUnregistrationOrShutdownPacket(parsedArgs["VMServerNameOrIP"], 
                         parsedArgs["Halt"], parsedArgs["Unregister"], serializedCommandID)
                 elif (commandType == COMMAND_TYPE.VM_BOOT_REQUEST) :
                     packet = self.__pHandler.createVMBootRequestPacket(parsedArgs["VMID"], parsedArgs["UserID"], serializedCommandID)
                 self.__manager.sendPacket(self.__clusterServerIP, self.__clusterServerPort, packet)
             else :
                 self.__stopped = True
                 self.__haltVMServers = parsedArgs["HaltVMServers"]
예제 #3
0
 def _processIncomingPacket(self, packet):
     """
     Processes an incoming package (sent from the cluster server).
     Args:
         packet: the packet to process
     Returns:
         Nothing
     """
     if (self.__stopped) :
         return
     data = self.__pHandler.readPacket(packet)
     if (data["packet_type"] == PACKET_T.VM_SERVERS_STATUS_DATA) :
         self.__writer.processVMServerSegment(data["Segment"], data["SequenceSize"], data["Data"])
     elif (data["packet_type"] == PACKET_T.VM_DISTRIBUTION_DATA) :
         self.__writer.processVMDistributionSegment(data["Segment"], data["SequenceSize"], data["Data"])
     elif (data["packet_type"] == PACKET_T.ACTIVE_VM_DATA) :
         self.__writer.processActiveVMSegment(data["Segment"], data["SequenceSize"], data["VMServerIP"], data["Data"])
     else :
         l = data["CommandID"].split("|")
         commandID = (int(l[0]), float(l[1]))
         if (data["packet_type"] == PACKET_T.COMMAND_EXECUTED) :
             self.__commandsDBConnector.removeExecutedCommand(commandID)
         else :           
             # Command outputs => serialize and add them to the commands database 
             if (data["packet_type"] == PACKET_T.VM_SERVER_BOOTUP_ERROR or 
                 data["packet_type"] == PACKET_T.VM_SERVER_UNREGISTRATION_ERROR or 
                 data["packet_type"] == PACKET_T.VM_SERVER_SHUTDOWN_ERROR) :
                 (outputType, outputContent) = CommandsHandler.createVMServerGenericErrorOutput(
                     data["packet_type"], data["ServerNameOrIPAddress"], data["ErrorMessage"])
             elif (data["packet_type"] == PACKET_T.VM_SERVER_REGISTRATION_ERROR) :
                 (outputType, outputContent) = CommandsHandler.createVMServerRegistrationErrorOutput(
                     data["VMServerIP"], data["VMServerPort"], data["VMServerName"], data["ErrorMessage"])
             elif (data["packet_type"] == PACKET_T.VM_BOOT_FAILURE) :
                 (outputType, outputContent) = CommandsHandler.createVMBootFailureErrorOutput(
                     data["VMID"], data["ErrorMessage"])  
             elif (data["packet_type"] == PACKET_T.VM_CONNECTION_DATA) :
                 (outputType, outputContent) = CommandsHandler.createVMConnectionDataOutput(
                     data["VNCServerIPAddress"], data["VNCServerPort"], data["VNCServerPassword"])
             self.__commandsDBConnector.addCommandOutput(commandID, outputType, outputContent)
예제 #4
0
 def processCommands(self):
     """
     Processes the commands sent from the web connectors.
     Args:
         None
     Returns:
         Nothing
     @attention: This method will only finish after processing a halt command.
     """
     while not self.__stopped:
         commandData = self.__commandsDBConnector.popCommand()
         if (commandData == None):
             sleep(0.1)
         else:
             (commandID, commandType, commandArgs) = commandData
             parsedArgs = CommandsHandler.deserializeCommandArgs(
                 commandType, commandArgs)
             if (commandType != COMMAND_TYPE.HALT):
                 serializedCommandID = "{0}|{1}".format(
                     commandID[0], commandID[1])
                 if (commandType == COMMAND_TYPE.BOOTUP_VM_SERVER):
                     packet = self.__pHandler.createVMServerBootUpPacket(
                         parsedArgs["VMServerNameOrIP"],
                         serializedCommandID)
                 elif (commandType == COMMAND_TYPE.REGISTER_VM_SERVER):
                     packet = self.__pHandler.createVMServerRegistrationPacket(
                         parsedArgs["VMServerIP"],
                         parsedArgs["VMServerPort"],
                         parsedArgs["VMServerName"], serializedCommandID)
                 elif (commandType ==
                       COMMAND_TYPE.UNREGISTER_OR_SHUTDOWN_VM_SERVER):
                     packet = self.__pHandler.createVMServerUnregistrationOrShutdownPacket(
                         parsedArgs["VMServerNameOrIP"], parsedArgs["Halt"],
                         parsedArgs["Unregister"], serializedCommandID)
                 elif (commandType == COMMAND_TYPE.VM_BOOT_REQUEST):
                     packet = self.__pHandler.createVMBootRequestPacket(
                         parsedArgs["VMID"], parsedArgs["UserID"],
                         serializedCommandID)
                 self.__manager.sendPacket(self.__clusterServerIP,
                                           self.__clusterServerPort, packet)
             else:
                 self.__stopped = True
                 self.__haltVMServers = parsedArgs["HaltVMServers"]