inserted 2 columns: version and pragramme name
authorNatasha Sherstneva <n.shertneva@gmail.com>
Mon, 20 Jan 2014 10:56:16 +0000 (10:56 +0000)
committerNatasha Sherstneva <n.shertneva@gmail.com>
Mon, 20 Jan 2014 10:56:16 +0000 (10:56 +0000)
conf/Proteocache.properties
datadb/compbio/beans/JobBean.java
datadb/compbio/cassandra/CassandraNativeConnector.java
datadb/compbio/cassandra/CassandraNewTableWriter.java
datadb/compbio/cassandra/CassandraReaderOld.java
datadb/compbio/cassandra/CassandraWriter.java
datadb/compbio/cassandra/JpredParserHTTP.java
datadb/compbio/cassandra/readers/JobReader.java
engine/compbio/engine/Job.java
server/compbio/listeners/ContextListener.java
webapp/view/reports/Job.jsp

index fb855a3..b5f588f 100644 (file)
@@ -1,10 +1,11 @@
 #################################################################################
 # Cassandra host or IP
 # test server is 10.0.115.190
-#cassandra.host=localhost
-cassandra.host=gjb-www-1.cluster.lifesci.dundee.ac.uk
+cassandra.host=localhost
+#cassandra.host=gjb-www-1.cluster.lifesci.dundee.ac.uk
 
 cassandra.newtables.update=false
+cassandra.version.update=false
 
 #################################################################################
 # Jpred sources
index 8176748..05c798a 100644 (file)
@@ -11,10 +11,14 @@ public class JobBean implements PredictionIndex {
        private String dateEnd;
        private String sequence;
        private String ip;
+       private String programmeName;
+       private String version;
        private LinkedHashMap<String, String> predictions;
 
-       public JobBean(String seq, String id, String dateStart, String dateEnd, String ip, Map<String, String> pred) {
+       public JobBean(String seq, String id, String dateStart, String dateEnd, String ip, Map<String, String> pred, String prog, String version) {
                this.sequence = seq;
+               this.programmeName = prog;
+               this.version = version;
                this.jobid = id;
                this.dateStart = dateStart;
                this.dateEnd = dateEnd;
@@ -50,6 +54,14 @@ public class JobBean implements PredictionIndex {
        public String getIp() {
                return ip;
        }
+       
+       public String getProgrammeName() {
+               return programmeName;
+       }
+       
+       public String getVersion() {
+               return version;
+       }
 
        public Map<String, String> getPrediction() {
                return predictions;
index 9d8d01d..beb83c4 100644 (file)
@@ -73,7 +73,7 @@ public class CassandraNativeConnector {
 
                session.execute("CREATE TABLE IF NOT EXISTS ProteinLog "
                                + "(JobID ascii, DataBegin ascii, DataEnd ascii, ip ascii, FinalStatus ascii, "
-                               + "ExecutionStatus ascii, Protein ascii, PRIMARY KEY(JobID));");
+                               + "ExecutionStatus ascii, Protein ascii, ProgrammeName ascii, Version ascii, PRIMARY KEY(JobID));");
 
                session.execute("CREATE TABLE IF NOT EXISTS ProteinData "
                                + "(jobtime bigint, JobID ascii, ExecTime int, Protein ascii, PRIMARY KEY(jobtime, JobID));");
@@ -83,7 +83,7 @@ public class CassandraNativeConnector {
 
                session.execute("CREATE TABLE IF NOT EXISTS JpredArchive "
                                + "(JobID ascii, Protein varchar, IP ascii, StartTime bigint, ExecTime int, FinalStatus ascii, ExecutionStatus ascii, alignment map<ascii,ascii>, "
-                               + "predictions map<ascii,ascii>, ArchiveLink varchar, LOG varchar, PRIMARY KEY(JobID));");
+                               + "predictions map<ascii,ascii>, ArchiveLink varchar, LOG varchar, ProgrammeName ascii, Version ascii, PRIMARY KEY(JobID));");
 
                session.execute("CREATE TABLE IF NOT EXISTS JobDateInfo "
                                + "(jobday bigint, Total bigint,  TotalOK bigint, TotalStopped bigint, TotalError bigint, TotalTimeOut bigint, Program varchar, Version varchar, PRIMARY KEY(jobday));");
@@ -91,20 +91,13 @@ public class CassandraNativeConnector {
                String com = "CREATE TABLE IF NOT EXISTS Users "
                                + "(name varchar, id bigint, email varchar, password varchar, organisation varchar, position varchar, signedtolist boolean, registrationdate bigint, PRIMARY KEY(id));";
 
-               try {
-                       session.execute(com);
-               } catch (QueryExecutionException e) {
-                       String mess = "CassandraNativeConnector.CreateMainTables: query execution exception...";
-                       System.out.println(mess);
-                       log.error(mess);
-                       log.error(e.getLocalizedMessage(), e.getCause());
-               } catch (QueryValidationException e) {
-                       String mess = "CassandraNativeConnector.CreateMainTables: query validation exception... Command: " + com;
-                       System.out.println(mess);
-                       log.error(mess);
-                       log.error(e.getLocalizedMessage(), e.getCause());
-               }
-
+               
+       
+       //      session.execute("ALTER TABLE ProteinLog ADD ProgrammeName ascii;");
+       //      session.execute("ALTER TABLE ProteinLog ADD Version ascii;");
+       //      session.execute("ALTER TABLE JpredArchive ADD ProgrammeName ascii;");
+       //      session.execute("ALTER TABLE JpredArchive ADD Version ascii;");
+               
                session.execute("CREATE INDEX IF NOT EXISTS ProteinSeq ON ProteinRow (protein);");
                session.execute("CREATE INDEX IF NOT EXISTS ProteinIp ON ProteinLog (ip);");
                session.execute("CREATE INDEX IF NOT EXISTS ON ProteinLog (ExecutionStatus);");
index 0d68b1a..6cb9c98 100644 (file)
@@ -2,6 +2,7 @@ package compbio.cassandra;
 
 import java.util.Calendar;
 import java.util.Date;
+import java.util.List;
 
 import org.apache.log4j.Logger;
 
@@ -44,6 +45,39 @@ public class CassandraNewTableWriter {
                }
                return false;
        }
+       
+       /*
+        * update programme name and version
+        */
+       public void FillNewParameter() {
+               System.out.println("Updating....");
+
+               final long StartTime = System.currentTimeMillis();
+               long erldate = CassandraNativeConnector.getEarliestDateInDB();
+               Calendar runnicCal = Calendar.getInstance();
+               runnicCal.setTime(new Date(erldate));
+               Calendar endcal = Calendar.getInstance();
+               long endTime = endcal.getTime().getTime();
+               for (Date date = runnicCal.getTime(); date.getTime() < endTime; runnicCal.add(Calendar.DATE, 1), date = runnicCal.getTime()) {
+                       try {
+                               String com = "SELECT JobID, Protein FROM ProteinData WHERE jobtime = " + date.getTime() + ";";
+                               System.out.println(com);
+                               ResultSet results = session.execute(com);
+                               if (results == null || results.isExhausted())
+                                       continue;
+                               List<Row> rows = results.all();
+                               System.out.println(rows.size());
+                               for (Row r : rows) {
+                                       session.execute("UPDATE  ProteinLog SET ProgrammeName = 'Jpred', Version = '3.0.1' WHERE JobID = '" + r.getString("JobID") + "';");
+                                       session.execute("UPDATE  JpredArchive SET ProgrammeName = 'Jpred', Version = '3.0.1' WHERE JobID = '" + r.getString("JobID") + "';");                                   
+                               }
+                       } catch (QueryExecutionException e) {
+                               e.printStackTrace();
+                       }
+               }
+               System.out.println("Table ProteinLog filled: total time is " + (System.currentTimeMillis() - StartTime) + " msec");
+       }
+
 
        /*
         * fill new table
index c7176b0..62979ad 100644 (file)
@@ -314,7 +314,7 @@ public class CassandraReaderOld {
                        return null;
                Row row1 = results1.one();
                JobBean res = new JobBean(row.getString("Protein"), row.getString("JobID"), row.getString("DataBegin"), row.getString("DataEnd"),
-                               row.getString("ip"), row1.getMap("Predictions", String.class, String.class));
+                               row.getString("ip"), row1.getMap("Predictions", String.class, String.class), row.getString("ProgrammeName"), row.getString("Version"));
                System.out.println("Query time is " + (queryTime - startTime) + " msec");
                final long endTime = System.currentTimeMillis();
                System.out.println(" rows analysed, execution time is " + (endTime - startTime) + " msec");
index 710d78b..05a03f0 100644 (file)
@@ -74,10 +74,12 @@ public class CassandraWriter {
                        String protein = job.getProtein();
                        String finalstatus = job.getFinalStatus();
                        String execstatus = job.getExecutionStatus();
+                       String programmeName = job.getProgrammeName();
+                       String version = job.getVersion();
 
-                       String com1 = "INSERT INTO ProteinLog (JobID, IP, DataBegin, DataEnd, FinalStatus, ExecutionStatus, Protein) VALUES ('" + id
+                       String com1 = "INSERT INTO ProteinLog (JobID, IP, DataBegin, DataEnd, FinalStatus, ExecutionStatus, Protein, ProgrammeName, Version) VALUES ('" + id
                                        + "','" + job.getIP() + "','" + job.getStartingTimeStr() + "','" + job.getEndTimeStr() + "','" + finalstatus + "','"
-                                       + execstatus + "','" + protein + "');";
+                                       + execstatus + "','" + protein + "','" + programmeName + "','" + version + "');";
                        ResultSet insert = execute(com1);
                        if (null == insert) {
                                System.out.println("CassandraWriter.FormQueryTables: couldn't insert into ProteinLog");
@@ -191,7 +193,7 @@ public class CassandraWriter {
                if (JobisNotArchived(job.getJobID())) {
                        String id = job.getJobID();
                        String log = job.getLog().replaceAll("'", "");
-                       String com = "INSERT INTO JpredArchive (JobID, Protein, IP, StartTime, ExecTime, FinalStatus, ExecutionStatus, LOG, ArchiveLink) VALUES ('"
+                       String com = "INSERT INTO JpredArchive (JobID, Protein, IP, StartTime, ExecTime, FinalStatus, ExecutionStatus, LOG, ArchiveLink, ProgrammeName, Version) VALUES ('"
                                        + id
                                        + "','"
                                        + job.getProtein()
@@ -201,7 +203,7 @@ public class CassandraWriter {
                                        + job.getStartingTime()
                                        + ","
                                        + job.getExecutionTime()
-                                       + ",'" + job.getFinalStatus() + "','" + job.getExecutionStatus() + "','" + log + "','" + archivepath + "');";
+                                       + ",'" + job.getFinalStatus() + "','" + job.getExecutionStatus() + "','" + log + "','" + archivepath + "','" + job.getProgrammeName() + "','" + job.getVersion() + "');";
                        if (null == execute(com)) {
                                System.out.println("CassandraWriter.ArchiveData: couldn't insert into JpredArchive");
                        }
index d221209..1d888e4 100644 (file)
@@ -13,6 +13,8 @@ import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import compbio.cassandra.JpredParser;
 import compbio.data.sequence.FastaReader;
@@ -106,12 +108,17 @@ public class JpredParserHTTP implements JpredParser {
                return protein;
        }
 
-       private String parseLogFile(final InputStream stream) throws IOException {
+       private String parseLogFile(final InputStream stream, JpredJob job) throws IOException {
                String out = "";
                BufferedReader buffer = new BufferedReader(new InputStreamReader(stream));
                String line;
+               if (null != (out = buffer.readLine()) && (out.contains("version"))) {
+                       Matcher matcher = Pattern.compile("((\\d|\\.)+)").matcher(out);
+                       if (matcher.find())
+                               job.setVersion(matcher.group(0));
+               }
                while (null != (line = buffer.readLine())) {
-                       out += line;
+                       out += line;            
                }
                return out;
        }
@@ -140,7 +147,7 @@ public class JpredParserHTTP implements JpredParser {
                        if (199 < httpConnection_conciseurl.getResponseCode() && httpConnection_conciseurl.getResponseCode() < 300) {
                                ConcisefileExists = true;
                                running = false;
-                               try {
+                               try {                           
                                        job.setProtein(parsePredictions(conciseurl.openStream(), job.getJobID()));
                                } catch (IOException e) {
                                        e.printStackTrace();
@@ -151,7 +158,8 @@ public class JpredParserHTTP implements JpredParser {
                        }
                        if (199 < httpConnection_logurl.getResponseCode() && httpConnection_logurl.getResponseCode() < 300) {
                                LogfileExists = true;
-                               job.setLog(parseLogFile(logurl.openStream()));
+                               job.setProgrammeName("Jpred");
+                               job.setLog(parseLogFile(logurl.openStream(), job));
                        } else {
                                // The job has not been started at all...
                                job.setExecutionStatus("FAIL");
index 178ff4b..c632542 100644 (file)
@@ -29,7 +29,7 @@ public class JobReader extends CassandraReader {
                        return null;
                Row row1 = results1.one();
                JobBean res = new JobBean(row.getString("Protein"), row.getString("JobID"), row.getString("DataBegin"), row.getString("DataEnd"),
-                               row.getString("ip"), row1.getMap("Predictions", String.class, String.class));
+                               row.getString("ip"), row1.getMap("Predictions", String.class, String.class), row.getString("ProgrammeName"), row.getString("Version"));
                return res;
        }
 }
index e1de779..162a246 100644 (file)
@@ -10,6 +10,8 @@ public class Job {
        private String FinalStatus;
        private String IP;
        private String Email;
+       private String programmeName;
+       private String version;
 
        private String StartingDateStr;
        private long StartingDate;
@@ -18,6 +20,7 @@ public class Job {
        private String StartingTimeStr;
        private long StartingTime;
        private long ExecutionTime;
+       
 
        static SimpleDateFormat dateformatter = new SimpleDateFormat("yyyy/MM/dd");;
        static SimpleDateFormat timeformatter = new SimpleDateFormat("yyyy/MM/dd:H:m:s");
@@ -26,6 +29,8 @@ public class Job {
                ExecutionStatus = "OK";
                FinalStatus = "OK";
                jobid = "";
+               programmeName ="";
+               version = "";
 
                StartingDateStr = "1970/1/1";
                StartingTimeStr = "1970/1/1:0:0:0";
@@ -166,4 +171,20 @@ public class Job {
        public String getJobID() {
                return jobid;
        }
+       
+       public void setProgrammeName(String prog) {
+               this.programmeName = prog;
+       }
+
+       public String getProgrammeName() {
+               return programmeName;
+       }
+       
+       public void setVersion(String ver) {
+               this.version = ver;
+       }
+
+       public String getVersion() {
+               return version;
+       }
 }
index 356828c..f673e30 100644 (file)
@@ -39,6 +39,7 @@ public class ContextListener implements ServletContextListener {
        public static boolean READ_WEB_JPRED = false;
        public static boolean READ_LOCALFILE_JPRED = false;
        public static boolean FILL_NEWTABLE = false;
+       public static boolean UPDATE_TABLE = false;
 
        private static boolean initBooleanValue(String key) {
                assert key != null;
@@ -62,8 +63,20 @@ public class ContextListener implements ServletContextListener {
                READ_WEB_JPRED = initBooleanValue("cassandra.jpred.web.update");
                READ_LOCALFILE_JPRED = initBooleanValue("cassandra.jpred.local.update");
                FILL_NEWTABLE = initBooleanValue("cassandra.newtables.update");
+               UPDATE_TABLE = initBooleanValue("cassandra.version.update");
 
                executor = Executors.newScheduledThreadPool(3);
+               if (UPDATE_TABLE) {
+                       System.out.println("Initializating update version parameter");
+                       //update_scheduler = Executors.newSingleThreadScheduledExecutor();
+                       //update_scheduler.schedule(new Runnable() {
+                       executor.schedule(new Runnable() {
+                               @Override
+                               public void run() {
+                                       updater.FillNewParameter();
+                               }
+                       }, 10, TimeUnit.SECONDS);
+               }
                if (FILL_NEWTABLE) {
                        System.out.println("Initializating new table update scheduler");
                        //update_scheduler = Executors.newSingleThreadScheduledExecutor();
index 64d7896..db8f352 100644 (file)
@@ -21,6 +21,8 @@
                <div class="panel-body">
                        <p>Start timestamp : ${result.dateStart}</p>
                        <p>End timestamp : ${result.dateEnd}</p>
+                       <p>Run : ${result.programmeName} server</p>
+                       <p>Version : ${result.version}</p>
 <sec:authorize access="hasRole('ROLE_ADMIN')">
                        <p>IP: <a title="Click to view other jobs" href="${ip_query}?ip=${result.ip}">${result.ip}</a></p>
 </sec:authorize>