Search in sources :

Example 1 with Event

use of com.cloud.framework.events.Event in project cosmic by MissionCriticalCloud.

the class RabbitMQEventBus method handleDelivery.

private void handleDelivery(final String queueName, final Envelope envelope, final byte[] body) {
    final Ternary<String, Channel, EventSubscriber> queueDetails = s_subscribers.get(queueName);
    if (queueDetails != null) {
        final EventSubscriber subscriber = queueDetails.third();
        final String routingKey = envelope.getRoutingKey();
        final String eventSource = getEventSourceFromRoutingKey(routingKey);
        final String eventCategory = getEventCategoryFromRoutingKey(routingKey);
        final String eventType = getEventTypeFromRoutingKey(routingKey);
        final String resourceType = getResourceTypeFromRoutingKey(routingKey);
        final String resourceUUID = getResourceUUIDFromRoutingKey(routingKey);
        final Event event = new Event(eventSource, eventCategory, eventType, resourceType, resourceUUID);
        event.setDescription(new String(body));
        // deliver the event to call back object provided by subscriber
        subscriber.onEvent(event);
    }
}
Also used : EventSubscriber(com.cloud.framework.events.EventSubscriber) Channel(com.rabbitmq.client.Channel) Event(com.cloud.framework.events.Event)

Example 2 with Event

use of com.cloud.framework.events.Event in project cosmic by MissionCriticalCloud.

the class ApiServer method handleAsyncJobPublishEvent.

@MessageHandler(topic = AsyncJob.Topics.JOB_EVENT_PUBLISH)
private void handleAsyncJobPublishEvent(final String subject, final String senderAddress, final Object args) {
    assert (args != null);
    final Pair<AsyncJob, String> eventInfo = (Pair<AsyncJob, String>) args;
    final AsyncJob job = eventInfo.first();
    final String jobEvent = eventInfo.second();
    if (s_logger.isTraceEnabled()) {
        s_logger.trace("Handle asyjob publish event " + jobEvent);
    }
    final EventBus eventBus;
    try {
        eventBus = ComponentContext.getComponent(EventBus.class);
    } catch (final NoSuchBeanDefinitionException nbe) {
        // no provider is configured to provide events bus, so just return
        return;
    }
    if (!job.getDispatcher().equalsIgnoreCase("ApiAsyncJobDispatcher")) {
        return;
    }
    final User userJobOwner = _accountMgr.getUserIncludingRemoved(job.getUserId());
    final Account jobOwner = _accountMgr.getAccount(userJobOwner.getAccountId());
    // Get the event type from the cmdInfo json string
    final String info = job.getCmdInfo();
    String cmdEventType = "unknown";
    if (info != null) {
        final Type type = new TypeToken<Map<String, String>>() {
        }.getType();
        final Map<String, String> cmdInfo = ApiGsonHelper.getBuilder().create().fromJson(info, type);
        final String eventTypeObj = cmdInfo.get("cmdEventType");
        if (eventTypeObj != null) {
            cmdEventType = eventTypeObj;
            if (s_logger.isDebugEnabled()) {
                s_logger.debug("Retrieved cmdEventType from job info: " + cmdEventType);
            }
        } else {
            if (s_logger.isDebugEnabled()) {
                s_logger.debug("Unable to locate cmdEventType marker in job info. publish as unknown event");
            }
        }
    }
    // For some reason, the instanceType / instanceId are not abstract, which means we may get null values.
    final String instanceType = job.getInstanceType() != null ? job.getInstanceType() : "unknown";
    final String instanceUuid = job.getInstanceId() != null ? ApiDBUtils.findJobInstanceUuid(job) : "";
    final Event event = new Event("management-server", EventCategory.ASYNC_JOB_CHANGE_EVENT.getName(), jobEvent, instanceType, instanceUuid);
    final Map<String, String> eventDescription = new HashMap<>();
    eventDescription.put("command", job.getCmd());
    eventDescription.put("user", userJobOwner.getUuid());
    eventDescription.put("account", jobOwner.getUuid());
    eventDescription.put("processStatus", "" + job.getProcessStatus());
    eventDescription.put("resultCode", "" + job.getResultCode());
    eventDescription.put("instanceUuid", instanceUuid);
    eventDescription.put("instanceType", instanceType);
    eventDescription.put("commandEventType", cmdEventType);
    eventDescription.put("jobId", job.getUuid());
    eventDescription.put("jobResult", job.getResult());
    eventDescription.put("cmdInfo", job.getCmdInfo());
    eventDescription.put("status", "" + job.getStatus());
    // If the event.accountinfo boolean value is set, get the human readable value for the username / domainname
    final Map<String, String> configs = _configDao.getConfiguration("management-server", new HashMap<String, String>());
    if (Boolean.valueOf(configs.get("event.accountinfo"))) {
        final DomainVO domain = _domainDao.findById(jobOwner.getDomainId());
        eventDescription.put("username", userJobOwner.getUsername());
        eventDescription.put("accountname", jobOwner.getAccountName());
        eventDescription.put("domainname", domain.getName());
    }
    event.setDescription(eventDescription);
    try {
        eventBus.publish(event);
    } catch (final EventBusException evx) {
        final String errMsg = "Failed to publish async job event on the the event bus.";
        s_logger.warn(errMsg, evx);
    }
}
Also used : UserAccount(com.cloud.user.UserAccount) Account(com.cloud.user.Account) User(com.cloud.user.User) HashMap(java.util.HashMap) EventBus(com.cloud.framework.events.EventBus) AsyncJob(com.cloud.framework.jobs.AsyncJob) DomainVO(com.cloud.domain.DomainVO) Type(java.lang.reflect.Type) Event(com.cloud.framework.events.Event) EventBusException(com.cloud.framework.events.EventBusException) NoSuchBeanDefinitionException(org.springframework.beans.factory.NoSuchBeanDefinitionException) Map(java.util.Map) HashMap(java.util.HashMap) Pair(com.cloud.utils.Pair) NameValuePair(org.apache.http.NameValuePair) MessageHandler(com.cloud.framework.messagebus.MessageHandler)

Example 3 with Event

use of com.cloud.framework.events.Event in project cosmic by MissionCriticalCloud.

the class AlertGenerator method publishAlertOnEventBus.

public static void publishAlertOnEventBus(final String alertType, final long dataCenterId, final Long podId, final String subject, final String body) {
    final String configKey = Config.PublishAlertEvent.key();
    final String value = s_configDao.getValue(configKey);
    final boolean configValue = Boolean.parseBoolean(value);
    if (!configValue) {
        return;
    }
    try {
        s_eventBus = ComponentContext.getComponent(EventBus.class);
    } catch (final NoSuchBeanDefinitionException nbe) {
        // no provider is configured to provide events bus, so just return
        return;
    }
    final com.cloud.framework.events.Event event = new Event(ManagementService.Name, EventCategory.ALERT_EVENT.getName(), alertType, null, null);
    final Map<String, String> eventDescription = new HashMap<>();
    final Zone zone = s_zoneRepository.findOne(dataCenterId);
    final HostPodVO pod = s_podDao.findById(podId);
    eventDescription.put("event", alertType);
    if (zone != null) {
        eventDescription.put("dataCenterId", zone.getUuid());
    } else {
        eventDescription.put("dataCenterId", null);
    }
    if (pod != null) {
        eventDescription.put("podId", pod.getUuid());
    } else {
        eventDescription.put("podId", null);
    }
    eventDescription.put("subject", subject);
    eventDescription.put("body", body);
    final String eventDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z").format(new Date());
    eventDescription.put("eventDateTime", eventDate);
    event.setDescription(eventDescription);
    try {
        s_eventBus.publish(event);
    } catch (final EventBusException e) {
        s_logger.warn("Failed to publish alert on the the event bus.");
    }
}
Also used : HashMap(java.util.HashMap) Zone(com.cloud.model.Zone) EventBus(com.cloud.framework.events.EventBus) HostPodVO(com.cloud.dc.HostPodVO) Date(java.util.Date) Event(com.cloud.framework.events.Event) Event(com.cloud.framework.events.Event) EventBusException(com.cloud.framework.events.EventBusException) NoSuchBeanDefinitionException(org.springframework.beans.factory.NoSuchBeanDefinitionException) SimpleDateFormat(java.text.SimpleDateFormat)

Example 4 with Event

use of com.cloud.framework.events.Event in project cosmic by MissionCriticalCloud.

the class ActionEventUtilsTest method testPopulateFirstClassEntities.

@Test
public void testPopulateFirstClassEntities() {
    final AccountVO account = new AccountVO("testaccount", 1L, "networkdomain", (short) 0, "uuid");
    account.setId(ACCOUNT_ID);
    final UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString(), User.Source.UNKNOWN);
    Mockito.when(accountDao.findById(ACCOUNT_ID)).thenReturn(account);
    Mockito.when(userDao.findById(USER_ID)).thenReturn(user);
    CallContext.register(user, account);
    // Inject some entity UUIDs into the call context
    final String instanceUuid = UUID.randomUUID().toString();
    final String ipUuid = UUID.randomUUID().toString();
    CallContext.current().putContextParameter(VirtualMachine.class, instanceUuid);
    CallContext.current().putContextParameter(IpAddress.class, ipUuid);
    ActionEventUtils.onActionEvent(USER_ID, ACCOUNT_ID, account.getDomainId(), "StaticNat", "Test event");
    // Assertions
    Assert.assertNotEquals(publishedEvents.size(), 0);
    Assert.assertEquals(publishedEvents.size(), 1);
    final Event event = publishedEvents.get(0);
    Assert.assertNotNull(event.getDescription());
    final JsonObject json = new JsonParser().parse(event.getDescription()).getAsJsonObject();
    Assert.assertTrue(json.has("VirtualMachine"));
    Assert.assertTrue(json.has("IpAddress"));
    Assert.assertEquals(json.get("VirtualMachine").getAsString(), instanceUuid);
    Assert.assertEquals(json.get("IpAddress").getAsString(), ipUuid);
    CallContext.unregister();
}
Also used : UserVO(com.cloud.user.UserVO) Event(com.cloud.framework.events.Event) JsonObject(com.google.gson.JsonObject) AccountVO(com.cloud.user.AccountVO) JsonParser(com.google.gson.JsonParser) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Aggregations

Event (com.cloud.framework.events.Event)4 EventBus (com.cloud.framework.events.EventBus)2 EventBusException (com.cloud.framework.events.EventBusException)2 HashMap (java.util.HashMap)2 NoSuchBeanDefinitionException (org.springframework.beans.factory.NoSuchBeanDefinitionException)2 HostPodVO (com.cloud.dc.HostPodVO)1 DomainVO (com.cloud.domain.DomainVO)1 EventSubscriber (com.cloud.framework.events.EventSubscriber)1 AsyncJob (com.cloud.framework.jobs.AsyncJob)1 MessageHandler (com.cloud.framework.messagebus.MessageHandler)1 Zone (com.cloud.model.Zone)1 Account (com.cloud.user.Account)1 AccountVO (com.cloud.user.AccountVO)1 User (com.cloud.user.User)1 UserAccount (com.cloud.user.UserAccount)1 UserVO (com.cloud.user.UserVO)1 Pair (com.cloud.utils.Pair)1 JsonObject (com.google.gson.JsonObject)1 JsonParser (com.google.gson.JsonParser)1 Channel (com.rabbitmq.client.Channel)1