69f7c088f639a4029552f3ef16499bfe348bfe9b
[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 DateBean ReadProteinData(long day, String date) {
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                 DateBean res = new DateBean(date);
67                 int c = 0;
68                 for (Row r : rows) {
69                         res.setJobidAndSeq(r.getString("JobID"), r.getString("Protein"));
70                         ++c;
71                 }
72                 final long endTime = System.currentTimeMillis();
73                 System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
74                 return res;
75         }
76         /*
77          * getting data from the db JobDateInfo
78          */
79         public Total ReadDateTable(long queryDate) {
80                 ResultSet results = session.execute("SELECT * FROM JobDateInfo WHERE jobday = " + queryDate + ";");
81                 if (results.isExhausted())
82                         return null;
83                 Row therow = results.one();
84                 Total res = new Total(therow.getLong("Total"), therow.getLong("TotalOK"), therow.getLong("TotalStopped"), 
85                                 therow.getLong("TotalError"), therow.getLong("TotalTimeOut"));
86                 if (!results.isExhausted()) {
87                         Date date = new Date (queryDate);
88                         log.warn("CassandraReader.ReadDateTable: date row for " + date.toString () + " ("+ queryDate + ") duplicated ");
89                 }
90                 return res;
91         }
92
93         /*
94          * getting whole protein sequence from the db ProteinRow
95          */
96         public List<ProteinBean> ReadWholeSequence(String queryProtein) {
97                 final long startTime = System.currentTimeMillis();
98                 String com = "SELECT JobID, Predictions FROM ProteinRow WHERE Protein = '" + queryProtein + "';";
99                 System.out.println("Command: " + com);
100                 ResultSet results = session.execute(com);
101                 if (results.isExhausted())
102                         return null;
103                 final long queryTime = System.currentTimeMillis();
104                 List<Row> rows = results.all();
105                 System.out.println("first size : " + rows.size());
106                 System.out.println("Query time is " + (queryTime - startTime) + " msec");
107                 System.out.println(" rows analysed,  " + rows.size());
108                 List<ProteinBean> res = new ArrayList<ProteinBean>();
109                 ProteinBean structure = new ProteinBean(queryProtein, rows.get(0).getMap(
110                                 "Predictions", String.class, String.class));
111                 System.out.println("second size : " + rows.size());
112                 int c = 0;
113                 for (Row r : rows) {
114                         structure.setJobid(r.getString("JobID"));                       
115                         ++c;
116                 }
117                 res.add(structure);
118                 final long endTime = System.currentTimeMillis();
119                 System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
120                 return res;
121         }
122
123         
124         /*
125          * getting jobs by ip
126          */
127         public Map<String, String[]> ReadIpWithJobs(String ip) {
128                 final long startTime = System.currentTimeMillis();
129                 String com = "SELECT JobID, Protein, FinalStatus, DataBegin FROM ProteinLog WHERE ip = '" + ip + "';";
130                 System.out.println("Command: " + com);
131                 ResultSet results = session.execute(com);
132                 if (results.isExhausted())
133                         return null;
134                 final long queryTime = System.currentTimeMillis();
135                 List<Row> rows = results.all();
136                 Map<String, String[]> res = new HashMap<String, String[]>();
137                 System.out.println("Query time is " + (queryTime - startTime) + " msec");
138                 System.out.println(" rows analysed,  " + rows.size());
139                 int c = 0;
140                 for (Row r : rows) {
141                         if (r.getString("FinalStatus").equals("OK")) { 
142                                 String date = r.getString("DataBegin");
143                                 res.put(r.getString("JobID"), new String[] {date.substring(0, date.indexOf(":")), r.getString("Protein")});
144                                 ++c;
145                         }
146                 }
147                 final long endTime = System.currentTimeMillis();
148                 System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
149                 return res;
150         }
151
152         /*
153          * getting part of protein sequence from the db ProteinRow
154          */
155         public List<ProteinBean> ReadPartOfSequence(String queryProtein) {
156                 final long startTime = System.currentTimeMillis();
157                 String com = "SELECT * FROM ProteinRow;";
158                 System.out.println("Command: " + com);
159                 ResultSet results = session.execute(com);
160                 if (results.isExhausted())
161                         return null;
162                 final long queryTime = System.currentTimeMillis();
163                 List<Row> rows = results.all();
164                 System.out.println("Query time is " + (queryTime - startTime) + " msec");
165                 System.out.println(" rows analysed,  " + rows.size());
166                 List<ProteinBean> res = new ArrayList<ProteinBean>();
167                 int c = 0;
168                 for (Row r : rows) {
169                         String prot = r.getString("Protein");
170                         if (prot.matches("(.*)" + queryProtein + "(.*)")) {
171                                 ProteinBean structure = new ProteinBean(prot,  r.getMap("Predictions", String.class, String.class));
172                                 structure.setJobid(r.getString("JobID"));
173                                 res.add(structure);
174                                 ++c;
175                         }
176                 }
177                 final long endTime = System.currentTimeMillis();
178                 System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
179                 return res;
180         }
181
182         /*
183          * getting protein sequences by counter
184          */
185         public Map<String, Integer> ReadProteinSequenceByCounter() {
186                 final long startTime = System.currentTimeMillis();
187                 String com = "SELECT Protein, JobID FROM ProteinRow;";
188                 System.out.println("Command: " + com);
189                 ResultSet results = session.execute(com);
190                 if (results.isExhausted())
191                         return null;
192                 final long queryTime = System.currentTimeMillis();
193                 List<Row> rows = results.all();
194                 System.out.println("Query time is " + (queryTime - startTime) + " msec");
195                 System.out.println(" rows analysed,  " + rows.size());
196                 Map<String, Integer> res = new HashMap<String, Integer>();
197                 int c = 0;
198                 for (Row r : rows) {
199                         String protein = r.getString("Protein");
200                         String id = r.getString("JobID");
201                         if (res.containsKey(protein))
202                                 res.put(protein, res.get(protein) + 1);
203                         else
204                                 res.put(protein, 1);
205                 }
206                 final long endTime = System.currentTimeMillis();
207                 System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
208                 return res;
209         }
210
211         /*
212          * getting ip by counter
213          */
214         public Map<String, Integer> ReadIpByCounter() {
215                 final long startTime = System.currentTimeMillis();
216                 String com = "SELECT JobID, ip FROM ProteinLog;";
217                 System.out.println("Command: " + com);
218                 ResultSet results = session.execute(com);
219                 if (results.isExhausted())
220                         return null;
221                 final long queryTime = System.currentTimeMillis();
222                 List<Row> rows = results.all();
223                 System.out.println("Query time is " + (queryTime - startTime) + " msec");
224                 System.out.println(" rows analysed,  " + rows.size());
225                 Map<String, Integer> res = new HashMap<String, Integer>();
226                 int c = 0;
227                 for (Row r : rows) {
228                         String ip = r.getString("ip");
229                         String id = r.getString("JobID");
230                         if (res.containsKey(ip))
231                                 res.put(ip, res.get(ip) + 1);
232                         else
233                                 res.put(ip, 1);
234                 }
235                 final long endTime = System.currentTimeMillis();
236                 System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec");
237                 return res;
238         }
239
240         /*
241          * getting log info for jobid
242          */
243         public JobBean ReadJobLog(String jobid) {
244                 final long startTime = System.currentTimeMillis();
245                 String com = "SELECT * FROM ProteinLog WHERE JobID = '" + jobid + "';";
246                 System.out.println("Command: " + com);
247                 ResultSet results = session.execute(com);
248                 if (results.isExhausted())
249                         return null;
250                 final long queryTime = System.currentTimeMillis();
251                 Row row = results.one();
252                 String com1 = "SELECT * FROM ProteinRow WHERE JobID = '" + jobid + "' ALLOW FILTERING;";
253                 System.out.println("Command: " + com1);
254                 ResultSet results1 = session.execute(com1);
255                 if (results1.isExhausted())
256                         return null;
257                 Row row1 = results1.one();
258                 JobBean res = new JobBean(row.getString("Protein"), row.getString("JobID"), row.getString("DataBegin"),
259                                 row.getString("DataEnd"), row.getString("ip"), row1.getMap("Predictions", String.class, String.class));
260                 System.out.println("Query time is " + (queryTime - startTime) + " msec");
261                 final long endTime = System.currentTimeMillis();
262                 System.out.println(" rows analysed, execution time is " + (endTime - startTime) + " msec");
263                 return res;
264         }
265 }