bdi-network-resilience

MIssing classifier/anomaly detection

10/12/2014 2:36:01 AM

Details

diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java b/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
index 296adb9..f20c5b5 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
@@ -22,7 +22,6 @@
 package br.ufrgs.inf.bdinetr;
 
 import jade.BootProfileImpl;
-import jade.core.Agent;
 import jade.core.Profile;
 import jade.core.ProfileImpl;
 import jade.core.Specifier;
@@ -38,10 +37,8 @@ import java.awt.GridLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 import javax.swing.JButton;
@@ -53,78 +50,71 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.log4j.PropertyConfigurator;
 
-import br.ufrgs.inf.bdinetr.agent.RouterAgent;
+import br.ufrgs.inf.bdinetr.domain.AbstractRouterComponentFactory;
 import br.ufrgs.inf.bdinetr.domain.Ip;
 import br.ufrgs.inf.bdinetr.domain.Link;
+import br.ufrgs.inf.bdinetr.domain.LinkMonitor;
 import br.ufrgs.inf.bdinetr.domain.Role;
-import br.ufrgs.inf.bdinetr.domain.AbstractRouterComponentFactory;
 import br.ufrgs.inf.bdinetr.domain.Router;
 import br.ufrgs.inf.bdinetr.domain.dummy.DummyRouterComponentFactory;
+import br.ufrgs.inf.bdinetr.domain.omnet.OMNeTRouterComponentFactory;
 
 /**
  * @author Ingrid Nunes
  */
 public class BDINetRApp {
 
-	private static final Map<Ip, Agent> AGENTS;
-	private static final AbstractRouterComponentFactory FACTORY = new DummyRouterComponentFactory();
+	private static final Set<Link> AFFECTED_LINKS;
 	private static final Network NETWORK;
+	private static final boolean OMNeT = false;
 
 	static {
 		PropertyConfigurator.configure(BDINetRApp.class
 				.getResource("log4j.properties"));
 
-		Set<Router> routers = new HashSet<>();
-		routers.add(new Router(new Ip("RouterLM"), Role.LINK_MONITOR.getId(), FACTORY));
-		routers.add(new Router(new Ip("RouterRL"), Role.RATE_LIMITER.getId(), FACTORY));
-		routers.add(new Router(new Ip("RouterRL+FE"), Role.RATE_LIMITER.getId() | Role.FLOW_EXPORTER.getId(), FACTORY));
-		routers.add(new Router(new Ip("RouterAD"), Role.ANOMALY_DETECTION.getId(), FACTORY));
-		routers.add(new Router(new Ip("RouterAD+RL"), Role.ANOMALY_DETECTION.getId() | Role.RATE_LIMITER.getId(), FACTORY));
-		routers.add(new Router(new Ip("RouterCL"), Role.CLASSIFIER.getId(), FACTORY));
-		routers.add(new Router(new Ip("RouterCL+FE"), Role.CLASSIFIER.getId() | Role.FLOW_EXPORTER.getId(), FACTORY));
-		routers.add(new Router(new Ip("RouterFE"), Role.FLOW_EXPORTER.getId(), FACTORY));
-
-		Link affectedLink = new Link("AFFECTED_LINK");
-
-		Set<Link> links = new HashSet<>();
-		links.add(affectedLink);
-		links.add(new Link("LINK_01"));
-		links.add(new Link("LINK_02"));
-
-		Set<Link> affectedLinks = new HashSet<>();
-		affectedLinks.add(affectedLink);
-
-		NETWORK = new Network(routers, links, affectedLinks);
-
-		AGENTS = new HashMap<>();
-		for (Router router : NETWORK.getRouters()) {
-			AGENTS.put(router.getIp(), new RouterAgent(router));
+		NETWORK = new Network();
+		AFFECTED_LINKS = new HashSet<>();
+
+		if (OMNeT) {
+			AbstractRouterComponentFactory factory = new OMNeTRouterComponentFactory();
+			Ip ip = new Ip("http://localhost:8080/RPC2");
+			NETWORK.addRouter(new Router(ip, "ids_one", Role.ANOMALY_DETECTION
+					.getId(), factory));
+			NETWORK.addRouter(new Router(ip, "linkmonitor_one",
+					Role.LINK_MONITOR.getId(), factory));
+			NETWORK.addRouter(new Router(ip, "classifier_one", Role.CLASSIFIER
+					.getId(), factory));
+			NETWORK.addRouter(new Router(ip, "flowexporter_one",
+					Role.FLOW_EXPORTER.getId(), factory));
+			NETWORK.addRouter(new Router(ip, "ratelimiter_one",
+					Role.RATE_LIMITER.getId(), factory));
+		} else {
+			AbstractRouterComponentFactory factory = new DummyRouterComponentFactory();
+			NETWORK.addRouter(new Router(new Ip("RouterLM"), Role.LINK_MONITOR
+					.getId(), factory));
+			NETWORK.addRouter(new Router(new Ip("RouterRL"), Role.RATE_LIMITER
+					.getId(), factory));
+			NETWORK.addRouter(new Router(new Ip("RouterRL+FE"),
+					Role.RATE_LIMITER.getId() | Role.FLOW_EXPORTER.getId(),
+					factory));
+			NETWORK.addRouter(new Router(new Ip("RouterAD"),
+					Role.ANOMALY_DETECTION.getId(), factory));
+			NETWORK.addRouter(new Router(new Ip("RouterAD+RL"),
+					Role.ANOMALY_DETECTION.getId() | Role.RATE_LIMITER.getId(),
+					factory));
+			NETWORK.addRouter(new Router(new Ip("RouterCL"), Role.CLASSIFIER
+					.getId(), factory));
+			NETWORK.addRouter(new Router(new Ip("RouterCL+FE"), Role.CLASSIFIER
+					.getId() | Role.FLOW_EXPORTER.getId(), factory));
+			NETWORK.addRouter(new Router(new Ip("RouterFE"), Role.FLOW_EXPORTER
+					.getId(), factory));
+
+			AFFECTED_LINKS.add(new Link("AFFECTED_LINK"));
 		}
 	}
 
 	public static void main(String[] args) {
-		new BDINetRApp();
-
-		JPanel panel = new JPanel(new GridLayout(1, 1));
-		JButton button = new JButton("Run!");
-		button.addActionListener(new ActionListener() {
-			@Override
-			public void actionPerformed(ActionEvent e) {
-				NETWORK.run();
-			}
-		});
-		panel.add(button);
-		final JFrame frame = new JFrame();
-		frame.setTitle(BDINetRApp.class.getSimpleName());
-		frame.setContentPane(panel);
-		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-		frame.pack();
-		SwingUtilities.invokeLater(new Runnable() {
-			@Override
-			public void run() {
-				frame.setVisible(true);
-			}
-		});
+		new BDINetRApp().createAndShowGUI();
 	}
 
 	private ProfileImpl bootProfile;
@@ -166,11 +156,11 @@ public class BDINetRApp {
 		PlatformController controller = runtime
 				.createMainContainer(bootProfile);
 
-		for (Ip agentName : AGENTS.keySet()) {
+		for (Router router : NETWORK.getRouters()) {
 			try {
 				AgentController ac = ((AgentContainer) controller)
-						.acceptNewAgent(agentName.toString(),
-								AGENTS.get(agentName));
+						.acceptNewAgent(router.getId(),
+								NETWORK.getAgent(router));
 				ac.start();
 			} catch (Exception e) {
 				log.error(e);
@@ -178,4 +168,40 @@ public class BDINetRApp {
 		}
 	}
 
+	public void createAndShowGUI() {
+		JPanel panel = new JPanel(new GridLayout(1, 1));
+		JButton button = new JButton("Run!");
+		button.addActionListener(new ActionListener() {
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				run();
+			}
+		});
+		panel.add(button);
+		final JFrame frame = new JFrame();
+		frame.setTitle(BDINetRApp.class.getSimpleName());
+		frame.setContentPane(panel);
+		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		frame.pack();
+		SwingUtilities.invokeLater(new Runnable() {
+			@Override
+			public void run() {
+				frame.setVisible(true);
+			}
+		});
+	}
+
+	public void run() {
+		log.info("Updating link usage");
+		for (Link link : AFFECTED_LINKS) {
+			for (Router router : NETWORK.getRouters()) {
+				if (router.hasRole(Role.LINK_MONITOR)) {
+					LinkMonitor lm = (LinkMonitor) router
+							.getRole(Role.LINK_MONITOR);
+					lm.setOverUsage(link, true);
+				}
+			}
+		}
+	}
+
 }
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Router.java b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Router.java
index acd8e7a..92c283f 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Router.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/domain/Router.java
@@ -54,11 +54,19 @@ public class Router {
 	public boolean equals(Object obj) {
 		if (obj instanceof Router) {
 			Router d = (Router) obj;
-			return (this.ip + this.type).equals((d.ip + type));
+			return getId().equals(d.getId());
 		}
 		return false;
 	}
 
+	public String getId() {
+		if (type == null) {
+			return ip == null ? null : ip.getAddress();
+		} else {
+			return ip + "::" + type;
+		}
+	}
+
 	public Ip getIp() {
 		return ip;
 	}
@@ -73,7 +81,8 @@ public class Router {
 
 	@Override
 	public int hashCode() {
-		return (this.ip + this.type).hashCode();
+		String id = getId();
+		return id == null ? 0 : id.hashCode();
 	}
 
 	public boolean hasRole(Role role) {
@@ -82,7 +91,7 @@ public class Router {
 
 	@Override
 	public String toString() {
-		return ip.toString();
+		return getId();
 	}
 
 }
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/Network.java b/network-resilience/src/br/ufrgs/inf/bdinetr/Network.java
index 644a18f..bc02180 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/Network.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/Network.java
@@ -21,14 +21,16 @@
 //----------------------------------------------------------------------------
 package br.ufrgs.inf.bdinetr;
 
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Set;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
-import bdi4jade.examples.BDI4JADEExamplesPanel;
+import br.ufrgs.inf.bdinetr.agent.RouterAgent;
 import br.ufrgs.inf.bdinetr.domain.LimitLinkEvent;
-import br.ufrgs.inf.bdinetr.domain.Link;
 import br.ufrgs.inf.bdinetr.domain.LinkMonitor;
 import br.ufrgs.inf.bdinetr.domain.Observer;
 import br.ufrgs.inf.bdinetr.domain.RateLimiter;
@@ -40,67 +42,44 @@ import br.ufrgs.inf.bdinetr.domain.Router;
  */
 public class Network implements Observer {
 
-	private final Set<Link> affectedLinks;
-	private final Set<Link> links;
 	private final Log log;
-	private final Set<Router> routers;
+	private final Map<Router, RouterAgent> routerAgents;
 
-	public Network(Set<Router> routers, Set<Link> links, Set<Link> affectedLinks) {
+	public Network() {
 		this.log = LogFactory.getLog(this.getClass());
-		this.routers = routers;
-		this.links = links;
-		this.affectedLinks = affectedLinks;
-
-		for (Router router : routers) {
-			if (router.hasRole(Role.RATE_LIMITER)) {
-				((RateLimiter) router.getRole(Role.RATE_LIMITER))
-						.attachObserver(this);
-			}
-		}
-	}
-
-	public void addLink(Link link) {
-		this.links.add(link);
+		this.routerAgents = new HashMap<>();
 	}
 
 	public void addRouter(Router router) {
-		this.routers.add(router);
+		this.routerAgents.put(router, new RouterAgent(router));
+		if (router.hasRole(Role.RATE_LIMITER)) {
+			((RateLimiter) router.getRole(Role.RATE_LIMITER))
+					.attachObserver(this);
+		}
 	}
 
-	public Set<Link> getLinks() {
-		return links;
+	public RouterAgent getAgent(Router router) {
+		return routerAgents.get(router);
 	}
 
-	public Set<Router> getRouters() {
-		return routers;
+	public Collection<RouterAgent> getRouterAgents() {
+		return routerAgents.values();
 	}
 
-	/**
-	 * Creates and shows a GUI whose content pane is an
-	 * {@link BDI4JADEExamplesPanel}.
-	 */
-	public void run() {
-		log.info("Updating link usage");
-		for (Link link : affectedLinks) {
-			for (Router router : routers) {
-				if (router.hasRole(Role.LINK_MONITOR)) {
-					LinkMonitor lm = (LinkMonitor) router
-							.getRole(Role.LINK_MONITOR);
-					lm.setOverUsage(link, true);
-				}
-			}
-		}
+	public Set<Router> getRouters() {
+		return routerAgents.keySet();
 	}
 
 	@Override
 	public void update(Object o, Object arg) {
 		if (arg instanceof LimitLinkEvent) {
 			LimitLinkEvent event = (LimitLinkEvent) arg;
-			for (Router router : routers) {
+			for (Router router : getRouters()) {
 				if (router.hasRole(Role.LINK_MONITOR)) {
 					LinkMonitor lm = (LinkMonitor) router
 							.getRole(Role.LINK_MONITOR);
 					if (lm.isOverUsage(event.getLink())) {
+						log.info("Updating link monitors...");
 						lm.setOverUsage(event.getLink(), false);
 					}
 				}