--- /dev/null
+package compbio.cassandra.readers;
+
+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.DateBean;
+import compbio.beans.Total;
+import compbio.beans.TotalJobsStatisticBean;
+import compbio.cassandra.DateFormatter;
+import compbio.engine.JobStatus;
+
+public class DailyStatisticsReader extends CassandraReader {
+
+ public DailyStatisticsReader() {
+ super();
+ }
+
+ /**
+ * query: total number of jobs 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
+ * DailyStatisticsController
+ **/
+ public TotalJobsStatisticBean query(long dateStart, long dateEnd) {
+ Calendar start = Calendar.getInstance();
+ start.setTime(new Date(dateStart));
+ Calendar end = Calendar.getInstance();
+ end.setTime(new Date(dateEnd));
+ TotalJobsStatisticBean query = new TotalJobsStatisticBean();
+ Total wholeTotal = new Total(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 * FROM JobDateInfo WHERE jobday = " + date.getTime() + ";");
+ if (results == null)
+ return null;
+ if (results.isExhausted())
+ continue;
+ 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 dat = new Date(date.getTime());
+ log.warn("CassandraReader.ReadDateTable: date row for " + dat.toString() + " (" + date.getTime() + ") duplicated ");
+ }
+ query.setDateTotal(DateFormatter.DateLongToString(date.getTime(), DateFormatter.getFormatDDMMYY()), res);
+ wholeTotal.setTotal(res.getTotal() + wholeTotal.getTotal());
+ wholeTotal.setTotalOK(res.getTotalOK() + wholeTotal.getTotalOK());
+ wholeTotal.setTotalStopped(res.getTotalStopped() + wholeTotal.getTotalStopped());
+ wholeTotal.setTotalError(res.getTotalError() + wholeTotal.getTotalError());
+ wholeTotal.setTotalTimeOut(res.getTotalTimeOut() + wholeTotal.getTotalTimeOut());
+ }
+ query.setWholeTotal(wholeTotal);
+ return query;
+ }
+
+ /**
+ * query: jobs and sequence at a date
+ *
+ * @param day
+ * the date in long format
+ * @param date
+ * the date in String format
+ *
+ * @param status
+ * final job status
+ * @return DateBean to the controller DailyStatisticsController
+ **/
+ public DateBean readJobByDay(long day, String date, JobStatus status) {
+ DateBean res = new DateBean(date);
+ if (status == JobStatus.OK) {
+ ResultSet results = CassandraQuery("SELECT JobID, Protein FROM ProteinData WHERE jobtime = " + day + ";");
+ if (results == null || results.isExhausted())
+ return null;
+ List<Row> rows = results.all();
+ for (Row r : rows) {
+ res.setJobidAndSeq(r.getString("JobID"), r.getString("Protein"));
+ }
+ } else {
+ ResultSet results = CassandraQuery("SELECT JobID FROM FailLog WHERE jobtime = " + day + " and FinalStatus = '" + status.name()
+ + "';");
+ if (results == null || results.isExhausted())
+ return null;
+ List<Row> rows = results.all();
+ for (Row r : rows) {
+ String jobid = r.getString("JobID");
+ ResultSet results2 = CassandraQuery("SELECT Protein FROM ProteinLog WHERE JobID = '" + jobid + "';");
+ if (results2 == null || results2.isExhausted())
+ return null;
+ List<Row> jrows = results2.all();
+ if (1 == jrows.size()) {
+ String protein = jrows.get(0).getString("Protein");
+ res.setJobidAndSeq(jobid, protein);
+ }
+ }
+ }
+ return res;
+ }
+
+}