/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package at.ac.tuwien.dsg.cloud.elise.conductor.listener;
import at.ac.tuwien.dsg.cloud.elise.collector.CollectorSettings.ConductorConfiguration;
import java.io.BufferedReader;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
/**
*
* @author Duc-Hung Le
*/
public class RunCollector {
private static final Logger logger = ConductorConfiguration.logger;
private static final String mainFolder = ConductorConfiguration.getExtensionFolder();
private static final String FILE_JAR_EXT = ".jar";
public static void RunAllCollector() {
logger.debug("Running all collector ...");
String[] folders = listSubFolder(mainFolder);
logger.debug("Number of child folders: " + folders.length);
for (String f : folders) {
String checkingDir = mainFolder + "/" + f;
logger.debug("Checking folder: " + f);
File file = new File(checkingDir);
String[] jars = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".jar");
}
});
logger.debug("Number of jar file: " + jars.length);
for (String jar : jars) {
logger.debug("Runing collector: " + jar);
try {
FileUtils.copyFile(new File(ConductorConfiguration.ELISE_CONFIGURATION_FILE), new File(checkingDir + "/elise.conf"));
} catch (IOException ex) {
ex.printStackTrace();
}
//logger.debug(executeCommand3("java -jar " + checkingDir + "/" + jar, checkingDir));
String cmd = "java -jar " + checkingDir + "/" + jar;
logger.debug("Executing command: " + cmd + ", in directory: " + checkingDir);
executeCommand3(cmd, checkingDir);
}
}
}
private static String[] listSubFolder(String mainFolder) {
File file = new File(mainFolder);
String[] directories = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir, name).isDirectory();
}
});
return directories;
}
public static void executeCommand2(String cmd) {
try {
Process p = Runtime.getRuntime().exec("echo \"" + cmd + "\" > /tmp/command.sh");
p.waitFor();
p = Runtime.getRuntime().exec("bash /tmp/command.sh > output.log");
p.waitFor();
} catch (IOException ex) {
ex.printStackTrace();
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
private static String executeCommand3(String command, String workingDir) {
StringBuffer output = new StringBuffer();
String[] env = {"/bin", "/usr/bin", "/opt/java/bin"};
try {
Process p = Runtime.getRuntime().exec(command, env, new File(workingDir));
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader reader1 = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String line = "";
while ((line = reader.readLine()) != null) {
logger.debug(line);
}
while ((line = reader1.readLine()) != null) {
logger.debug(line);
}
p.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
return output.toString();
}
public static void executeCommandNohup(String cmd, String workingDir) {
String[] env = {"/bin", "/usr/bin", "/opt/java/bin"};
try {
Runtime.getRuntime().exec(cmd, env, new File(workingDir));
} catch (Exception e) {
e.printStackTrace();
}
}
}