📄 jembossauthserver.java
字号:
matrices.append(dataFile[i]+"\n"); showdbOut.add("codons"); showdbOut.add(matrices.toString()); return showdbOut; } /** * * Run an emboss application * @param embossCommand command line to run * @param options options * @param inFiles input files * @param userName userName * @param passwd passwd * @return output files from application run * */ public synchronized Vector run_prog(String embossCommand, String options, Vector inFiles, String userName, byte[] passwd) { tmproot = tmproot.concat(userName+fs); Ajax aj = new Ajax(); Vector result = new Vector(6,1); if(!verifyUser(aj,userName,passwd,result)) return result; String dat = new Date().toString(); dat = dat.replace(':','_'); //disallow multiple command constructions if(embossCommand.indexOf(";") > -1) { String warn = new String(userName+":: "+dat+ " ERROR: Disallowed command syntax "+ embossCommand); appendToLogFile(warn,errorLog); result.add("msg"); result.add(warn); result.add("status"); result.add("1"); result.trimToSize(); return result; } //trap anything that is trying to write to stdout int stdIndex = embossCommand.indexOf(" stdout "); if(stdIndex > -1) { String startCmd = embossCommand.substring(0,stdIndex+7); String endCmd = embossCommand.substring(stdIndex+8); embossCommand = startCmd.concat("file "); embossCommand = embossCommand.concat(endCmd); } boolean ok = false; // listing of users root directory try { aj.setErrStd(); ok = aj.listDirs(userName,passwd,environ,tmproot); } catch(Exception exp){}// create the results directory structure for this user if necessary if(!ok) { try { aj.setErrStd(); ok = aj.makeDir(userName,passwd,environ,tmproot); } catch(Exception exp){}// if(ok && aj.getErrStd().equals(""))// Linux fix - ignore stderr here if(ok) appendToLogFile(userName+":: "+dat+" Created directory "+tmproot,errorLog); else { String warnmsg = new String(userName+":: "+dat+" Failed to create dir "+tmproot+ "\nSTDERR :"+ aj.getErrStd()); appendToLogFile(warnmsg,errorLog); result.add("msg"); result.add(warnmsg); result.add("status"); result.add("1"); result.trimToSize(); return result; } }//get a unique project name String appl = embossCommand.substring(0,embossCommand.indexOf(" ")); Random rnd = new Random(); String project = new String(tmproot + appl + "_" + dat.replace(' ','_') + "_" + rnd.nextInt(99999)); try { aj.setErrStd(); ok = aj.makeDir(userName,passwd,environ,project); } catch(Exception exp){} if(!ok) return returnError(aj,"run_prog failed to create dir "+ project,userName);//create description file & input files StringBuffer descript = new StringBuffer(); descript.append("EMBOSS run details for "); descript.append(appl); descript.append(ls); descript.append(ls); descript.append("Parameters Used: "); descript.append(embossCommand); descript.append(ls); descript.append("Started: "); descript.append(dat); descript.append(ls); descript.append(ls); descript.append("Input files:"); descript.append(ls);//write input files to project directory Vector inFileNames = new Vector(); for(Enumeration e = inFiles.elements() ; e.hasMoreElements() ;) { String thiskey = (String)e.nextElement(); // file name inFileNames.add(thiskey); descript.append(project); descript.append(fs); descript.append(thiskey); descript.append(ls); ok = false; try { aj.setErrStd(); ok = aj.putFile(userName,passwd,environ, new String(project+fs+thiskey), (byte[])e.nextElement()); } catch(Exception exp){} if(!ok) return returnError(aj,"Failed to make file "+ project+fs+thiskey,userName); }//write decription file to project directory ok = false; try { aj.setErrStd(); ok = aj.putFile(userName,passwd,environ, new String(project + fs + ".desc"), descript.toString().getBytes()); } catch(Exception exp){} if(!ok) return returnError(aj,"Failed to make file "+ project+fs+".desc",userName); new AppendToLogFileThread(userName+":: "+dat+" "+options+ " "+embossCommand,logFile,true).start(); result.add("cmd"); result.add(embossCommand); result.add("status"); result.add("0"); File projectDir = new File(project); if(options.toLowerCase().indexOf("interactive") > -1) { ok=true; try { aj.setErrStd(); ok = aj.forkEmboss(userName,passwd,environ, embossCommand,project); } catch(Exception exp){} //include any stderr from EMBOSS result.add("msg"); result.add(aj.getErrStd());//add a finished file try { aj.setErrStd(); ok = aj.putFile(userName,passwd,environ, new String(project+fs+".finished"), (new Date()).toString().getBytes()); } catch(Exception exp){} if(!ok) return returnError(aj,"putFile error in run_prog",userName);//get the output files result = loadFilesContent(aj,userName,passwd, projectDir,project,result,inFileNames); for(int i=0;i<passwd.length;i++) passwd[i] = '\0'; } else //batch or background {// COMMENT THIS LINE TO USE QUEUEING SOFTWARE boolean lforkB = aj.forkBatch(userName,passwd,environ, embossCommand,project);// UNCOMMENT ONE OF THESE LINE TO USE QUEUEING SOFTWARE// runAsBatch(aj,userName,passwd,project,quoteMe(embossCommand));// runAsGNQSBatch(aj,userName,passwd,project,quoteMe(embossCommand));// runAsPBSBatch(aj,userName,passwd,project,quoteMe(embossCommand)); result.add("msg"); result.add(""); result.add("job_submitted"); result.add("Job " + projectDir.getName() + "submitted."); result.add("jobid"); result.add(projectDir.getName()); result.add("description"); result.add(descript+ls+"Application pending"+ls); } return result; } /** * * Quote all tokens ready for shell scripts * @param s text to quote * @return quoted text * */ private String quoteMe(String s) { StringBuffer qs = new StringBuffer(); StringTokenizer st = new StringTokenizer(s.trim()," "); String tok; while (st.hasMoreTokens()) { tok = st.nextToken().trim(); if(!tok.equals(" ")) { qs.append("\""); qs.append(tok); qs.append("\" "); } } return qs.toString(); } /** * * Submit to a OpenPBS batch queue. This method creates a script for * submission to a batch queueing system. * @param aj ajax/jni * @param userName username * @param passwd passwd * @param project project directory * @param embossCommand emboss command * */ private void runAsPBSBatch(Ajax aj, String userName, byte[] passwd, String project, String embossCommand) { StringBuffer scriptIt = new StringBuffer(); scriptIt.append("#PBS -j oe\n"); scriptIt.append("#PBS -S /bin/sh\n"); scriptIt.append(environ.replace(' ','\n')); scriptIt.append("\nexport PATH\n"); scriptIt.append("export PLPLOT_LIB\n"); scriptIt.append("export EMBOSS_DATA\n"); scriptIt.append("cd "+project+"\n"+embossCommand+"\n"); scriptIt.append("date > "+project+"/.finished\n"); String scriptFile = new String(project+fs+".scriptfile"); boolean ok = false; try { ok = aj.putFile(userName,passwd,environ,scriptFile, scriptIt.toString().getBytes()); } catch(Exception exp){} if(!ok) { String dat = new Date().toString(); dat = dat.replace(':','_'); appendToLogFile(userName+":: "+dat+ " Failed to make file "+project+fs+".scriptfile\n"+ "STDERR "+aj.getErrStd()+"\n"+ "STDOUT "+aj.getOutStd(),errorLog); } boolean lfork=true; try { //EDIT batchCommand String batchCommand = "/hgmp/local/openpbs/bin/qsub "+scriptFile; lfork = aj.forkEmboss(userName,passwd,environ, batchCommand,project); } catch(Exception exp){} if(!lfork || !aj.getErrStd().equals("")) { String dat = new Date().toString(); dat = dat.replace(':','_'); appendToLogFile(userName+":: "+dat+ " Fork batch process failed "+embossCommand,errorLog); } return; } /** * * Submit to a Generic NQS batch queue. This method creates a script for * submission to a batch queueing system. * @param aj ajax/jni * @param userName username * @param passwd passwd * @param project project directory * @param embossCommand emboss command * */ private void runAsGNQSBatch(Ajax aj, String userName, byte[] passwd, String project, String embossCommand) { String scriptIt = "#QSUB -q jemboss-queue\n"; scriptIt = scriptIt.concat("#QSUB -s /bin/sh\n"); scriptIt = scriptIt.concat("#QSUB -eo -o report.nqs\n"); scriptIt = scriptIt.concat(environ.replace(' ','\n')); scriptIt = scriptIt.concat("\nexport PATH\n"); scriptIt = scriptIt.concat("export PLPLOT_LIB\n"); scriptIt = scriptIt.concat("export EMBOSS_DATA\n"); scriptIt = scriptIt.concat("cd "+project+"\n"+embossCommand+"\n"); scriptIt = scriptIt.concat("date > "+project+"/.finished\n"); String scriptFile = new String(project+fs+".scriptfile"); boolean ok = false; try { ok = aj.putFile(userName,passwd,environ,scriptFile, scriptIt.getBytes()); } catch(Exception exp){} if(!ok) { String dat = new Date().toString(); dat = dat.replace(':','_'); appendToLogFile(userName+":: "+dat+" Failed to make file "+project+fs+".scriptfile",errorLog); appendToLogFile(userName+":: "+dat+" STDERR "+aj.getErrStd(),errorLog); appendToLogFile(userName+":: "+dat+" STDOUT "+aj.getOutStd(),errorLog); } boolean lfork=true; try { //EDIT batchCommand String batchCommand = "/hgmp/local/nqs/bin/qsub "+scriptFile; lfork = aj.forkEmboss(userName,passwd,environ, batchCommand,project); } catch(Exception exp){} if(!lfork || !aj.getErrStd().equals("")) { String dat = new Date().toString(); dat = dat.replace(':','_'); appendToLogFile(userName+":: "+dat+ " Fork batch process failed "+embossCommand,errorLog); } return; } /** * * Submit to a batch queue * @param aj ajax/jni * @param userName username * @param passwd passwd * @param project project directory * @param embossCommand emboss command * */ private void runAsBatch(Ajax aj, String userName, byte[] passwd, String project, String embossCommand) { String scriptIt = "#!/bin/sh\n"; scriptIt = scriptIt.concat(environ.replace(' ','\n')); scriptIt = scriptIt.concat("\nexport PATH\n"); scriptIt = scriptIt.concat("export PLPLOT_LIB\n"); scriptIt = scriptIt.concat("export EMBOSS_DATA\n"); scriptIt = scriptIt.concat("cd "+project+"\n"+embossCommand+"\n"); scriptIt = scriptIt.concat("date > "+project+"/.finished\n"); boolean ok = false; try { ok = aj.putFile(userName,passwd,environ, new String(project+fs+".scriptfile"), scriptIt.getBytes()); } catch(Exception exp){} if(!ok) { String dat = new Date().toString(); dat = dat.replace(':','_'); appendToLogFile(userName+":: "+dat+" Failed to make file "+project+fs+".scriptfile",errorLog); appendToLogFile(userName+":: "+dat+" STDERR "+aj.getErrStd(),errorLog); appendToLogFile(userName+":: "+dat+" STDOUT "+aj.getOutStd(),errorLog); } boolean lfork=true; try { //EDIT batchCommand String batchCommand = "/bin/batchQueue.sh " + project + "/.scriptfile "; lfork = aj.forkEmboss(userName,passwd,environ, batchCommand,project); } catch(Exception exp){} if(!lfork || !aj.getErrStd().equals("")) { String dat = new Date().toString(); dat = dat.replace(':','_'); appendToLogFile(userName+":: "+dat+ " Fork batch process failed "+embossCommand,errorLog); } return; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -