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();
+ }
+ }
+ }
}