예제 #1
0
    def __init__(self, serverFullName, workerPort, id, runner, runnerPackages,
                 validationExpression, arguments):
        """Creates a new command watcher.

        :param serverFullName: Main server address
        :type serverFullName: string
        :param workerPort: Communication port opened on the worker
        :type serverFullName: int
        :param id: commandId
        :param runner: module name of the class that will be executed i.e. the 'runner'
        :param validationExpression:
        :param arguments:
        """

        self.id = id
        self.requestManager = RequestManager("127.0.0.1", workerPort)
        self.workerPort = workerPort
        self.workerFullName = socket.gethostname() + ":" + self.workerPort
        self.serverFullName = serverFullName
        self.arguments = arguments
        self.runner = runner
        self.runnerPackages = runnerPackages

        self.completion = 0.0
        self.message = "loading command script"
        self.stats = {}
        self.startDate = time.time()

        self.completionHasChanged = True
        self.messageHasChanged = True
        self.statsHasChanged = True

        self.finalState = CMD_DONE

        self.runnerErrorInExec = None
        self.runnerErrorInPostExec = None

        # check that the job type is a registered one
        runnerLabel = runner.rsplit('.', 1)[1:][0]
        logger.info("Loading class: \"%s\"" % runnerLabel)

        from puliclient.jobs import loadCommandRunner, JobTypeImportError
        try:
            runnerClass = loadCommandRunner(runner)
        except JobTypeImportError, e:
            logger.error("Command runner loading failed: %r" % e)
            self.updateCommandStatus(CMD_ERROR)
            sys.exit(1)
예제 #2
0
    def __init__(self, framework):
        super(Worker, self).__init__(self)
        LOGGER.info("---")
        LOGGER.info("Initializing worker")
        LOGGER.info("---")

        self.framework = framework
        self.data = None
        self.requestManager = RequestManager(settings.DISPATCHER_ADDRESS,
                                             settings.DISPATCHER_PORT)
        self.commandWatchers = {}
        self.commands = {}
        self.port = settings.PORT
        self.computerName = COMPUTER_NAME_TEMPLATE % (settings.ADDRESS,
                                                      settings.PORT)

        self.createDate = time.time()
        self.lastSysInfosMessageTime = 0
        self.lastFullSysInfoUpdate = 0
        self.registerDate = 0

        self.httpconn = httplib.HTTPConnection(settings.DISPATCHER_ADDRESS,
                                               settings.DISPATCHER_PORT)
        self.PID_DIR = os.path.dirname(settings.PIDFILE)
        if not os.path.isdir(self.PID_DIR):
            LOGGER.warning(
                "Worker pid directory %s does not exist, creating..." %
                self.PID_DIR)
            try:
                os.makedirs(self.PID_DIR, 0777)
                LOGGER.info("Worker pid directory created.")
            except OSError:
                LOGGER.error("Failed to create pid directory.")
                sys.exit(1)
        elif not os.access(self.PID_DIR, os.R_OK | os.W_OK):
            LOGGER.error("Missing read or write access on %s", self.PID_DIR)
            sys.exit(1)
        self.status = rendernode.RN_BOOTING
        self.updateSys = False
        self.isPaused = False
        self.toberestarted = False
        self.speed = 1.0
        self.cpuName = "undefined"
        self.distrib = "undefined"
        self.mikdistrib = "undefined"
        self.openglversion = ""
예제 #3
0
 def __init__(self):
     self.requestManager = RequestManager(settings.WS_BACKEND_URL,
                                          settings.WS_BACKEND_PORT)
     self.defaultPool = PoolDescription(1, u'default', None)
     self.pools = [self.defaultPool]
     self.computers = []