def manageJob(self, jobFile, baseDir): #we will want to capture the process exit code and SGE number jobNumberSGE = -1 #load the job file jsonData = open(jobFile) fileData = json.load(jsonData) #logging.debug('%s - %s' % (getTimestamp(), fileData)) #create the output folder if 'name' in fileData: outputFolder = '%s/%s' % (fileData['sample_folder'], fileData['name']) else: outputFolder = fileData['output_folder'] logging.debug('%s - Creating output folder %s' % (getTimestamp(), outputFolder)) fileData['output_folder'] = outputFolder #see if it exists first if not os.path.exists(outputFolder): os.makedirs(outputFolder) #write the job template fileData['json_file'] = jobFile templateWriter = TemplateWriter(outputFolder, self.__softwareDirectory, self.__QCSettings, self.__sendEmail) analysisFile = templateWriter.writeTemplate(fileData) #now we can pass the job to be executed over to the job runner runner = Runner("CommandLine") logging.info('%s - Starting %s' % (getTimestamp(), analysisFile)) fileData['status'] = 'submitted' fileData['output_folder'] = outputFolder # if the --requeue option was specified, update the queue if options.requeue: fileData['analysis']['settings']['queue'] = options.requeue # if the user specified a different software directory, set that here if 'software_directory' not in fileData[ 'analysis'] or self.__softwareDirectory != fileData[ 'analysis']['software_directory']: fileData['analysis'][ 'software_directory'] = self.__softwareDirectory #update the json self.__updateJSON(jobFile, fileData) #submit the job to SGE sgeJobID = runner.submitToSGE('%s/job.sh' % (outputFolder), fileData) fileData['status'] = 'queued' fileData['sge_job_id'] = sgeJobID logging.info('%s - Submitted to SGE (%i)' % (getTimestamp(), sgeJobID)) #update the json self.__updateJSON(jobFile, fileData)
def manageJob(self, jobFile, baseDir): #we will want to capture the process exit code and SGE number jobNumberSGE = -1 #load the job file jsonData = open(jobFile) fileData = json.load(jsonData) #logging.debug('%s - %s' % (getTimestamp(), fileData)) #create the output folder if 'name' in fileData: outputFolder = '%s/%s' %(fileData['sample_folder'], fileData['name']) else: outputFolder = fileData['output_folder'] logging.debug('%s - Creating output folder %s' % (getTimestamp(), outputFolder)) fileData['output_folder'] = outputFolder #see if it exists first if not os.path.exists(outputFolder): os.makedirs(outputFolder) #write the job template fileData['json_file'] = jobFile templateWriter = TemplateWriter(outputFolder, self.__softwareDirectory) analysisFile = templateWriter.writeTemplate(fileData) #now we can pass the job to be executed over to the job runner runner = Runner("CommandLine") logging.info('%s - Starting %s' % (getTimestamp(), analysisFile)) fileData['status'] = 'submitted' fileData['output_folder'] = outputFolder # if the --requeue option was specified, update the queue if options.requeue: fileData['analysis']['settings']['queue'] = options.requeue #update the json self.__updateJSON(jobFile, fileData) #submit the job to SGE sgeJobID = runner.submitToSGE('%s/job.sh' % (outputFolder), fileData) fileData['status'] = 'queued' fileData['sge_job_id'] = sgeJobID logging.info('%s - Submitted to SGE (%i)' % (getTimestamp(), sgeJobID)) #update the json self.__updateJSON(jobFile, fileData)
def manageJob(self, jobFile, baseDir): #we will want to capture the process exit code and SGE number jobNumberSGE = -1 #load the job file jsonData = open(jobFile) fileData = json.load(jsonData) logging.debug('%s - %s' % (getTimestamp(), fileData)) #create the output folder outputFolder = '%s/%s/%s/%s' % (baseDir, fileData['project'], fileData['sample'], fileData['name']) logging.debug('%s - Creating output folder %s' % (getTimestamp(), outputFolder)) fileData['output_folder'] = outputFolder #see if it exists first if not os.path.exists(outputFolder): os.makedirs(outputFolder) #write the job template fileData['json_file'] = jobFile templateWriter = TemplateWriter(outputFolder, self.__softwareDirectory) analysisFile = templateWriter.writeTemplate(fileData) #now we can pass the job to be executed over to the job runner runner = Runner("CommandLine") logging.info('%s - Starting %s' % (getTimestamp(), analysisFile)) fileData['status'] = 'submitted' fileData['output_folder'] = outputFolder #update the json self.__updateJSON(jobFile, fileData) #submit the job to SGE sgeJobID = runner.submitToSGE('%s/job.sh' % (outputFolder), fileData) fileData['status'] = 'queued' fileData['sge_job_id'] = sgeJobID logging.info('%s - Submitted to SGE (%i)' % (getTimestamp(), sgeJobID)) #update the json self.__updateJSON(jobFile, fileData)
def __init__(self, w, simbolico, minuto, tiempo): Thread.__init__(self) self.name = 'CreateCert' self.loop = Event() #evento para crear el titulo self.doit = Event() #inicializa en set el evento self.doit.set() #instancia de WatchAndPost self.watcher = w self.api = WebApi() self.tw = TemplateWriter(template='base65.jinja') self.ca = Certificate_generator('keys/generador.key', 'keys/generador.crt') self.valor_simbolico = simbolico self.valor_minuto = minuto self.tiempo_trabajo = tiempo
class CreateCert(Thread): ''' Clase que crea y firma los certificados criptograficos de cada titulo valor. Recibe en los parametros de inicializacion una instancia de la clase ``WatchAndPost`` para poder actualizar tanto el capital como el numero de titulos emitidos. :param w: Instancia de la clase ``WatchAndPost`` :param simbolico: porcentaje del valor simbolico :param minuto: valor del minuto de trabajo :param tiempo: tiempo de trabajo de realizacion de cada bono ''' def __init__(self, w, simbolico, minuto, tiempo): Thread.__init__(self) self.name = 'CreateCert' self.loop = Event() #evento para crear el titulo self.doit = Event() #inicializa en set el evento self.doit.set() #instancia de WatchAndPost self.watcher = w self.api = WebApi() self.tw = TemplateWriter(template='base65.jinja') self.ca = Certificate_generator('keys/generador.key', 'keys/generador.crt') self.valor_simbolico = simbolico self.valor_minuto = minuto self.tiempo_trabajo = tiempo def run(self): ''' Esta funcion corre en el fondo hasta ser llamada para crear el certificado -cuando llega un dato del puerto serial-. Internamente realiza los calculos del porcentaje a agregar al capital y actualiza los valores en el estado global del sistema. ''' while not self.loop.is_set(): #mantiene vivo el thread self.loop.wait(0.01) def quit(self): ''' Cambia el flag interno para terminar la funcion ``self.run()`` y terminar el Thread ''' self.loop.set() def create(self): logging.debug('generando certificado') logging.debug('numero de titulos %s', self.watcher.num_titulos_emitidos) #toma el tiempo y suma uno a los titulos now = datetime.datetime.now() self.watcher.setNumTitulosPlus() new_num = self.watcher.num_titulos_emitidos #actualiza el valor del capital percentage = (self.valor_minuto * self.valor_simbolico) / 100 addToCapital = percentage * self.tiempo_trabajo self.watcher.setCapital(addToCapital) logging.debug('>>> valuacion: %s', addToCapital) logging.debug('nuevo numero de titulos %s', new_num) CA_response = self.ca.generate_and_sign('CO', 'Bogota', 'Bogota', 'generador de valores', 'generador de certificados', str(new_num).zfill(9), new_num) logging.debug('certificado: %s', CA_response) source = self.tw.createSource(CA_response['certificate'], CA_response['digest'], str(new_num).zfill(9), now) new_post = self.api.post_valor(new_num, now, CA_response['certificate'], CA_response['key'], source) logging.debug('nuevo cert', new_post) #al finalizar vuelve a poner el set en el evento #self.doit.set() return source