From: Sasha Sherstnev Date: Thu, 23 Jan 2014 14:33:17 +0000 (+0000) Subject: Merge branch 'DAO' X-Git-Url: http://source.jalview.org/gitweb/?p=proteocache.git;a=commitdiff_plain;h=7de49cca0d2c7525f698001533e0b48193715413;hp=-c Merge branch 'DAO' Conflicts: server/compbio/controllers/JobController.java --- 7de49cca0d2c7525f698001533e0b48193715413 diff --combined datadb/compbio/cassandra/CassandraNativeConnector.java index 909e041,bb807c1..f02000c --- a/datadb/compbio/cassandra/CassandraNativeConnector.java +++ b/datadb/compbio/cassandra/CassandraNativeConnector.java @@@ -88,11 -88,8 +88,11 @@@ public class CassandraNativeConnector session.execute("CREATE TABLE IF NOT EXISTS JobDateInfo " + "(jobday bigint, Total bigint, TotalOK bigint, TotalStopped bigint, TotalError bigint, TotalTimeOut bigint, Program varchar, Version varchar, PRIMARY KEY(jobday));"); - String com = "CREATE TABLE IF NOT EXISTS Users " - + "(name varchar, id bigint, email varchar, password varchar, organisation varchar, position varchar, signedtolist boolean, registrationdate bigint, PRIMARY KEY(id));"; + session.execute("CREATE TABLE IF NOT EXISTS Programs " + + "(Program varchar, Version varchar, Description varchar, weblink varchar, PRIMARY KEY(Program,Version));"); + + session.execute("CREATE TABLE IF NOT EXISTS Users " + + "(name varchar, id bigint, email varchar, password varchar, organisation varchar, position varchar, signedtolist boolean, registrationdate bigint, PRIMARY KEY(id));"); // session.execute("ALTER TABLE ProteinLog ADD ProgramName ascii;"); // session.execute("ALTER TABLE ProteinLog ADD ProgramVersion ascii;"); @@@ -118,7 -115,6 +118,6 @@@ */ public static long getEarliestDateInDB() { String com = "SELECT * FROM MainParameters WHERE Name = 'EarliestJobDate';"; - System.out.println("Command: " + com); ResultSet results = session.execute(com); if (!results.isExhausted()) { diff --combined server/compbio/controllers/JobController.java index 8033620,ff834bd..0dd39f8 --- a/server/compbio/controllers/JobController.java +++ b/server/compbio/controllers/JobController.java @@@ -3,7 -3,11 +3,9 @@@ package compbio.controllers import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; + import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.Calendar; + import java.util.Date; -import java.util.List; import java.util.Map; import org.apache.log4j.Logger; @@@ -13,22 -17,25 +15,24 @@@ import org.springframework.web.bind.ann import org.springframework.web.bind.annotation.RequestParam; import compbio.statistic.CassandraRequester; + import compbio.beans.DateBean; import compbio.beans.ExecutionTimeBean; -import compbio.beans.Total; import compbio.beans.TotalExecutionTime; -import compbio.beans.TotalJobsStatisticBean; -import compbio.cassandra.DataBase; import compbio.cassandra.DateFormatter; import compbio.cassandra.readers.CassandraReader; -import compbio.cassandra.readers.DailyStatisticsReader; import compbio.cassandra.readers.ExecutionTimeReader; import compbio.cassandra.readers.JobReader; + import compbio.engine.ExecutionInterval; import compbio.engine.archive.ArchivedJob; /** + * Spring controller for supporting job queries. This version works in the + * servlet style. + * * @author Alexander Sherstnev * @author Natasha Sherstneva - * @version 1.0 Dec 2013 + * @version 1.0 + * @since Dec 2013 */ @Controller public class JobController extends BasicController { @@@ -77,28 -84,22 +81,28 @@@ /** * form a report page for a job execution time statistics. * + * @param date1 + * initial date for requested statistics + * @param date2 + * final date for requested statistics + * @param alldates + * All available jobs are analyzed if alldates="AllDates,off" * @param model * MVC model * @return link to the JSP query page */ @RequestMapping(value = "/stat/exectime/results", method = RequestMethod.GET) public String findExecTimeData(@RequestParam("date1") String date1, @RequestParam("date2") String date2, - @RequestParam(value = "option", required = false) String option, Map model) { + @RequestParam(value = "option", required = false) String alldates, Map model) { model.put("username", getPrincipalName()); final long startTime = System.currentTimeMillis(); Calendar loccal = Calendar.getInstance(); ExecutionTimeReader reader = new ExecutionTimeReader(); - if (option.equals("AllDates,off")) { + if (alldates.equals("AllDates,off")) { date1 = theEaerlistDate; date2 = theCurrentDate; } - + // dates in string format String trimmeddate1 = date1.replaceAll("\\s", ""); String trimmeddate2 = date2.replaceAll("\\s", ""); @@@ -112,7 -113,7 +116,7 @@@ model.put("date2", date2); return "query/JobTimeExecution"; } - + if (longDate1 < CassandraReader.earliestDate()) longDate1 = CassandraReader.earliestDate(); if (longDate2 > loccal.getTimeInMillis()) @@@ -122,35 -123,80 +126,82 @@@ date2 = DateFormatter.DateLongToString(longDate2, formaterYYMMDD); model.put("date1", date1); model.put("date2", date2); - model.put("option", option); - ExecutionTimeBean res = reader.query(longDate1, longDate2);; + model.put("option", alldates); + ExecutionTimeBean res = reader.query(longDate1, longDate2); + ; model.put("result", res); Map results = res.getDateTotal(); - String csvline = ""; + StringBuilder csvline = new StringBuilder(""); if (0 < res.getDateTotal().size()) { - csvline = "\'Date\',\'Total\',\'0-30 sec\',\'30-60 sec\',\'1-2 min\',\'2-10 min\',\'more 10 min\'%0A"; + csvline.append("\'Date\',\'Total\',\'0-30 sec\',\'30-60 sec\',\'1-2 min\',\'2-10 min\',\'more 10 min\'%0A"); for (Map.Entry entry : results.entrySet()) { - csvline += "\'" + entry.getKey() + "\',\'" + entry.getValue().getTotal() + "\',\'" + entry.getValue().getTotal0_30s() + "\',\'" - + entry.getValue().getTotal30_60s() + "\',\'" + entry.getValue().getTotal1_2m() + "\',\'" - + entry.getValue().getTotal2_10m() + "\',\'" + entry.getValue().getTotal10m() + "\'%0A"; + csvline.append("\'" + entry.getKey() + "\',\'" + entry.getValue().getTotal() + "\',\'" + entry.getValue().getTotal0_30s() + + "\',\'" + entry.getValue().getTotal30_60s() + "\',\'" + entry.getValue().getTotal1_2m() + "\',\'" + + entry.getValue().getTotal2_10m() + "\',\'" + entry.getValue().getTotal10m() + "\'%0A"); } } - model.put("csvfile", csvline); + model.put("csvfile", csvline.toString()); model.put("ndays", res.getDateTotal().size() - 1); final long endTime = System.currentTimeMillis(); model.put("timeExecution", (endTime - startTime)); return "/reports/TimeExecution"; } + + /** + * form a report page for job statistics for one day only. + * + * @param model + * MVC model object + * @param date + * date for the report + * @param status + * + * @return link to the report JSP page + */ + @RequestMapping(value = "/stat/jobsoneday/executionTime", method = RequestMethod.GET) + public String findJobsInOneDay(@RequestParam("date") String date, @RequestParam("interval") String interval, Map model) + throws ParseException { + model.put("username", getPrincipalName()); + final long startTime = System.currentTimeMillis(); + + String realdate; + long thetime = 0; + try { + thetime = formaterYYMMDD.parse(date).getTime(); + if (thetime < 0) { + realdate = date; + } else { + realdate = formaterDDMMYY.format(new Date(thetime)); + } + } catch (ParseException e) { + realdate = date; + thetime = formaterDDMMYY.parse(realdate).getTime(); + } + + if (null == ExecutionInterval.getExecutionInterval(interval)) + return "support/Notimplemented"; + - + ExecutionTimeReader reader = new ExecutionTimeReader(); + // IMPORTANT: input should be suppied in the format: DD/MM/YYYY + DateBean r = reader.readJobByDay(thetime, realdate, ExecutionInterval.getBoundsInterval(interval)); + model.put("results", r); + if (r != null) + model.put("njobs", r.getJobidAndSeq().size()); + model.put("date", realdate); + model.put("status", interval); + final long endTime = System.currentTimeMillis(); + model.put("timeExecution", (endTime - startTime)); + return "reports/JobStatisticsOneDay"; + } /** - * form a query page for a job. The servlet should no be visible to users at - * all. + * form result page for one job with a given job ID. * + * @param jobid + * job ID * @param model * MVC model + * * @return link to the JSP query page * @throws IOException */ @@@ -164,7 -210,6 +215,7 @@@ model.put("timeExecution", (endTime - startTime)); model.put("IdJob", jobid); + // prepare archive file for the job for downloading ArchivedJob aj = new ArchivedJob(jobid); try { model.put("jobarchive", aj.prepareJobArchiveToWeb()); @@@ -182,4 -227,18 +233,4 @@@ return "reports/Job"; } - /** - * convert date from the standard long representation (milliseconds from 1 - * Jan 1970) to yyyy/mm/dd - * - * @param indate - * date in milliseconds from 1 Jan 1970 - * @return date in the form of yyyy/mm/dd - */ - private String DateFormatYYMMDD(long indate) { - SimpleDateFormat datformat = new SimpleDateFormat("yyyy/MM/dd"); - String dateString = datformat.format(new Date(indate)); - return dateString; - } - }