the new query jobs by ip
[proteocache.git] / datadb / compbio / cassandra / CassandraReader.java
1 package compbio.cassandra;
2
3 import java.util.Date;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.ArrayList;
7 import java.util.Map;
8
9 import org.apache.log4j.Logger;
10
11 import com.datastax.driver.core.Row;
12 import com.datastax.driver.core.Session;
13 import com.datastax.driver.core.ResultSet;
14
15 public class CassandraReader {
16         private Session session;
17         private static Logger log = Logger.getLogger(CassandraNativeConnector.class);
18
19         public CassandraReader() {
20                 Session inis = CassandraNativeConnector.getSession();
21                 setSession (inis);
22         }
23
24         public void setSession(Session s) {
25                 assert s != null;
26                 session = s;
27         }
28
29         /*
30          * getting data from the db
31          */
32         public List<Pair<String, String>> ReadProteinDataTable() {
33                 final long startTime = System.currentTimeMillis();
34                 String com = "SELECT DataBegin,DataEnd FROM ProteinLog;";
35                 System.out.println("Command: " + com);
36                 ResultSet results = session.execute(com);
37                 final long queryTime = System.currentTimeMillis();
38                 List<Row> rows = results.all();
39                 System.out.println("Query time is " + (queryTime - startTime) + " msec");
40
41                 List<Pair<String, String>> res = new ArrayList<Pair<String, String>>();
42                 int c = 0;
43                 for (Row r : rows) {
44                         Pair<String, String> pair = new Pair<String, String>(r.getString("DataBegin"), r.getString("DataEnd"));
45                         res.add(pair);
46                         ++c;
47                 }
48                 final long endTime = System.currentTimeMillis();
49                 System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
50                 return res;
51         }
52
53         /*
54          * getting data from the db
55          */
56         public List<Pair<String, String>> ReadProteinData(long day) {
57                 final long startTime = System.currentTimeMillis();
58                 String com = "SELECT JobID, Protein FROM ProteinData WHERE jobtime = " + day + ";";
59                 System.out.println("Command: " + com);
60                 ResultSet results = session.execute(com);
61                 if (results.isExhausted())
62                         return null;
63                 final long queryTime = System.currentTimeMillis();
64                 List<Row> rows = results.all();
65                 System.out.println("Query time is " + (queryTime - startTime) + " msec");
66                 List<Pair<String, String>> res = new ArrayList<Pair<String, String>>();
67                 int c = 0;
68                 for (Row r : rows) {
69                         Pair<String, String> pair = new Pair<String, String>(r.getString("JobID"), r.getString("Protein"));
70                         res.add(pair);
71                         ++c;
72                 }
73                 final long endTime = System.currentTimeMillis();
74                 System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
75                 return res;
76         }
77         /*
78          * getting data from the db JobDateInfo
79          */
80         public List<Long> ReadDateTable(long queryDate) {
81                 ResultSet results = session.execute("SELECT * FROM JobDateInfo WHERE jobday = " + queryDate + ";");
82                 if (results.isExhausted())
83                         return null;
84                 Row therow = results.one();
85                 List<Long> res = new ArrayList<Long>();
86                 res.add(therow.getLong("Total"));
87                 res.add(therow.getLong("TotalOK"));
88                 res.add(therow.getLong("TotalStopped"));
89                 res.add(therow.getLong("TotalError"));
90                 res.add(therow.getLong("TotalTimeOut"));
91                 if (!results.isExhausted()) {
92                         Date date = new Date (queryDate);
93                         log.warn("CassandraReader.ReadDateTable: date row for " + date.toString () + " ("+ queryDate + ") duplicated ");
94                 }
95                 return res;
96         }
97
98         /*
99          * getting whole protein sequence from the db ProteinRow
100          */
101         public List<AnnotatedProteinSequenceBean> ReadWholeSequence(String queryProtein) {
102                 final long startTime = System.currentTimeMillis();
103                 String com = "SELECT JobID, Predictions FROM ProteinRow WHERE Protein = '" + queryProtein + "';";
104                 System.out.println("Command: " + com);
105                 ResultSet results = session.execute(com);
106                 if (results.isExhausted())
107                         return null;
108                 final long queryTime = System.currentTimeMillis();
109                 List<Row> rows = results.all();
110                 System.out.println("Query time is " + (queryTime - startTime) + " msec");
111                 System.out.println(" rows analysed,  " + rows.size());
112                 List<AnnotatedProteinSequenceBean> res = new ArrayList<AnnotatedProteinSequenceBean>();
113                 int c = 0;
114                 for (Row r : rows) {
115                         AnnotatedProteinSequenceBean structure = new AnnotatedProteinSequenceBean(queryProtein, r.getString("JobID"), r.getMap(
116                                         "Predictions", String.class, String.class));
117                         res.add(structure);
118                         ++c;
119                 }
120                 final long endTime = System.currentTimeMillis();
121                 System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
122                 return res;
123         }
124
125         
126         /*
127          * getting jobs by ip
128          */
129         public List<Pair<String, String>> ReadIpWithJobs(String ip) {
130                 final long startTime = System.currentTimeMillis();
131                 String com = "SELECT JobID, Protein, FinalStatus FROM ProteinLog WHERE ip = '" + ip + "';";
132                 System.out.println("Command: " + com);
133                 ResultSet results = session.execute(com);
134                 if (results.isExhausted())
135                         return null;
136                 final long queryTime = System.currentTimeMillis();
137                 List<Row> rows = results.all();
138                 List<Pair<String, String>> res = new ArrayList<Pair<String, String>>();
139                 System.out.println("Query time is " + (queryTime - startTime) + " msec");
140                 System.out.println(" rows analysed,  " + rows.size());
141                 int c = 0;
142                 for (Row r : rows) {
143                         if (r.getString("FinalStatus").equals("OK")) { 
144                                 Pair<String, String> pair = new Pair<String, String>(r.getString("JobID"), r.getString("Protein"));
145                                 System.out.println(pair.getElement0());
146                                 System.out.println(pair.getElement1());
147                                 res.add(pair);
148                                 ++c;
149                         }
150                 }
151                 final long endTime = System.currentTimeMillis();
152                 System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
153                 return res;
154         }
155
156         /*
157          * getting part of protein sequence from the db ProteinRow
158          */
159         public List<AnnotatedProteinSequenceBean> ReadPartOfSequence(String queryProtein) {
160                 final long startTime = System.currentTimeMillis();
161                 String com = "SELECT * FROM ProteinRow;";
162                 System.out.println("Command: " + com);
163                 ResultSet results = session.execute(com);
164                 if (results.isExhausted())
165                         return null;
166                 final long queryTime = System.currentTimeMillis();
167                 List<Row> rows = results.all();
168                 System.out.println("Query time is " + (queryTime - startTime) + " msec");
169                 System.out.println(" rows analysed,  " + rows.size());
170                 List<AnnotatedProteinSequenceBean> res = new ArrayList<AnnotatedProteinSequenceBean>();
171                 int c = 0;
172                 for (Row r : rows) {
173                         String prot = r.getString("Protein");
174                         if (prot.matches("(.*)" + queryProtein + "(.*)")) {
175                                 AnnotatedProteinSequenceBean structure = new AnnotatedProteinSequenceBean(prot, r.getString("JobID"), r.getMap("Predictions",
176                                                 String.class, String.class));
177                                 res.add(structure);
178                                 ++c;
179                         }
180                 }
181                 final long endTime = System.currentTimeMillis();
182                 System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
183                 return res;
184         }
185
186         /*
187          * getting protein sequences by counter
188          */
189         public Map<String, Integer> ReadProteinSequenceByCounter() {
190                 final long startTime = System.currentTimeMillis();
191                 String com = "SELECT Protein, JobID FROM ProteinRow;";
192                 System.out.println("Command: " + com);
193                 ResultSet results = session.execute(com);
194                 if (results.isExhausted())
195                         return null;
196                 final long queryTime = System.currentTimeMillis();
197                 List<Row> rows = results.all();
198                 System.out.println("Query time is " + (queryTime - startTime) + " msec");
199                 System.out.println(" rows analysed,  " + rows.size());
200                 Map<String, Integer> res = new HashMap<String, Integer>();
201                 int c = 0;
202                 for (Row r : rows) {
203                         String protein = r.getString("Protein");
204                         String id = r.getString("JobID");
205                         if (res.containsKey(protein))
206                                 res.put(protein, res.get(protein) + 1);
207                         else
208                                 res.put(protein, 1);
209                 }
210                 final long endTime = System.currentTimeMillis();
211                 System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
212                 return res;
213         }
214
215         /*
216          * getting ip by counter
217          */
218         public Map<String, Integer> ReadIpByCounter() {
219                 final long startTime = System.currentTimeMillis();
220                 String com = "SELECT JobID, ip FROM ProteinLog;";
221                 System.out.println("Command: " + com);
222                 ResultSet results = session.execute(com);
223                 if (results.isExhausted())
224                         return null;
225                 final long queryTime = System.currentTimeMillis();
226                 List<Row> rows = results.all();
227                 System.out.println("Query time is " + (queryTime - startTime) + " msec");
228                 System.out.println(" rows analysed,  " + rows.size());
229                 Map<String, Integer> res = new HashMap<String, Integer>();
230                 int c = 0;
231                 for (Row r : rows) {
232                         String protein = r.getString("ip");
233                         String id = r.getString("JobID");
234                         if (res.containsKey(protein))
235                                 res.put(protein, res.get(protein) + 1);
236                         else
237                                 res.put(protein, 1);
238                 }
239                 final long endTime = System.currentTimeMillis();
240                 System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
241                 return res;
242         }
243
244         /*
245          * getting log info for jobid
246          */
247         public StructureJobLog ReadJobLog(String jobid) {
248                 final long startTime = System.currentTimeMillis();
249                 String com = "SELECT * FROM ProteinLog WHERE JobID = '" + jobid + "';";
250                 System.out.println("Command: " + com);
251                 ResultSet results = session.execute(com);
252                 if (results.isExhausted())
253                         return null;
254                 final long queryTime = System.currentTimeMillis();
255                 Row row = results.one();
256                 String com1 = "SELECT * FROM ProteinRow WHERE JobID = '" + jobid + "' ALLOW FILTERING;";
257                 System.out.println("Command: " + com1);
258                 ResultSet results1 = session.execute(com1);
259                 if (results1.isExhausted())
260                         return null;
261                 Row row1 = results1.one();
262                 StructureJobLog res = new StructureJobLog(row.getString("Protein"), row.getString("JobID"), row.getString("DataBegin"),
263                                 row.getString("DataEnd"), row.getString("ip"), row1.getMap("Predictions", String.class, String.class));
264                 System.out.println("Query time is " + (queryTime - startTime) + " msec");
265                 final long endTime = System.currentTimeMillis();
266                 System.out.println(" rows analysed, execution time is " + (endTime - startTime) + " msec");
267                 return res;
268         }
269 }