1 package compbio.cassandra;
3 import java.util.Calendar;
5 import org.apache.log4j.Logger;
6 import org.springframework.dao.DataIntegrityViolationException;
8 import com.datastax.driver.core.Cluster;
9 import com.datastax.driver.core.Configuration;
10 import com.datastax.driver.core.Host;
11 import com.datastax.driver.core.Metadata;
12 import com.datastax.driver.core.MetricsOptions;
13 import com.datastax.driver.core.PoolingOptions;
14 import com.datastax.driver.core.ProtocolOptions;
15 import com.datastax.driver.core.QueryOptions;
16 import com.datastax.driver.core.ResultSet;
17 import com.datastax.driver.core.Row;
18 import com.datastax.driver.core.SocketOptions;
20 import com.datastax.driver.core.Session;
21 import com.datastax.driver.core.exceptions.QueryExecutionException;
22 import com.datastax.driver.core.exceptions.QueryValidationException;
23 import com.datastax.driver.core.policies.Policies;
25 import compbio.engine.ProteoCachePropertyHelperManager;
26 import compbio.util.PropertyHelper;
28 public class CassandraNativeConnector {
29 private static Cluster cluster;
30 private static Session session;
31 private static final PropertyHelper ph = ProteoCachePropertyHelperManager.getPropertyHelper();
32 private static Logger log = Logger.getLogger(CassandraNativeConnector.class);
34 public static String CASSANDRA_HOSTNAME = "localhost";
36 public static Session getSession() {
41 * connect to the cluster and look whether all tables exist
43 public void Connect() {
45 String cassandrahostname = ph.getProperty("cassandra.host");
46 if (null != cassandrahostname) {
47 CASSANDRA_HOSTNAME = cassandrahostname;
50 Cluster.Builder builder = Cluster.builder();
51 builder.addContactPoint(CASSANDRA_HOSTNAME);
52 // PrintClusterConfiguration( builder.getConfiguration());
53 cluster = builder.build();
55 Metadata metadata = cluster.getMetadata();
56 System.out.printf("Connected to cluster: %s\n", metadata.getClusterName());
57 for (Host host : metadata.getAllHosts()) {
58 System.out.printf("Datatacenter: %s; Host: %s; Rack: %s\n", host.getDatacenter(), host.getAddress(), host.getRack());
60 session = cluster.connect();
62 System.out.println("Cassandra connected");
65 private void CreateMainTables() {
66 session.execute("CREATE KEYSPACE IF NOT EXISTS ProteinKeyspace WITH replication = {'class':'SimpleStrategy', 'replication_factor':3};");
67 session.execute("USE ProteinKeyspace");
69 session.execute("CREATE TABLE IF NOT EXISTS MainParameters " + "(Name ascii, Value ascii, PRIMARY KEY(Name));");
71 session.execute("CREATE TABLE IF NOT EXISTS ProteinRow "
72 + "(Protein ascii, JobID ascii, Predictions map<ascii,ascii>, PRIMARY KEY(JobID));");
74 session.execute("CREATE TABLE IF NOT EXISTS ProteinLog "
75 + "(JobID ascii, DataBegin ascii, DataEnd ascii, ip ascii, FinalStatus ascii, "
76 + "ExecutionStatus ascii, Protein ascii, PRIMARY KEY(JobID));");
78 session.execute("CREATE TABLE IF NOT EXISTS ProteinData "
79 + "(jobtime bigint, JobID ascii, ExecTime int, Protein ascii, PRIMARY KEY(jobtime, JobID));");
81 session.execute("CREATE TABLE IF NOT EXISTS FailLog "
82 + "(jobtime bigint, JobID ascii, ExecTime int, ip ascii, FinalStatus ascii, PRIMARY KEY(jobtime, JobID));");
84 session.execute("CREATE TABLE IF NOT EXISTS JpredArchive "
85 + "(JobID ascii, Protein varchar, IP ascii, StartTime bigint, ExecTime int, FinalStatus ascii, ExecutionStatus ascii, alignment map<ascii,ascii>, "
86 + "predictions map<ascii,ascii>, ArchiveLink varchar, LOG varchar, PRIMARY KEY(JobID));");
88 session.execute("CREATE TABLE IF NOT EXISTS JobDateInfo "
89 + "(jobday bigint, Total bigint, TotalOK bigint, TotalStopped bigint, TotalError bigint, TotalTimeOut bigint, Program varchar, Version varchar, PRIMARY KEY(jobday));");
91 String com = "CREATE TABLE IF NOT EXISTS Users "
92 + "(name varchar, id bigint, email varchar, password varchar, organisation varchar, position varchar, signedtolist boolean, registrationdate bigint, PRIMARY KEY(id));";
96 } catch (QueryExecutionException e) {
97 String mess = "CassandraNativeConnector.CreateMainTables: query execution exception...";
98 System.out.println(mess);
100 log.error(e.getLocalizedMessage(), e.getCause());
101 } catch (QueryValidationException e) {
102 String mess = "CassandraNativeConnector.CreateMainTables: query validation exception... Command: " + com;
103 System.out.println(mess);
105 log.error(e.getLocalizedMessage(), e.getCause());
108 session.execute("CREATE INDEX IF NOT EXISTS ProteinSeq ON ProteinRow (protein);");
109 session.execute("CREATE INDEX IF NOT EXISTS ProteinIp ON ProteinLog (ip);");
110 session.execute("CREATE INDEX IF NOT EXISTS ON ProteinLog (ExecutionStatus);");
111 session.execute("CREATE INDEX IF NOT EXISTS ON FailLog (FinalStatus);");
112 session.execute("CREATE INDEX IF NOT EXISTS ON Users (email);");
113 // session.execute("CREATE INDEX IF NOT EXISTS JobDateStamp ON ProteinData (jobtime);");
116 public void Closing() {
119 System.out.println("Cassandra has been shut down");
123 * getting earlest date of jobs from the db
125 public static long getEarliestDateInDB() {
126 String com = "SELECT * FROM MainParameters WHERE Name = 'EarliestJobDate';";
127 System.out.println("Command: " + com);
128 ResultSet results = session.execute(com);
130 if (!results.isExhausted()) {
131 Row r = results.one();
132 return Long.parseLong(r.getString("Value"));
134 Calendar cal = Calendar.getInstance();
135 return cal.getTimeInMillis();
138 private void PrintClusterConfiguration(Configuration cc) {
139 Policies policies = cc.getPolicies();
140 SocketOptions sopt = cc.getSocketOptions();
141 ProtocolOptions propt = cc.getProtocolOptions();
142 PoolingOptions plopt = cc.getPoolingOptions();
143 MetricsOptions mopt = cc.getMetricsOptions();
144 QueryOptions qopt = cc.getQueryOptions();
145 System.out.println("Cluster configuration:");
146 System.out.println(" Policies = " + policies.toString());
147 System.out.println(" Socket Options = " + sopt.toString());
148 System.out.println(" Protocol Options: compression = " + propt.getCompression());
149 System.out.println(" Pooling Options = " + plopt.toString());
150 System.out.println(" Metrics Options = " + mopt.toString());
151 System.out.println(" Query Options = " + qopt.toString());