fixed Execution time report
[proteocache.git] / datadb / compbio / cassandra / readers / ExecutionTimeReader.java
diff --git a/datadb/compbio/cassandra/readers/ExecutionTimeReader.java b/datadb/compbio/cassandra/readers/ExecutionTimeReader.java
new file mode 100644 (file)
index 0000000..6bd17eb
--- /dev/null
@@ -0,0 +1,82 @@
+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;
+
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.Row;
+
+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;
+
+public class ExecutionTimeReader extends CassandraReader {
+
+               public ExecutionTimeReader() {
+                       super();
+               }
+
+               /**
+                * query: execution time statistics for the period from date1 till date2
+                * 
+                * @param dateStart
+                *            the first date in the period
+                * @param dateEnd
+                *            the last date in the period
+                * 
+                * @return TotalJobsStatisticBean to the controller
+                *         JobController
+                **/
+               public ExecutionTimeBean query(long dateStart, long dateEnd) {
+                       Calendar start = Calendar.getInstance();
+                       start.setTime(new Date(dateStart));
+                       Calendar end = Calendar.getInstance();
+                       end.setTime(new Date(dateEnd));
+                       ExecutionTimeBean query = new ExecutionTimeBean();
+                       TotalExecutionTime wholeTotal = new TotalExecutionTime(0, 0, 0, 0, 0, 0);
+                                               
+                       for (Date date = end.getTime(); !end.before(start); end.add(Calendar.DATE, -1), date = end.getTime()) {
+                               ResultSet results = CassandraQuery("SELECT ExecTime FROM ProteinData WHERE jobtime = " + date.getTime() + ";");
+                               if (results == null)
+                                       return null;
+                               if (results.isExhausted())
+                                       continue;
+                               List<Row> rows = results.all();
+                               TotalExecutionTime currentTotal = new TotalExecutionTime(0, 0, 0, 0, 0, 0);
+                               for (Row r : rows) {    
+                                               long timeExec = r.getInt("ExecTime")/1000;
+                                               if (timeExec <= 30)
+                                                       currentTotal.setTotal0_30s(currentTotal.getTotal0_30s() + 1);
+                                               else if (timeExec > 30 && timeExec <= 60)
+                                                       currentTotal.setTotal30_60s(currentTotal.getTotal30_60s() + 1);
+                                               else if (timeExec > 60 && timeExec <= 120)
+                                                       currentTotal.setTotal1_2m(currentTotal.getTotal1_2m() + 1);
+                                               else if (timeExec > 120 && timeExec <= 600)
+                                                       currentTotal.setTotal2_10m(currentTotal.getTotal2_10m() + 1);
+                                               else 
+                                                       currentTotal.setTotal10m(currentTotal.getTotal10m() + 1);
+                                               
+                               }
+                               currentTotal.setTotal(currentTotal.getTotal0_30s() + currentTotal.getTotal30_60s() + currentTotal.getTotal1_2m() + 
+                                               currentTotal.getTotal2_10m() + currentTotal.getTotal10m());
+                               query.setDateTotal(DateFormatter.DateLongToString(date.getTime(), DateFormatter.getFormatDDMMYY()), currentTotal);
+                               wholeTotal.setTotal(currentTotal.getTotal() + wholeTotal.getTotal());
+                               wholeTotal.setTotal0_30s(currentTotal.getTotal0_30s() + wholeTotal.getTotal0_30s());
+                               wholeTotal.setTotal30_60s(currentTotal.getTotal30_60s() + wholeTotal.getTotal30_60s());
+                               wholeTotal.setTotal1_2m(currentTotal.getTotal1_2m() + wholeTotal.getTotal1_2m());
+                               wholeTotal.setTotal2_10m(currentTotal.getTotal2_10m() + wholeTotal.getTotal2_10m());
+                               wholeTotal.setTotal10m(currentTotal.getTotal10m() + wholeTotal.getTotal10m());
+                       }
+                       query.setWholeTotal(wholeTotal);
+                       return query;                                                                                                                                   
+                       
+               }
+}