use of com.redhat.cloud.notifications.templates.EmailTemplate in project notifications-backend by RedHatInsights.
the class EmailSubscriptionTypeProcessor method sendEmail.
private List<NotificationHistory> sendEmail(Event event, Set<Endpoint> endpoints, EmailTemplate emailTemplate) {
EmailSubscriptionType emailSubscriptionType = EmailSubscriptionType.INSTANT;
processedEmailCount.increment();
Action action = event.getAction();
TemplateInstance subject;
TemplateInstance body;
if (useTemplatesFromDb) {
Optional<InstantEmailTemplate> instantEmailTemplate = templateRepository.findInstantEmailTemplate(event.getEventType().getId());
if (instantEmailTemplate.isEmpty()) {
return Collections.emptyList();
} else {
String subjectData = instantEmailTemplate.get().getSubjectTemplate().getData();
subject = templateService.compileTemplate(subjectData, "subject");
String bodyData = instantEmailTemplate.get().getBodyTemplate().getData();
body = templateService.compileTemplate(bodyData, "body");
}
} else {
if (!emailTemplate.isSupported(action.getEventType(), emailSubscriptionType)) {
return Collections.emptyList();
}
subject = emailTemplate.getTitle(action.getEventType(), emailSubscriptionType);
body = emailTemplate.getBody(action.getEventType(), emailSubscriptionType);
}
if (subject == null || body == null) {
return Collections.emptyList();
}
Set<RecipientSettings> requests = Stream.concat(endpoints.stream().map(EndpointRecipientSettings::new), ActionRecipientSettings.fromAction(action).stream()).collect(Collectors.toSet());
Set<String> subscribers = Set.copyOf(emailSubscriptionRepository.getEmailSubscribersUserId(action.getAccountId(), action.getBundle(), action.getApplication(), emailSubscriptionType));
LOG.info("sending email for event: " + event);
return recipientResolver.recipientUsers(action.getAccountId(), action.getOrgId(), requests, subscribers).stream().map(user -> emailSender.sendEmail(user, event, subject, body)).filter(Optional::isPresent).map(Optional::get).collect(Collectors.toList());
}
use of com.redhat.cloud.notifications.templates.EmailTemplate in project notifications-backend by RedHatInsights.
the class EmailSubscriptionTypeProcessor method process.
@Override
public List<NotificationHistory> process(Event event, List<Endpoint> endpoints) {
if (endpoints == null || endpoints.isEmpty()) {
return Collections.emptyList();
} else {
Action action = event.getAction();
final EmailTemplate template = emailTemplateFactory.get(action.getBundle(), action.getApplication());
boolean shouldSaveAggregation;
if (useTemplatesFromDb) {
shouldSaveAggregation = templateRepository.isEmailAggregationSupported(action.getBundle(), action.getApplication(), NON_INSTANT_SUBSCRIPTION_TYPES);
} else {
shouldSaveAggregation = NON_INSTANT_SUBSCRIPTION_TYPES.stream().anyMatch(emailSubscriptionType -> template.isSupported(action.getEventType(), emailSubscriptionType));
}
if (shouldSaveAggregation) {
EmailAggregation aggregation = new EmailAggregation();
aggregation.setAccountId(action.getAccountId());
aggregation.setApplicationName(action.getApplication());
aggregation.setBundleName(action.getBundle());
JsonObject transformedAction = baseTransformer.transform(action);
aggregation.setPayload(transformedAction);
emailAggregationRepository.addEmailAggregation(aggregation);
}
return sendEmail(event, Set.copyOf(endpoints), template);
}
}
use of com.redhat.cloud.notifications.templates.EmailTemplate in project notifications-backend by RedHatInsights.
the class EmailSubscriptionTypeProcessor method processAggregateEmailsByAggregationKey.
private void processAggregateEmailsByAggregationKey(EmailAggregationKey aggregationKey, LocalDateTime startTime, LocalDateTime endTime, EmailSubscriptionType emailSubscriptionType, boolean delete) {
final EmailTemplate emailTemplate = emailTemplateFactory.get(aggregationKey.getBundle(), aggregationKey.getApplication());
TemplateInstance subject;
TemplateInstance body;
if (useTemplatesFromDb) {
Optional<AggregationEmailTemplate> aggregationEmailTemplate = templateRepository.findAggregationEmailTemplate(aggregationKey.getBundle(), aggregationKey.getApplication(), emailSubscriptionType);
if (aggregationEmailTemplate.isEmpty()) {
if (delete) {
emailAggregationRepository.purgeOldAggregation(aggregationKey, endTime);
}
return;
} else {
String subjectData = aggregationEmailTemplate.get().getSubjectTemplate().getData();
subject = templateService.compileTemplate(subjectData, "subject");
String bodyData = aggregationEmailTemplate.get().getBodyTemplate().getData();
body = templateService.compileTemplate(bodyData, "body");
}
} else {
if (!emailTemplate.isEmailSubscriptionSupported(emailSubscriptionType)) {
if (delete) {
emailAggregationRepository.purgeOldAggregation(aggregationKey, endTime);
}
return;
}
subject = emailTemplate.getTitle(null, emailSubscriptionType);
body = emailTemplate.getBody(null, emailSubscriptionType);
}
if (subject == null || body == null) {
if (delete) {
emailAggregationRepository.purgeOldAggregation(aggregationKey, endTime);
}
return;
}
try {
for (Map.Entry<User, Map<String, Object>> aggregation : emailAggregator.getAggregated(aggregationKey, emailSubscriptionType, startTime, endTime).entrySet()) {
Context.ContextBuilder contextBuilder = new Context.ContextBuilder();
aggregation.getValue().forEach(contextBuilder::withAdditionalProperty);
Action action = new Action();
action.setContext(contextBuilder.build());
action.setEvents(List.of());
action.setAccountId(aggregationKey.getAccountId());
action.setApplication(aggregationKey.getApplication());
action.setBundle(aggregationKey.getBundle());
// We don't have a eventtype as this aggregates over multiple event types
action.setEventType(null);
action.setTimestamp(LocalDateTime.now(ZoneOffset.UTC));
Event event = new Event();
event.setId(UUID.randomUUID());
event.setAction(action);
emailSender.sendEmail(aggregation.getKey(), event, subject, body);
}
} finally {
if (delete) {
emailAggregationRepository.purgeOldAggregation(aggregationKey, endTime);
}
}
}
Aggregations