check the date in controller, new class dateFormatter
authorNatasha Sherstneva <n.shertneva@gmail.com>
Thu, 19 Dec 2013 11:02:02 +0000 (11:02 +0000)
committerNatasha Sherstneva <n.shertneva@gmail.com>
Thu, 19 Dec 2013 11:02:02 +0000 (11:02 +0000)
datadb/compbio/cassandra/CassandraReader.java
datadb/compbio/cassandra/CassandraReaderOld.java [new file with mode: 0644]
datadb/compbio/cassandra/DateFormatter.java [new file with mode: 0644]
datadb/compbio/cassandra/readers/CassandraReaderExecutionTime.java
server/compbio/controllers/DailyStatisticsController.java
server/compbio/statistic/CassandraRequester.java
webapp/view/query/JobStatistics.jsp

index 1720c48..00f878a 100644 (file)
@@ -1,20 +1,12 @@
 package compbio.cassandra;
 
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-
 import org.apache.log4j.Logger;
 
-import com.datastax.driver.core.Row;
-import com.datastax.driver.core.Session;
 import com.datastax.driver.core.ResultSet;
-
-import compbio.engine.JobStatus;
+import com.datastax.driver.core.Session;
 
 public class CassandraReader {
+       private static long earlestDate = 0;
        private Session session;
        private static Logger log = Logger.getLogger(CassandraNativeConnector.class);
 
@@ -27,292 +19,21 @@ public class CassandraReader {
                assert s != null;
                session = s;
        }
-
-       /*
-        * getting data from the db
-        */
-       public List<Pair<String, String>> ReadProteinDataTable() {
-               final long startTime = System.currentTimeMillis();
-               String com = "SELECT DataBegin,DataEnd FROM ProteinLog;";
+       
+       public ResultSet CassandraQuery(String column, String table, String condition) {
+               String com = "SELECT " + column + " FROM " + table + ";";
                System.out.println("Command: " + com);
                ResultSet results = session.execute(com);
-               final long queryTime = System.currentTimeMillis();
-               List<Row> rows = results.all();
-               System.out.println("Query time is " + (queryTime - startTime) + " msec");
-
-               List<Pair<String, String>> res = new ArrayList<Pair<String, String>>();
-               int c = 0;
-               for (Row r : rows) {
-                       Pair<String, String> pair = new Pair<String, String>(r.getString("DataBegin"), r.getString("DataEnd"));
-                       res.add(pair);
-                       ++c;
-               }
-               final long endTime = System.currentTimeMillis();
-               System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
-               return res;
+               return results;
        }
-
+       
        /*
-        * getting data from the db
-        */
-       public DateBean ReadProteinData(long day, String date) {
-               String com = "SELECT JobID, Protein FROM ProteinData WHERE jobtime = " + day + ";";
-               System.out.println("Command: " + com);
-               ResultSet results = session.execute(com);
-               if (results.isExhausted())
-                       return null;
-               List<Row> rows = results.all();
-               DateBean res = new DateBean(date);
-               for (Row r : rows) {
-                       res.setJobidAndSeq(r.getString("JobID"), r.getString("Protein"));
-               }
-               return res;
-       }
-
-       /**
-        * getting data from the db
+        * find the earliest date in the database
         */
-       public DateBean ReadFailedJobs(long day, String date, JobStatus status) {
-               // FailLog (jobtime, JobID, ExecTime, ip, FinalStatus)
-               String com = "SELECT JobID FROM FailLog WHERE jobtime = " + day + " and FinalStatus = '" + status.name() + "';";
-               ResultSet results = session.execute(com);
-               if (results.isExhausted())
-                       return null;
-               List<Row> rows = results.all();
-               DateBean res = new DateBean(date);
-               for (Row r : rows) {
-                       String jobid = r.getString("JobID");
-                       String com1 = "SELECT Protein FROM ProteinLog WHERE JobID = '" + jobid + "';";
-                       System.out.println("Command: " + com1);
-                       ResultSet results2 = session.execute(com1);
-                       List<Row> jrows = results2.all();
-                       if (1 == jrows.size()) {
-                               String protein = jrows.get(0).getString("Protein");
-                               res.setJobidAndSeq(jobid, protein);
-                       }
-               }
-               return res;
-       }
-
-       /*
-        * getting data from the db JobDateInfo
-        */
-       public Total ReadDateTable(long queryDate) {
-               ResultSet results = session.execute("SELECT * FROM JobDateInfo WHERE jobday = " + queryDate + ";");
-               if (results.isExhausted())
-                       return null;
-               Row therow = results.one();
-               Total res = new Total(therow.getLong("Total"), therow.getLong("TotalOK"), therow.getLong("TotalStopped"),
-                               therow.getLong("TotalError"), therow.getLong("TotalTimeOut"));
-               if (!results.isExhausted()) {
-                       Date date = new Date(queryDate);
-                       log.warn("CassandraReader.ReadDateTable: date row for " + date.toString() + " (" + queryDate + ") duplicated ");
-               }
-               return res;
-       }
-
-       /*
-        * getting whole protein sequence from the db ProteinRow
-        */
-       public List<ProteinBean> ReadWholeSequence(String queryProtein) {
-               final long startTime = System.currentTimeMillis();
-               String com = "SELECT JobID, Predictions FROM ProteinRow WHERE Protein = '" + queryProtein + "';";
-               System.out.println("Command: " + com);
-               ResultSet results = session.execute(com);
-               if (results.isExhausted())
-                       return null;
-               final long queryTime = System.currentTimeMillis();
-               List<Row> rows = results.all();
-               System.out.println("first size : " + rows.size());
-               System.out.println("Query time is " + (queryTime - startTime) + " msec");
-               System.out.println(" rows analysed,  " + rows.size());
-               List<ProteinBean> res = new ArrayList<ProteinBean>();
-               ProteinBean structure = new ProteinBean(queryProtein, rows.get(0).getMap("Predictions", String.class, String.class));
-               System.out.println("second size : " + rows.size());
-               int c = 0;
-               for (Row r : rows) {
-                       structure.setJobid(r.getString("JobID"));
-                       ++c;
-               }
-               res.add(structure);
-               final long endTime = System.currentTimeMillis();
-               System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
-               return res;
-       }
-
-       /*
-        * getting jobs by ip
-        */
-       public Map<String, String[]> ReadIpWithJobs(String ip) {
-               final long startTime = System.currentTimeMillis();
-               String com = "SELECT JobID, Protein, FinalStatus, DataBegin FROM ProteinLog WHERE ip = '" + ip + "';";
-               System.out.println("Command: " + com);
-               ResultSet results = session.execute(com);
-               if (results.isExhausted())
-                       return null;
-               final long queryTime = System.currentTimeMillis();
-               List<Row> rows = results.all();
-               Map<String, String[]> res = new HashMap<String, String[]>();
-               System.out.println("Query time is " + (queryTime - startTime) + " msec");
-               System.out.println(" rows analysed,  " + rows.size());
-               int c = 0;
-               for (Row r : rows) {
-                       if (r.getString("FinalStatus").equals("OK")) {
-                               String date = r.getString("DataBegin");
-                               res.put(r.getString("JobID"), new String[] { date.substring(0, date.indexOf(":")), r.getString("Protein") });
-                               ++c;
-                       }
-               }
-               final long endTime = System.currentTimeMillis();
-               System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
-               return res;
+       public static long earliestDate() {
+               earlestDate = CassandraNativeConnector.getEarliestDateInDB();
+               return earlestDate;
        }
 
-       /*
-        * getting part of protein sequence from the db ProteinRow
-        */
-       public List<ProteinBean> ReadPartOfSequence(String queryProtein) {
-               final long startTime = System.currentTimeMillis();
-               String com = "SELECT * FROM ProteinRow;";
-               System.out.println("Command: " + com);
-               ResultSet results = session.execute(com);
-               if (results.isExhausted())
-                       return null;
-               final long queryTime = System.currentTimeMillis();
-               List<Row> rows = results.all();
-               System.out.println("Query time is " + (queryTime - startTime) + " msec");
-               System.out.println(" rows analysed,  " + rows.size());
-               List<ProteinBean> res = new ArrayList<ProteinBean>();
-               int c = 0;
-               for (Row r : rows) {
-                       String prot = r.getString("Protein");
-                       if (prot.matches("(.*)" + queryProtein + "(.*)")) {
-                               ProteinBean structure = new ProteinBean(prot, r.getMap("Predictions", String.class, String.class));
-                               structure.setJobid(r.getString("JobID"));
-                               res.add(structure);
-                               ++c;
-                       }
-               }
-               final long endTime = System.currentTimeMillis();
-               System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
-               return res;
-       }
-
-       /*
-        * getting protein sequence from the db ProteinRow
-        */
-       public Map<String, String> ReadProtein() {
-               final long startTime = System.currentTimeMillis();
-               String com = "SELECT * FROM ProteinRow;";
-               System.out.println("Command: " + com);
-               ResultSet results = session.execute(com);
-               if (results.isExhausted())
-                       return null;
-               final long queryTime = System.currentTimeMillis();
-               List<Row> rows = results.all();
-               System.out.println("Query time is " + (queryTime - startTime) + " msec");
-               System.out.println(" rows analysed,  " + rows.size());
-               Map<String, String> res = new HashMap<String, String>();
-               int c = 0;
-               for (Row r : rows) {
-                       String prot = r.getString("Protein");
-                       String prediction = findJnetpred(r.getMap("Predictions", String.class, String.class));
-                       if (prot != null || prediction != null) 
-                               res.put(prot, prediction);
-               }
-               final long endTime = System.currentTimeMillis();
-               System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
-               return res;
-       }
-
-       private String findJnetpred (Map<String,String> pred) {
-               if (pred != null) {
-                       if (pred.containsKey("jnetpred")) 
-                               return pred.get("jnetpred");
-               }
-               return null;
-       }
-       /*
-        * getting protein sequences by counter
-        */
-       public Map<String, Integer> ReadProteinSequenceByCounter() {
-               final long startTime = System.currentTimeMillis();
-               String com = "SELECT Protein, JobID FROM ProteinRow;";
-               System.out.println("Command: " + com);
-               ResultSet results = session.execute(com);
-               if (results.isExhausted())
-                       return null;
-               final long queryTime = System.currentTimeMillis();
-               List<Row> rows = results.all();
-               System.out.println("Query time is " + (queryTime - startTime) + " msec");
-               System.out.println(" rows analysed,  " + rows.size());
-               Map<String, Integer> res = new HashMap<String, Integer>();
-               int c = 0;
-               for (Row r : rows) {
-                       String protein = r.getString("Protein");
-                       String id = r.getString("JobID");
-                       if (res.containsKey(protein))
-                               res.put(protein, res.get(protein) + 1);
-                       else
-                               res.put(protein, 1);
-               }
-               final long endTime = System.currentTimeMillis();
-               System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
-               return res;
-       }
-
-       /*
-        * getting ip by counter
-        */
-       public Map<String, Integer> ReadIpByCounter() {
-               final long startTime = System.currentTimeMillis();
-               String com = "SELECT JobID, ip FROM ProteinLog;";
-               System.out.println("Command: " + com);
-               ResultSet results = session.execute(com);
-               if (results.isExhausted())
-                       return null;
-               final long queryTime = System.currentTimeMillis();
-               List<Row> rows = results.all();
-               System.out.println("Query time is " + (queryTime - startTime) + " msec");
-               System.out.println(" rows analysed,  " + rows.size());
-               Map<String, Integer> res = new HashMap<String, Integer>();
-               int c = 0;
-               for (Row r : rows) {
-                       String ip = r.getString("ip");
-                       String id = r.getString("JobID");
-                       if (res.containsKey(ip))
-                               res.put(ip, res.get(ip) + 1);
-                       else
-                               res.put(ip, 1);
-               }
-               final long endTime = System.currentTimeMillis();
-               System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
-               return res;
-       }
-
-       /*
-        * getting log info for jobid
-        */
-       public JobBean ReadJobLog(String jobid) {
-               final long startTime = System.currentTimeMillis();
-               String com = "SELECT * FROM ProteinLog WHERE JobID = '" + jobid + "';";
-               System.out.println("Command: " + com);
-               ResultSet results = session.execute(com);
-               if (results.isExhausted())
-                       return null;
-               final long queryTime = System.currentTimeMillis();
-               Row row = results.one();
-               String com1 = "SELECT * FROM ProteinRow WHERE JobID = '" + jobid + "' ALLOW FILTERING;";
-               System.out.println("Command: " + com1);
-               ResultSet results1 = session.execute(com1);
-               if (results1.isExhausted())
-                       return null;
-               Row row1 = results1.one();
-               JobBean res = new JobBean(row.getString("Protein"), row.getString("JobID"), row.getString("DataBegin"), row.getString("DataEnd"),
-                               row.getString("ip"), row1.getMap("Predictions", String.class, String.class));
-               System.out.println("Query time is " + (queryTime - startTime) + " msec");
-               final long endTime = System.currentTimeMillis();
-               System.out.println(" rows analysed, execution time is " + (endTime - startTime) + " msec");
-               return res;
-       }
+       
 }
diff --git a/datadb/compbio/cassandra/CassandraReaderOld.java b/datadb/compbio/cassandra/CassandraReaderOld.java
new file mode 100644 (file)
index 0000000..f29bc9f
--- /dev/null
@@ -0,0 +1,318 @@
+package compbio.cassandra;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+
+import com.datastax.driver.core.Row;
+import com.datastax.driver.core.Session;
+import com.datastax.driver.core.ResultSet;
+
+import compbio.engine.JobStatus;
+
+public class CassandraReaderOld {
+       private Session session;
+       private static Logger log = Logger.getLogger(CassandraNativeConnector.class);
+
+       public CassandraReaderOld() {
+               Session inis = CassandraNativeConnector.getSession();
+               setSession(inis);
+       }
+
+       public void setSession(Session s) {
+               assert s != null;
+               session = s;
+       }
+
+       /*
+        * getting data from the db
+        */
+       public List<Pair<String, String>> ReadProteinDataTable() {
+               final long startTime = System.currentTimeMillis();
+               String com = "SELECT DataBegin,DataEnd FROM ProteinLog;";
+               System.out.println("Command: " + com);
+               ResultSet results = session.execute(com);
+               final long queryTime = System.currentTimeMillis();
+               List<Row> rows = results.all();
+               System.out.println("Query time is " + (queryTime - startTime) + " msec");
+
+               List<Pair<String, String>> res = new ArrayList<Pair<String, String>>();
+               int c = 0;
+               for (Row r : rows) {
+                       Pair<String, String> pair = new Pair<String, String>(r.getString("DataBegin"), r.getString("DataEnd"));
+                       res.add(pair);
+                       ++c;
+               }
+               final long endTime = System.currentTimeMillis();
+               System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
+               return res;
+       }
+
+       /*
+        * getting data from the db
+        */
+       public DateBean ReadProteinData(long day, String date) {
+               String com = "SELECT JobID, Protein FROM ProteinData WHERE jobtime = " + day + ";";
+               System.out.println("Command: " + com);
+               ResultSet results = session.execute(com);
+               if (results.isExhausted())
+                       return null;
+               List<Row> rows = results.all();
+               DateBean res = new DateBean(date);
+               for (Row r : rows) {
+                       res.setJobidAndSeq(r.getString("JobID"), r.getString("Protein"));
+               }
+               return res;
+       }
+
+       /**
+        * getting data from the db
+        */
+       public DateBean ReadFailedJobs(long day, String date, JobStatus status) {
+               // FailLog (jobtime, JobID, ExecTime, ip, FinalStatus)
+               String com = "SELECT JobID FROM FailLog WHERE jobtime = " + day + " and FinalStatus = '" + status.name() + "';";
+               ResultSet results = session.execute(com);
+               if (results.isExhausted())
+                       return null;
+               List<Row> rows = results.all();
+               DateBean res = new DateBean(date);
+               for (Row r : rows) {
+                       String jobid = r.getString("JobID");
+                       String com1 = "SELECT Protein FROM ProteinLog WHERE JobID = '" + jobid + "';";
+                       System.out.println("Command: " + com1);
+                       ResultSet results2 = session.execute(com1);
+                       List<Row> jrows = results2.all();
+                       if (1 == jrows.size()) {
+                               String protein = jrows.get(0).getString("Protein");
+                               res.setJobidAndSeq(jobid, protein);
+                       }
+               }
+               return res;
+       }
+
+       /*
+        * getting data from the db JobDateInfo
+        */
+       public Total ReadDateTable(long queryDate) {
+               ResultSet results = session.execute("SELECT * FROM JobDateInfo WHERE jobday = " + queryDate + ";");
+               if (results.isExhausted())
+                       return null;
+               Row therow = results.one();
+               Total res = new Total(therow.getLong("Total"), therow.getLong("TotalOK"), therow.getLong("TotalStopped"),
+                               therow.getLong("TotalError"), therow.getLong("TotalTimeOut"));
+               if (!results.isExhausted()) {
+                       Date date = new Date(queryDate);
+                       log.warn("CassandraReader.ReadDateTable: date row for " + date.toString() + " (" + queryDate + ") duplicated ");
+               }
+               return res;
+       }
+
+       /*
+        * getting whole protein sequence from the db ProteinRow
+        */
+       public List<ProteinBean> ReadWholeSequence(String queryProtein) {
+               final long startTime = System.currentTimeMillis();
+               String com = "SELECT JobID, Predictions FROM ProteinRow WHERE Protein = '" + queryProtein + "';";
+               System.out.println("Command: " + com);
+               ResultSet results = session.execute(com);
+               if (results.isExhausted())
+                       return null;
+               final long queryTime = System.currentTimeMillis();
+               List<Row> rows = results.all();
+               System.out.println("first size : " + rows.size());
+               System.out.println("Query time is " + (queryTime - startTime) + " msec");
+               System.out.println(" rows analysed,  " + rows.size());
+               List<ProteinBean> res = new ArrayList<ProteinBean>();
+               ProteinBean structure = new ProteinBean(queryProtein, rows.get(0).getMap("Predictions", String.class, String.class));
+               System.out.println("second size : " + rows.size());
+               int c = 0;
+               for (Row r : rows) {
+                       structure.setJobid(r.getString("JobID"));
+                       ++c;
+               }
+               res.add(structure);
+               final long endTime = System.currentTimeMillis();
+               System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
+               return res;
+       }
+
+       /*
+        * getting jobs by ip
+        */
+       public Map<String, String[]> ReadIpWithJobs(String ip) {
+               final long startTime = System.currentTimeMillis();
+               String com = "SELECT JobID, Protein, FinalStatus, DataBegin FROM ProteinLog WHERE ip = '" + ip + "';";
+               System.out.println("Command: " + com);
+               ResultSet results = session.execute(com);
+               if (results.isExhausted())
+                       return null;
+               final long queryTime = System.currentTimeMillis();
+               List<Row> rows = results.all();
+               Map<String, String[]> res = new HashMap<String, String[]>();
+               System.out.println("Query time is " + (queryTime - startTime) + " msec");
+               System.out.println(" rows analysed,  " + rows.size());
+               int c = 0;
+               for (Row r : rows) {
+                       if (r.getString("FinalStatus").equals("OK")) {
+                               String date = r.getString("DataBegin");
+                               res.put(r.getString("JobID"), new String[] { date.substring(0, date.indexOf(":")), r.getString("Protein") });
+                               ++c;
+                       }
+               }
+               final long endTime = System.currentTimeMillis();
+               System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
+               return res;
+       }
+
+       /*
+        * getting part of protein sequence from the db ProteinRow
+        */
+       public List<ProteinBean> ReadPartOfSequence(String queryProtein) {
+               final long startTime = System.currentTimeMillis();
+               String com = "SELECT * FROM ProteinRow;";
+               System.out.println("Command: " + com);
+               ResultSet results = session.execute(com);
+               if (results.isExhausted())
+                       return null;
+               final long queryTime = System.currentTimeMillis();
+               List<Row> rows = results.all();
+               System.out.println("Query time is " + (queryTime - startTime) + " msec");
+               System.out.println(" rows analysed,  " + rows.size());
+               List<ProteinBean> res = new ArrayList<ProteinBean>();
+               int c = 0;
+               for (Row r : rows) {
+                       String prot = r.getString("Protein");
+                       if (prot.matches("(.*)" + queryProtein + "(.*)")) {
+                               ProteinBean structure = new ProteinBean(prot, r.getMap("Predictions", String.class, String.class));
+                               structure.setJobid(r.getString("JobID"));
+                               res.add(structure);
+                               ++c;
+                       }
+               }
+               final long endTime = System.currentTimeMillis();
+               System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
+               return res;
+       }
+
+       /*
+        * getting protein sequence from the db ProteinRow
+        */
+       public Map<String, String> ReadProtein() {
+               final long startTime = System.currentTimeMillis();
+               String com = "SELECT * FROM ProteinRow;";
+               System.out.println("Command: " + com);
+               ResultSet results = session.execute(com);
+               if (results.isExhausted())
+                       return null;
+               final long queryTime = System.currentTimeMillis();
+               List<Row> rows = results.all();
+               System.out.println("Query time is " + (queryTime - startTime) + " msec");
+               System.out.println(" rows analysed,  " + rows.size());
+               Map<String, String> res = new HashMap<String, String>();
+               int c = 0;
+               for (Row r : rows) {
+                       String prot = r.getString("Protein");
+                       String prediction = findJnetpred(r.getMap("Predictions", String.class, String.class));
+                       if (prot != null || prediction != null) 
+                               res.put(prot, prediction);
+               }
+               final long endTime = System.currentTimeMillis();
+               System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
+               return res;
+       }
+
+       private String findJnetpred (Map<String,String> pred) {
+               if (pred != null) {
+                       if (pred.containsKey("jnetpred")) 
+                               return pred.get("jnetpred");
+               }
+               return null;
+       }
+       /*
+        * getting protein sequences by counter
+        */
+       public Map<String, Integer> ReadProteinSequenceByCounter() {
+               final long startTime = System.currentTimeMillis();
+               String com = "SELECT Protein, JobID FROM ProteinRow;";
+               System.out.println("Command: " + com);
+               ResultSet results = session.execute(com);
+               if (results.isExhausted())
+                       return null;
+               final long queryTime = System.currentTimeMillis();
+               List<Row> rows = results.all();
+               System.out.println("Query time is " + (queryTime - startTime) + " msec");
+               System.out.println(" rows analysed,  " + rows.size());
+               Map<String, Integer> res = new HashMap<String, Integer>();
+               int c = 0;
+               for (Row r : rows) {
+                       String protein = r.getString("Protein");
+                       String id = r.getString("JobID");
+                       if (res.containsKey(protein))
+                               res.put(protein, res.get(protein) + 1);
+                       else
+                               res.put(protein, 1);
+               }
+               final long endTime = System.currentTimeMillis();
+               System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
+               return res;
+       }
+
+       /*
+        * getting ip by counter
+        */
+       public Map<String, Integer> ReadIpByCounter() {
+               final long startTime = System.currentTimeMillis();
+               String com = "SELECT JobID, ip FROM ProteinLog;";
+               System.out.println("Command: " + com);
+               ResultSet results = session.execute(com);
+               if (results.isExhausted())
+                       return null;
+               final long queryTime = System.currentTimeMillis();
+               List<Row> rows = results.all();
+               System.out.println("Query time is " + (queryTime - startTime) + " msec");
+               System.out.println(" rows analysed,  " + rows.size());
+               Map<String, Integer> res = new HashMap<String, Integer>();
+               int c = 0;
+               for (Row r : rows) {
+                       String ip = r.getString("ip");
+                       String id = r.getString("JobID");
+                       if (res.containsKey(ip))
+                               res.put(ip, res.get(ip) + 1);
+                       else
+                               res.put(ip, 1);
+               }
+               final long endTime = System.currentTimeMillis();
+               System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
+               return res;
+       }
+
+       /*
+        * getting log info for jobid
+        */
+       public JobBean ReadJobLog(String jobid) {
+               final long startTime = System.currentTimeMillis();
+               String com = "SELECT * FROM ProteinLog WHERE JobID = '" + jobid + "';";
+               System.out.println("Command: " + com);
+               ResultSet results = session.execute(com);
+               if (results.isExhausted())
+                       return null;
+               final long queryTime = System.currentTimeMillis();
+               Row row = results.one();
+               String com1 = "SELECT * FROM ProteinRow WHERE JobID = '" + jobid + "' ALLOW FILTERING;";
+               System.out.println("Command: " + com1);
+               ResultSet results1 = session.execute(com1);
+               if (results1.isExhausted())
+                       return null;
+               Row row1 = results1.one();
+               JobBean res = new JobBean(row.getString("Protein"), row.getString("JobID"), row.getString("DataBegin"), row.getString("DataEnd"),
+                               row.getString("ip"), row1.getMap("Predictions", String.class, String.class));
+               System.out.println("Query time is " + (queryTime - startTime) + " msec");
+               final long endTime = System.currentTimeMillis();
+               System.out.println(" rows analysed, execution time is " + (endTime - startTime) + " msec");
+               return res;
+       }
+}
diff --git a/datadb/compbio/cassandra/DateFormatter.java b/datadb/compbio/cassandra/DateFormatter.java
new file mode 100644 (file)
index 0000000..471f2a8
--- /dev/null
@@ -0,0 +1,62 @@
+package compbio.cassandra;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class DateFormatter {
+       private final static SimpleDateFormat formatYYMMDD = new SimpleDateFormat("yyyy/MM/dd");
+       private final static SimpleDateFormat formatDDMMYY = new SimpleDateFormat("dd/MM/yyyy");
+       
+       /*
+        * convert String date into long date (miliseconds since the epoch start)
+        */
+       public static long DateParsing(String datInput, SimpleDateFormat formatter) {
+               if (datInput == null) {
+                       return 0;
+               }
+               long dateWorkSt = 0;
+
+               try {
+                       dateWorkSt = formatter.parse(datInput).getTime();
+               } catch (ParseException e) {
+                       e.printStackTrace();
+               }
+               return dateWorkSt;
+       }
+       
+       /*
+        * date validator
+        * true - if valid date, false - if invalid
+        */
+       public static boolean isThisDateValid(String dateToValidate, SimpleDateFormat sdf) {
+               if (dateToValidate == null || dateToValidate.equals("")) {
+                       return false;
+               }
+               try {
+                       // if not valid, this will throw ParseException
+                       sdf.setLenient(false);
+                       Date date = sdf.parse(dateToValidate);
+               } catch (ParseException e) {
+                       e.printStackTrace();
+                       return false;
+               }
+               return true;
+       }
+       
+       /*
+        * convert date from long to String
+        */
+       public static String DateLongToString(long indate, SimpleDateFormat formatter) {
+               String dateString = formatter.format(new Date(indate));
+               return dateString;
+       }
+       
+       public static SimpleDateFormat getFormatYYMMDD() {
+               return formatYYMMDD;
+       }
+       
+       public static SimpleDateFormat getFormatDDMMYY() {
+               return formatDDMMYY;
+       }
+}
index 347ebe3..3e8453e 100644 (file)
@@ -13,7 +13,7 @@ import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.BoundStatement;
 
-import compbio.cassandra.CassandraReader;
+import compbio.cassandra.CassandraReaderOld;
 import compbio.cassandra.Pair;
 import compbio.engine.ProteoCachePropertyHelperManager;
 import compbio.util.PropertyHelper;
index d6a0c1e..ef399f5 100644 (file)
@@ -12,10 +12,12 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import compbio.engine.JobStatus;
+import compbio.cassandra.CassandraReader;
 import compbio.cassandra.DateBean;
+import compbio.cassandra.DateFormatter;
 import compbio.cassandra.TotalJobsStatisticBean;
 import compbio.statistic.CassandraRequester;
-import compbio.statistic.StatisticsProt;
+
 
 /**
  * @author Alexander Sherstnev
@@ -23,18 +25,20 @@ import compbio.statistic.StatisticsProt;
  */
 @Controller
 public class DailyStatisticsController extends BasicController {
-
+       Calendar cal = Calendar.getInstance();
+       final SimpleDateFormat formaterDDMMYY = DateFormatter.getFormatDDMMYY();
+       final SimpleDateFormat formaterYYMMDD = DateFormatter.getFormatYYMMDD();
+       String theEaerlistDate = DateFormatter.DateLongToString(CassandraReader.earliestDate(), formaterYYMMDD);
+       String theCurrentDate = cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DAY_OF_MONTH);
+       
        @RequestMapping(value = "/stat/jobs/query", method = RequestMethod.GET)
        public String initFindForm(Map<String, Object> model) {
                model.put("username", getPrincipalName());
-               Calendar cal = Calendar.getInstance();
                String date2 = cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DATE);
                cal.add(Calendar.DATE, -3);
                String date1 = cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DATE);
-
                model.put("date1", date1);
                model.put("date2", date2);
-
                return "query/JobStatistics";
        }
 
@@ -42,14 +46,34 @@ public class DailyStatisticsController extends BasicController {
        public String findJobsInPeriod(@RequestParam("date1") String date1, @RequestParam("date2") String date2,
                        @RequestParam("option") String option, Map<String, Object> model) {
                model.put("username", getPrincipalName());
-               final long startTime = System.currentTimeMillis();
-
+               final long startTime = System.currentTimeMillis();              
                CassandraRequester cr = new CassandraRequester();
                if (option.equals("AllDates,off")) {
-                       Calendar cal = Calendar.getInstance();
-                       date1 = StatisticsProt.DateFormatYYMMDD(cr.earliestDate());
-                       date2 = cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DAY_OF_MONTH);
+                       date1 = theEaerlistDate;
+                       date2 = theCurrentDate;
+               }
+       
+               // dates in string format
+               String trimmeddate1 = date1.replaceAll("\\s", "");
+               String trimmeddate2 = date2.replaceAll("\\s", "");
+               // dates in long format
+               long longDate1 = DateFormatter.DateParsing(date1,formaterYYMMDD);
+               long longDate2 = DateFormatter.DateParsing(date2, formaterYYMMDD);
+               String error = DateChecking(trimmeddate1, trimmeddate2, longDate1, longDate2);
+               if (error != null) {
+                       model.put("error", error);
+                       model.put("date1", date1);
+                       model.put("date2", date2);
+                       return "query/JobStatistics";
                }
+
+               if (longDate1 < CassandraReader.earliestDate())
+                       longDate1 = CassandraReader.earliestDate();
+               if (longDate2 > cal.getTimeInMillis())
+                       longDate2 =  cal.getTimeInMillis();     
+               
+               date1 = DateFormatter.DateLongToString(longDate1, formaterYYMMDD);
+               date2 = DateFormatter.DateLongToString(longDate2, formaterYYMMDD);
                model.put("date1", date1);
                model.put("date2", date2);
                TotalJobsStatisticBean res = cr.countJobs(date1, date2);
@@ -68,8 +92,6 @@ public class DailyStatisticsController extends BasicController {
                final long startTime = System.currentTimeMillis();
 
                String realdate;
-               final SimpleDateFormat formaterDDMMYY = new SimpleDateFormat("dd/MM/yyyy");
-               final SimpleDateFormat formaterYYMMDD = new SimpleDateFormat("yyyy/MM/dd");
                try {
                        long thetime = formaterYYMMDD.parse(date).getTime();
                        if (thetime < 0) {
@@ -97,4 +119,20 @@ public class DailyStatisticsController extends BasicController {
                model.put("timeExecution", (endTime - startTime));
                return "/reportJobStatisticsOneDay";
        }
+       
+       private String DateChecking(String trimmeddate1, String trimmeddate2, long longDate1, long longDate2) {
+               
+               if (trimmeddate1.equalsIgnoreCase("") || trimmeddate2.equalsIgnoreCase("")) 
+                       return "The date cann't be empty";
+               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()) 
+                       return "The date2 is after the earlestDate " + theEaerlistDate;
+               else if (longDate1 > cal.getTimeInMillis())
+                       return "The date1 is before the current date " + theCurrentDate;                        
+               else if (longDate1 > longDate2)         
+                       return "Wrong date's diaposon. The date1 is more than date2.";
+               else                    
+                       return null;
+       }
 }
index f2336e7..3e5db8a 100755 (executable)
@@ -12,7 +12,7 @@ import java.util.Map;
 import compbio.cassandra.DateBean;
 import compbio.cassandra.ProteinBean;
 import compbio.cassandra.CassandraNativeConnector;
-import compbio.cassandra.CassandraReader;
+import compbio.cassandra.CassandraReaderOld;
 import compbio.cassandra.DataBase;
 import compbio.cassandra.Pair;
 import compbio.cassandra.JobBean;
@@ -23,7 +23,7 @@ import compbio.cassandra.UserBean;
 import compbio.engine.JobStatus;
 
 public class CassandraRequester {
-       private CassandraReader db = new CassandraReader();
+       private CassandraReaderOld db = new CassandraReaderOld();
        private ArrayList<DataBase> query;
        private static long currentDate = 0;
        private static long earlestDate = 0;
@@ -122,7 +122,7 @@ public class CassandraRequester {
         * query: total number of jobs for the period from date1 till date2
         */
        public TotalJobsStatisticBean countJobs(String date1, String date2) {
-               if (null == date1) {
+       /*      if (null == date1) {
                        date1 = "1970/1/1";
                }
                if (null == date2) {
@@ -131,17 +131,16 @@ public class CassandraRequester {
                if (!isThisDateValid(date1, formatYYMMDD) || !isThisDateValid(date2, formatYYMMDD)) {
                        System.out.println("CassandraRequester.countJobs: wrong format for date1 " + date1 + "or date2 " + date2);
                        return null;
-               }
+               }*/
                SetDateRange();
                long dateStart = DateParsing(date1, formatYYMMDD);
                long dateEnd = DateParsing(date2, formatYYMMDD);
-               if (dateEnd < earlestDate || dateStart > currentDate || dateStart > dateEnd)
+/*             if (dateEnd < earlestDate || dateStart > currentDate || dateStart > dateEnd)
                        return null;
                if (dateStart < earlestDate)
                        dateStart = earlestDate;
                if (dateEnd > currentDate)
-                       dateStart = currentDate;
-
+                       dateStart = currentDate;*/
                Calendar start = Calendar.getInstance();
                start.setTime(new Date(dateStart));
                Calendar end = Calendar.getInstance();
index 5636b95..705d306 100644 (file)
@@ -1,6 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 
 <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
                </div>
                <div class="panel-body">
                        <form method="get" action="${query}">
-                               <p><input type="checkbox" name="option" value="AllDates" checked="checked" onclick="hide(this, 'date');"> Query for all dates<br>
-                               <div id='date' style="visibility:hidden;">
-                               <p>
-                                       Jobs executed 
-                                       from <input type="text" name="date1" value="${date1}" style="width: 145px;" /> 
-                                       to <input type="text" name="date2" value="${date2}" style="width: 145px;" />
-                               </p>
-                               </div>
-                               <input type="hidden" name="option" value="off" />
-                               <input type="submit" name="Search" value="Search" />
+                               <c:choose>
+                               <c:when test="${error == null}">
+                                       <div class="form-group">
+                                               <p><input type="checkbox" name="option" value="AllDates" checked="checked" onclick="hide(this, 'date');"> Query for all dates<br>
+                                               <div id='date' style="visibility:hidden;">
+                                                       <p>
+                                                               Jobs executed 
+                                                               from <input type="text" name="date1" value="${date1}" style="width: 145px;" /> 
+                                                               to <input type="text" name="date2" value="${date2}" style="width: 145px;" />
+                                                       </p>
+                                               </div>
+                                               <input type="hidden" name="option" value="off" />
+                                               <input type="submit" name="Search" value="Search" />
+                                       </div>
+                               </c:when>
+                               <c:otherwise>
+                                       <div class="form-group has-error">
+                                               <p><input type="checkbox" name="option" value="AllDates" onclick="hide(this, 'dateError');"> Query for all dates<br>
+                                               <div id='dateError' style="visibility:visible;">
+                                                       <p>
+                                                               Jobs executed 
+                                                               from <input type="text" name="date1" value="${date1}" style="width: 145px;" /> 
+                                                               to <input type="text" name="date2" value="${date2}" style="width: 145px;" />
+                                                       </p>
+                                                       <p class="help-block">${error}</p>              
+                                               </div>                  
+                                               <input type="hidden" name="option" value="off" />
+                                               <input type="submit" name="Search" value="Search" />
+                                       </div>
+                               </c:otherwise>
+                               </c:choose>
                        </form>
                </div>
        </div>