use of com.netflix.ice.reader.ApplicationGroup in project ice by Netflix.
the class BasicWeeklyCostEmailService method sendEmail.
private void sendEmail(boolean test, AmazonSimpleEmailServiceClient emailService, String email, List<ApplicationGroup> appGroups) throws IOException, MessagingException {
StringBuilder body = new StringBuilder();
body.append("<html><head><style type=\"text/css\">a:link, a:visited{color:#006DBA;}a:link, a:visited, a:hover {\n" + "text-decoration: none;\n" + "}\n" + "body {\n" + "color: #333;\n" + "}" + "</style></head>");
List<MimeBodyPart> mimeBodyParts = Lists.newArrayList();
int index = 0;
String subject = "";
for (ApplicationGroup appGroup : appGroups) {
boolean hasData = false;
for (String prodName : appGroup.data.keySet()) {
if (config.productService.getProductByName(prodName) == null)
continue;
hasData = appGroup.data.get(prodName) != null && appGroup.data.get(prodName).size() > 0;
if (hasData)
break;
}
if (!hasData)
continue;
try {
MimeBodyPart mimeBodyPart = constructEmail(index, appGroup, body);
index++;
if (mimeBodyPart != null) {
mimeBodyParts.add(mimeBodyPart);
subject = subject + (subject.length() > 0 ? ", " : "") + appGroup.getDisplayName();
}
} catch (Exception e) {
logger.error("Error contructing email", e);
}
}
body.append("</html>");
if (mimeBodyParts.size() == 0)
return;
DateTime end = new DateTime(DateTimeZone.UTC).withDayOfWeek(1).withMillisOfDay(0);
subject = String.format("%s Weekly AWS Costs (%s - %s)", subject, formatter.print(end.minusWeeks(1)), formatter.print(end));
String toEmail = test ? testEmail : email;
Session session = Session.getInstance(new Properties());
MimeMessage mimeMessage = new MimeMessage(session);
mimeMessage.setSubject(subject);
mimeMessage.setRecipients(javax.mail.Message.RecipientType.TO, toEmail);
if (!test && !StringUtils.isEmpty(bccEmail)) {
mimeMessage.addRecipients(Message.RecipientType.BCC, bccEmail);
}
MimeMultipart mimeMultipart = new MimeMultipart();
BodyPart p = new MimeBodyPart();
p.setContent(body.toString(), "text/html");
mimeMultipart.addBodyPart(p);
for (MimeBodyPart mimeBodyPart : mimeBodyParts) mimeMultipart.addBodyPart(mimeBodyPart);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
mimeMessage.setContent(mimeMultipart);
mimeMessage.writeTo(outputStream);
RawMessage rawMessage = new RawMessage(ByteBuffer.wrap(outputStream.toByteArray()));
SendRawEmailRequest rawEmailRequest = new SendRawEmailRequest(rawMessage);
rawEmailRequest.setDestinations(Lists.<String>newArrayList(toEmail));
rawEmailRequest.setSource(fromEmail);
logger.info("sending email to " + toEmail + " " + body.toString());
emailService.sendRawEmail(rawEmailRequest);
}
use of com.netflix.ice.reader.ApplicationGroup in project ice by Netflix.
the class BasicWeeklyCostEmailService method collectEmails.
private static Map<String, List<ApplicationGroup>> collectEmails(Map<String, ApplicationGroup> appgroups) {
Map<String, List<ApplicationGroup>> result = Maps.newTreeMap();
for (ApplicationGroup appgroup : appgroups.values()) {
if (StringUtils.isEmpty(appgroup.owner))
continue;
String email = appgroup.owner.trim().toLowerCase();
List<ApplicationGroup> list = result.get(email);
if (list == null) {
list = Lists.newArrayList();
result.put(email, list);
}
list.add(appgroup);
}
return result;
}
Aggregations