+ private int analyseJob(String[] job) throws IOException {
+ boolean running = true;
+ boolean ConcisefileExists = false;
+ boolean LogfileExists = false;
+ String id = job[job.length - 1];
+ String startdatestring = job[0].substring(0, job[0].indexOf(":"));
+ Date startdate = new Date(0);
+ Date starttime = new Date(0);
+ Date endtime = new Date(0);
+ Date currDate = new Date();
+ String ip = job[2];
+ String execstatus = "OK";
+ String finalstatus = "OK";
+ String protein = "";
+ long exectime = 0;
+ String log = "";
+ String maindir = dirprefix + "/" + id + "/";
+ String concisefile = dirprefix + "/" + id + "/" + id + ".concise.fasta";
+ String archivefile = dirprefix + "/" + id + "/" + id + ".tar.gz";
+ String logfile = dirprefix + "/" + id + "/LOG";
+ SimpleDateFormat dateformatter = new SimpleDateFormat("yyyy/MM/dd");
+ SimpleDateFormat timeformatter = new SimpleDateFormat("yyyy/MM/dd:H:m:s");
+ try {
+ startdate = dateformatter.parse(startdatestring);
+ starttime = timeformatter.parse(job[0]);
+ endtime = timeformatter.parse(job[1]);
+ exectime = (endtime.getTime() - starttime.getTime()) / 1000;
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+
+ try {
+ URL dirurl = new URL(maindir);
+ HttpURLConnection httpConnection_dirurl = (HttpURLConnection) dirurl.openConnection();
+ if (httpConnection_dirurl.getResponseCode() < 199 || 300 <= httpConnection_dirurl.getResponseCode()) {
+ return 0;
+ }
+ URL conciseurl = new URL(concisefile);
+ URL archiveurl = new URL(archivefile);
+ URL logurl = new URL(logfile);
+ HttpURLConnection httpConnection_conciseurl = (HttpURLConnection) conciseurl.openConnection();
+ HttpURLConnection httpConnection_logurl = (HttpURLConnection) logurl.openConnection();
+ HttpURLConnection httpConnection_archiveurl = (HttpURLConnection) archiveurl.openConnection();
+ if (199 < httpConnection_conciseurl.getResponseCode() && httpConnection_conciseurl.getResponseCode() < 300) {
+ ConcisefileExists = true;
+ running = false;
+ try {
+ protein = parsePredictions(conciseurl.openStream(), id);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ } else {
+ // The job still can be running of failed...
+ ++countNoData;
+ alignment = new ArrayList<FastaSequence>();
+ predictions = new ArrayList<FastaSequence>();
+ }
+ if (199 < httpConnection_logurl.getResponseCode() && httpConnection_logurl.getResponseCode() < 300) {
+ LogfileExists = true;
+ log = parseLogFile(logurl.openStream());
+ } else {
+ // The job has not been started at all...
+ execstatus = "FAIL";
+ finalstatus = "STOPPED";
+ running = false;
+ }
+ if (log.matches("(.*)TIMEOUT\\syour\\sjob\\stimed\\sout(.*)")) {
+ // blast job was too long (more than 3600 secs by default)...
+ execstatus = "FAIL";
+ finalstatus = "TIMEDOUT";
+ running = false;
+ } else if (log.matches("(.*)Jpred\\serror:\\sDied\\sat(.*)")) {
+ // an internal Jpred error...
+ execstatus = "FAIL";
+ finalstatus = "JPREDERROR";
+ running = false;
+ } else if ((currDate.getTime() - endtime.getTime()) / 1000 > 3601 && LogfileExists && !ConcisefileExists) {
+ // the job was stopped with unknown reason...
+ execstatus = "FAIL";
+ finalstatus = "STOPPED";
+ running = false;
+ }
+
+ httpConnection_conciseurl.disconnect();
+ httpConnection_logurl.disconnect();
+ httpConnection_archiveurl.disconnect();
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ }
+
+ if (!running) {
+ long t = startdate.getTime();
+ cw.FormQueryTables(t, job[0], job[1], ip, id, execstatus, finalstatus, protein, predictions);
+ cw.ArchiveData(t, exectime, ip, id, execstatus, finalstatus, protein, predictions, alignment, log, archivefile);
+ return 1;
+ } else
+ System.out.println("job " + id + " is running");
+
+ return 0;
+ }
+