From 8256bed38c0abeefe003adf6d9f126113f9cc5b3 Mon Sep 17 00:00:00 2001 From: Sasha Sherstnev Date: Fri, 10 Jan 2014 14:53:06 +0000 Subject: [PATCH] Add the "Reload" and "CSV" buttons --- server/compbio/controllers/BasicController.java | 15 ++++---- .../controllers/DailyStatisticsController.java | 13 +++++-- server/compbio/controllers/IPDataController.java | 7 ++++ server/compbio/controllers/JobController.java | 21 +++++++++-- server/compbio/controllers/MainController.java | 5 +-- .../compbio/controllers/SSFeaturesController.java | 11 ++++++ server/compbio/controllers/SequenceController.java | 38 ++++++++++++++++++-- webapp/view/reportIP.jsp | 34 ++++++++++++++++++ webapp/view/reportIPstatistics.jsp | 17 +++++++-- webapp/view/reportJobLog.jsp | 12 +++++-- webapp/view/reportJobStatistics.jsp | 16 ++++++--- webapp/view/reportJobStatisticsOneDay.jsp | 10 +++++- webapp/view/reportProteinSequences.jsp | 29 ++++++++++++--- webapp/view/reportProteinSequencesCounter.jsp | 34 +++++++++++++----- webapp/view/reportSSFeatures.jsp | 30 +++++++++++++--- webapp/view/reportTimeExecution.jsp | 10 ++++-- 16 files changed, 258 insertions(+), 44 deletions(-) diff --git a/server/compbio/controllers/BasicController.java b/server/compbio/controllers/BasicController.java index a714c4d..d97b59c 100644 --- a/server/compbio/controllers/BasicController.java +++ b/server/compbio/controllers/BasicController.java @@ -17,7 +17,7 @@ public class BasicController { protected Calendar cal = Calendar.getInstance(); protected String theEaerlistDate = DateFormatter.DateLongToString(CassandraReader.earliestDate(), formaterYYMMDD); protected String theCurrentDate = cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DAY_OF_MONTH); - + protected String getPrincipalName() { Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); if (principal instanceof UserDetails) { @@ -64,20 +64,21 @@ public class BasicController { } return false; } - + protected String DateChecking(String trimmeddate1, String trimmeddate2, long longDate1, long longDate2) { Calendar cal2 = Calendar.getInstance(); - if (trimmeddate1.equalsIgnoreCase("") || trimmeddate2.equalsIgnoreCase("")) + if (trimmeddate1.equalsIgnoreCase("") || trimmeddate2.equalsIgnoreCase("")) return "The date cann't be empty"; - else if (!DateFormatter.isThisDateValid(trimmeddate1, formaterYYMMDD) || !DateFormatter.isThisDateValid(trimmeddate2, formaterYYMMDD)) + else if (!DateFormatter.isThisDateValid(trimmeddate1, formaterYYMMDD) + || !DateFormatter.isThisDateValid(trimmeddate2, formaterYYMMDD)) return "The date format in invalid. Try format yyyy/mm/dd"; - else if (longDate2 < CassandraReader.earliestDate()) + else if (longDate2 < CassandraReader.earliestDate()) return "The date2 is after the earlestDate " + theEaerlistDate; else if (longDate1 > cal2.getTimeInMillis()) return "The date1 is before the current date " + theCurrentDate; - else if (longDate1 > longDate2) + else if (longDate1 > longDate2) return "Wrong date's diaposon. The date1 is more than date2."; - else + else return null; } } diff --git a/server/compbio/controllers/DailyStatisticsController.java b/server/compbio/controllers/DailyStatisticsController.java index 72ece7e..a9b51f1 100644 --- a/server/compbio/controllers/DailyStatisticsController.java +++ b/server/compbio/controllers/DailyStatisticsController.java @@ -14,6 +14,7 @@ import compbio.engine.JobStatus; import compbio.cassandra.CassandraReader; import compbio.cassandra.DateBean; import compbio.cassandra.DateFormatter; +import compbio.cassandra.Total; import compbio.cassandra.TotalJobsStatisticBean; import compbio.statistic.CassandraRequester; @@ -60,8 +61,8 @@ public class DailyStatisticsController extends BasicController { * the final date for the report (if option is set, date2 = * today) * @param option - * defined whether the whole time range of jobs is reported - * (null means date1 and date2 are used) + * defined whether the whole time range of jobs is reported (null + * means date1 and date2 are used) * @return link to the report JSP page */ @RequestMapping(value = "/stat/jobsdaily/results", method = RequestMethod.GET) @@ -101,6 +102,14 @@ public class DailyStatisticsController extends BasicController { model.put("date2", date2); TotalJobsStatisticBean res = cr.countJobs(date1, date2); model.put("result", res); + Map results = res.getDateTotal(); + String csvline = "\'Date\',\'Total\',\'OK\',\'Stopped\',\'Error\',\'Timeout\'%0A"; + for (Map.Entry entry : results.entrySet()) { + csvline += "\'" + entry.getKey() + "\',\'" + entry.getValue().getTotal() + "\',\'" + entry.getValue().getTotalOK() + "\',\'" + + entry.getValue().getTotalStopped() + "\',\'" + entry.getValue().getTotalError() + "\',\'" + + entry.getValue().getTotalTimeOut() + "\'%0A"; + } + model.put("csvfile", csvline); model.put("ndays", res.getDateTotal().size()); final long endTime = System.currentTimeMillis(); model.put("timeExecution", (endTime - startTime)); diff --git a/server/compbio/controllers/IPDataController.java b/server/compbio/controllers/IPDataController.java index 5f3f5e1..86f752e 100644 --- a/server/compbio/controllers/IPDataController.java +++ b/server/compbio/controllers/IPDataController.java @@ -63,9 +63,16 @@ public class IPDataController extends BasicController { List r = cr.readIpByCounter(realcounter); model.put("results", r); model.put("njobs", 0); + String csvline = ""; if (null != r) { model.put("njobs", r.size()); + csvline = "\'Job%20 count\', \'IP\'%0A"; } + // form line for CSV file + for (TotalByCounterBean b : r) { + csvline += "\'" + b.getTotaljobs() + "\',\'" + b.getName() + "\'%0A"; + } + model.put("csvfile", csvline); final long endTime = System.currentTimeMillis(); model.put("timeExecution", (endTime - startTime)); model.put("counter", realcounter); diff --git a/server/compbio/controllers/JobController.java b/server/compbio/controllers/JobController.java index 4819e75..254fdc2 100644 --- a/server/compbio/controllers/JobController.java +++ b/server/compbio/controllers/JobController.java @@ -14,7 +14,6 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import compbio.statistic.CassandraRequester; -import compbio.cassandra.CassandraNativeConnector; import compbio.cassandra.DataBase; import compbio.engine.archive.ArchivedJob; @@ -91,6 +90,23 @@ public class JobController extends BasicController { model.put("option", option); List res = sp.extractExecutionTime(date1, date2); model.put("result", res); + String csvline = ""; + if (0 < res.size()) { + csvline = "\'Date\',\'Total\',\'0-30 sec\',\'30-60 sec\',\'1-2 min\',\'2-10 min\',\'more 10 min\'%0A"; + for (DataBase entry : res) { + List counts = entry.getTimeRez(); + int total = 0; + for (int i = 0; i < counts.size(); ++i) { + total += counts.get(i); + } + csvline += "\'" + entry.getDate() + "\',\'" + total; + for (int i = 0; i < counts.size(); ++i) { + csvline += "\',\'" + counts.get(i); + } + csvline += "\'%0A"; + } + } + model.put("csvfile", csvline); model.put("ndays", res.size() - 1); final long endTime = System.currentTimeMillis(); model.put("timeExecution", (endTime - startTime)); @@ -131,8 +147,7 @@ public class JobController extends BasicController { * * @param indate * date in milliseconds from 1 Jan 1970 - * @return date - * in the form of yyyy/mm/dd + * @return date in the form of yyyy/mm/dd */ private String DateFormatYYMMDD(long indate) { SimpleDateFormat datformat = new SimpleDateFormat("yyyy/MM/dd"); diff --git a/server/compbio/controllers/MainController.java b/server/compbio/controllers/MainController.java index d5bef44..d555d36 100644 --- a/server/compbio/controllers/MainController.java +++ b/server/compbio/controllers/MainController.java @@ -11,7 +11,8 @@ public class MainController extends BasicController { @RequestMapping(value = "/index", method = RequestMethod.GET) public String printPublicHome(ModelMap model) { model.addAttribute("username", getPrincipalName()); - if (isUserRole()) return "home"; + if (isUserRole()) + return "home"; return "public"; } @@ -38,7 +39,7 @@ public class MainController extends BasicController { } @RequestMapping(value = "/home", method = RequestMethod.GET) - public String printHome(ModelMap model ) { + public String printHome(ModelMap model) { model.addAttribute("username", getPrincipalName()); return "home"; } diff --git a/server/compbio/controllers/SSFeaturesController.java b/server/compbio/controllers/SSFeaturesController.java index 0339659..ba81cab 100644 --- a/server/compbio/controllers/SSFeaturesController.java +++ b/server/compbio/controllers/SSFeaturesController.java @@ -69,9 +69,20 @@ public class SSFeaturesController extends BasicController { Map r = cr.readProteinsPrediction(typeFeature, realpercent); model.put("results", r); model.put("njobs", 0); + String csvline = ""; if (null != r) { model.put("njobs", r.size()); + csvline = "\'Prediction%20number\',\'Protein%20Sequence\', \'Secondary%20Structure%20Prediction\'%0A"; } + + // form line for CSV file + int counter = 1; + for (Map.Entry entry : r.entrySet()) { + csvline += "\'" + counter + "\',\'" + entry.getKey() + "\',\'" + entry.getValue() + "\'%0A"; + ++counter; + } + model.put("csvfile", csvline); + final long endTime = System.currentTimeMillis(); model.put("timeExecution", (endTime - startTime)); model.put("feature", typeFeature); diff --git a/server/compbio/controllers/SequenceController.java b/server/compbio/controllers/SequenceController.java index df4c987..738e2d8 100644 --- a/server/compbio/controllers/SequenceController.java +++ b/server/compbio/controllers/SequenceController.java @@ -1,5 +1,6 @@ package compbio.controllers; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.regex.Pattern; @@ -9,7 +10,9 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; +import compbio.cassandra.DataBase; import compbio.cassandra.ProteinBean; +import compbio.cassandra.Total; import compbio.cassandra.TotalByCounterBean; import compbio.statistic.CassandraRequester; @@ -68,7 +71,7 @@ public class SequenceController extends BasicController { model.put("njobs", 0); model.put("prot", trimmedsequence); model.put("searchtype", searchtype); - + String csvline = ""; if (0 < trimmedsequence.length()) { CassandraRequester cr = new CassandraRequester(); List r = cr.readProteins(trimmedsequence, searchtype); @@ -78,8 +81,23 @@ public class SequenceController extends BasicController { model.put("njobs", r.get(0).getJobid().size()); else model.put("njobs", r.size()); + csvline = "\'Job\',\'Annotation\',\'Sequence\'%0A"; + } + // form CSV file string + for (ProteinBean entry : r) { + List jobs = entry.getJobid(); + String protein = entry.getSequence(); + LinkedHashMap predictions = entry.getPredictions(); + for (String job : jobs) { + csvline += "\'" + job + "\',\'Sequence\',\'" + protein + "\',\'%0A"; + for (Map.Entry pr : predictions.entrySet()) { + csvline += "\'\',\'" + pr.getKey() + "\',\'" + pr.getValue() + "\'%0A"; + } + } } } + model.put("csvfile", csvline); + final long endTime = System.currentTimeMillis(); model.put("timeExecution", (endTime - startTime)); return "reportProteinSequences"; @@ -113,11 +131,27 @@ public class SequenceController extends BasicController { CassandraRequester cr = new CassandraRequester(); List r = cr.readProteinByCounter(realcounter); - model.put("results", r); model.put("njobs", 0); + String csvline = ""; if (null != r) { model.put("njobs", r.size()); + csvline = "\'Job%20 count\', \'Protein%20Sequence\'%0A"; } + // form line for CSV file + + for (TotalByCounterBean b : r) { + if (b.getName().equals("")) { + csvline += "\'" + b.getTotaljobs() + "\',\'Alignment%20job\'%0A"; + // fix problem with records without protein sequence (alignment + // jobs) + b.setName("Alignment job"); + } else { + csvline += "\'" + b.getTotaljobs() + "\',\'" + b.getName() + "\'%0A"; + } + } + model.put("csvfile", csvline); + + model.put("results", r); final long endTime = System.currentTimeMillis(); model.put("timeExecution", (endTime - startTime)); model.put("counter", realcounter); diff --git a/webapp/view/reportIP.jsp b/webapp/view/reportIP.jsp index 0d87c6e..529defc 100644 --- a/webapp/view/reportIP.jsp +++ b/webapp/view/reportIP.jsp @@ -12,6 +12,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + +

Jobs executed from ${ip}

@@ -25,6 +57,7 @@

${njobs} jobs found:

+
@@ -57,6 +90,7 @@
+
diff --git a/webapp/view/reportIPstatistics.jsp b/webapp/view/reportIPstatistics.jsp index 2a6c882..2214e5e 100644 --- a/webapp/view/reportIPstatistics.jsp +++ b/webapp/view/reportIPstatistics.jsp @@ -12,10 +12,23 @@
+ + + +
-
Jobs Statistics
+

IP Statistics

@@ -26,7 +39,7 @@

${njobs} IP with at least ${counter} jobs ever launched

- +
diff --git a/webapp/view/reportJobLog.jsp b/webapp/view/reportJobLog.jsp index da1fcde..115f9af 100644 --- a/webapp/view/reportJobLog.jsp +++ b/webapp/view/reportJobLog.jsp @@ -28,11 +28,18 @@

Job archive: download

+
Number of jobs
+ + + + + + - - + @@ -44,6 +51,7 @@
IDSequence
Sequence + Protein ${result.sequence}
+
diff --git a/webapp/view/reportJobStatistics.jsp b/webapp/view/reportJobStatistics.jsp index 185cbfc..09a3a87 100644 --- a/webapp/view/reportJobStatistics.jsp +++ b/webapp/view/reportJobStatistics.jsp @@ -13,11 +13,17 @@ - + +
diff --git a/webapp/view/reportJobStatisticsOneDay.jsp b/webapp/view/reportJobStatisticsOneDay.jsp index 82a3def..23af0ac 100644 --- a/webapp/view/reportJobStatisticsOneDay.jsp +++ b/webapp/view/reportJobStatisticsOneDay.jsp @@ -12,6 +12,7 @@ +