344 lines
11 KiB
Java
344 lines
11 KiB
Java
package org.gcube.dataanalysis.wps.remote;
|
|
|
|
import java.io.File;
|
|
import java.io.FileWriter;
|
|
import java.io.InputStream;
|
|
import java.io.OutputStream;
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
|
|
import org.gcube.contentmanagement.graphtools.utils.HttpRequest;
|
|
import org.gcube.contentmanagement.lexicalmatcher.utils.FileTools;
|
|
|
|
public class RemoteInstaller {
|
|
|
|
static String sshConnection = "plink -ssh -i privatekeyss2.ppk gcube@";
|
|
|
|
static String print(InputStream std,OutputStream out,InputStream err) throws Exception{
|
|
int value = 0;
|
|
StringBuffer sb = new StringBuffer();
|
|
if (std.available () > 0) {
|
|
System.out.println ("STD:");
|
|
value = std.read ();
|
|
System.out.print ((char) value);
|
|
sb.append(""+(char) value);
|
|
while (std.available () > 0) {
|
|
value = std.read ();
|
|
System.out.print ((char) value);
|
|
sb.append(""+(char) value);
|
|
}
|
|
}
|
|
|
|
if (err.available () > 0) {
|
|
System.out.println ("ERR:");
|
|
value = err.read ();
|
|
System.out.print ((char) value);
|
|
sb.append(""+(char) value);
|
|
while (err.available () > 0) {
|
|
value = err.read ();
|
|
System.out.print ((char) value);
|
|
sb.append(""+(char) value);
|
|
}
|
|
}
|
|
|
|
System.out.println();
|
|
|
|
return sb.toString();
|
|
}
|
|
|
|
static void cmd1(String[] commands) throws Exception {
|
|
Runtime r = Runtime.getRuntime ();
|
|
Process p = r.exec (commands[0]);
|
|
InputStream std = p.getInputStream ();
|
|
OutputStream out = p.getOutputStream ();
|
|
InputStream err = p.getErrorStream ();
|
|
Thread.sleep (1000);
|
|
print(std,out,err);
|
|
int commandTries = 1;
|
|
for (int i=2;i<commands.length;i=i+2){
|
|
String command = commands[i];
|
|
System.out.println("Executing "+command);
|
|
out.write ((command+"\n").getBytes ());
|
|
out.flush ();
|
|
Thread.sleep (1000);
|
|
String value = print(std,out,err);
|
|
System.out.println("N. LINES: ************************ "+value.length());
|
|
int k = 1;
|
|
int steps = Integer.parseInt(commands[i+1]);
|
|
StringBuffer lastline = new StringBuffer();
|
|
lastline.append(value);
|
|
while (k<steps){
|
|
Thread.sleep(1000);
|
|
System.out.println("flushing...."+k);
|
|
value = print(std,out,err);
|
|
System.out.println("length...."+value.length());
|
|
k++;
|
|
if (value.length()>0){
|
|
k=1;
|
|
lastline.append(value);
|
|
}
|
|
|
|
}
|
|
|
|
if (command.contains("./addAlgorithm")){
|
|
//if (!lastline.toString().contains("All done!")){
|
|
if (lastline.toString().contains("Exception:")){
|
|
if (commandTries<2){
|
|
commandTries++;
|
|
i = i-2; //retry the command
|
|
}
|
|
else{
|
|
System.err.println("Error at installing the algorithm!!!");
|
|
System.err.println("last line "+lastline);
|
|
System.exit(-1);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
p.destroy ();
|
|
|
|
System.out.println("Ready!");
|
|
}
|
|
|
|
static void cmd2(String[] commands) throws Exception {
|
|
Runtime r = Runtime.getRuntime ();
|
|
Process p = r.exec (commands[0]);
|
|
InputStream std = p.getInputStream ();
|
|
OutputStream out = p.getOutputStream ();
|
|
InputStream err = p.getErrorStream ();
|
|
Thread.sleep (1000);
|
|
print(std,out,err);
|
|
int commandTries = 1;
|
|
for (int i=2;i<commands.length;i=i+2){
|
|
String command = commands[i];
|
|
System.out.println("Executing "+command);
|
|
out.write ((command+"\n").getBytes ());
|
|
out.flush ();
|
|
Thread.sleep (1000);
|
|
String value = print(std,out,err);
|
|
System.out.println("N. LINES: ************************ "+value.length());
|
|
int k = 1;
|
|
int steps = Integer.parseInt(commands[i+1]);
|
|
StringBuffer lastline = new StringBuffer();
|
|
lastline.append(value);
|
|
while (k<steps){
|
|
Thread.sleep(1000);
|
|
System.out.println("flushing...."+k);
|
|
value = print(std,out,err);
|
|
System.out.println("length...."+value.length());
|
|
k++;
|
|
if (value.length()>0){
|
|
k=1;
|
|
lastline.append(value);
|
|
System.out.println("lastline: "+value.substring(0, Math.min(200,value.length())));
|
|
if (value.startsWith("gcube@dataminer")){
|
|
System.out.println("Prompt READY!");
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
if (command.contains("./addAlgorithm")){
|
|
//if (!lastline.toString().contains("All done!")){
|
|
if (lastline.toString().contains("Exception:")){
|
|
if (commandTries<2){
|
|
commandTries++;
|
|
i = i-2; //retry the command
|
|
}
|
|
else{
|
|
System.err.println("Error at installing the algorithm!!!");
|
|
System.err.println("last line "+lastline);
|
|
System.exit(-1);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
p.destroy ();
|
|
|
|
System.out.println("Ready!");
|
|
}
|
|
|
|
public static void startRobot(String dataminer,String password,String scope, boolean skipinstallerdownload) throws Exception{
|
|
String filepath = "DataMinerAlgorithms.txt";
|
|
startRobot(dataminer, password, scope, filepath, skipinstallerdownload);
|
|
}
|
|
|
|
public static void startRobot(String dataminer,String password,String scope, String filepath, boolean skipinstallerdownload) throws Exception{
|
|
long t0 = System.currentTimeMillis();
|
|
String installStrings = FileTools.loadString(filepath,"UTF-8");
|
|
//String[] install = installStrings.split("\n");
|
|
String[] install = installStrings.split("\n");
|
|
System.out.println("Algorithms to install "+install.length);
|
|
ArrayList<String> installArray = new ArrayList<String>(Arrays.asList(install));
|
|
|
|
String rmlogging = "rm ./tomcat/webapps/wps/WEB-INF/lib/log4j-over-slf4j-1.7.5.jar";
|
|
String rmlib1 = "rm ./tomcat/webapps/wps/WEB-INF/lib/STEP1VPAICCATBFTERetros-1.0.0.jar";
|
|
// String rmlib1 = "rm ./tomcat/webapps/wps/WEB-INF/lib/ECOPATH*";
|
|
String rmlib2 = "rm ./tomcat/webapps/wps/WEB-INF/lib/TunaAtlasDataAccess-1.0.0.jar";
|
|
String rmlib3 = "rm ./tomcat/webapps/wps/WEB-INF/lib/dataminer-algorithms.jar";
|
|
|
|
|
|
String rmInstaller = "rm algorithmInstaller.zip";
|
|
String rmInstallerFolder = "rm -r ./algorithmInstaller";
|
|
|
|
String chmod = "chmod 777 tomcat/webapps/wps/config/*";
|
|
String rmSMState = "rm -r SmartGears/state/";
|
|
|
|
//String commands [] = {sshConnection+dataminer,"0",password,"0","ls -l","0",rmlogging,"0",chmod,"0","cd algorithmInstaller","0",install,"5",install,"5","cd ..","0",rmSMState,"0","./stopContainer.sh","3","./startContainer.sh","30"};
|
|
String forecommands [] = null;
|
|
if (!skipinstallerdownload){
|
|
String getInstaller = "wget --no-check-certificate https://svn.research-infrastructures.eu/public/d4science/gcube/trunk/data-analysis/DataminerAlgorithmsInstaller/package/algorithmInstaller.zip";
|
|
String unzipInstaller = "unzip algorithmInstaller.zip";
|
|
String choice= "N";
|
|
String mod= "chmod 777 -R algorithmInstaller/*";
|
|
|
|
String iforecommands [] = {sshConnection+dataminer,"2","y","0",password,"0","ls -l","0",rmlogging,"0",rmlib1,"0",rmlib2,"0",rmlib3,"0",rmInstaller,"0",rmInstallerFolder,"0",
|
|
chmod,"0",getInstaller,"2",unzipInstaller,"2",choice,"0",mod,"0","./stopContainer.sh","3",
|
|
"cd algorithmInstaller","0"};
|
|
forecommands = iforecommands;
|
|
}
|
|
else{
|
|
String iforecommands [] = {sshConnection+dataminer,"2","y","0",password,"0","ls -l","0",rmlogging,"0",rmlib1,"0",rmlib2,"0",rmlib3,"0",rmInstaller,"0",
|
|
chmod,"0","./stopContainer.sh","10","cd algorithmInstaller","0"};
|
|
forecommands = iforecommands;
|
|
}
|
|
|
|
|
|
String postcommands [] = {"cd ..","0","./startContainer.sh","30"};
|
|
|
|
|
|
ArrayList<String> commandsArray = new ArrayList<String>(Arrays.asList(forecommands));
|
|
String [] installers = installStrings.split("\n");
|
|
StringBuffer sb = new StringBuffer();
|
|
int max = 10;
|
|
int i =0;
|
|
for (String installer: installers){
|
|
int limit = 1000;
|
|
if (installer.length()>limit)
|
|
installer = installer.substring(0, limit)+"...\"";
|
|
sb.append(installer+"\n");
|
|
if (i == max)
|
|
{
|
|
i = 0;
|
|
String commands = sb.toString();
|
|
commandsArray.add(commands);
|
|
commandsArray.add("10");
|
|
sb = new StringBuffer();
|
|
}
|
|
else
|
|
i++;
|
|
}
|
|
|
|
if (sb.toString().length()>0)
|
|
{
|
|
commandsArray.add(sb.toString());
|
|
commandsArray.add("10");
|
|
}
|
|
/*
|
|
for (String installer:installArray) {
|
|
installer = installer.trim().replace("/gcube/devsec", scope);
|
|
if (installer.length()>0){
|
|
commandsArray.add(installer);
|
|
commandsArray.add("3");
|
|
}
|
|
}
|
|
*/
|
|
|
|
commandsArray.addAll(new ArrayList<String>(Arrays.asList(postcommands)));
|
|
|
|
String[] commands = new String[commandsArray.size()];
|
|
commands = commandsArray.toArray(commands);
|
|
|
|
cmd1(commands);
|
|
System.out.println("Elapsed Time: "+(System.currentTimeMillis()-t0));
|
|
}
|
|
|
|
public enum Environment {
|
|
PROD,
|
|
DEV,
|
|
PROTO,
|
|
PRE
|
|
}
|
|
|
|
public static String dumpInstallerFile(Environment env){
|
|
|
|
String url = "";
|
|
String file = "";
|
|
|
|
switch(env){
|
|
case PROD:
|
|
url = "http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/data-analysis/DataMinerConfiguration/algorithms/prod/algorithms";
|
|
file ="ProdInstaller.txt";
|
|
break;
|
|
case DEV:
|
|
url = "http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/data-analysis/DataMinerConfiguration/algorithms/dev/algorithms";
|
|
file ="DevInstaller.txt";
|
|
break;
|
|
|
|
case PROTO:
|
|
url = "http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/data-analysis/DataMinerConfiguration/algorithms/proto/algorithms";
|
|
file ="ProtoInstaller.txt";
|
|
break;
|
|
|
|
case PRE:
|
|
url = "http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/data-analysis/DataMinerConfiguration/algorithms/preprod/algorithms";
|
|
file ="PreInstaller.txt";
|
|
break;
|
|
|
|
}
|
|
|
|
String answer = HttpRequest.sendGetRequest(url, "");
|
|
|
|
List<String> installationStringsList = new ArrayList<String>();
|
|
String answerbuffer = answer;
|
|
String install = "";
|
|
while (answerbuffer.length()>0){
|
|
|
|
for (int i=0;i<7;i++){
|
|
|
|
int pipe = answerbuffer.indexOf("|");
|
|
String token = answerbuffer.substring(0,pipe);
|
|
install+=token+"|";
|
|
answerbuffer = answerbuffer.substring(pipe+1);
|
|
}
|
|
install = install.trim();
|
|
if (!install.startsWith("|"))
|
|
install = "|"+install;
|
|
installationStringsList.add(install);
|
|
install = "";
|
|
}
|
|
|
|
StringBuffer sb = new StringBuffer();
|
|
for (String installer:installationStringsList){
|
|
if (installer.contains("deprecated"))
|
|
continue;
|
|
String [] tablerow = installer.split("\\|");
|
|
String row = tablerow[5];
|
|
if (row.contains("<notextile>")){
|
|
row = row .replace("<notextile>","").replace("</notextile>", "");
|
|
row = row.trim();
|
|
sb.append(row+"\n");
|
|
}
|
|
}
|
|
|
|
try {
|
|
FileWriter fw = new FileWriter(new File(file),false) ;
|
|
fw.write(sb.toString());
|
|
fw.close();
|
|
return file;
|
|
}catch(Exception e){
|
|
e.printStackTrace();
|
|
return null;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|