Log all configuration(add/modify/delete) changes to a new log file audit.log
[controller.git] / opendaylight / web / flows / src / main / java / org / opendaylight / controller / flows / web / Flows.java
index be7560985a56fdeb3df3ae1d28020f8f87cd56a7..9444360eecb7d7ae4a6e084a4fde8512c7b5ed71 100644 (file)
@@ -20,6 +20,7 @@ import org.opendaylight.controller.forwardingrulesmanager.FlowConfig;
 import org.opendaylight.controller.forwardingrulesmanager.IForwardingRulesManager;
 import org.opendaylight.controller.sal.authorization.Privilege;
 import org.opendaylight.controller.sal.authorization.UserLevel;
+import org.opendaylight.controller.sal.core.Description;
 import org.opendaylight.controller.sal.core.Name;
 import org.opendaylight.controller.sal.core.Node;
 import org.opendaylight.controller.sal.core.NodeConnector;
@@ -46,6 +47,7 @@ import com.google.gson.Gson;
 public class Flows implements IDaylightWeb {
     private static final UserLevel AUTH_LEVEL = UserLevel.CONTAINERUSER;
     private static final String WEB_NAME = "Flows";
+
     private static final String WEB_ID = "flows";
     private static final short WEB_ORDER = 2;
 
@@ -107,9 +109,7 @@ public class Flows implements IDaylightWeb {
             entry.put("flow", flowConfig);
             entry.put("name", flowConfig.getName());
             Node node = flowConfig.getNode();
-            String description = switchManager.getNodeDescription(node);
-            entry.put("node", (description.isEmpty() || description
-                    .equalsIgnoreCase("none")) ? node.toString() : description);
+            entry.put("node", getNodeDesc(node, switchManager));
             entry.put("nodeId", node.toString());
             flowSet.add(entry);
         }
@@ -160,11 +160,7 @@ public class Flows implements IDaylightWeb {
             entry.put("ports", port);
 
             // add name
-            String description = switchManager.getNodeDescription(node
-                    .getNode());
-            entry.put("name", (description.isEmpty() || description
-                    .equalsIgnoreCase("none")) ? node.getNode().toString()
-                    : description);
+            entry.put("name", getNodeDesc(node.getNode(), switchManager));
 
             // add to the node
             nodes.put(node.getNode().toString(), entry);
@@ -205,8 +201,8 @@ public class Flows implements IDaylightWeb {
             String nodeDesc = node.toString();
             SwitchConfig config = switchManager.getSwitchConfig(node
                     .toString());
-            if (config != null) {
-                nodeDesc = config.getNodeDescription();
+            if ((config != null) && (config.getProperty(Description.propertyName) != null)) {
+                nodeDesc = ((Description) config.getProperty(Description.propertyName)).getValue();
             }
 
             nodes.put(nodeDesc, flows.size());
@@ -241,7 +237,8 @@ public class Flows implements IDaylightWeb {
         flow.setNode(node);
         Status result = new Status(StatusCode.BADREQUEST, "Invalid request");
         if (action.equals("add")) {
-            result = frm.addStaticFlow(flow, false);
+            result = frm.addStaticFlow(flow);
+            DaylightWebUtil.auditlog("Flow", userName, "added", flow.getName(), containerName);
         }
 
         return (result.isSuccess()) ? StatusCode.SUCCESS.toString() : result
@@ -275,8 +272,14 @@ public class Flows implements IDaylightWeb {
         }
         if (action.equals("remove")) {
             result = frm.removeStaticFlow(name, node);
+            if(result.isSuccess()) {
+                DaylightWebUtil.auditlog("Flow", userName, "removed", name, containerName);
+            }
         } else if (action.equals("toggle")) {
             result = frm.toggleStaticFlowStatus(name, node);
+            if(result.isSuccess()) {
+                DaylightWebUtil.auditlog("Flow", userName, "toggled", name, containerName);
+            }
         } else {
             result = new Status(StatusCode.BADREQUEST, "Unknown action");
         }
@@ -284,4 +287,11 @@ public class Flows implements IDaylightWeb {
         return (result.isSuccess()) ? StatusCode.SUCCESS.toString() : result
                 .getDescription();
     }
+
+    private String getNodeDesc(Node node, ISwitchManager switchManager) {
+        Description desc = (Description) switchManager.getNodeProp(node, Description.propertyName);
+        String description = (desc == null) ? "" : desc.getValue();
+        return (description.isEmpty() || description.equalsIgnoreCase("none")) ? node.toString() : description;
+    }
+
 }