Commit 09026e0d authored by Spiros Koulouzis's avatar Spiros Koulouzis

Pass value to p2p converter

Fixed bug in planner 
We still get en exception from the deployer 
parent ea6686fc
...@@ -5,3 +5,4 @@ ...@@ -5,3 +5,4 @@
/drip-simple_planner/target/ /drip-simple_planner/target/
/drip-provisioner/target/ /drip-provisioner/target/
/target/ /target/
/drip-planner2provisioner/target/
\ No newline at end of file
...@@ -80,7 +80,7 @@ public class DeployController { ...@@ -80,7 +80,7 @@ public class DeployController {
try (DRIPCaller deployer = new DeployerCaller(messageBrokerHost);) { try (DRIPCaller deployer = new DeployerCaller(messageBrokerHost);) {
Message deployerInvokationMessage = buildDeployerMessage(provisionID, clusterType.toLowerCase()); Message deployerInvokationMessage = buildDeployerMessage(provisionID, clusterType.toLowerCase());
// Message response = deployer.call(deployerInvokationMessage); // Message response = deployer.unmarshall(deployer.call(deployerInvokationMessage));
Message response = generateFakeResponse(); Message response = generateFakeResponse();
List<MessageParameter> params = response.getParameters(); List<MessageParameter> params = response.getParameters();
ClusterCredentials clusterCred = new ClusterCredentials(); ClusterCredentials clusterCred = new ClusterCredentials();
......
...@@ -33,7 +33,6 @@ import org.springframework.web.bind.annotation.RequestMethod; ...@@ -33,7 +33,6 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import nl.uva.sne.drip.api.service.PlannerService; import nl.uva.sne.drip.api.service.PlannerService;
import nl.uva.sne.drip.api.service.ToscaService;
import nl.uva.sne.drip.api.service.UserService; import nl.uva.sne.drip.api.service.UserService;
import nl.uva.sne.drip.commons.types.Plan; import nl.uva.sne.drip.commons.types.Plan;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
...@@ -47,7 +46,7 @@ import org.springframework.web.bind.annotation.RequestParam; ...@@ -47,7 +46,7 @@ import org.springframework.web.bind.annotation.RequestParam;
@Component @Component
public class PlannerController { public class PlannerController {
@Autowired // @Autowired
private SimplePlannerService simplePlannerService; private SimplePlannerService simplePlannerService;
@Autowired @Autowired
...@@ -76,7 +75,7 @@ public class PlannerController { ...@@ -76,7 +75,7 @@ public class PlannerController {
public @ResponseBody public @ResponseBody
String get(@PathVariable("id") String id, @RequestParam(value = "format") String format) { String get(@PathVariable("id") String id, @RequestParam(value = "format") String format) {
try { try {
return simplePlannerService.get(id, format); return plannerService.get(id, format);
} catch (JSONException ex) { } catch (JSONException ex) {
Logger.getLogger(ToscaController.class.getName()).log(Level.SEVERE, null, ex); Logger.getLogger(ToscaController.class.getName()).log(Level.SEVERE, null, ex);
} }
......
...@@ -102,7 +102,7 @@ public class ProvisionController { ...@@ -102,7 +102,7 @@ public class ProvisionController {
try (DRIPCaller provisioner = new ProvisionerCaller(messageBrokerHost);) { try (DRIPCaller provisioner = new ProvisionerCaller(messageBrokerHost);) {
Message provisionerInvokationMessage = buildProvisionerMessage(req); Message provisionerInvokationMessage = buildProvisionerMessage(req);
Message response = provisioner.call(provisionerInvokationMessage); Message response = (provisioner.call(provisionerInvokationMessage));
// Message response = generateFakeResponse(); // Message response = generateFakeResponse();
List<MessageParameter> params = response.getParameters(); List<MessageParameter> params = response.getParameters();
......
...@@ -17,6 +17,7 @@ import java.util.concurrent.BlockingQueue; ...@@ -17,6 +17,7 @@ import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
import nl.uva.sne.drip.commons.types.Message; import nl.uva.sne.drip.commons.types.Message;
import nl.uva.sne.drip.commons.types.MessageParameter; import nl.uva.sne.drip.commons.types.MessageParameter;
import nl.uva.sne.drip.commons.utils.Converter;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
...@@ -46,6 +47,7 @@ public abstract class DRIPCaller implements AutoCloseable { ...@@ -46,6 +47,7 @@ public abstract class DRIPCaller implements AutoCloseable {
private final Channel channel; private final Channel channel;
private final String replyQueueName; private final String replyQueueName;
private final String requestQeueName; private final String requestQeueName;
private final ObjectMapper mapper;
public DRIPCaller(String messageBrokerHost, String requestQeueName) throws IOException, TimeoutException { public DRIPCaller(String messageBrokerHost, String requestQeueName) throws IOException, TimeoutException {
ConnectionFactory factory = new ConnectionFactory(); ConnectionFactory factory = new ConnectionFactory();
...@@ -59,6 +61,8 @@ public abstract class DRIPCaller implements AutoCloseable { ...@@ -59,6 +61,8 @@ public abstract class DRIPCaller implements AutoCloseable {
// create a single callback queue per client not per requests. // create a single callback queue per client not per requests.
replyQueueName = channel.queueDeclare().getQueue(); replyQueueName = channel.queueDeclare().getQueue();
this.requestQeueName = requestQeueName; this.requestQeueName = requestQeueName;
this.mapper = new ObjectMapper();
mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
} }
/** /**
...@@ -94,8 +98,6 @@ public abstract class DRIPCaller implements AutoCloseable { ...@@ -94,8 +98,6 @@ public abstract class DRIPCaller implements AutoCloseable {
public Message call(Message r) throws IOException, TimeoutException, InterruptedException, JSONException { public Message call(Message r) throws IOException, TimeoutException, InterruptedException, JSONException {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
String jsonInString = mapper.writeValueAsString(r); String jsonInString = mapper.writeValueAsString(r);
//Build a correlation ID to distinguish responds //Build a correlation ID to distinguish responds
...@@ -117,11 +119,13 @@ public abstract class DRIPCaller implements AutoCloseable { ...@@ -117,11 +119,13 @@ public abstract class DRIPCaller implements AutoCloseable {
} }
} }
}); });
String strResponse = response.take(); String resp = response.take();
strResponse = strResponse.replaceAll("'null'", "null").replaceAll("\'", "\"").replaceAll(" ", ""); String clean = resp.replaceAll("'null'", "null").replaceAll("\'", "\"").replaceAll(" ", "");
System.err.println(strResponse);
// return unMarshallWithSimpleJson(strResponse); if (clean.contains("\"value\":{\"")) {
return mapper.readValue(strResponse, Message.class); return Converter.string2Message(clean);
}
return mapper.readValue(clean, Message.class);
} }
private Message unMarshallWithSimpleJson(String strResponse) throws JSONException { private Message unMarshallWithSimpleJson(String strResponse) throws JSONException {
...@@ -147,4 +151,11 @@ public abstract class DRIPCaller implements AutoCloseable { ...@@ -147,4 +151,11 @@ public abstract class DRIPCaller implements AutoCloseable {
} }
// public Message unmarshall(String strResponse) throws IOException {
//
// mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
// strResponse = strResponse.replaceAll("'null'", "null").replaceAll("\'", "\"").replaceAll(" ", "");
//// return unMarshallWithSimpleJson(strResponse);
// return mapper.readValue(strResponse, Message.class);
// }
} }
...@@ -15,9 +15,12 @@ ...@@ -15,9 +15,12 @@
*/ */
package nl.uva.sne.drip.api.rpc; package nl.uva.sne.drip.api.rpc;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException; import java.io.IOException;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
import nl.uva.sne.drip.commons.types.Message;
/** /**
* *
...@@ -31,4 +34,33 @@ public class PlannerCaller extends DRIPCaller { ...@@ -31,4 +34,33 @@ public class PlannerCaller extends DRIPCaller {
super(messageBrokerHost, REQUEST_QUEUE_NAME); super(messageBrokerHost, REQUEST_QUEUE_NAME);
} }
public String generateFakeResponse(Message plannerInvokationMessage) throws IOException {
return "{\n"
+ " \"creationDate\": 1487002029722,\n"
+ " \"parameters\": [\n"
+ " {\n"
+ " \"url\": null,\n"
+ " \"encoding\": \"UTF-8\",\n"
+ " \"value\": \"{\\\"name\\\":\\\"2d13d708e3a9441ab8336ce874e08dd1\\\",\\\"size\\\":\\\"Small\\\",\\\"docker\\\":\\\"mogswitch/InputDistributor\\\"}\",\n"
+ " \"name\": \"component\",\n"
+ " \"attributes\": null\n"
+ " },\n"
+ " {\n"
+ " \"url\": null,\n"
+ " \"encoding\": \"UTF-8\",\n"
+ " \"value\": \"{\\\"name\\\":\\\"8fcc1788d9ee462c826572c79fdb2a6a\\\",\\\"size\\\":\\\"Small\\\",\\\"docker\\\":\\\"mogswitch/InputDistributor\\\"}\",\n"
+ " \"name\": \"component\",\n"
+ " \"attributes\": null\n"
+ " },\n"
+ " {\n"
+ " \"url\": null,\n"
+ " \"encoding\": \"UTF-8\",\n"
+ " \"value\": \"{\\\"name\\\":\\\"5e0add703c8a43938a39301f572e46c0\\\",\\\"size\\\":\\\"Small\\\",\\\"docker\\\":\\\"mogswitch/InputDistributor\\\"}\",\n"
+ " \"name\": \"component\",\n"
+ " \"attributes\": null\n"
+ " }\n"
+ " ]\n"
+ "}";
}
} }
...@@ -27,6 +27,7 @@ import java.util.Set; ...@@ -27,6 +27,7 @@ import java.util.Set;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
import nl.uva.sne.drip.api.dao.PlanDao; import nl.uva.sne.drip.api.dao.PlanDao;
import nl.uva.sne.drip.api.exception.BadRequestException; import nl.uva.sne.drip.api.exception.BadRequestException;
import nl.uva.sne.drip.api.exception.NotFoundException;
import nl.uva.sne.drip.api.rpc.PlannerCaller; import nl.uva.sne.drip.api.rpc.PlannerCaller;
import nl.uva.sne.drip.commons.types.Message; import nl.uva.sne.drip.commons.types.Message;
import nl.uva.sne.drip.commons.types.MessageParameter; import nl.uva.sne.drip.commons.types.MessageParameter;
...@@ -60,12 +61,24 @@ public class PlannerService { ...@@ -60,12 +61,24 @@ public class PlannerService {
try (PlannerCaller planner = new PlannerCaller(messageBrokerHost)) { try (PlannerCaller planner = new PlannerCaller(messageBrokerHost)) {
Message plannerInvokationMessage = buildPlannerMessage(toscaId); Message plannerInvokationMessage = buildPlannerMessage(toscaId);
Message plannerReturnedMessage = (planner.call(plannerInvokationMessage));
Message plannerReturnedMessage = planner.call(plannerInvokationMessage); // Message plannerReturnedMessage = (planner.generateFakeResponse(plannerInvokationMessage));
ObjectMapper mapper = new ObjectMapper(); ObjectMapper mapper = new ObjectMapper();
mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
String jsonString = mapper.writeValueAsString(plannerReturnedMessage); List<MessageParameter> messageParams = plannerReturnedMessage.getParameters();
SimplePlanContainer simplePlan = P2PConverter.transfer(jsonString, "zh9314", "Ubuntu 16.04", "swarm"); StringBuilder jsonArrayString = new StringBuilder();
jsonArrayString.append("[");
String prefix = "";
for (MessageParameter mp : messageParams) {
String value = mp.getValue();
jsonArrayString.append(prefix);
prefix = ",";
String jsonValue = value.replaceAll("\\\"", "\"");
jsonArrayString.append(jsonValue);
}
jsonArrayString.append("]");
SimplePlanContainer simplePlan = P2PConverter.convert(jsonArrayString.toString(), "zh9314", "Ubuntu 16.04", "swarm");
Plan topLevel = new Plan(); Plan topLevel = new Plan();
topLevel.setLevel(0); topLevel.setLevel(0);
topLevel.setToscaID(toscaId); topLevel.setToscaID(toscaId);
...@@ -113,4 +126,32 @@ public class PlannerService { ...@@ -113,4 +126,32 @@ public class PlannerService {
return invokationMessage; return invokationMessage;
} }
public String get(String id, String fromat) throws JSONException {
Plan plan = planDao.findOne(id);
if (plan == null) {
throw new NotFoundException();
}
Map<String, Object> map = plan.getKvMap();
Set<String> ids = plan.getLoweLevelPlanIDs();
for (String lowID : ids) {
Map<String, Object> lowLevelMap = planDao.findOne(lowID).getKvMap();
map.putAll(lowLevelMap);
}
if (fromat != null && fromat.equals("yml")) {
String ymlStr = Converter.map2YmlString(map);
ymlStr = ymlStr.replaceAll("\\uff0E", "\\.");
return ymlStr;
}
if (fromat != null && fromat.equals("json")) {
String jsonStr = Converter.map2JsonString(map);
jsonStr = jsonStr.replaceAll("\\uff0E", "\\.");
return jsonStr;
}
String ymlStr = Converter.map2YmlString(map);
ymlStr = ymlStr.replaceAll("\\uff0E", "\\.");
return ymlStr;
}
} }
...@@ -61,7 +61,7 @@ public class SimplePlannerService { ...@@ -61,7 +61,7 @@ public class SimplePlannerService {
Plan topLevel; Plan topLevel;
try (PlannerCaller planner = new PlannerCaller(messageBrokerHost)) { try (PlannerCaller planner = new PlannerCaller(messageBrokerHost)) {
Message plannerReturnedMessage = planner.call(plannerInvokationMessage); Message plannerReturnedMessage = (planner.call(plannerInvokationMessage));
List<MessageParameter> planFiles = plannerReturnedMessage.getParameters(); List<MessageParameter> planFiles = plannerReturnedMessage.getParameters();
topLevel = new Plan(); topLevel = new Plan();
Set<String> ids = topLevel.getLoweLevelPlanIDs(); Set<String> ids = topLevel.getLoweLevelPlanIDs();
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
package nl.uva.sne.drip.commons.utils; package nl.uva.sne.drip.commons.utils;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
...@@ -28,8 +27,8 @@ import java.util.List; ...@@ -28,8 +27,8 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
import nl.uva.sne.drip.commons.types.CloudCredentials; import nl.uva.sne.drip.commons.types.CloudCredentials;
import nl.uva.sne.drip.drip.converter.P2PConverter; import nl.uva.sne.drip.commons.types.Message;
import nl.uva.sne.drip.drip.converter.SimplePlanContainer; import nl.uva.sne.drip.commons.types.MessageParameter;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
...@@ -143,4 +142,36 @@ public class Converter { ...@@ -143,4 +142,36 @@ public class Converter {
EC2_NAME_MAP.put("key", "AWSSecretKey"); EC2_NAME_MAP.put("key", "AWSSecretKey");
} }
public static Message string2Message(String clean) throws JSONException, IOException {
Message mess = new Message();
JSONObject jsonObj = new JSONObject(clean);
long creationDate = jsonObj.getLong("creationDate");
mess.setCreationDate(creationDate);
JSONArray jsonParams = (JSONArray) jsonObj.get("parameters");
List<MessageParameter> params = new ArrayList<>();
for (int i = 0; i < jsonParams.length(); i++) {
MessageParameter p = new MessageParameter();
JSONObject jsonParam = (JSONObject) jsonParams.get(i);
String url;
if (!jsonObj.isNull("url")) {
p.setURL((String) jsonObj.get("url"));
}
if (!jsonObj.isNull("encoding")) {
p.setEncoding(jsonObj.getString("encoding"));
}
if (!jsonObj.isNull("attributes")) {
Map<String, String> attributes = new ObjectMapper().readValue("", Map.class);
p.setAttributes(attributes);
}
String val = jsonParam.getString("value");
val = val.replaceAll("\"", "\\\"");
p.setValue(val);
params.add(p);
}
mess.setParameters(params);
return mess;
}
} }
...@@ -48,7 +48,7 @@ def handleDelivery(message): ...@@ -48,7 +48,7 @@ def handleDelivery(message):
i = 1 i = 1
for j in json1: for j in json1:
if not json1[j]['type'] == "Switch.nodes.Application.Connection": if not json1[j]['type'] == "Switch.nodes.Application.Connection":
print j, json1[j] #print j, json1[j]
nodeDic[j] = i nodeDic[j] = i
nodeDic1[i] = j nodeDic1[i] = j
i = i + 1 i = i + 1
...@@ -57,8 +57,8 @@ def handleDelivery(message): ...@@ -57,8 +57,8 @@ def handleDelivery(message):
links = [] links = []
for j in json1: for j in json1:
if json1[j]['type'] == "Switch.nodes.Application.Connection": if json1[j]['type'] == "Switch.nodes.Application.Connection":
print json1[j]['properties']['source']['component_name'] #print json1[j]['properties']['source']['component_name']
print json1[j]['properties']['target']['component_name'] #print json1[j]['properties']['target']['component_name']
link= {} link= {}
link['source'] = nodeDic[json1[j]['properties']['source']['component_name']] link['source'] = nodeDic[json1[j]['properties']['source']['component_name']]
link['target'] = nodeDic[json1[j]['properties']['target']['component_name']] link['target'] = nodeDic[json1[j]['properties']['target']['component_name']]
...@@ -88,7 +88,7 @@ def handleDelivery(message): ...@@ -88,7 +88,7 @@ def handleDelivery(message):
performance[str(value)] = "1,2,3" performance[str(value)] = "1,2,3"
wfJson['performance'] = performance wfJson['performance'] = performance
print wfJson #print wfJson
#send request to the server #send request to the server
start = time.time() start = time.time()
...@@ -100,27 +100,27 @@ def handleDelivery(message): ...@@ -100,27 +100,27 @@ def handleDelivery(message):
res = wf.generateJSON() res = wf.generateJSON()
end = time.time() end = time.time()
print (end - start) #print (end - start)
# convert the json to the file required # convert the json to the file required
res1 = {} res1 = {}
for key, value in sorted_nodeDic:
res1_value = {}
res1_value["size"] = res[str(value)]
res1_value["docker"] = json1[nodeDic1[value]].get('artifacts').get('docker_image').get('file')
res1[str(nodeDic1[value])] = res1_value
print res1
# generate the json files in the corresponding format as the
outcontent = {} outcontent = {}
current_milli_time = lambda: int(round(time.time() * 1000)) current_milli_time = lambda: int(round(time.time() * 1000))
outcontent["creationDate"] = current_milli_time() outcontent["creationDate"] = current_milli_time()
outcontent["parameters"] = [] outcontent["parameters"] = []
par1 = {} for key, value in sorted_nodeDic:
par1["url"] = "null" par = {}
par1["encoding"] = "UTF-8" par["url"] = "null"
par1["value"] = res1 par["encoding"] = "UTF-8"
par1["attributes"] = "null" docker = json1[nodeDic1[value]].get('artifacts').get('docker_image').get('file')
outcontent["parameters"].append(par1) res1["name"] = str(nodeDic1[value])
res1["size"] = res[str(value)]
res1["docker"] = str(docker)
#v = str("{\\'name\\':\\'"+str(nodeDic1[value])+"\\',\\'size\\':\\'"+res[str(value)]+"\\',\\'docker\\':\\'"+docker+"\\'}")
par["value"] = res1
par["attributes"] = "null"
outcontent["parameters"].append(par)
return outcontent return outcontent
......
<?xml version="1.0" encoding="UTF-8"?>
<project-shared-configuration>
<!--
This file contains additional configuration written by modules in the NetBeans IDE.
The configuration is intended to be shared among all the users of project and
therefore it is assumed to be part of version control checkout.
Without this configuration present, some functionality in the IDE may be limited or fail altogether.
-->
<properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
<!--
Properties that influence various parts of the IDE, especially code formatting and the like.
You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
That way multiple projects can share the same settings (useful for formatting rules for example).
Any value defined here will override the pom.xml file value but is only applicable to the current project.
-->
<netbeans.hint.licensePath>${project.basedir}/../licenseheader.txt</netbeans.hint.licensePath>
</properties>
</project-shared-configuration>
package nl.uva.sne.drip.drip.converter; package nl.uva.sne.drip.drip.converter;
import nl.uva.sne.drip.drip.converter.planner.out.Component;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
...@@ -10,11 +11,10 @@ import com.fasterxml.jackson.core.JsonParseException; ...@@ -10,11 +11,10 @@ import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import java.util.List;
import nl.uva.sne.drip.drip.converter.planner.out.Parameter;
import nl.uva.sne.drip.drip.converter.planner.out.PlannerOutput;
import nl.uva.sne.drip.drip.converter.planner.out.Value;
import nl.uva.sne.drip.drip.converter.provisioner.in.Eth; import nl.uva.sne.drip.drip.converter.provisioner.in.Eth;
import nl.uva.sne.drip.drip.converter.provisioner.in.SubTopology; import nl.uva.sne.drip.drip.converter.provisioner.in.SubTopology;
import nl.uva.sne.drip.drip.converter.provisioner.in.SubTopologyInfo; import nl.uva.sne.drip.drip.converter.provisioner.in.SubTopologyInfo;
...@@ -24,9 +24,9 @@ import nl.uva.sne.drip.drip.converter.provisioner.in.VM; ...@@ -24,9 +24,9 @@ import nl.uva.sne.drip.drip.converter.provisioner.in.VM;
public class P2PConverter { public class P2PConverter {
public static SimplePlanContainer transfer(String plannerOutputJson, String userName, String OStype, String clusterType) throws JsonParseException, JsonMappingException, IOException { public static SimplePlanContainer convert(String plannerOutputJson, String userName, String OStype, String clusterType) throws JsonParseException, JsonMappingException, IOException {
Parameter plannerOutput = getInfoFromPlanner(plannerOutputJson); List<Component> components = getInfoFromPlanner(plannerOutputJson);
TopTopology topTopology = new TopTopology(); TopTopology topTopology = new TopTopology();
SubTopology subTopology = new SubTopology(); SubTopology subTopology = new SubTopology();
...@@ -35,7 +35,7 @@ public class P2PConverter { ...@@ -35,7 +35,7 @@ public class P2PConverter {
sti.cloudProvider = "EC2"; sti.cloudProvider = "EC2";
sti.topology = UUID.randomUUID().toString(); sti.topology = UUID.randomUUID().toString();
subTopology.publicKeyPath = null; subTopology.publicKeyPath = "~/.ssh/id_dsa.pub";
subTopology.userName = userName; subTopology.userName = userName;
Subnet s = new Subnet(); Subnet s = new Subnet();
...@@ -43,40 +43,32 @@ public class P2PConverter { ...@@ -43,40 +43,32 @@ public class P2PConverter {
s.subnet = "192.168.10.0"; s.subnet = "192.168.10.0";
s.netmask = "255.255.255.0"; s.netmask = "255.255.255.0";
subTopology.subnets = new ArrayList<Subnet>(); subTopology.subnets = new ArrayList<>();
subTopology.subnets.add(s); subTopology.subnets.add(s);
subTopology.components = new ArrayList<VM>(); subTopology.components = new ArrayList<>();
boolean firstVM = true; boolean firstVM = true;
for (int vi = 0; vi < plannerOutput.value.size(); vi++) { int count = 0;
Value curValue = plannerOutput.value.get(vi); for (Component cmp : components) {
VM curVM = new VM(); VM curVM = new VM();
curVM.name = curValue.name; curVM.name = cmp.getName();
curVM.type = "Switch.nodes.Compute"; curVM.type = "Switch.nodes.Compute";
curVM.OStype = OStype; curVM.OStype = OStype;
curVM.domain = "ec2.us-east-1.amazonaws.com"; curVM.domain = "ec2.us-east-1.amazonaws.com";
curVM.clusterType = clusterType; curVM.clusterType = clusterType;
curVM.dockers = curValue.docker; curVM.dockers = cmp.getDocker();
curVM.public_address = curValue.name; curVM.public_address = cmp.getName();
curVM.nodeType = "t2" + cmp.getSize().toLowerCase();
if (curValue.size.trim().toLowerCase().equals("small")) {
curVM.nodeType = "t2.small";
} else if (curValue.size.trim().toLowerCase().equals("medium")) {
curVM.nodeType = "t2.medium";
} else if (curValue.size.trim().toLowerCase().equals("large")) {
curVM.nodeType = "t2.large";
} else {
throw new IllegalArgumentException("Invalid value for field 'size' in input JSON String");
}
Eth eth = new Eth(); Eth eth = new Eth();
eth.name = "p1"; eth.name = "p1";
eth.subnet_name = "s1"; eth.subnet_name = "s1";
int hostNum = 10 + vi; int hostNum = 10 + count++;
String priAddress = "192.168.10." + hostNum; String priAddress = "192.168.10." + hostNum;
eth.address = priAddress; eth.address = priAddress;
curVM.ethernet_port = new ArrayList<Eth>(); curVM.ethernet_port = new ArrayList<>();
curVM.ethernet_port.add(eth); curVM.ethernet_port.add(eth);
if (firstVM) { if (firstVM) {
curVM.role = "master"; curVM.role = "master";
...@@ -89,7 +81,7 @@ public class P2PConverter { ...@@ -89,7 +81,7 @@ public class P2PConverter {
sti.subTopology = subTopology; sti.subTopology = subTopology;
topTopology.topologies = new ArrayList<SubTopologyInfo>(); topTopology.topologies = new ArrayList<>();
topTopology.topologies.add(sti); topTopology.topologies.add(sti);
SimplePlanContainer spc = generateInfo(topTopology); SimplePlanContainer spc = generateInfo(topTopology);
...@@ -97,11 +89,12 @@ public class P2PConverter { ...@@ -97,11 +89,12 @@ public class P2PConverter {
return spc; return spc;
} }
private static Parameter getInfoFromPlanner(String json) throws JsonParseException, JsonMappingException, IOException { private static List<Component> getInfoFromPlanner(String json) throws IOException {
ObjectMapper mapper = new ObjectMapper(); ObjectMapper mapper = new ObjectMapper();
PlannerOutput po = mapper.readValue(json, PlannerOutput.class); TypeReference<List<Component>> mapType = new TypeReference<List<Component>>() {
System.out.println(""); };
return po.parameters.get(0); List<Component> components = mapper.readValue(json, mapType);
return components;
} }
private static SimplePlanContainer generateInfo(TopTopology topTopology) throws JsonProcessingException { private static SimplePlanContainer generateInfo(TopTopology topTopology) throws JsonProcessingException {
...@@ -111,7 +104,7 @@ public class P2PConverter { ...@@ -111,7 +104,7 @@ public class P2PConverter {
String yamlString = mapper.writeValueAsString(topTopology); String yamlString = mapper.writeValueAsString(topTopology);
spc.topLevelContents = yamlString.substring(4); spc.topLevelContents = yamlString.substring(4);
Map<String, String> output = new HashMap<String, String>(); Map<String, String> output = new HashMap<>();
for (int i = 0; i < topTopology.topologies.size(); i++) { for (int i = 0; i < topTopology.topologies.size(); i++) {
String key = topTopology.topologies.get(i).topology; String key = topTopology.topologies.get(i).topology;
String value = mapper.writeValueAsString(topTopology.topologies.get(i).subTopology); String value = mapper.writeValueAsString(topTopology.topologies.get(i).subTopology);
......
/*
* Copyright 2017 S. Koulouzis, Wang Junchao, Huan Zhou, Yang Hu
*
* 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.
*/
package nl.uva.sne.drip.drip.converter.planner.out;
/**
*
* @author S. Koulouzis
*/
public class Component {
private String name;
private String size;
private String docker;
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the size
*/
public String getSize() {
return size;
}
/**
* @param size the size to set
*/
public void setSize(String size) {
this.size = size;
}
/**
* @return the docker
*/
public String getDocker() {
return docker;
}
/**
* @param docker the docker to set
*/
public void setDocker(String docker) {
this.docker = docker;
}
}
package nl.uva.sne.drip.drip.converter.planner.out;
import java.util.ArrayList;
public class Parameter {
public String url;
public String attributes;
public ArrayList<Value> value;
public String encoding;
}
package nl.uva.sne.drip.drip.converter.planner.out;
import java.util.ArrayList;
public class PlannerOutput {
public String creationDate;
public ArrayList<Parameter> parameters;
}
package nl.uva.sne.drip.drip.converter.planner.out;
public class Value {
public String name;
public String size;
public String docker;
}
...@@ -23,7 +23,7 @@ public class testConverter { ...@@ -23,7 +23,7 @@ public class testConverter {
} }
try { try {
SimplePlanContainer spc = P2PConverter.transfer(json, "zh9314", "Ubuntu 16.04", "kubernetes"); SimplePlanContainer spc = P2PConverter.convert(json, "zh9314", "Ubuntu 16.04", "kubernetes");
System.out.println("--topLevel:\n"+spc.topLevelContents); System.out.println("--topLevel:\n"+spc.topLevelContents);
System.out.println("--lowLevel:"); System.out.println("--lowLevel:");
for (Map.Entry<String, String> entry : spc.lowerLevelContents.entrySet()){ for (Map.Entry<String, String> entry : spc.lowerLevelContents.entrySet()){
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment