Search in sources :

Example 1 with Notification

use of io.gravitee.notifier.api.Notification in project gravitee-management-rest-api by gravitee-io.

the class ApplicationAlertServiceTest method shouldHandleNotificationTemplateUpdatedEventResponseTimeAlert.

@Test
public void shouldHandleNotificationTemplateUpdatedEventResponseTimeAlert() throws Exception {
    NotificationTemplateEntity notificationTemplate = new NotificationTemplateEntity();
    notificationTemplate.setHook(AlertHook.CONSUMER_RESPONSE_TIME.name());
    notificationTemplate.setTitle("notification-template-title");
    notificationTemplate.setContent("notification-template-content");
    NotificationTemplateEvent notificationTemplateEvent = new NotificationTemplateEvent("org-id", notificationTemplate);
    final SimpleEvent<ApplicationAlertEventType, Object> event = new SimpleEvent<>(ApplicationAlertEventType.NOTIFICATION_TEMPLATE_UPDATE, notificationTemplateEvent);
    ApplicationListItem app1 = new ApplicationListItem();
    app1.setId("app1");
    ApplicationListItem app2 = new ApplicationListItem();
    app2.setId("app2");
    when(applicationService.findByOrganization("org-id")).thenReturn(new HashSet<>(Arrays.asList(app1, app2)));
    final AlertTriggerEntity alertTrigger = mock(AlertTriggerEntity.class);
    when(alertTrigger.getType()).thenReturn("METRICS_AGGREGATION");
    when(alertService.findByReferenceAndReferenceIds(AlertReferenceType.APPLICATION, Arrays.asList("app1", "app2"))).thenReturn(Collections.singletonList(alertTrigger));
    Notification notification = new Notification();
    notification.setType("default-email");
    notification.setConfiguration("");
    when(alertTrigger.getNotifications()).thenReturn(Collections.singletonList(notification));
    JsonNode emailNode = JsonNodeFactory.instance.objectNode().put("to", "to").put("from", "from").put("subject", "subject").put("body", "body");
    when(mapper.readTree(notification.getConfiguration())).thenReturn(emailNode);
    cut.handleEvent(event);
    ArgumentCaptor<UpdateAlertTriggerEntity> updatingCaptor = ArgumentCaptor.forClass(UpdateAlertTriggerEntity.class);
    verify(alertService, times(1)).update(updatingCaptor.capture());
    final UpdateAlertTriggerEntity updating = updatingCaptor.getValue();
    assertThat(updating.getNotifications().get(0).getConfiguration()).contains("notification-template-content");
    assertThat(updating.getNotifications().get(0).getConfiguration()).contains("notification-template-title");
}
Also used : UpdateAlertTriggerEntity(io.gravitee.rest.api.model.alert.UpdateAlertTriggerEntity) SimpleEvent(io.gravitee.common.event.impl.SimpleEvent) NotificationTemplateEntity(io.gravitee.rest.api.model.notification.NotificationTemplateEntity) JsonNode(com.fasterxml.jackson.databind.JsonNode) UpdateAlertTriggerEntity(io.gravitee.rest.api.model.alert.UpdateAlertTriggerEntity) NewAlertTriggerEntity(io.gravitee.rest.api.model.alert.NewAlertTriggerEntity) AlertTriggerEntity(io.gravitee.rest.api.model.alert.AlertTriggerEntity) Notification(io.gravitee.notifier.api.Notification) ApplicationListItem(io.gravitee.rest.api.model.application.ApplicationListItem) NotificationTemplateEvent(io.gravitee.rest.api.model.notification.NotificationTemplateEvent) ApplicationAlertEventType(io.gravitee.rest.api.model.alert.ApplicationAlertEventType) Test(org.junit.Test)

Example 2 with Notification

use of io.gravitee.notifier.api.Notification in project gravitee-management-rest-api by gravitee-io.

the class ApplicationAlertServiceImpl method createNotification.

private List<Notification> createNotification(String alertType, List<String> recipients) {
    try {
        Notification notification = new Notification();
        notification.setType(DEFAULT_EMAIL_NOTIFIER);
        ObjectNode configuration = mapper.createObjectNode();
        configuration.put("from", emailFrom);
        configuration.put("to", String.join(",", recipients));
        generateNotificationBodyFromTemplate(configuration, alertType);
        notification.setPeriods(emptyList());
        notification.setConfiguration(mapper.writeValueAsString(configuration));
        return singletonList(notification);
    } catch (JsonProcessingException e) {
        LOGGER.error("An error occurs while trying to create the Alert notification", e);
        throw new TechnicalManagementException("An error occurs while trying to create the Alert notification");
    }
}
Also used : ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) Notification(io.gravitee.notifier.api.Notification) TechnicalManagementException(io.gravitee.rest.api.service.exceptions.TechnicalManagementException)

Example 3 with Notification

use of io.gravitee.notifier.api.Notification in project gravitee-management-rest-api by gravitee-io.

the class ApplicationAlertServiceImpl method addMemberToApplication.

@Override
public void addMemberToApplication(String applicationId, String email) {
    if (StringUtils.isEmpty(email)) {
        return;
    }
    // check existence of application
    applicationService.findById(applicationId);
    alertService.findByReference(AlertReferenceType.APPLICATION, applicationId).forEach(trigger -> {
        if (trigger.getNotifications() == null) {
            trigger.setNotifications(createNotification(trigger.getType()));
        }
        final Optional<Notification> notificationOpt = trigger.getNotifications().stream().filter(n -> DEFAULT_EMAIL_NOTIFIER.equals(n.getType())).findFirst();
        if (notificationOpt.isPresent()) {
            Notification notification = notificationOpt.get();
            try {
                ObjectNode configuration = mapper.createObjectNode();
                JsonNode emailNode = mapper.readTree(notification.getConfiguration());
                configuration.put("to", emailNode.path("to").asText() + "," + email);
                configuration.put("from", emailNode.path("from").asText());
                configuration.put("subject", emailNode.path("subject").asText());
                configuration.put("body", emailNode.path("body").asText());
                notification.setConfiguration(mapper.writeValueAsString(configuration));
            } catch (JsonProcessingException e) {
                LOGGER.error("An error occurs while trying to add a recipient to the Alert notification", e);
                throw new TechnicalManagementException("An error occurs while trying to add a recipient to the Alert notification");
            }
        } else {
            trigger.setNotifications(createNotification(trigger.getType(), singletonList(email)));
        }
        alertService.update(convert(trigger));
    });
}
Also used : AlertHook(io.gravitee.rest.api.service.notification.AlertHook) Arrays(java.util.Arrays) LoggerFactory(org.slf4j.LoggerFactory) HookScope(io.gravitee.rest.api.service.notification.HookScope) AlertTriggerRepository(io.gravitee.repository.management.api.AlertTriggerRepository) Collections.singletonList(java.util.Collections.singletonList) StringCondition(io.gravitee.alert.api.condition.StringCondition) Map(java.util.Map) JsonNode(com.fasterxml.jackson.databind.JsonNode) ApplicationListItem(io.gravitee.rest.api.model.application.ApplicationListItem) UpdateAlertTriggerEntity(io.gravitee.rest.api.model.alert.UpdateAlertTriggerEntity) MembershipEntity(io.gravitee.rest.api.model.MembershipEntity) AlertStatusEntity(io.gravitee.rest.api.model.alert.AlertStatusEntity) Collections.emptyList(java.util.Collections.emptyList) MembershipService(io.gravitee.rest.api.service.MembershipService) Set(java.util.Set) Collectors(java.util.stream.Collectors) List(java.util.List) NewAlertTriggerEntity(io.gravitee.rest.api.model.alert.NewAlertTriggerEntity) AlertService(io.gravitee.rest.api.service.AlertService) CollectionUtils(org.springframework.util.CollectionUtils) ApplicationService(io.gravitee.rest.api.service.ApplicationService) Optional(java.util.Optional) Filter(io.gravitee.alert.api.condition.Filter) NotificationTemplateEntity(io.gravitee.rest.api.model.notification.NotificationTemplateEntity) UserEntity(io.gravitee.rest.api.model.UserEntity) Trigger(io.gravitee.alert.api.trigger.Trigger) Async(org.springframework.scheduling.annotation.Async) ApplicationAlertEventType(io.gravitee.rest.api.model.alert.ApplicationAlertEventType) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) ApplicationAlertService(io.gravitee.rest.api.service.ApplicationAlertService) ArrayList(java.util.ArrayList) ApplicationAlertMembershipEvent(io.gravitee.rest.api.model.alert.ApplicationAlertMembershipEvent) HashSet(java.util.HashSet) Value(org.springframework.beans.factory.annotation.Value) TechnicalManagementException(io.gravitee.rest.api.service.exceptions.TechnicalManagementException) NotificationTemplateService(io.gravitee.rest.api.service.notification.NotificationTemplateService) UserService(io.gravitee.rest.api.service.UserService) Notification(io.gravitee.notifier.api.Notification) AlertReferenceType(io.gravitee.rest.api.model.alert.AlertReferenceType) Logger(org.slf4j.Logger) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) Event(io.gravitee.common.event.Event) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) AlertTriggerEntity(io.gravitee.rest.api.model.alert.AlertTriggerEntity) Dampening(io.gravitee.alert.api.trigger.Dampening) Consumer(java.util.function.Consumer) MembershipReferenceType(io.gravitee.rest.api.model.MembershipReferenceType) Component(org.springframework.stereotype.Component) NotificationTemplateEvent(io.gravitee.rest.api.model.notification.NotificationTemplateEvent) ApplicationEntity(io.gravitee.rest.api.model.ApplicationEntity) StringUtils(org.springframework.util.StringUtils) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) JsonNode(com.fasterxml.jackson.databind.JsonNode) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) Notification(io.gravitee.notifier.api.Notification) TechnicalManagementException(io.gravitee.rest.api.service.exceptions.TechnicalManagementException)

Example 4 with Notification

use of io.gravitee.notifier.api.Notification in project gravitee-management-rest-api by gravitee-io.

the class ApplicationAlertServiceImpl method deleteMemberFromApplication.

@Override
public void deleteMemberFromApplication(String applicationId, String email) {
    if (StringUtils.isEmpty(email)) {
        return;
    }
    // check existence of application
    applicationService.findById(applicationId);
    alertService.findByReference(AlertReferenceType.APPLICATION, applicationId).forEach(trigger -> {
        if (trigger.getNotifications() == null) {
            trigger.setNotifications(createNotification(trigger.getType()));
        }
        final Optional<Notification> notificationOpt = trigger.getNotifications().stream().filter(n -> DEFAULT_EMAIL_NOTIFIER.equals(n.getType())).findFirst();
        if (notificationOpt.isPresent()) {
            final Notification notification = notificationOpt.get();
            try {
                ObjectNode configuration = mapper.createObjectNode();
                JsonNode emailNode = mapper.readTree(notification.getConfiguration());
                final String to = Arrays.stream(emailNode.path("to").asText().split(",|;|\\s")).filter(mailTo -> !mailTo.equals(email)).collect(Collectors.joining(","));
                if (StringUtils.isEmpty(to)) {
                    trigger.setNotifications(emptyList());
                } else {
                    configuration.put("to", to);
                    configuration.put("from", emailNode.path("from").asText());
                    configuration.put("subject", emailNode.path("subject").asText());
                    configuration.put("body", emailNode.path("body").asText());
                    notification.setConfiguration(mapper.writeValueAsString(configuration));
                }
                alertService.update(convert(trigger));
            } catch (JsonProcessingException e) {
                LOGGER.error("An error occurs while trying to add a recipient to the Alert notification", e);
                throw new TechnicalManagementException("An error occurs while trying to add a recipient to the Alert notification");
            }
        }
    });
}
Also used : AlertHook(io.gravitee.rest.api.service.notification.AlertHook) Arrays(java.util.Arrays) LoggerFactory(org.slf4j.LoggerFactory) HookScope(io.gravitee.rest.api.service.notification.HookScope) AlertTriggerRepository(io.gravitee.repository.management.api.AlertTriggerRepository) Collections.singletonList(java.util.Collections.singletonList) StringCondition(io.gravitee.alert.api.condition.StringCondition) Map(java.util.Map) JsonNode(com.fasterxml.jackson.databind.JsonNode) ApplicationListItem(io.gravitee.rest.api.model.application.ApplicationListItem) UpdateAlertTriggerEntity(io.gravitee.rest.api.model.alert.UpdateAlertTriggerEntity) MembershipEntity(io.gravitee.rest.api.model.MembershipEntity) AlertStatusEntity(io.gravitee.rest.api.model.alert.AlertStatusEntity) Collections.emptyList(java.util.Collections.emptyList) MembershipService(io.gravitee.rest.api.service.MembershipService) Set(java.util.Set) Collectors(java.util.stream.Collectors) List(java.util.List) NewAlertTriggerEntity(io.gravitee.rest.api.model.alert.NewAlertTriggerEntity) AlertService(io.gravitee.rest.api.service.AlertService) CollectionUtils(org.springframework.util.CollectionUtils) ApplicationService(io.gravitee.rest.api.service.ApplicationService) Optional(java.util.Optional) Filter(io.gravitee.alert.api.condition.Filter) NotificationTemplateEntity(io.gravitee.rest.api.model.notification.NotificationTemplateEntity) UserEntity(io.gravitee.rest.api.model.UserEntity) Trigger(io.gravitee.alert.api.trigger.Trigger) Async(org.springframework.scheduling.annotation.Async) ApplicationAlertEventType(io.gravitee.rest.api.model.alert.ApplicationAlertEventType) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) ApplicationAlertService(io.gravitee.rest.api.service.ApplicationAlertService) ArrayList(java.util.ArrayList) ApplicationAlertMembershipEvent(io.gravitee.rest.api.model.alert.ApplicationAlertMembershipEvent) HashSet(java.util.HashSet) Value(org.springframework.beans.factory.annotation.Value) TechnicalManagementException(io.gravitee.rest.api.service.exceptions.TechnicalManagementException) NotificationTemplateService(io.gravitee.rest.api.service.notification.NotificationTemplateService) UserService(io.gravitee.rest.api.service.UserService) Notification(io.gravitee.notifier.api.Notification) AlertReferenceType(io.gravitee.rest.api.model.alert.AlertReferenceType) Logger(org.slf4j.Logger) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) Event(io.gravitee.common.event.Event) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) AlertTriggerEntity(io.gravitee.rest.api.model.alert.AlertTriggerEntity) Dampening(io.gravitee.alert.api.trigger.Dampening) Consumer(java.util.function.Consumer) MembershipReferenceType(io.gravitee.rest.api.model.MembershipReferenceType) Component(org.springframework.stereotype.Component) NotificationTemplateEvent(io.gravitee.rest.api.model.notification.NotificationTemplateEvent) ApplicationEntity(io.gravitee.rest.api.model.ApplicationEntity) StringUtils(org.springframework.util.StringUtils) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) JsonNode(com.fasterxml.jackson.databind.JsonNode) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) Notification(io.gravitee.notifier.api.Notification) TechnicalManagementException(io.gravitee.rest.api.service.exceptions.TechnicalManagementException)

Example 5 with Notification

use of io.gravitee.notifier.api.Notification in project gravitee-management-rest-api by gravitee-io.

the class ApplicationAlertServiceTest method shouldNotDeleteMemberMappingError.

@Test(expected = TechnicalManagementException.class)
public void shouldNotDeleteMemberMappingError() throws Exception {
    AlertTriggerEntity trigger1 = mock(AlertTriggerEntity.class);
    Notification notification = new Notification();
    notification.setType("default-email");
    notification.setConfiguration("");
    when(trigger1.getNotifications()).thenReturn(Collections.singletonList(notification));
    List<AlertTriggerEntity> triggers = new ArrayList<>();
    triggers.add(trigger1);
    when(alertService.findByReference(AlertReferenceType.APPLICATION, APPLICATION_ID)).thenReturn(triggers);
    when(mapper.readTree(notification.getConfiguration())).thenThrow(JsonProcessingException.class);
    cut.deleteMemberFromApplication(APPLICATION_ID, "delete@mail.gio");
}
Also used : ArrayList(java.util.ArrayList) UpdateAlertTriggerEntity(io.gravitee.rest.api.model.alert.UpdateAlertTriggerEntity) NewAlertTriggerEntity(io.gravitee.rest.api.model.alert.NewAlertTriggerEntity) AlertTriggerEntity(io.gravitee.rest.api.model.alert.AlertTriggerEntity) Notification(io.gravitee.notifier.api.Notification) Test(org.junit.Test)

Aggregations

Notification (io.gravitee.notifier.api.Notification)10 AlertTriggerEntity (io.gravitee.rest.api.model.alert.AlertTriggerEntity)9 NewAlertTriggerEntity (io.gravitee.rest.api.model.alert.NewAlertTriggerEntity)9 UpdateAlertTriggerEntity (io.gravitee.rest.api.model.alert.UpdateAlertTriggerEntity)9 ArrayList (java.util.ArrayList)7 Test (org.junit.Test)7 JsonNode (com.fasterxml.jackson.databind.JsonNode)6 ApplicationAlertEventType (io.gravitee.rest.api.model.alert.ApplicationAlertEventType)4 ApplicationListItem (io.gravitee.rest.api.model.application.ApplicationListItem)4 NotificationTemplateEntity (io.gravitee.rest.api.model.notification.NotificationTemplateEntity)4 NotificationTemplateEvent (io.gravitee.rest.api.model.notification.NotificationTemplateEvent)4 JsonProcessingException (com.fasterxml.jackson.core.JsonProcessingException)3 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)3 TechnicalManagementException (io.gravitee.rest.api.service.exceptions.TechnicalManagementException)3 List (java.util.List)3 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)2 Filter (io.gravitee.alert.api.condition.Filter)2 StringCondition (io.gravitee.alert.api.condition.StringCondition)2 Dampening (io.gravitee.alert.api.trigger.Dampening)2 Trigger (io.gravitee.alert.api.trigger.Trigger)2