You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mu...@apache.org on 2013/01/28 16:16:40 UTC

[2/4] git commit: publish state change events on Network and VirtualMachine resource state changes

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 <mu...@citrix.com>
Authored: Mon Jan 28 17:02:21 2013 +0530
Committer: Murali Reddy <mu...@citrix.com>
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();
+            }
+        }
+    }
 }