publish state change events on Network and VirtualMachine resource state
changes


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/053b6bd6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/053b6bd6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/053b6bd6

Branch: refs/heads/events-framework
Commit: 053b6bd636665663371c7ff497cea2cb81a1e669
Parents: 117bce8
Author: Murali Reddy <[email protected]>
Authored: Mon Jan 28 17:02:21 2013 +0530
Committer: Murali Reddy <[email protected]>
Committed: Mon Jan 28 17:02:21 2013 +0530

----------------------------------------------------------------------
 .../cloudstack/mom/rabbitmq/RabbitMQEventBus.java  |    6 +-
 .../com/cloud/network/NetworkStateListener.java    |   66 ++++++++++++++-
 server/src/com/cloud/vm/UserVmStateListener.java   |   60 +++++++++++++-
 3 files changed, 125 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/053b6bd6/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java
----------------------------------------------------------------------
diff --git 
a/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java
 
b/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java
index 5266cb7..3a06c42 100644
--- 
a/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java
+++ 
b/plugins/event-bus/rabbitmq/src/org/apache/cloudstack/mom/rabbitmq/RabbitMQEventBus.java
@@ -161,8 +161,9 @@ public class RabbitMQEventBus implements EventBus {
                                 String eventCategory = 
getEventCategoryFromRoutingKey(routingKey);
                                 String eventType = 
getEventTypeFromRoutingKey(routingKey);
                                 String resourceType = 
getResourceTypeFromRoutingKey(routingKey);
+                                String resourceUUID = 
getResourceUUIDFromRoutingKey(routingKey);
                                 Event event = new Event(eventSource, 
eventCategory, eventType,
-                                        resourceType, null);
+                                        resourceType, resourceUUID);
                                 event.setDescription(new String(body));
 
                                 // deliver the event to call back object 
provided by subscriber
@@ -526,10 +527,11 @@ public class RabbitMQEventBus implements EventBus {
                                             String eventCategory = 
getEventCategoryFromRoutingKey(routingKey);
                                             String eventType = 
getEventTypeFromRoutingKey(routingKey);
                                             String resourceType = 
getResourceTypeFromRoutingKey(routingKey);
+                                            String resourceUUID = 
getResourceUUIDFromRoutingKey(routingKey);
 
                                             // create event object from the 
message details obtained from AMQP server
                                             Event event = new 
Event(eventSource, eventCategory, eventType,
-                                                    resourceType, null);
+                                                    resourceType, 
resourceUUID);
                                             event.setDescription(new 
String(body));
 
                                             // deliver the event to call back 
object provided by subscriber

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/053b6bd6/server/src/com/cloud/network/NetworkStateListener.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkStateListener.java 
b/server/src/com/cloud/network/NetworkStateListener.java
index fdabeb0..7235fea 100644
--- a/server/src/com/cloud/network/NetworkStateListener.java
+++ b/server/src/com/cloud/network/NetworkStateListener.java
@@ -1,31 +1,89 @@
 package com.cloud.network;
 
+import com.cloud.event.EventCategory;
 import com.cloud.event.dao.UsageEventDao;
 import com.cloud.network.Network.Event;
 import com.cloud.network.Network.State;
 import com.cloud.network.dao.NetworkDao;
+import com.cloud.server.ManagementServer;
+import com.cloud.utils.component.Adapters;
+import com.cloud.utils.component.ComponentLocator;
 import com.cloud.utils.fsm.StateListener;
+import org.apache.cloudstack.framework.events.EventBus;
+import org.apache.cloudstack.framework.events.EventBusException;
+import org.apache.log4j.Logger;
+
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
 
 public class NetworkStateListener implements StateListener<State, Event, 
Network> {
 
     protected UsageEventDao _usageEventDao;
     protected NetworkDao _networkDao;
+    protected static EventBus _eventBus = null;
+
+    private static final Logger s_logger = 
Logger.getLogger(NetworkStateListener.class);
 
     public NetworkStateListener(UsageEventDao usageEventDao, NetworkDao 
networkDao) {
         this._usageEventDao = usageEventDao;
         this._networkDao = networkDao;
+        initEventBusProvider();
     }
 
     @Override
     public boolean preStateTransitionEvent(State oldState, Event event, State 
newState, Network vo, boolean status, Object opaque) {
-        // TODO Auto-generated method stub
-        return false;
+        pubishOnEventBus(event.name(), "preStateTransitionEvent", vo, 
oldState, newState);
+        return true;
     }
 
     @Override
     public boolean postStateTransitionEvent(State oldState, Event event, State 
newState, Network vo, boolean status, Object opaque) {
-        // TODO Auto-generated method stub
-        return false;
+        pubishOnEventBus(event.name(), "postStateTransitionEvent", vo, 
oldState, newState);
+        return true;
+    }
+
+    private void pubishOnEventBus(String event, String status, Network vo, 
State oldState, State newState) {
+        if (_eventBus != null) {
+            String resourceName = 
getEntityFromClassName(Network.class.getName());
+            org.apache.cloudstack.framework.events.Event eventMsg =  new 
org.apache.cloudstack.framework.events.Event(
+                    ManagementServer.Name,
+                    EventCategory.RESOURCE_STATE_CHANGE_EVENT.getName(),
+                    event,
+                    resourceName,
+                    vo.getUuid());
+            Map<String, String> eventDescription = new HashMap<String, 
String>();
+            eventDescription.put("resource", resourceName);
+            eventDescription.put("id", vo.getUuid());
+            eventDescription.put("old-state", oldState.name());
+            eventDescription.put("new-state", newState.name());
+            eventMsg.setDescription(eventDescription);
+            try {
+                _eventBus.publish(eventMsg);
+            } catch (EventBusException e) {
+                s_logger.warn("Failed to publish action event on the the event 
bus.");
+            }
+        }
+    }
+
+    private String getEntityFromClassName(String entityClassName) {
+        int index = entityClassName.lastIndexOf(".");
+        String entityName = entityClassName;
+        if (index != -1) {
+            entityName = entityClassName.substring(index+1);
+        }
+        return entityName;
+    }
+
+    private void initEventBusProvider() {
+        ComponentLocator locator = 
ComponentLocator.getLocator(ManagementServer.Name);
+        Adapters<EventBus> eventBusImpls = locator.getAdapters(EventBus.class);
+        if (eventBusImpls != null) {
+            Enumeration<EventBus> eventBusenum = eventBusImpls.enumeration();
+            if (eventBusenum != null && eventBusenum.hasMoreElements()) {
+                _eventBus = eventBusenum.nextElement();
+            }
+        }
     }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/053b6bd6/server/src/com/cloud/vm/UserVmStateListener.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/UserVmStateListener.java 
b/server/src/com/cloud/vm/UserVmStateListener.java
index 37cce57..8f8e3fe 100644
--- a/server/src/com/cloud/vm/UserVmStateListener.java
+++ b/server/src/com/cloud/vm/UserVmStateListener.java
@@ -16,32 +16,47 @@
 // under the License.
 package com.cloud.vm;
 
+import com.cloud.event.EventCategory;
 import com.cloud.event.EventTypes;
 import com.cloud.event.UsageEventUtils;
 import com.cloud.event.dao.UsageEventDao;
+import com.cloud.network.Network;
 import com.cloud.network.NetworkVO;
 import com.cloud.network.dao.NetworkDao;
+import com.cloud.server.ManagementServer;
+import com.cloud.utils.component.Adapters;
+import com.cloud.utils.component.ComponentLocator;
 import com.cloud.utils.fsm.StateListener;
 import com.cloud.vm.VirtualMachine.Event;
 import com.cloud.vm.VirtualMachine.State;
 import com.cloud.vm.dao.NicDao;
+import org.apache.cloudstack.framework.events.EventBus;
+import org.apache.cloudstack.framework.events.EventBusException;
+import org.apache.log4j.Logger;
 
+import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 public class UserVmStateListener implements StateListener<State, 
VirtualMachine.Event, VirtualMachine> {
 
     protected UsageEventDao _usageEventDao;
     protected NetworkDao _networkDao;
     protected NicDao _nicDao;
-    
+    protected static EventBus _eventBus = null;
+    private static final Logger s_logger = 
Logger.getLogger(UserVmStateListener.class);
+
     public UserVmStateListener(UsageEventDao usageEventDao, NetworkDao 
networkDao, NicDao nicDao) {
         this._usageEventDao = usageEventDao;
         this._networkDao = networkDao;
         this._nicDao = nicDao;
+        initEventBusProvider();
     }
     
     @Override
     public boolean preStateTransitionEvent(State oldState, Event event, State 
newState, VirtualMachine vo, boolean status, Object opaque) {
+        pubishOnEventBus(event.name(), "preStateTransitionEvent", vo, 
oldState, newState);
         return true;
     }
 
@@ -74,4 +89,47 @@ public class UserVmStateListener implements 
StateListener<State, VirtualMachine.
         } 
         return true;
     }
+
+    private void pubishOnEventBus(String event, String status, VirtualMachine 
vo, VirtualMachine.State oldState, VirtualMachine.State newState) {
+        if (_eventBus != null) {
+            String resourceName = 
getEntityFromClassName(Network.class.getName());
+            org.apache.cloudstack.framework.events.Event eventMsg =  new 
org.apache.cloudstack.framework.events.Event(
+                    ManagementServer.Name,
+                    EventCategory.RESOURCE_STATE_CHANGE_EVENT.getName(),
+                    event,
+                    resourceName,
+                    vo.getUuid());
+            Map<String, String> eventDescription = new HashMap<String, 
String>();
+            eventDescription.put("resource", resourceName);
+            eventDescription.put("id", vo.getUuid());
+            eventDescription.put("old-state", oldState.name());
+            eventDescription.put("new-state", newState.name());
+            eventMsg.setDescription(eventDescription);
+            try {
+                _eventBus.publish(eventMsg);
+            } catch (EventBusException e) {
+                s_logger.warn("Failed to publish action event on the the event 
bus.");
+            }
+        }
+    }
+
+    private String getEntityFromClassName(String entityClassName) {
+        int index = entityClassName.lastIndexOf(".");
+        String entityName = entityClassName;
+        if (index != -1) {
+            entityName = entityClassName.substring(index+1);
+        }
+        return entityName;
+    }
+
+    private void initEventBusProvider() {
+        ComponentLocator locator = 
ComponentLocator.getLocator(ManagementServer.Name);
+        Adapters<EventBus> eventBusImpls = locator.getAdapters(EventBus.class);
+        if (eventBusImpls != null) {
+            Enumeration<EventBus> eventBusenum = eventBusImpls.enumeration();
+            if (eventBusenum != null && eventBusenum.hasMoreElements()) {
+                _eventBus = eventBusenum.nextElement();
+            }
+        }
+    }
 }

Reply via email to