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 = start.getTime(); !start.after(end); start.add(Calendar.DATE, 1), date = start.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 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 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 jrows = results2.all(); if (1 == jrows.size()) { String protein = jrows.get(0).getString("Protein"); res.setJobidAndSeq(jobid, protein); } } } return res; } }