From 061055038b377d55c7327ec0ebb5216b4c6da9ce Mon Sep 17 00:00:00 2001 From: Natasha Sherstneva Date: Thu, 23 Jan 2014 10:57:45 +0000 Subject: [PATCH] fixed Execution Time Statistics report --- conf/Proteocache.properties | 2 +- .../cassandra/CassandraNativeConnector.java | 1 - .../cassandra/readers/ExecutionTimeReader.java | 35 ++++++++++--- engine/compbio/engine/ExecutionInterval.java | 44 ++++++++++++++++ .../controllers/DailyStatisticsController.java | 4 +- server/compbio/controllers/JobController.java | 53 ++++++++++++++++++++ webapp/view/reports/TimeExecution.jsp | 36 +++++++++++-- 7 files changed, 159 insertions(+), 16 deletions(-) create mode 100644 engine/compbio/engine/ExecutionInterval.java diff --git a/conf/Proteocache.properties b/conf/Proteocache.properties index edb54ad..24307b7 100644 --- a/conf/Proteocache.properties +++ b/conf/Proteocache.properties @@ -11,7 +11,7 @@ cassandra.version.update=false ################################################################################# # Jpred sources # real Jpred web-server -cassandra.jpred.web.update=false +cassandra.jpred.web.update=true cassandra.jpred.web.inidelay=0 cassandra.jpred.web.updaterate=30 diff --git a/datadb/compbio/cassandra/CassandraNativeConnector.java b/datadb/compbio/cassandra/CassandraNativeConnector.java index 3360ad1..bb807c1 100644 --- a/datadb/compbio/cassandra/CassandraNativeConnector.java +++ b/datadb/compbio/cassandra/CassandraNativeConnector.java @@ -115,7 +115,6 @@ public class CassandraNativeConnector { */ 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 --git a/datadb/compbio/cassandra/readers/ExecutionTimeReader.java b/datadb/compbio/cassandra/readers/ExecutionTimeReader.java index 6bd17eb..bca4666 100644 --- a/datadb/compbio/cassandra/readers/ExecutionTimeReader.java +++ b/datadb/compbio/cassandra/readers/ExecutionTimeReader.java @@ -1,8 +1,5 @@ package compbio.cassandra.readers; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -10,11 +7,9 @@ import java.util.List; import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.Row; +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.Pair; @@ -77,6 +72,32 @@ public class ExecutionTimeReader extends CassandraReader { } query.setWholeTotal(wholeTotal); return query; - } + + /** + * query: jobs and sequence at a date with current execution time interval + * + * @param day + * the date in long format + * @param date + * the date in String format + * + * @param interval + * buttom and top bounds of the interval Pair + * @return DateBean to the controller JobController + **/ + public DateBean readJobByDay(long day, String date, Pair interval) { + DateBean res = new DateBean(date); + ResultSet results = CassandraQuery("SELECT * FROM ProteinData WHERE jobtime = " + day + ";"); + if (results == null || results.isExhausted()) + return null; + List rows = results.all(); + for (Row r : rows) { + if (interval.getElement0() <= r.getInt("ExecTime")/1000 && r.getInt("ExecTime")/1000 < interval.getElement1()) + res.setJobidAndSeq(r.getString("JobID"), r.getString("Protein")); + + } + return res; + } + } diff --git a/engine/compbio/engine/ExecutionInterval.java b/engine/compbio/engine/ExecutionInterval.java new file mode 100644 index 0000000..9b0bcee --- /dev/null +++ b/engine/compbio/engine/ExecutionInterval.java @@ -0,0 +1,44 @@ +package compbio.engine; + +import compbio.cassandra.Pair; + + +/** + * List of all possible execution time intervals for statistics + * + */ +public enum ExecutionInterval { + ZERO_THIRTY_SEC, THIRTY_SIXTY_SEC, ONE_TWO_MIN, TWO_TEN_MIN, MORE_THEN_TEN_MIN; + + public static ExecutionInterval getExecutionInterval(String interval) { + interval = interval.trim().toLowerCase(); + for (ExecutionInterval execInterval : ExecutionInterval.values()) { + if (execInterval.toString().equalsIgnoreCase(interval)) { + return execInterval; + } + } + return null; + } + + public static Pair getBoundsInterval(String interval) { + ExecutionInterval execInterval = getExecutionInterval(interval); + if (execInterval != null) + switch (execInterval) { + case ZERO_THIRTY_SEC: + return Pair.createPair(0, 30); + case THIRTY_SIXTY_SEC: + return Pair.createPair(30, 60); + case ONE_TWO_MIN: + return Pair.createPair(60, 120); + case TWO_TEN_MIN: + return Pair.createPair(120, 600); + case MORE_THEN_TEN_MIN: + return Pair.createPair(120, Integer.MAX_VALUE); + default: + return null; + } + return null; + } + + +} diff --git a/server/compbio/controllers/DailyStatisticsController.java b/server/compbio/controllers/DailyStatisticsController.java index 322f74e..5d183f9 100644 --- a/server/compbio/controllers/DailyStatisticsController.java +++ b/server/compbio/controllers/DailyStatisticsController.java @@ -151,9 +151,9 @@ public class DailyStatisticsController extends BasicController { thetime = formaterDDMMYY.parse(realdate).getTime(); } - if (null == JobStatus.getJobStatus(status)) { + if (null == JobStatus.getJobStatus(status)) return "support/Notimplemented"; - } + DailyStatisticsReader reader = new DailyStatisticsReader(); // IMPORTANT: input should be suppied in the format: DD/MM/YYYY diff --git a/server/compbio/controllers/JobController.java b/server/compbio/controllers/JobController.java index 9fdc128..ff834bd 100644 --- a/server/compbio/controllers/JobController.java +++ b/server/compbio/controllers/JobController.java @@ -3,6 +3,7 @@ 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; @@ -16,6 +17,7 @@ import org.springframework.web.bind.annotation.RequestMethod; 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; @@ -23,8 +25,11 @@ 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.JobStatus; import compbio.engine.archive.ArchivedJob; /** @@ -137,6 +142,54 @@ public class JobController extends BasicController { 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 diff --git a/webapp/view/reports/TimeExecution.jsp b/webapp/view/reports/TimeExecution.jsp index face3d7..dbf654c 100644 --- a/webapp/view/reports/TimeExecution.jsp +++ b/webapp/view/reports/TimeExecution.jsp @@ -10,6 +10,7 @@
+ @@ -73,11 +74,36 @@ ${res.key} ${value.total} - ${value.total0_30s} - ${value.total30_60s} - ${value.total1_2m} - ${value.total2_10m} - ${value.total10m} + + + 0 + ${value.total0_30s} + + + + + 0 + ${value.total30_60s} + + + + + 0 + ${value.total1_2m} + + + + + 0 + ${value.total2_10m} + + + + + 0 + ${value.total10m} + + -- 1.7.10.2