Search in sources :

Example 6 with ApplicationGroup

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);
}
Also used : MimeBodyPart(javax.mail.internet.MimeBodyPart) BodyPart(javax.mail.BodyPart) ByteArrayOutputStream(java.io.ByteArrayOutputStream) MessagingException(javax.mail.MessagingException) IOException(java.io.IOException) DateTime(org.joda.time.DateTime) ApplicationGroup(com.netflix.ice.reader.ApplicationGroup) MimeMessage(javax.mail.internet.MimeMessage) MimeMultipart(javax.mail.internet.MimeMultipart) SendRawEmailRequest(com.amazonaws.services.simpleemail.model.SendRawEmailRequest) MimeBodyPart(javax.mail.internet.MimeBodyPart) RawMessage(com.amazonaws.services.simpleemail.model.RawMessage) Session(javax.mail.Session)

Example 7 with ApplicationGroup

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;
}
Also used : ApplicationGroup(com.netflix.ice.reader.ApplicationGroup)

Aggregations

ApplicationGroup (com.netflix.ice.reader.ApplicationGroup)7 JSONException (org.json.JSONException)3 ObjectMetadata (com.amazonaws.services.s3.model.ObjectMetadata)2 ByteArrayInputStream (java.io.ByteArrayInputStream)2 IOException (java.io.IOException)2 MessagingException (javax.mail.MessagingException)2 JSONObject (org.json.JSONObject)2 AmazonSimpleEmailServiceClient (com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient)1 RawMessage (com.amazonaws.services.simpleemail.model.RawMessage)1 SendRawEmailRequest (com.amazonaws.services.simpleemail.model.SendRawEmailRequest)1 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 InputStream (java.io.InputStream)1 BodyPart (javax.mail.BodyPart)1 Session (javax.mail.Session)1 MimeBodyPart (javax.mail.internet.MimeBodyPart)1 MimeMessage (javax.mail.internet.MimeMessage)1 MimeMultipart (javax.mail.internet.MimeMultipart)1 DateTime (org.joda.time.DateTime)1 JSONTokener (org.json.JSONTokener)1