You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by ak...@apache.org on 2019/03/27 15:15:41 UTC
[incubator-pinot] branch master updated: [TE] Clean up the email
template (#4019)
This is an automated email from the ASF dual-hosted git repository.
akshayrai09 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 5618e3f [TE] Clean up the email template (#4019)
5618e3f is described below
commit 5618e3f315bfac864e358702f2b5af1f76b58794
Author: Akshay Rai <ak...@gmail.com>
AuthorDate: Wed Mar 27 08:15:35 2019 -0700
[TE] Clean up the email template (#4019)
---
.../MultipleAnomaliesEmailContentFormatter.java | 4 +-
.../anomaly/alert/util/AnomalyReportGenerator.java | 4 +-
.../thirdeye/detector/holiday-anomaly-report.ftl | 239 ++++++++++-----------
.../detector/multiple-anomalies-email-template.ftl | 168 ---------------
.../onboard-notification-email-template.ftl | 5 +-
.../detector/single-anomaly-email-template.ftl | 90 --------
...multiple-anomalies-email-content-formatter.html | 25 ++-
...board-notification-email-content-formatter.html | 5 +-
8 files changed, 133 insertions(+), 407 deletions(-)
diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/alert/content/MultipleAnomaliesEmailContentFormatter.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/alert/content/MultipleAnomaliesEmailContentFormatter.java
index e0e6e43..80c8bc2 100644
--- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/alert/content/MultipleAnomaliesEmailContentFormatter.java
+++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/alert/content/MultipleAnomaliesEmailContentFormatter.java
@@ -190,8 +190,8 @@ public class MultipleAnomaliesEmailContentFormatter extends BaseEmailContentForm
templateData.put("anomalyDetails", anomalyDetails);
templateData.put("anomalyIds", Joiner.on(",").join(anomalyIds));
templateData.put("holidays", holidays);
- templateData.put("functionAnomalyDetails", functionAnomalyReports.asMap());
- templateData.put("metricAnomalyDetails", metricAnomalyReports.asMap());
+ templateData.put("detectionToAnomalyDetailsMap", functionAnomalyReports.asMap());
+ templateData.put("metricToAnomalyDetailsMap", metricAnomalyReports.asMap());
templateData.put("functionToId", functionToId);
}
}
diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/anomaly/alert/util/AnomalyReportGenerator.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/anomaly/alert/util/AnomalyReportGenerator.java
index 38c29b5..ac8eb01 100644
--- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/anomaly/alert/util/AnomalyReportGenerator.java
+++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/anomaly/alert/util/AnomalyReportGenerator.java
@@ -269,8 +269,8 @@ public class AnomalyReportGenerator {
templateData.put("falseAlertCount", precisionRecallEvaluator.getFalseAlarm());
templateData.put("newTrendCount", precisionRecallEvaluator.getTrueAnomalyNewTrend());
templateData.put("anomalyDetails", anomalyReports);
- templateData.put("functionAnomalyDetails", functionAnomalyReports.asMap());
- templateData.put("metricAnomalyDetails", metricAnomalyReports.asMap());
+ templateData.put("detectionToAnomalyDetailsMap", functionAnomalyReports.asMap());
+ templateData.put("metricToAnomalyDetailsMap", metricAnomalyReports.asMap());
templateData.put("emailSubjectName", emailSubjectName);
templateData.put("alertConfigName", alertConfig.getName()); // NOTE: breaks backwards compatibility
templateData.put("includeSummary", includeSummary);
diff --git a/thirdeye/thirdeye-pinot/src/main/resources/org/apache/pinot/thirdeye/detector/holiday-anomaly-report.ftl b/thirdeye/thirdeye-pinot/src/main/resources/org/apache/pinot/thirdeye/detector/holiday-anomaly-report.ftl
index 2028296..1db6510 100644
--- a/thirdeye/thirdeye-pinot/src/main/resources/org/apache/pinot/thirdeye/detector/holiday-anomaly-report.ftl
+++ b/thirdeye/thirdeye-pinot/src/main/resources/org/apache/pinot/thirdeye/detector/holiday-anomaly-report.ftl
@@ -5,12 +5,12 @@
</head>
<body style="background-color: #EDF0F3;">
-<table border="0" cellpadding="0" cellspacing="0" style="width:100%; font-family: 'Proxima Nova','Arial','Helvetica Neue',Helvetica,sans-serif; font-size:14px; margin:0 auto; max-width: 50%; background-color: #F3F6F8;">
+<table border="0" cellpadding="0" cellspacing="0" style="width:100%; font-family: 'Proxima Nova','Arial','Helvetica Neue',Helvetica,sans-serif; font-size:14px; margin:0 auto; max-width: 50%; min-width: 700px; background-color: #F3F6F8;">
<tr>
<td align="left" style="padding: 12px 24px;">
<img width="35" height="35" alt="logo" src="https://static.licdn-ei.com/scds/common/u/images/email/logos/logo_shift_inbug_82x82_v1.png"
style="vertical-align: middle; display: inline-block; background: white;">
- <span style="color: rgba(0,0,0,0.75);font-size: 18px; font-weight: bold; letter-spacing: 2px; display: inline-block;vertical-align: middle;">THIRDEYE</span>
+ <span style="color: rgba(0,0,0,0.75);font-size: 18px; font-weight: bold; letter-spacing: 2px; display: inline-block;vertical-align: middle;">THIRDEYE ALERT</span>
</td>
</tr>
@@ -18,144 +18,138 @@
<td>
<table border="0" cellpadding="0" cellspacing="0" style="border:1px solid #E9E9E9; border-radius: 2px; width: 100%;">
<tr>
- <td style="padding: 12px; background-color: #0073B1; color: #FFF; text-align: center;">
- <h2>ACTION REQUIRED</h2>
+ <td style="font-size: 16px; padding: 12px; background-color: #0073B1; color: #FFF; text-align: center;">
+ <#if anomalyCount == 1>
+ <p>
+ <strong>An anomaly</strong> was detected between <strong>${startTime}</strong> and <strong>${endTime}</strong> (${timeZone}) on the metric listed below
+ </p>
+ <#else>
+ <p>
+ <strong>${anomalyCount} anomalies</strong> were detected between <strong>${startTime}</strong> and <strong>${endTime}</strong> (${timeZone}) on the metrics listed below
+ </p>
+ </#if>
<p>
- <#if anomalyCount == 1>
- <strong>An anomaly</strong> was detected between <strong>${startTime} and ${endTime} (${timeZone})</strong>
- <#else>
- <strong>${anomalyCount} anomalies</strong> were detected between <strong>${startTime} and ${endTime} (${timeZone})</strong>
- </#if>
- <#if metricsMap?size == 1>
- <#list metricsMap?keys as id>
- on metric <div style="padding: 10px;"><strong><a style="color: white;" href="${dashboardHost}/app/#/rootcause?metricId=${id}">${metricsMap[id].name}</a></strong></div>
- </#list>
- <#else>
- on metrics
- <#list metricsMap?keys as id>
- <div style="padding: 10px;">
- <strong><a style="padding: 10px; color: white;" href="${dashboardHost}/app/#/rootcause?metricId=${id}">${metricsMap[id].name}</a></strong>
- </div>
- </#list>
- </#if>
- </p>
- <p>
- <#if isGroupedAnomaly>
- <a style="padding: 6px 12px; border-radius: 2px; border: 1px solid #FFF; font-size: 16px; font-weight: bold; color: white; text-decoration: none; line-height: 32px;" href="${dashboardHost}/thirdeye#anomalies?anomaliesSearchMode=groupId&anomalyGroupIds=${groupId}">Investigate all in ThirdEye</a>
- <#else>
- <a style="padding: 6px 12px; border-radius: 2px; border: 1px solid #FFF; font-size: 16px; font-weight: bold; color: white; text-decoration: none; line-height: 32px;" href="${dashboardHost}/thirdeye#anomalies?anomaliesSearchMode=id&anomalyIds=${anomalyIds}">Investigate all in ThirdEye</a>
- </#if>
+ <a style="padding: 6px 12px; border-radius: 2px; border: 1px solid #FFF; font-size: 16px; font-weight: bold; color: white; text-decoration: none; line-height: 32px;" href="${dashboardHost}/thirdeye#anomalies?anomaliesSearchMode=id&anomalyIds=${anomalyIds}">View on ThirdEye</a>
</p>
</td>
</tr>
- <#if cid?has_content>
- <tr>
- <td style="padding: 12px;" align="center">
- <a href="${anomalyDetails[0].anomalyURL}${anomalyDetails[0].anomalyId}" target="_blank">
- <img style="width: 70%;" src="cid:${cid}" \>
- </a>
- </td>
- </tr>
- </#if>
-
- <#list metricAnomalyDetails?keys as metric>
- <@utils.addBlock title="" align="left">
+ <#if cid?has_content>
+ <tr>
+ <td style="padding: 12px;" align="center">
+ <a href="${anomalyDetails[0].anomalyURL}${anomalyDetails[0].anomalyId}" target="_blank">
+ <img style="width: 70%;" src="cid:${cid}" \>
+ </a>
+ </td>
+ </tr>
+ </#if>
+
+ <!-- List all the alerts -->
+ <#list metricToAnomalyDetailsMap?keys as metric>
+ <@utils.addBlock title="" align="left">
+ <p>
+ <span style="color: #606060; font-size: 20px;">Metric</span>
+ <span style="color: #1D1D1D; font-size: 20px; font-weight: bold;">${metric}</span>
+ </p>
+
+ <!-- List down all the alerts for the given metric -->
+ <#list detectionToAnomalyDetailsMap?keys as detectionName>
+ <#assign newTable = false>
+ <#list detectionToAnomalyDetailsMap[detectionName] as anomaly>
+ <#if anomaly.metric==metric>
+ <#assign newTable=true>
+ <#assign description=anomaly.funcDescription>
+ </#if>
+ </#list>
+
+ <#if newTable>
<p>
- <span style="color: #606060; font-size: 20px;">Metric</span>
- <span style="color: #1D1D1D; font-size: 20px; font-weight: bold;">${metric}</span>
+ <span style="color: #606060;">Alert</span>
+ <span style="color: #1D1D1D; text-decoration: none; font-weight: bold;">${detectionName}</span>
+ <a href="${dashboardHost}/app/#/manage/explore/${functionToId[detectionName]?string.computer}" target="blank" style="text-decoration: none; color: #0B5EA1; font-weight: bold;">(Edit Settings)</a>
</p>
- <#list functionAnomalyDetails?keys as function>
- <#assign newTable = false>
- <#list functionAnomalyDetails[function] as anomaly>
- <#if anomaly.metric==metric>
- <#assign newTable=true>
- <#assign description=anomaly.funcDescription>
+ </#if>
+
+ <!-- List all the anomalies under this detection -->
+ <table border="0" width="100%" align="center" style="width:100%; padding:0; margin:0; border-collapse: collapse;text-align:left;">
+ <#list detectionToAnomalyDetailsMap[detectionName] as anomaly>
+ <#if anomaly.metric==metric>
+ <#if newTable>
+ <tr style="text-align:center; background-color: #F6F8FA; border-top: 2px solid #C7D1D8; border-bottom: 2px solid #C7D1D8;">
+ <th style="text-align:left; padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">Start / Duration</th>
+ <th style="padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">Dimensions</th>
+ <th style="padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">Current</th>
+ <th style="padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">Predicted</th>
+ </tr>
</#if>
- </#list>
- <#if newTable>
- <p>
- <span style="color: #606060;">Alert</span>
- <span style="color: #1D1D1D; text-decoration: none; font-weight: bold;">${function}</span>
- <a href="${dashboardHost}/app/#/manage/explore/${functionToId[function]?string.computer}" target="blank" style="text-decoration: none; color: #0B5EA1; font-weight: bold;">(View/Edit Alert)</a>
- <#-- TODO: Enable after migration -->
- <#--<span style="color: #1D1D1D; text-decoration: none;">${description}</span>-->
- </p>
+ <#assign newTable = false>
+ <tr style="border-bottom: 1px solid #C7D1D8;">
+ <td style="padding: 6px 12px;white-space: nowrap;">
+ <a style="font-weight: bold; text-decoration: none; font-size:14px; line-height:20px; color: #0073B1;" href="${anomaly.anomalyURL}${anomaly.anomalyId}"
+ target="_blank">${anomaly.startDateTime} ${anomaly.timezone}</a>
+ <div style="color: rgba(0,0,0,0.6); font-size:12px; line-height:16px;">${anomaly.duration}</div>
+ </td>
+ <td style="word-break: break-all; width: 200px; padding-right:4px 20px 4px 0">
+ <#list anomaly.dimensions as dimension>
+ <span style="color: rgba(0,0,0,0.6); font-size: 12px; line-height: 16px;">${dimension}</span>
+ </br>
+ </#list>
+ </td>
+ <td style="color: rgba(0,0,0,0.9); font-size:14px; line-height:20px; text-align:center;">${anomaly.currentVal}</td>
+ <td style="color: rgba(0,0,0,0.9); font-size:14px; line-height:20px; text-align:center;">
+ ${anomaly.baselineVal}
+ <div style="font-size: 12px; color:${anomaly.positiveLift?string('#3A8C18','#ee1620')};">(${anomaly.positiveLift?string('+','')}${anomaly.lift})</div>
+ </td>
+ </tr>
</#if>
- <table border="0" width="100%" align="center" style="width:100%; padding:0; margin:0; border-collapse: collapse;text-align:left;">
- <#list functionAnomalyDetails[function] as anomaly>
- <#if anomaly.metric==metric>
- <#if newTable>
- <tr style="text-align:center; background-color: #F6F8FA; border-top: 2px solid #C7D1D8; border-bottom: 2px solid #C7D1D8;">
- <th style="text-align:left; padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">Start / Duration</th>
- <th style="padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">Dimensions</th>
- <th style="padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">Current</th>
- <th style="padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">Predicted</th>
- <th style="padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px; display: none;">Wow</th>
- <th style="padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px; display: none;">Wo2W</th>
- </tr>
- </#if>
- <#assign newTable = false>
- <tr style="border-bottom: 1px solid #C7D1D8;">
- <td style="padding: 6px 12px;white-space: nowrap;">
- <a style="font-weight: bold; text-decoration: none; font-size:14px; line-height:20px; color: #0073B1;" href="${anomaly.anomalyURL}${anomaly.anomalyId}"
- target="_blank">${anomaly.startDateTime} ${anomaly.timezone}</a>
- <div style="color: rgba(0,0,0,0.6); font-size:12px; line-height:16px;">${anomaly.duration}</div>
- </td>
- <td style="word-break: break-all; width: 200px; padding-right:4px 20px 4px 0">
- <#list anomaly.dimensions as dimension>
- <span style="color: rgba(0,0,0,0.6); font-size: 12px; line-height: 16px;">${dimension}</span>
- </br>
- </#list>
- </td>
- <td style="color: rgba(0,0,0,0.9); font-size:14px; line-height:20px; text-align:center;">${anomaly.currentVal}</td>
- <td style="color: rgba(0,0,0,0.9); font-size:14px; line-height:20px; text-align:center;">
- ${anomaly.baselineVal}
- <div style="font-size: 12px; color:${anomaly.positiveLift?string('#3A8C18','#ee1620')};">(${anomaly.positiveLift?string('+','')}${anomaly.lift})</div>
- </td>
- </tr>
- </#if>
- </#list>
- </table>
</#list>
- </...@utils.addBlock>
- </#list>
+ </table>
+ </#list>
+
+ </...@utils.addBlock>
+ </#list>
- <#if referenceLinks?has_content>
- <@utils.addBlock title="Useful Links" align="left">
+ <!-- Reference Links -->
+ <#if referenceLinks?has_content>
+ <@utils.addBlock title="Useful Links" align="left">
+ <table border="0" align="center" style="table-layout: fixed; width:100%; padding:0; margin:0; border-collapse: collapse; text-align:left;">
<#list referenceLinks?keys as referenceLinkKey>
- <div style="padding: 10px;">
- <a href="${referenceLinks[referenceLinkKey]}" style="font-weight: bold; text-decoration: none; color:#0073B1;">${referenceLinkKey}</a>
- </div>
+ <tr style="border-bottom: 1px solid #C7D1D8; padding: 16px;">
+ <td style="padding: 6px 12px;">
+ <a href="${referenceLinks[referenceLinkKey]}" style="text-decoration: none; color:#0073B1; font-size:12px; font-weight:bold;">${referenceLinkKey}</a>
+ </td>
+ </tr>
</#list>
- </...@utils.addBlock>
- </#if>
+ </table>
+ </...@utils.addBlock>
+ </#if>
- <#if holidays?has_content>
- <@utils.addBlock title="Holidays" align="left">
- <table border="0" align="center" style="table-layout: fixed; width:100%; padding:0; margin:0; border-collapse: collapse; text-align:left;">
- <#list holidays as holiday>
- <tr style="border-bottom: 1px solid #C7D1D8; padding: 16px;">
+ <!-- Holidays -->
+ <#if holidays?has_content>
+ <@utils.addBlock title="Holidays" align="left">
+ <table border="0" align="center" style="table-layout: fixed; width:100%; padding:0; margin:0; border-collapse: collapse; text-align:left;">
+ <#list holidays as holiday>
+ <tr style="border-bottom: 1px solid #C7D1D8; padding: 16px;">
- <td style="padding: 6px 12px;">
- <a href="https://www.google.com/search?q=${holiday.name}" style="text-decoration: none; color:#0073B1; font-size:12px; font-weight:bold;">${holiday.name}</a>
- </td>
+ <td style="padding: 6px 12px;">
+ <a href="https://www.google.com/search?q=${holiday.name}" style="text-decoration: none; color:#0073B1; font-size:12px; font-weight:bold;">${holiday.name}</a>
+ </td>
+ <td style="padding: 6px 12px;">
+ <span style="font-size: 12px; color:#606060;">(${holiday.startTime?number_to_date})</span>
+ </td>
+
+ <#if holiday.targetDimensionMap["countryCode"]??>
<td style="padding: 6px 12px;">
- <span style="font-size: 12px; color:#606060;">(${holiday.startTime?number_to_date})</span>
+ <span style="color: rgba(0,0,0,0.6); font-size: 12px;">${holiday.targetDimensionMap["countryCode"]?join(", ")}</span>
</td>
+ </#if>
- <#if holiday.targetDimensionMap["countryCode"]??>
- <td style="padding: 6px 12px;">
- <span style="color: rgba(0,0,0,0.6); font-size: 12px;">${holiday.targetDimensionMap["countryCode"]?join(", ")}</span>
- </td>
- </#if>
-
- </tr>
- </#list>
- </table>
- </...@utils.addBlock>
- </#if>
+ </tr>
+ </#list>
+ </table>
+ </...@utils.addBlock>
+ </#if>
<tr>
<td style="text-align: center; background-color: #EDF0F3; font-size: 12px; font-family:'Proxima Nova','Arial', 'Helvetica Neue',Helvetica, sans-serif; color: #737373; padding: 12px;">
@@ -165,9 +159,6 @@
If you have any questions regarding this report, please email
<a style="color: #33aada;" href="mailto:ask_thirdeye@linkedin.com" target="_top">ask_thirdeye@linkedin.com</a>
</p>
- <p style="margin-bottom:0; margin-top: 24px;">
- © 2017, LinkedIn Corporation, 1000 W Maude Ave, CA 94085, USA
- </p>
</td>
</tr>
</table>
diff --git a/thirdeye/thirdeye-pinot/src/main/resources/org/apache/pinot/thirdeye/detector/multiple-anomalies-email-template.ftl b/thirdeye/thirdeye-pinot/src/main/resources/org/apache/pinot/thirdeye/detector/multiple-anomalies-email-template.ftl
deleted file mode 100644
index 962f4a4..0000000
--- a/thirdeye/thirdeye-pinot/src/main/resources/org/apache/pinot/thirdeye/detector/multiple-anomalies-email-template.ftl
+++ /dev/null
@@ -1,168 +0,0 @@
-<head>
- <link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet">
-</head>
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%"
- style="width:100%; font-family: 'Proxima Nova','Arial', 'Helvetica Neue',Helvetica, sans-serif;font-size:16px;line-height:normal;margin:0 auto; padding: 24px; background-color: #F3F6F8; margin: 0 auto;">
- <tr style="background-color: #F3F6F8;">
- <td align="left" style="padding: 12px; padding-top:0; height:50px;" colspan="2">
- <img width="35" height="35" alt="logo" src="https://static.licdn-ei.com/scds/common/u/images/email/logos/logo_shift_inbug_82x82_v1.png" style="vertical-align: middle; display: inline-block; padding-right: 8px">
- <span style="color: rgba(0,0,0,0.55);font-size: 16px;display: inline-block;vertical-align: middle;">THIRDEYE - Anomaly Detection</span>
- </td>
- </tr>
-
- <tr>
- <td>
- <table border="0" cellpadding="0" cellspacing="0" width="100%"
- style="background-color:white; border:1px solid #E9E9E9; border-radius: 2px; width: 100%;">
- <tr>
- <td style="padding: 0 24px;" colspan="2">
- <p style="font-size: 20px; margin-bottom: 8px;">Hi,</p> <br>
- <p style="color: rgba(0,0,0,0.55); margin-top: 0px;"> ThirdEye has detected <strong style="color: black;">${anomalyCount} ${(anomalyCount == 1)?string("anomaly", "anomalies")}</strong>. Below is a summary, please go <strong>
- <#if isGroupedAnomaly>
- <a style="color:#33aada;" href="${dashboardHost}/thirdeye#anomalies?anomaliesSearchMode=groupId&anomalyGroupIds=${groupId}">here</a>
- <#else>
- <a style="color:#33aada;" href="${dashboardHost}/thirdeye#anomalies?anomaliesSearchMode=id&anomalyIds=${anomalyIds}">here</a>
- </#if>
- </strong> for a detailed view.
- </p>
- </p>
- </td>
- </tr>
- <tr>
- <td colspan="2" style="border-bottom: 1px solid #E9E9E9;">
- </td>
- </tr>
-
- <tr>
- <td style="padding: 0 24px;" colspan="2">
- <p style="color: rgba(0,0,0,0.55); font-size:16px; margin-bottom:0;">DATASET</p>
- <p style="margin-top:8px; margin-bottom:24px; font-size:20px">${datasets}</p>
- </td>
- </tr>
-
- <#if groupName?has_content>
- <tr>
- <td style="padding: 0 24px;" colspan="2">
- <p style="color: rgba(0,0,0,0.55); font-size:16px; margin-bottom:0;">GROUP</p>
- <p style="margin-top:8px; margin-bottom:24px; font-size:20px">${groupName}</p>
- </td>
- </tr>
- </#if>
-
- <tr>
- <td style="padding: 0 24px;" colspan="2">
- <table align="left" border="0" width="100%" style="width:100%; border-collapse:collapse; border-spacing:0;">
- <tr>
- <th align="left">
- <span style="text-transform: uppercase; color:#B6B6B6; font-weight:normal; font-size:14px;">Analysis Start</span>
- </th>
- <th align="left">
- <span style="text-transform: uppercase; color:#B6B6B6;font-weight:normal; font-size:14px;">Analysis End</span>
- </th>
- </tr>
- <tr>
- <td style="font-size: 20px;">${startTime} ${timeZone}</td>
- <td style="font-size: 20px;">${endTime} ${timeZone}</td>
- </tr>
- </table>
- </td>
- </tr>
-
- <#if precision?has_content>
- <tr>
- <td style="padding: 0 24px;" colspan="2">
- <table align="left" border="0" width="100%" style="width:100%; border-collapse:collapse; border-spacing:0;">
- <tr>
- <th align="left">
- <span style="text-transform: uppercase; color:#B6B6B6; font-weight:normal; font-size:14px;">Precision</span>
- </th>
- <th align="left">
- <span style="text-transform: uppercase; color:#B6B6B6;font-weight:normal; font-size:14px;">Recall</span>
- </th>
- </tr>
- <tr>
- <td style="font-size: 20px;">${precision}</td>
- <td style="font-size: 20px;">${recall}</td>
- </tr>
- </table>
- </td>
- </tr>
- </#if>
-
- <#if cid?has_content>
- <tr>
- <td style="padding: 24px;" colspan="2" align="center">
- <a href="${anomalyDetails[0].anomalyURL}${anomalyDetails[0].anomalyId}" target="_blank"><img style="width: 70%;" src="cid:${cid}"\></a>
- </td>
- </tr>
- </#if>
-
- <#if anomalyDetails?has_content>
- <tr>
- <td style="padding: 24px;" colspan="2">
- <table align="left" border="0" width="100%" style="width:100%; border-collapse:collapse; border-spacing:0; font-size: 14px;">
- <tr>
- <th align="left" style="padding:12px; color:white; background-color: #0091CA; font-weight:600;">Metric / Dimensions</th>
- <th align="left" style="padding:12px; color:white; background-color: #0091CA; font-weight:600;">Delta</th>
- <th align="left" style="padding:12px; color:white; background-color: #0091CA; font-weight:600;">Start / End</th>
- <#if includeSummary>
- <th align="left" style="padding:12px; color:white; background-color: #0091CA; font-weight:600;">Status</th>
- </#if>
- </tr>
- <#list anomalyDetails as r>
- <tr style="border-top:1px solid #CFCFCF; border-bottom:1px solid #CFCFCF; background-color:#F5F5F5;">
- <td style="padding:12px;"><a href="${r.anomalyURL}${r.anomalyId}" target="_blank" style="font-size: 16px; color: #33aada; font-weight: 600;">${r.metric}</a><br>
-
- <#list r.dimensions as dimension>
- ${dimension} <br>
- </#list>
- <#if r.issueType??>
- issue type : ${r.issueType} <br>
- </#if>
-
-
- </td>
- <td style="padding:12px;">
- <span style="font-size: 16px; color:
- ${r.positiveLift?string('#398b18','#ee1620')};">${r.positiveLift?string('▲','▼')} ${r.lift}</span><br>
- <span style="font-size:10px; text-transform:uppercase; color:#B6B6B6; white-space: nowrap;">Current / Baseline:</span> <br>
- <span style="white-space: nowrap;">${r.currentVal} / ${r.baselineVal}</span>
- </td>
- <td style="padding:12px;">
- <span style="white-space: nowrap;">${r.duration}</span><br>
- <span style="white-space: nowrap;">${r.startDateTime} ${r.timezone}</span><br>
- <span style="white-space: nowrap;">${r.endTime} ${r.timezone}</span>
- </td>
- <#if includeSummary>
- <td style="padding:12px;">${r.feedback}</td>
- </#if>
- </tr>
- </#list>
-
- </table>
- </td>
- </tr>
- </#if>
-
- <tr>
- <td colspan="2" style="border-bottom: 1px solid #E9E9E9;">
- </td>
- </tr>
-
- <tr>
- <td style="font-family:'Proxima Nova','Arial', 'Helvetica Neue',Helvetica, sans-serif; color: rgba(0,0,0,0.55); padding: 24px; font-size:14px;" colspan="2">
- <p style="margin-top:0;"> You are receiving this email because you have subscribed to ThirdEye Alert Service for <strong>'${alertConfigName}'</strong>. If you have any questions regarding this report, please email
- <a style="color: #33aada;" href="mailto:ask_thirdeye@linkedin.com" target="_top">ask_thirdeye@linkedin.com</a>
- </p>
- <p style="margin-bottom:0; margin-top: 24px;">
- Thanks,<br>
- ThirdEye Team
- </p>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-</body>
diff --git a/thirdeye/thirdeye-pinot/src/main/resources/org/apache/pinot/thirdeye/detector/onboard-notification-email-template.ftl b/thirdeye/thirdeye-pinot/src/main/resources/org/apache/pinot/thirdeye/detector/onboard-notification-email-template.ftl
index b5a9fbc..e324af6 100644
--- a/thirdeye/thirdeye-pinot/src/main/resources/org/apache/pinot/thirdeye/detector/onboard-notification-email-template.ftl
+++ b/thirdeye/thirdeye-pinot/src/main/resources/org/apache/pinot/thirdeye/detector/onboard-notification-email-template.ftl
@@ -8,7 +8,7 @@
<td align="left" style="padding: 12px 24px; height: 60px; background-color: #F6F8FA;" colspan="2">
<img width="35" height="35" alt="logo" src="https://static.licdn-ei.com/scds/common/u/images/email/logos/logo_shift_inbug_82x82_v1.png"
style="vertical-align: middle; display: inline-block; margin-right: 8px; background: white;">
- <span style="color: rgba(0,0,0,0.75);font-size: 18px; font-weight: bold; letter-spacing: 2px; display: inline-block;vertical-align: middle;">THIRDEYE</span>
+ <span style="color: rgba(0,0,0,0.75);font-size: 18px; font-weight: bold; letter-spacing: 2px; display: inline-block;vertical-align: middle;">THIRDEYE ALERT</span>
</td>
</tr>
@@ -100,9 +100,6 @@
If you have any questions regarding this report, please email
<a style="color: #33aada;" href="mailto:ask_thirdeye@linkedin.com" target="_top">ask_thirdeye@linkedin.com</a>
</p>
- <p style="margin-bottom:0; margin-top: 24px;">
- © 2017, LinkedIn Corporation, 1000 W Maude Ave, CA 94085, USA
- </p>
</td>
</tr>
</table>
diff --git a/thirdeye/thirdeye-pinot/src/main/resources/org/apache/pinot/thirdeye/detector/single-anomaly-email-template.ftl b/thirdeye/thirdeye-pinot/src/main/resources/org/apache/pinot/thirdeye/detector/single-anomaly-email-template.ftl
deleted file mode 100644
index 5ee4d69..0000000
--- a/thirdeye/thirdeye-pinot/src/main/resources/org/apache/pinot/thirdeye/detector/single-anomaly-email-template.ftl
+++ /dev/null
@@ -1,90 +0,0 @@
-<html>
- <head>
- </head>
- <body>
- <table align="center" border="0" cellspacing ="0" width="100%" bgcolor="#edf0f3" style="background-color: #edf0f3; table-layout:fixed">
- <tbody>
- <tr>
- <td align="center">
- <center style="width:100%">
-
- <table border="0" cellpadding="0" cellspacing="0"
- style="padding:0px; width:100%; font-family: 'Proxima Nova','Arial', 'Helvetica Neue',Helvetica, sans-serif;font-size:15px;line-height:normal;margin:0 auto; padding:0px 0px 10px 0px; background-color: #fff; margin: 0 auto; max-width: 512px;">
- <tr style="height:50px; background-color: #F3F6F8;">
- <td align="left" style="padding: 10px 24px;height:50px;" colspan="2">
- <img width="35" height="35" alt="logo" src="https://static.licdn-ei.com/scds/common/u/images/email/logos/logo_shift_inbug_82x82_v1.png" style="vertical-align: middle; display: inline-block; padding-right: 8px">
- <span style="color: #737373;font-size: 15px;display: inline-block;vertical-align: middle;">THIRDEYE</span>
- </td>
- </tr>
-
- <tr>
- <td style="padding: 0 24px;" colspan="2">
- <p style="font-size: 20px; font-weight: 600;">Hi,</p>
- <p style="color: #737373; font-size: 14px;">You are receiving this email because you have subscribed to ThirdEye Alert Service for <strong>'${alertConfigName}'</strong>.</p>
- <p style="color: #737373; font-size: 14px;"> ThirdEye has analyzed your dataset and has detected the anomaly below.</p>
- </td>
- </tr>
-
- <tr>
- <td colspan="2" style="border-bottom: 1px solid #CCC"></td>
- </tr>
- <#if anomalyDetails?has_content>
- <#list anomalyDetails as r>
- <tr>
- <td style="font-size: 19px; font-weight:600; padding: 24px;">${r.metric} (#${r.anomalyId})</td>
- <td style="text-align: right; padding: 24px"><a href="${r.anomalyURL}${r.anomalyId}" target="_blank" style="color: white;font-weight: 600;background-color: #0084bf;font-size: 17px;padding: 0 16px;line-height: 32px;border-radius: 2px;cursor: pointer;display: inline-block;border: 1px solid transparent;text-decoration: none;">Investigate</a></td>
- </tr>
-
- <tr>
- <td style="padding: 24px;" colspan="2">
- <img style="width: 100%;" src="cid:${cid}"\>
- </td>
- </tr>
- <tr>
- <td style="padding: 24px;" colspan="2">
- <table border="0" width="100%" align="center" style="width:100%; text-align: center; padding:0; margin:0; border-collapse: collapse; border: 1px solid #CCC">
- <tr>
- <td colspan="33%" style="border: 1px solid #CCC; padding: 14px;font-family: 'Proxima Nova','Arial', 'Helvetica Neue',Helvetica, sans-serif;"><div style="color: #737373;"><span style="color:
- ${r.positiveLift?string('#398b18','#ee1620')};">${r.lift}</span></div><div style="font-weight:600;">Change</div></td>
- <td colspan="33%" style="border: 1px solid #CCC; width:33%; padding: 14px;"><div style="color: #737373;">${r.currentVal}</div><div style="font-weight:600;">Current Avg</div></td>
- <td colspan="33%" style="border: 1px solid #CCC; width:33%; padding: 14px;"><div style="color: #737373;">${r.baselineVal}</div><div style="font-weight:600;">Baseline Avg</div></td>
- </tr>
- <tr>
- <td colspan="50%" style="border: 1px solid #CCC; width:50%; padding: 14px;"><div style="color: #737373;">${r.dimensions}</div><div style="font-weight:600;">Dimension</div></td>
- <td colspan="50%" style="border: 1px solid #CCC; width:50%; padding: 14px;"><div style="color: #737373;">${r.function}</div><div style="font-weight:600;">Function</div></td>
- </tr>
- <tr>
- <td colspan="50%" style="border: 1px solid #CCC; width:50%; padding: 14px;"><div style="color: #737373;">${r.duration}</div><div style="font-weight:600;">Duration</div></td>
- <td colspan="50%" style="border: 1px solid #CCC; width:50%; padding: 14px;"><div style="color: #737373;">${r.feedback}</div><div style="font-weight:600;">Status</div></td>
- </tr>
- </table>
- </td>
- </tr>
-
- <tr>
- <td colspan="2" style="border-bottom: 1px solid #CCC"></td>
- </tr>
- </#list>
- </#if>
- <tr>
- <td style="font-family:'Proxima Nova','Arial', 'Helvetica Neue',Helvetica, sans-serif;font-size:14px; color: #737373;font-weight:300; text-align: center;" colspan="2">
- <p>If you have any questions regarding this report, please email <br/>
- <a href="mailto:ask_thirdeye@linkedin.com" target="_top">ask_thirdeye@linkedin.com</a>
- </p>
- <p>
- Thanks,<br>
- ThirdEye Team
- </p>
- </td>
- </tr>
- </table>
-</center>
-</td>
-</tr>
-</tbody>
-</table>
- </body>
-</html>
-
-
-
diff --git a/thirdeye/thirdeye-pinot/src/test/resources/test-multiple-anomalies-email-content-formatter.html b/thirdeye/thirdeye-pinot/src/test/resources/test-multiple-anomalies-email-content-formatter.html
index 8c20183..dccc120 100644
--- a/thirdeye/thirdeye-pinot/src/test/resources/test-multiple-anomalies-email-content-formatter.html
+++ b/thirdeye/thirdeye-pinot/src/test/resources/test-multiple-anomalies-email-content-formatter.html
@@ -3,12 +3,12 @@
</head>
<body style="background-color: #EDF0F3;">
-<table border="0" cellpadding="0" cellspacing="0" style="width:100%; font-family: 'Proxima Nova','Arial','Helvetica Neue',Helvetica,sans-serif; font-size:14px; margin:0 auto; max-width: 50%; background-color: #F3F6F8;">
+<table border="0" cellpadding="0" cellspacing="0" style="width:100%; font-family: 'Proxima Nova','Arial','Helvetica Neue',Helvetica,sans-serif; font-size:14px; margin:0 auto; max-width: 50%; min-width:700px; background-color: #F3F6F8;">
<tr>
<td align="left" style="padding: 12px 24px;">
<img width="35" height="35" alt="logo" src="https://static.licdn-ei.com/scds/common/u/images/email/logos/logo_shift_inbug_82x82_v1.png"
style="vertical-align: middle; display: inline-block; background: white;">
- <span style="color: rgba(0,0,0,0.75);font-size: 18px; font-weight: bold; letter-spacing: 2px; display: inline-block;vertical-align: middle;">THIRDEYE</span>
+ <span style="color: rgba(0,0,0,0.75);font-size: 18px; font-weight: bold; letter-spacing: 2px; display: inline-block;vertical-align: middle;">THIRDEYE ALERT</span>
</td>
</tr>
@@ -16,37 +16,36 @@
<td>
<table border="0" cellpadding="0" cellspacing="0" style="border:1px solid #E9E9E9; border-radius: 2px; width: 100%;">
<tr>
- <td style="padding: 12px; background-color: #0073B1; color: #FFF; text-align: center;">
- <h2>ACTION REQUIRED</h2>
+ <td style="font-size: 16px; padding: 12px; background-color: #0073B1; color: #FFF; text-align: center;">
<p>
- <strong>2 anomalies</strong> were detected between <strong>Nov 06, 10:00 and Nov 07, 17:00 (PDT)</strong> on metric
- <div style="padding: 10px;"><strong><a style="color: white;" href="http://localhost:8080/dashboard/app/#/rootcause?metricId=4">test</a></strong></div>
+ <strong>2 anomalies</strong> were detected between <strong>Nov 06, 10:00</strong> and <strong>Nov 07, 17:00</strong> (PDT) on the metrics listed below
</p>
<p>
- <a style="padding: 6px 12px; border-radius: 2px; border: 1px solid #FFF; font-size: 16px; font-weight: bold; color: white; text-decoration: none; line-height: 32px;" href="http://localhost:8080/dashboard/thirdeye#anomalies?anomaliesSearchMode=id&anomalyIds=2,3">Investigate all in ThirdEye</a>
+ <a style="padding: 6px 12px; border-radius: 2px; border: 1px solid #FFF; font-size: 16px; font-weight: bold; color: white; text-decoration: none; line-height: 32px;" href="http://localhost:8080/dashboard/thirdeye#anomalies?anomaliesSearchMode=id&anomalyIds=2,3">View on ThirdEye</a>
</p>
</td>
</tr>
+ <!-- List all the alerts -->
<tr>
<td style="border-bottom: 1px solid rgba(0,0,0,0.15); padding: 12px 24px; align: left">
<p>
<span style="color: #606060; font-size: 20px; ">Metric</span>
<span style="color: #1D1D1D; font-size: 20px; font-weight: bold;">test</span>
</p>
+ <!-- List down all the alerts for the given metric -->
<p>
<span style="color: #606060;">Alert</span>
<span style="color: #1D1D1D; text-decoration: none; font-weight: bold;">integration test function 1</span>
- <a href="http://localhost:8080/dashboard/app/#/manage/explore/1" target="blank" style="text-decoration: none; color: #0B5EA1; font-weight: bold;">(View/Edit Alert)</a>
+ <a href="http://localhost:8080/dashboard/app/#/manage/explore/1" target="blank" style="text-decoration: none; color: #0B5EA1; font-weight: bold;">(Edit Settings)</a>
</p>
+ <!-- List all the anomalies under this detection -->
<table border="0" width="100%" align="center" style="width:100%; padding:0; margin:0; border-collapse: collapse;text-align:left;">
<tr style="text-align:center; background-color: #F6F8FA; border-top: 2px solid #C7D1D8; border-bottom: 2px solid #C7D1D8;">
<th style="text-align:left; padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">Start / Duration</th>
<th style="padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">Dimensions</th>
<th style="padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">Current</th>
<th style="padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">Predicted</th>
- <th style="padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px; display: none;">Wow</th>
- <th style="padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px; display: none;">Wo2W</th>
</tr>
<tr style="border-bottom: 1px solid #C7D1D8;">
<td style="padding: 6px 12px;white-space: nowrap;">
@@ -80,6 +79,9 @@
</td>
</tr>
+ <!-- Reference Links -->
+ <!-- Holidays -->
+
<tr>
<td style="text-align: center; background-color: #EDF0F3; font-size: 12px; font-family:'Proxima Nova','Arial', 'Helvetica Neue',Helvetica, sans-serif; color: #737373; padding: 12px;">
<p style="margin-top:0;"> You are receiving this email because you have subscribed to ThirdEye Alert Service for
@@ -88,9 +90,6 @@
If you have any questions regarding this report, please email
<a style="color: #33aada;" href="mailto:ask_thirdeye@linkedin.com" target="_top">ask_thirdeye@linkedin.com</a>
</p>
- <p style="margin-bottom:0; margin-top: 24px;">
- © 2017, LinkedIn Corporation, 1000 W Maude Ave, CA 94085, USA
- </p>
</td>
</tr>
</table>
diff --git a/thirdeye/thirdeye-pinot/src/test/resources/test-onboard-notification-email-content-formatter.html b/thirdeye/thirdeye-pinot/src/test/resources/test-onboard-notification-email-content-formatter.html
index 4e634d5..e88e749 100644
--- a/thirdeye/thirdeye-pinot/src/test/resources/test-onboard-notification-email-content-formatter.html
+++ b/thirdeye/thirdeye-pinot/src/test/resources/test-onboard-notification-email-content-formatter.html
@@ -8,7 +8,7 @@
<td align="left" style="padding: 12px 24px; height: 60px; background-color: #F6F8FA;" colspan="2">
<img width="35" height="35" alt="logo" src="https://static.licdn-ei.com/scds/common/u/images/email/logos/logo_shift_inbug_82x82_v1.png"
style="vertical-align: middle; display: inline-block; margin-right: 8px; background: white;">
- <span style="color: rgba(0,0,0,0.75);font-size: 18px; font-weight: bold; letter-spacing: 2px; display: inline-block;vertical-align: middle;">THIRDEYE</span>
+ <span style="color: rgba(0,0,0,0.75);font-size: 18px; font-weight: bold; letter-spacing: 2px; display: inline-block;vertical-align: middle;">THIRDEYE ALERT</span>
</td>
</tr>
@@ -100,9 +100,6 @@
If you have any questions regarding this report, please email
<a style="color: #33aada;" href="mailto:ask_thirdeye@linkedin.com" target="_top">ask_thirdeye@linkedin.com</a>
</p>
- <p style="margin-bottom:0; margin-top: 24px;">
- © 2017, LinkedIn Corporation, 1000 W Maude Ave, CA 94085, USA
- </p>
</td>
</tr>
</table>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org