Simplify the jobdateinfo table (remove Total, Program, Version)
[proteocache.git] / datadb / compbio / cassandra / readers / DailyStatisticsReader.java
1 package compbio.cassandra.readers;
2
3 import java.util.Calendar;
4 import java.util.Date;
5 import java.util.List;
6
7 import com.datastax.driver.core.ResultSet;
8 import com.datastax.driver.core.Row;
9
10 import compbio.beans.DateBean;
11 import compbio.beans.Total;
12 import compbio.beans.TotalJobsStatisticBean;
13 import compbio.cassandra.DateFormatter;
14 import compbio.engine.JobStatus;
15
16 public class DailyStatisticsReader extends CassandraReader {
17
18         public DailyStatisticsReader() {
19                 super();
20         }
21
22         /**
23          * query: total number of jobs for the period from date1 till date2
24          * 
25          * @param dateStart
26          *            the first date in the period
27          * @param dateEnd
28          *            the last date in the period
29          * 
30          * @return TotalJobsStatisticBean to the controller
31          *         DailyStatisticsController
32          **/
33         public TotalJobsStatisticBean query(long dateStart, long dateEnd) {
34                 Calendar start = Calendar.getInstance();
35                 start.setTime(new Date(dateStart));
36                 Calendar end = Calendar.getInstance();
37                 end.setTime(new Date(dateEnd));
38                 TotalJobsStatisticBean query = new TotalJobsStatisticBean();
39                 Total wholeTotal = new Total(0, 0, 0, 0, 0);
40                 for (Date date = end.getTime(); !end.before(start); end.add(Calendar.DATE, -1), date = end.getTime()) {
41                         ResultSet results = CassandraQuery("SELECT * FROM JobDateInfo WHERE jobday = " + date.getTime() + ";");
42                         if (results == null)
43                                 return null;
44                         if (results.isExhausted())
45                                 continue;
46                         Row row = results.one();
47                         long nOK = row.getLong("TotalOK");
48                         long nStopped = row.getLong("TotalStopped");
49                         long nError = row.getLong("TotalError");
50                         long nTimeOut = row.getLong("TotalTimeOut");
51                         Total res = new Total(nOK + nStopped + nError + nTimeOut, nOK, nStopped, nError, nTimeOut);
52                         if (!results.isExhausted()) {
53                                 Date dat = new Date(date.getTime());
54                                 log.warn("CassandraReader.ReadDateTable: date row for " + dat.toString() + " (" + date.getTime() + ") duplicated ");
55                         }
56                         query.setDateTotal(DateFormatter.DateLongToString(date.getTime(), DateFormatter.getFormatDDMMYY()), res);
57                         wholeTotal.setTotal(res.getTotal() + wholeTotal.getTotal());
58                         wholeTotal.setTotalOK(res.getTotalOK() + wholeTotal.getTotalOK());
59                         wholeTotal.setTotalStopped(res.getTotalStopped() + wholeTotal.getTotalStopped());
60                         wholeTotal.setTotalError(res.getTotalError() + wholeTotal.getTotalError());
61                         wholeTotal.setTotalTimeOut(res.getTotalTimeOut() + wholeTotal.getTotalTimeOut());
62                 }
63                 query.setWholeTotal(wholeTotal);
64                 return query;
65         }
66
67         /**
68          * query: jobs and sequence at a date
69          * 
70          * @param day
71          *            the date in long format
72          * @param date
73          *            the date in String format
74          * 
75          * @param status
76          *            final job status
77          * @return DateBean to the controller DailyStatisticsController
78          **/
79         public DateBean readJobByDay(long day, String date, JobStatus status) {
80                 DateBean res = new DateBean(date);
81                 if (status == JobStatus.OK) {
82                         ResultSet results = CassandraQuery("SELECT JobID, Protein FROM ProteinData WHERE jobtime = " + day + ";");
83                         if (results == null || results.isExhausted())
84                                 return null;
85                         List<Row> rows = results.all();
86                         for (Row r : rows) {
87                                 res.setJobidAndSeq(r.getString("JobID"), r.getString("Protein"));
88                         }
89                 } else {
90                         ResultSet results = CassandraQuery("SELECT JobID FROM FailLog WHERE jobtime = " + day + " and FinalStatus = '" + status.name()
91                                         + "';");
92                         if (results == null || results.isExhausted())
93                                 return null;
94                         List<Row> rows = results.all();
95                         for (Row r : rows) {
96                                 String jobid = r.getString("JobID");
97                                 ResultSet results2 = CassandraQuery("SELECT Protein FROM ProteinLog WHERE JobID = '" + jobid + "';");
98                                 if (results2 == null || results2.isExhausted())
99                                         return null;
100                                 List<Row> jrows = results2.all();
101                                 if (1 == jrows.size()) {
102                                         String protein = jrows.get(0).getString("Protein");
103                                         res.setJobidAndSeq(jobid, protein);
104                                 }
105                         }
106                 }
107                 return res;
108         }
109
110 }