/**
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
*/
/*
* 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 org.thingml.loadbalancer;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.util.HashSet;
import java.util.Set;
/**
*
* @author sintef
*/
public class CloudNode {
public String name;
public String ip;
public int port;
public int httpPort;
public int weight;
public Set<File> tests;
public Set<String> languages;
public String testDirPostfix;
static public String defaultDirPostfix = "_testDir";
public CloudNode(String name, String posfix) {
this.name = name;
this.tests = new HashSet<>();
this.languages = new HashSet<>();
testDirPostfix = posfix;
}
public void createBalancedConfig(File targetDir) throws IOException {
File testDir = new File(targetDir, name + testDirPostfix);
if(!testDir.exists())
testDir.mkdir();
writeConfigFile(testDir);
}
public void makeTestDir(File workingDir, File ressourcesDir, File compiler, File testJar, File testSrc) throws IOException {
File testDir = new File(workingDir, name + testDirPostfix);
if(testDir.exists()) {
testDir.delete();
}
//Compiler
testDir.mkdir();
File cDir = new File(testDir, "compilers");
cDir.mkdir();
File regDir = new File(cDir, "registry");
regDir.mkdir();
File tarDir = new File(regDir, "target");
tarDir.mkdir();
File compLink = new File(tarDir, "compilers.registry-0.7.0-SNAPSHOT-jar-with-dependencies.jar");
Files.createSymbolicLink(compLink.toPath(), compiler.toPath());
//Plugins
/*File pluginDir = new File(cDir, "official-network-plugins");
pluginDir.mkdir();
File targetDir = new File(pluginDir, "target");
targetDir.mkdir();
File pluginLink = new File(targetDir, "official-network-plugins-0.7.0-SNAPSHOT.jar");
File pluginJar = new File(compiler.getParentFile().getParentFile().getPath() + "/official-network-plugins/target/official-network-plugins-0.7.0-SNAPSHOT.jar");
Files.createSymbolicLink(pluginLink.toPath(), pluginJar.toPath());*/
//Test Framework
File tjDir = new File(testDir, "testJar");
tjDir.mkdir();
File tjtarDir = new File(tjDir, "target");
tjtarDir.mkdir();
File tJarLink = new File(tjtarDir, "testJar-0.7.0-SNAPSHOT-jar-with-dependencies.jar");
Files.createSymbolicLink(tJarLink.toPath(), testJar.toPath());
writeConfigFile(tjDir);
File srcDir = new File(tjDir, "src");
srcDir.mkdir();
File mainDir = new File(srcDir, "main");
mainDir.mkdir();
File resourcesDir = new File(mainDir, "resources");
resourcesDir.mkdir();
File testSrcDir = new File(resourcesDir, "tests");
testSrcDir.mkdir();
for(File f : testSrc.listFiles()) {
if(f.isDirectory() && (f.getName().compareTo("core") != 0)) {
File dirCopy = new File(testSrcDir, f.getName());
dirCopy.mkdir();
}
}
File importLink = new File(testSrcDir, "Import/import");
File importDir = new File(testSrc, "Import/import");
Files.createSymbolicLink(importLink.toPath(), importDir.toPath());
boolean found = false;
for(String l : languages) {
if (l.compareToIgnoreCase("arduino") == 0) {
found = true;
break;
}
}
if(found) {
File testArduinoLink = new File(resourcesDir, "testArduino.sh");
File testArduino = new File(ressourcesDir, "testArduino.sh");
Files.createSymbolicLink(testArduinoLink.toPath(), testArduino.toPath());
}
for(File t : tests) {
File tLink = new File(testSrcDir, t.getParentFile().getName() + "/" + t.getName());
Files.createSymbolicLink(tLink.toPath(), t.toPath());
}
File coreLink = new File(testSrcDir, "core");
File coreDir = new File(testSrc, "core");
Files.createSymbolicLink(coreLink.toPath(), coreDir.toPath());
File dtLink = new File(testSrcDir, "datatypes.thingml");
File dt = new File(testSrc, "datatypes.thingml");
Files.createSymbolicLink(dtLink.toPath(), dt.toPath());
File tmlLink = new File(testSrcDir, "thingml.thingml");
File tml = new File(testSrc, "thingml.thingml");
Files.createSymbolicLink(tmlLink.toPath(), tml.toPath());
}
public void writeConfigFile(File workingDir) {
StringBuilder res = new StringBuilder();
// webLink = prop.getProperty("webLink");
// myIP = prop.getProperty("myIP");
// myHTTPServerPort = prop.getProperty("myHTTPServerPort");
res.append("#############################################\n");
res.append("# Config for " + name + "\n");
res.append("#############################################\n\n");
res.append("#Node Properties\n");
res.append("webLink=True\n");
res.append("myIP=" + ip + "\n");
res.append("myHTTPServerPort=" + httpPort + "\n\n");
res.append("#Languages Selection\n");
res.append("languageList=");
boolean isFirst = true;
for(String l : languages) {
if(isFirst) isFirst = false;
else res.append(", ");
res.append(l);
}
res.append("\n\n");
res.append("#Mode Selection\n");
res.append("useBlackList=False\n\n");
res.append("#Test Selection\n");
res.append("testList=");
isFirst = true;
for(File t : tests) {
if(isFirst) isFirst = false;
else res.append(", ");
res.append(t.getName().split("\\.")[0]);
}
res.append("\n\n");
File configFile = new File(workingDir, "config.properties");
try {
PrintWriter w = new PrintWriter(configFile);
w.print(res.toString());
w.close();
} catch (Exception ex) {
System.err.println("Problem writing log");
ex.printStackTrace();
}
}
}