#################################################################################
# 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
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;
public String getIp() {
return ip;
}
+
+ public String getProgrammeName() {
+ return programmeName;
+ }
+
+ public String getVersion() {
+ return version;
+ }
public Map<String, String> getPrediction() {
return predictions;
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));");
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));");
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);");
import java.util.Calendar;
import java.util.Date;
+import java.util.List;
import org.apache.log4j.Logger;
}
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
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");
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");
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()
+ 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");
}
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;
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;
}
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();
}
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");
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;
}
}
private String FinalStatus;
private String IP;
private String Email;
+ private String programmeName;
+ private String version;
private String StartingDateStr;
private long StartingDate;
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");
ExecutionStatus = "OK";
FinalStatus = "OK";
jobid = "";
+ programmeName ="";
+ version = "";
StartingDateStr = "1970/1/1";
StartingTimeStr = "1970/1/1:0:0:0";
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;
+ }
}
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;
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();
<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>