1)Add log time retrieval from rest
2) mesh_topology.py can run without ONOS
Change-Id: Ibc17d963478ab298b2472347828a360465384c3d
diff --git a/src/main/java/net/onrc/onos/datagrid/web/DatagridWebRoutable.java b/src/main/java/net/onrc/onos/datagrid/web/DatagridWebRoutable.java
index a8c3f5b..7015d44 100755
--- a/src/main/java/net/onrc/onos/datagrid/web/DatagridWebRoutable.java
+++ b/src/main/java/net/onrc/onos/datagrid/web/DatagridWebRoutable.java
@@ -21,6 +21,8 @@
router.attach("/get/intents/json", IntentResource.class);
router.attach("/get/intent/{intent_id}/json", IntentResource.class);
router.attach("/get/ng-events/json", GetNGEventsResource.class);
+ router.attach("/get/intents/{category}/json", IntentResource.class);
+ router.attach("/get/intent/{category}/{intent_id}/json", IntentResource.class);
return router;
}
diff --git a/src/main/java/net/onrc/onos/datagrid/web/IntentResource.java b/src/main/java/net/onrc/onos/datagrid/web/IntentResource.java
index 2fc78f0..bd420e3 100755
--- a/src/main/java/net/onrc/onos/datagrid/web/IntentResource.java
+++ b/src/main/java/net/onrc/onos/datagrid/web/IntentResource.java
@@ -23,6 +23,7 @@
import org.codehaus.jackson.map.ObjectMapper;
import net.floodlightcontroller.util.MACAddress;
import java.util.HashMap;
+import java.util.LinkedList;
import java.util.Map;
import org.codehaus.jackson.node.ArrayNode;
import org.codehaus.jackson.node.ObjectNode;
@@ -104,12 +105,19 @@
public String retrieve() throws IOException {
IPathCalcRuntimeService pathRuntime = (IPathCalcRuntimeService)getContext().
getAttributes().get(IPathCalcRuntimeService.class.getCanonicalName());
+
+ String intentCategory = (String) getRequestAttributes().get("category");
+ IntentMap intentMap = null;
+ if (intentCategory.equals("high")) {
+ intentMap = pathRuntime.getHighLevelIntents();
+ } else {
+ intentMap = pathRuntime.getPathIntents();
+ }
ObjectMapper mapper = new ObjectMapper();
String restStr = "";
String intentId = (String) getRequestAttributes().get("intent_id");
ArrayNode arrayNode = mapper.createArrayNode();
- IntentMap intentMap = pathRuntime.getHighLevelIntents();
Collection<Intent> intents = intentMap.getAllIntents();
if (!intents.isEmpty()) {
if ((intentId != null )) {
@@ -117,8 +125,15 @@
Intent intent = intentMap.getIntent(applnIntentId);
if (intent != null) {
ObjectNode node = mapper.createObjectNode();
+ // TODO refactor/remove duplicate code.
node.put("intent_id", intentId);
node.put("status", intent.getState().toString());
+ LinkedList<String> logs = intent.getLogs();
+ ArrayNode logNode = mapper.createArrayNode();
+ for (String intentLog :logs) {
+ logNode.add(intentLog);
+ }
+ node.put("log", logNode);
arrayNode.add(node);
}
} else {
@@ -128,6 +143,12 @@
intentId = applnIntentId.split(":")[1];
node.put("intent_id", intentId);
node.put("status", intent.getState().toString());
+ LinkedList<String> logs = intent.getLogs();
+ ArrayNode logNode = mapper.createArrayNode();
+ for (String intentLog :logs) {
+ logNode.add(intentLog);
+ }
+ node.put("log", logNode);
arrayNode.add(node);
}
}
@@ -152,26 +173,32 @@
data = node.get(fieldName);
parseFields(data, fieldName, fields);
}
- String status = processIntent(fields, operations);
- appendIntentStatus(status, (String)fields.get("intent_id"), mapper, arrayNode);
+ Intent intent = processIntent(fields, operations);
+ appendIntentStatus(intent, (String)fields.get("intent_id"), mapper, arrayNode);
}
}
pathRuntime.executeIntentOperations(operations);
return mapper.writeValueAsString(arrayNode);
}
- private void appendIntentStatus(String status, final String intentId,
+ private void appendIntentStatus(Intent intent, final String intentId,
ObjectMapper mapper, ArrayNode arrayNode) throws IOException {
ObjectNode node = mapper.createObjectNode();
node.put("intent_id", intentId);
- node.put("status", status);
+ node.put("status", intent.getState().toString());
+ LinkedList<String> logs = intent.getLogs();
+ ArrayNode logNode = mapper.createArrayNode();
+ for (String intentLog : logs) {
+ logNode.add(intentLog);
+ }
+ node.put("log", logNode);
arrayNode.add(node);
}
- private String processIntent(Map<String, Object> fields, IntentOperationList operations) {
+ private Intent processIntent(Map<String, Object> fields, IntentOperationList operations) {
String intentType = (String)fields.get("intent_type");
String intentOp = (String)fields.get("intent_op");
- String status = null;
+ Intent intent;
String applnIntentId = APPLN_ID + ":" + (String)fields.get("intent_id");
IntentOperation.Operator operation = IntentOperation.Operator.ADD;
@@ -187,7 +214,7 @@
(long) fields.get("dstPort"),
MACAddress.valueOf((String) fields.get("dstMac")).toLong());
operations.add(new IntentOperation(operation, spi));
- status = (spi.getState()).toString();
+ intent = spi;
} else {
ConstrainedShortestPathIntent cspi = new ConstrainedShortestPathIntent(applnIntentId,
Long.decode((String) fields.get("srcSwitch")),
@@ -198,9 +225,9 @@
MACAddress.valueOf((String) fields.get("dstMac")).toLong(),
(double) fields.get("bandwidth"));
operations.add(new IntentOperation(operation, cspi));
- status = (cspi.getState()).toString();
+ intent = cspi;
}
- return status;
+ return intent;
}
private void parseFields(JsonNode node, String fieldName, Map<String, Object> fields) {
diff --git a/src/main/java/net/onrc/onos/intent/persist/PersistIntent.java b/src/main/java/net/onrc/onos/intent/persist/PersistIntent.java
index 691a656..4f77883 100755
--- a/src/main/java/net/onrc/onos/intent/persist/PersistIntent.java
+++ b/src/main/java/net/onrc/onos/intent/persist/PersistIntent.java
@@ -14,7 +14,6 @@
import net.onrc.onos.intent.IntentOperationList;
import net.onrc.onos.ofcontroller.networkgraph.INetworkGraphService;
import net.onrc.onos.ofcontroller.networkgraph.NetworkGraph;
-import net.onrc.onos.ofcontroller.util.serializers.KryoFactory;
import net.onrc.onos.registry.controller.IControllerRegistryService;
import net.onrc.onos.registry.controller.IdBlock;
import org.slf4j.Logger;