EAGLE-303. Split event fields into table in email for clearly reading.
prettify alert email

Author: @Huizhi <h...@ebay.com>
Reviewer: @yonzhang <yonzhang2...@gmail.com>

Closes: #242


Project: http://git-wip-us.apache.org/repos/asf/incubator-eagle/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-eagle/commit/2eb5d538
Tree: http://git-wip-us.apache.org/repos/asf/incubator-eagle/tree/2eb5d538
Diff: http://git-wip-us.apache.org/repos/asf/incubator-eagle/diff/2eb5d538

Branch: refs/heads/master
Commit: 2eb5d5387bb253d28259cdb714d4c68ad6f88269
Parents: b49bda1
Author: yonzhang <yonzhang2...@gmail.com>
Authored: Fri Jun 17 10:54:03 2016 -0700
Committer: yonzhang <yonzhang2...@gmail.com>
Committed: Fri Jun 17 10:54:03 2016 -0700

----------------------------------------------------------------------
 .../notification/email/AlertEmailGenerator.java |  31 +-
 .../notification/email/AlertEmailSender.java    |  16 +-
 .../src/main/resources/ALERT_DEFAULT.vm         | 488 ++++++++++---------
 .../siddhi/SiddhiAlertAPIEntityRender.java      |  18 +-
 .../src/main/resources/application.conf         |  13 +-
 .../apache/eagle/policy/common/Constants.java   |   1 +
 6 files changed, 311 insertions(+), 256 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/2eb5d538/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/java/org/apache/eagle/notification/email/AlertEmailGenerator.java
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/java/org/apache/eagle/notification/email/AlertEmailGenerator.java
 
b/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/java/org/apache/eagle/notification/email/AlertEmailGenerator.java
index fd6b794..db24390 100644
--- 
a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/java/org/apache/eagle/notification/email/AlertEmailGenerator.java
+++ 
b/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/java/org/apache/eagle/notification/email/AlertEmailGenerator.java
@@ -41,7 +41,9 @@ public class AlertEmailGenerator{
 
     private final static Logger LOG = 
LoggerFactory.getLogger(AlertEmailGenerator.class);
 
-    private final static long MAX_TIMEOUT_MS =60000;
+    private final static long MAX_TIMEOUT_MS = 60000;
+
+    private final static String EVENT_FIELDS_SPLITTER = ",";
 
     public boolean sendAlertEmail(AlertAPIEntity entity) {
         return sendAlertEmail(entity, recipients, null);
@@ -56,15 +58,21 @@ public class AlertEmailGenerator{
         AlertEmailContext email = new AlertEmailContext();
 
         AlertEmailComponent component = new AlertEmailComponent();
-        AlertContext  context = 
AlertContext.fromJsonString(entity.getAlertContext());
+        AlertContext context = 
AlertContext.fromJsonString(entity.getAlertContext());
         component.setAlertContext(context);
+        AlertEmailComponent eventComponent = getEventComponent(context);
         List<AlertEmailComponent> components = new 
ArrayList<AlertEmailComponent>();
         components.add(component);
+        components.add(eventComponent);
         email.setComponents(components);
+
         if (context.getProperty(Constants.SUBJECT) != null) {
             email.setSubject(context.getProperty(Constants.SUBJECT));
         }
-        else email.setSubject(subject);
+        else {
+            email.setSubject(subject);
+        }
+
         email.setVelocityTplFile(tplFile);
         email.setRecipients(recipients);
         email.setCc(cc);
@@ -76,7 +84,7 @@ public class AlertEmailGenerator{
 
         if(this.executorPool == null) throw new 
IllegalStateException("Invoking thread executor pool but it's is not set yet");
 
-        LOG.info("Sending email  in asynchronous to: "+recipients+", cc: "+cc);
+        LOG.info("Sending email in asynchronous to: "+ recipients +", cc: " + 
cc);
         Future future = this.executorPool.submit(thread);
         try {
             future.get(MAX_TIMEOUT_MS, TimeUnit.MILLISECONDS);
@@ -135,4 +143,19 @@ public class AlertEmailGenerator{
     public void setExecutorPool(ThreadPoolExecutor executorPool) {
         this.executorPool = executorPool;
     }
+
+    private AlertEmailComponent getEventComponent(AlertContext context) {
+        AlertContext eventFieldsContext = new AlertContext();
+        String eventFields = context.getProperty(Constants.ALERT_EVENT_FIELDS);
+        String[] fields = eventFields.split(EVENT_FIELDS_SPLITTER);
+
+        for (String key : fields) {
+            eventFieldsContext.addProperty(key, context.getProperty(key));
+        }
+
+        AlertEmailComponent component = new AlertEmailComponent();
+        component.setAlertContext(eventFieldsContext);
+
+        return component;
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/2eb5d538/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/java/org/apache/eagle/notification/email/AlertEmailSender.java
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/java/org/apache/eagle/notification/email/AlertEmailSender.java
 
b/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/java/org/apache/eagle/notification/email/AlertEmailSender.java
index c2c4949..ef98f22 100644
--- 
a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/java/org/apache/eagle/notification/email/AlertEmailSender.java
+++ 
b/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/java/org/apache/eagle/notification/email/AlertEmailSender.java
@@ -88,7 +88,8 @@ public class AlertEmailSender implements Runnable {
         String tmp = ManagementFactory.getRuntimeMXBean().getName();
         this.origin = tmp.split("@")[1] + "(pid:" + tmp.split("@")[0] + ")";
         threadName = Thread.currentThread().getName();
-        LOG.info("Initialized "+threadName+": origin is : " + this.origin+", 
recipient of the email: " + this.recipents+", velocity TPL file: " + 
this.configFileName);
+        LOG.info("Initialized "+threadName+": origin is : " + this.origin+", 
recipient of the email: "
+                + this.recipents+", velocity TPL file: " + 
this.configFileName);
     }
 
     public AlertEmailSender(AlertEmailContext alertEmail, ConfigObject 
eagleProps){
@@ -100,8 +101,8 @@ public class AlertEmailSender implements Runnable {
     public void run() {
         int count = 0;
         boolean success = false;
-        while(count++ < MAX_RETRY_COUNT && !success){
-            LOG.info("Sending email, tried: " + count+", max: "+ 
MAX_RETRY_COUNT);
+        while(count++ < MAX_RETRY_COUNT && !success) {
+            LOG.info("Sending email, tried: " + count + ", max: " + 
MAX_RETRY_COUNT);
             try {
                 final EagleMailClient client;
                 if (eagleProps != null) {
@@ -172,20 +173,21 @@ public class AlertEmailSender implements Runnable {
 
         if(success){
             sentSuccessfully = true;
-            LOG.info(String.format("Successfully send email, thread: 
%s",threadName));
+            LOG.info(String.format("Successfully send email, thread: %s", 
threadName));
         }else{
-            LOG.warn(String.format("Fail sending email after tries %s times, 
thread: %s",MAX_RETRY_COUNT,threadName));
+            LOG.warn(String.format("Fail sending email after tries %s times, 
thread: %s", MAX_RETRY_COUNT, threadName));
         }
     }
 
     private void generateCommonContext(VelocityContext context) {
-        context.put(Constants.ALERT_EMAIL_TIME_PROPERTY, 
DateTimeUtil.millisecondsToHumanDateWithSeconds( System.currentTimeMillis() ));
+        context.put(Constants.ALERT_EMAIL_TIME_PROPERTY,
+                
DateTimeUtil.millisecondsToHumanDateWithSeconds(System.currentTimeMillis()));
         context.put(Constants.ALERT_EMAIL_COUNT_PROPERTY, 
alertContexts.size());
         context.put(Constants.ALERT_EMAIL_ALERTLIST_PROPERTY, alertContexts);
         context.put(Constants.ALERT_EMAIL_ORIGIN_PROPERTY, origin);
     }
 
-    public boolean sentSuccessfully(){
+    public boolean sentSuccessfully() {
         return this.sentSuccessfully;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/2eb5d538/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/resources/ALERT_DEFAULT.vm
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/resources/ALERT_DEFAULT.vm
 
b/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/resources/ALERT_DEFAULT.vm
index 3e29439..7135569 100644
--- 
a/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/resources/ALERT_DEFAULT.vm
+++ 
b/eagle-core/eagle-alert/eagle-alert-notification-plugin/src/main/resources/ALERT_DEFAULT.vm
@@ -16,251 +16,263 @@
   -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
 <html xmlns="http://www.w3.org/1999/xhtml";>
-       <head>
-               <meta http-equiv="Content-Type" content="text/html; 
charset=utf-8" />
-               <meta name="viewport" content="width=device-width"/>
-               <style>
-                       body {
-                               width:100% !important;
-                               min-width: 100%;
-                               -webkit-text-size-adjust:100%;
-                               -ms-text-size-adjust:100%;
-                               margin:0;
-                               padding:0;
-                       }
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+        <meta name="viewport" content="width=device-width"/>
+        <style>
+            body {
+                width:100% !important;
+                min-width: 100%;
+                -webkit-text-size-adjust:100%;
+                -ms-text-size-adjust:100%;
+                margin:0;
+                padding:0;
+            }
 
-                       table {
-                               border-spacing: 0;
-                               border-collapse: collapse;
-                       }
+            table {
+                border-spacing: 0;
+                border-collapse: collapse;
+            }
 
-                       table th,
-                       table td {
-                               padding: 3px 0 3px 0;
-                       }
+            table th,
+            table td {
+                padding: 3px 0 3px 0;
+            }
 
-                       .body {
-                               width: 100%;
-                       }
+            .body {
+                width: 100%;
+            }
 
-                       p,a,h1,h2,h3,ul,ol,li {
-                               font-family: Helvetica, Arial, sans-serif;
-                               font-weight: normal;
-                               margin: 0;
-                               padding: 0;
-                       }
-                       p {
-                               font-size: 14px;
-                               line-height: 19px;
-                       }
-                       a {
-                               color: #3294b1;
-                       }
-                       h1 {
-                               font-size: 36px;
-                               margin: 15px 0 5px 0;
-                       }
-                       h2 {
-                               font-size: 32px;
-                       }
-                       h3 {
-                               font-size: 28px;
-                       }
+            p,a,h1,h2,h3,ul,ol,li {
+                font-family: Helvetica, Arial, sans-serif;
+                font-weight: normal;
+                margin: 0;
+                padding: 0;
+            }
+            p {
+                font-size: 14px;
+                line-height: 19px;
+            }
+            a {
+                color: #3294b1;
+            }
+            h1 {
+                font-size: 36px;
+                margin: 15px 0 5px 0;
+            }
+            h2 {
+                font-size: 32px;
+            }
+            h3 {
+                font-size: 28px;
+            }
 
-                       ul,ol {
-                               margin: 0 0 0 25px;
-                               padding: 0;
-                       }
+            ul,ol {
+                margin: 0 0 0 25px;
+                padding: 0;
+            }
 
-                       .btn {
-                               background: #2ba6cb !important;
-                               border: 1px solid #2284a1;
-                               padding: 10px 20px 10px 20px;
-                               text-align: center;
-                       }
-                       .btn:hover {
-                               background: #2795b6 !important;
-                       }
-                       .btn a {
-                               color: #FFFFFF;
-                               text-decoration: none;
-                               font-weight: bold;
-                               padding: 10px 20px 10px 20px;
-                       }
+            .btn {
+                background: #2ba6cb !important;
+                border: 1px solid #2284a1;
+                padding: 10px 20px 10px 20px;
+                text-align: center;
+            }
+            .btn:hover {
+                background: #2795b6 !important;
+            }
+            .btn a {
+                color: #FFFFFF;
+                text-decoration: none;
+                font-weight: bold;
+                padding: 10px 20px 10px 20px;
+            }
 
-                       .tableBordered {
-                               border-top: 1px solid #b9e5ff;
-                       }
-                       .tableBordered th {
-                               background: #ECF8FF;
-                       }
-                       .tableBordered th p {
-                               font-weight: bold;
-                               color: #3294b1;
-                       }
-                       .tableBordered th,
-                       .tableBordered td {
-                               color: #333333;
-                               border-bottom: 1px solid #b9e5ff;
-                               text-align: center;
-                               padding-bottom: 5px;
-                       }
+            .tableBordered {
+                border-top: 1px solid #b9e5ff;
+            }
+            .tableBordered th {
+                background: #ECF8FF;
+            }
+            .tableBordered th p {
+                font-weight: bold;
+                color: #3294b1;
+            }
+            .tableBordered th,
+            .tableBordered td {
+                color: #333333;
+                border-bottom: 1px solid #b9e5ff;
+                text-align: center;
+                padding-bottom: 5px;
+            }
 
-                       .panel {
-                               height: 100px;
-                       }
-               </style>
-       </head>
-       <body>
-               #set ( $elem = $alertList[0] )
-               #set ( $alertUrl = $elem["alertDetailUrl"] )
-               #set ( $policyUrl = $elem["policyDetailUrl"] )
-               <table class="body">
-                       <tr>
-                               <td align="center" valign="top" 
style="background: #999999; padding: 0 0 0 0;">
-                                       <!-- Eagle Header -->
-                                       <table width="580">
-                                               <tr>
-                                                       <td style="padding: 0 0 
0 0;" align="left" >
-                                                               <p 
style="color:#FFFFFF;font-weight: bold; font-size: 24px">Eagle</p>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
+            .panel {
+                height: 100px;
+            }
+        </style>
+    </head>
+    <body>
+        #set ( $elem = $alertList[0] )
+        #set ( $eventFields = $alertList[1] )
+        #set ( $alertUrl = $elem["alertDetailUrl"] )
+        #set ( $policyUrl = $elem["policyDetailUrl"] )
+        <table class="body">
+            <tr>
+                <td align="center" valign="top" style="background: #999999; 
padding: 0 0 0 0;">
+                    <!-- Eagle Header -->
+                    <table width="90%">
+                        <tr>
+                            <td style="padding: 0 0 0 0;" align="left" >
+                                <p style="color:#FFFFFF;font-weight: bold; 
font-size: 24px">Eagle</p>
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+            </tr>
 
-                       <tr>
-                               <td align="center" valign="top">
-                                       <!-- Eagle Body -->
-                                       <table width="580">
-                                               <tr>
-                                                       <!-- Title -->
-                                                       <td align="center">
-                                                               
<h1>$elem["application"] Alert Detected</h1>
-                                                       </td>
-                                               </tr>
-                                               <tr>
-                                                       <!-- Time -->
-                                                       <td>
-                                                               <table 
width="580">
-                                                                       <tr>
-                                                                               
<td>
-                                                                               
        <p><b>Detected Time: $elem["alertTimestamp"]</b></p>
-                                                                               
</td>
-                                                                               
#set ( $severity = $elem["severity"] )
-                                                                               
#if (!$severity || ("$severity" == ""))
-                                                                               
        #set ( $elem["severity"] = "WARNING")
-                                                                               
#end
-                                                                               
<td align="right">
-                                                                               
        <p><b>
-                                                                               
                Severity:
-                                                                               
    #if ($elem["severity"] == "WARNING")
-                                                                               
                        <span>$elem["severity"]</span>                          
                                                                
-                                                                               
        #else
-                                                                               
                        <span style="color: #FF0000;">$elem["severity"]</span>
-                                                                               
        #end
-                                                                               
        </b></p>
-                                                                               
</td>
-                                                                       </tr>
-                                                               </table>
-                                                       </td>
-                                               </tr>
-                                               <tr>
-                                                       <!-- Description -->
-                                                       <td valign="top" 
style="background: #ECF8FF; border: 1px solid #b9e5ff; padding: 10px 10px 12px 
10px;">
-                                                               
<p>$elem["alertMessage"]</p>
-                                                       </td>
-                                               </tr>
-                                               <tr>
-                                                       <!-- View Detail -->
-                                                       <td align="center" 
style="padding: 10px 0 0 0;">
-                                                               <table 
width="580">
-                                                                       <tr>
-                                                                               
<td class="btn">
-                                                                               
        <a href="$alertUrl">View Alert Details on Eagle Web</a>
-                                                                               
</td>
-                                                                       </tr>
-                                                               </table>
-                                                       </td>
-                                               </tr>
-                                               <tr>
-                                                       <!-- Basic Information 
-->
-                                                       <td style="padding: 
20px 0 0 0;">
-                                                               <p><b>Basic 
Information:</b></p>
-                                                       </td>
-                                               </tr>
-                                               <tr>
-                                                       <!-- Basic Information 
Content -->
-                                                       <td>
-                                                               <table 
class="tableBordered" width="580">
-                                                                       <tr>
-                                                                               
<th>
-                                                                               
        <p>Site</p>
-                                                                               
</th>
-                                                                               
<th>
-                                                                               
        <p>Data Source</p>
-                                                                               
</th>
-                                                                       </tr>
-                                                                       <tr>
-                                                                               
<td>
-                                                                               
        <p>$elem["site"]</p>
-                                                                               
</td>
-                                                                               
<td>
-                                                                               
        <p>$elem["application"]</p>
-                                                                               
</td>
-                                                                       </tr>
-                                                                       <tr>
-                                                                               
<th>
-                                                                               
        <p>Policy Name</p>
-                                                                               
</th>
-                                                                               
<th>
-                                                                               
        <p>Severity</p>
-                                                                               
</th>
-                                                                       </tr>
-                                                                       <tr>
-                                                                               
<td>
-                                                                               
        <p>$elem["policyId"]</p>
-                                                                               
</td>
-                                                                               
<td>
-                                                                               
        <p>$elem["severity"]</p>
-                                                                               
</td>
-                                                                       </tr>
-                                                               </table>
-                                                       </td>
-                                               </tr>
-                                               <tr>
-                                                       <!-- View Detail -->
-                                                       <td align="center" 
style="padding: 10px 0 0 0;">
-                                                               <table 
width="580">
-                                                                       <tr>
-                                                                               
<td class="btn">
-                                                                               
        <a href="$policyUrl">View Policy Details on Eagle Web</a>
-                                                                               
</td>
-                                                                       </tr>
-                                                               </table>
-                                                       </td>
-                                               </tr>                           
                
-                                               <tr>
-                                                       <!-- Actions Required 
-->
-                                                       <td style="padding: 
20px 0 0 0;">
-                                                               <p><b>Actions 
Required:</b></p>
-                                                       </td>
-                                               </tr>
-                                               <tr>
-                                                       <!-- Possible Root 
Causes Content -->
-                                                       <td class="panel" 
valign="top" style="background: #F4F4F4; border: 1px solid #AAAAAA; padding: 
10px 10px 12px 10px;">
-                                                               <p> 
$elem["application"] alert found, please check.</p>
-                                                       </td>
-                                               </tr>
-                                               <tr>
-                                                       <!-- Copyright -->
-                                                       <td align="center">
-                                                               <p><a 
href="<Eagle-Host>/alerts/alertlist.html">Apache Eagle</a></p>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-               </table>
-       </body>
+            <tr>
+                <td align="center" valign="top">
+                    <!-- Eagle Body -->
+                    <table width="90%">
+                        <tr>
+                            <!-- Title -->
+                            <td align="center">
+                                <h1>$elem["application"] Alert Detected</h1>
+                            </td>
+                        </tr>
+                        <tr>
+                            <!-- Time -->
+                            <td>
+                                <table width="100%">
+                                    <tr>
+                                        <td>
+                                            <p><b>Detected Time: 
$elem["alertTimestamp"]</b></p>
+                                        </td>
+                                        #set ( $severity = $elem["severity"] )
+                                        #if (!$severity || ("$severity" == ""))
+                                            #set ( $elem["severity"] = 
"WARNING")
+                                        #end
+                                        <td align="right">
+                                            <p><b>
+                                                Severity:
+                                                #if ($elem["severity"] == 
"WARNING")
+                                                    
<span>$elem["severity"]</span>
+                                                #else
+                                                    <span style="color: 
#FF0000;">$elem["severity"]</span>
+                                                #end
+                                            </b></p>
+                                        </td>
+                                    </tr>
+                                </table>
+                            </td>
+                        </tr>
+                        <!-- Description -->
+                        <tr>
+                            <td>
+                                <table class="tableBordered" width="100%">
+                                    #foreach ($key in $eventFields.keySet())
+                                        <tr>
+                                            <th>
+                                                <p>$key</p>
+                                            </th>
+                                            <td>
+                                                $eventFields.get($key)
+                                            </td>
+                                        </tr>
+                                    #end
+                                </table>
+                            </td>
+                        </tr>
+                        <tr>
+                            <!-- View Detail -->
+                            <td align="center" style="padding: 10px 0 0 0;">
+                                <table width="100%">
+                                    <tr>
+                                        <td class="btn">
+                                            <a href="$alertUrl">View Alert 
Details on Eagle Web</a>
+                                        </td>
+                                    </tr>
+                                </table>
+                            </td>
+                        </tr>
+                        <tr>
+                            <!-- Basic Information -->
+                            <td style="padding: 20px 0 0 0;">
+                                <p><b>Basic Information:</b></p>
+                            </td>
+                        </tr>
+                        <tr>
+                            <!-- Basic Information Content -->
+                            <td>
+                                <table class="tableBordered" width="100%">
+                                    <tr>
+                                        <th>
+                                            <p>Site</p>
+                                        </th>
+                                        <th>
+                                            <p>Data Source</p>
+                                        </th>
+                                    </tr>
+                                    <tr>
+                                        <td>
+                                            <p>$elem["site"]</p>
+                                        </td>
+                                        <td>
+                                            <p>$elem["application"]</p>
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <th>
+                                            <p>Policy Name</p>
+                                        </th>
+                                        <th>
+                                            <p>Severity</p>
+                                        </th>
+                                    </tr>
+                                    <tr>
+                                        <td>
+                                            <p>$elem["policyId"]</p>
+                                        </td>
+                                        <td>
+                                            <p>$elem["severity"]</p>
+                                        </td>
+                                    </tr>
+                                </table>
+                            </td>
+                        </tr>
+                        <tr>
+                            <!-- View Detail -->
+                            <td align="center" style="padding: 10px 0 0 0;">
+                                <table width="100%">
+                                    <tr>
+                                        <td class="btn">
+                                            <a href="$policyUrl">View Policy 
Details on Eagle Web</a>
+                                        </td>
+                                    </tr>
+                                </table>
+                            </td>
+                        </tr>
+                        <tr>
+                            <!-- Actions Required -->
+                            <td style="padding: 20px 0 0 0;">
+                                <p><b>Actions Required:</b></p>
+                            </td>
+                        </tr>
+                        <tr>
+                            <!-- Possible Root Causes Content -->
+                            <td class="panel" valign="top" style="background: 
#F4F4F4; border: 1px solid #AAAAAA; padding: 10px 10px 12px 10px;">
+                                <p> $elem["application"] alert found, please 
check.</p>
+                            </td>
+                        </tr>
+                        <tr>
+                            <!-- Copyright -->
+                            <td align="center">
+                                <p><a 
href="https://eagle.incubator.apache.org";>Apache Eagle</a></p>
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+            </tr>
+        </table>
+    </body>
 </html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/2eb5d538/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/siddhi/SiddhiAlertAPIEntityRender.java
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/siddhi/SiddhiAlertAPIEntityRender.java
 
b/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/siddhi/SiddhiAlertAPIEntityRender.java
index c7ff74c..cef2a28 100644
--- 
a/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/siddhi/SiddhiAlertAPIEntityRender.java
+++ 
b/eagle-core/eagle-alert/eagle-alert-process/src/main/java/org/apache/eagle/alert/siddhi/SiddhiAlertAPIEntityRender.java
@@ -73,20 +73,31 @@ public class SiddhiAlertAPIEntityRender implements 
ResultRender<AlertDefinitionA
                }
 
                StringBuilder sb = new StringBuilder();
+               StringBuilder keysSb = new StringBuilder();
+               String prefix = "";
+
                for (Entry<String, String> entry : 
context.getProperties().entrySet()) {
                        String key = entry.getKey();
                        String value = entry.getValue();
-                       sb.append(key + "=\"" + value + "\" ");                 
+                       sb.append(key).append("=\"").append(value).append("\" 
");
+
+                       keysSb.append(prefix).append(key);
+                       prefix = ",";
                }
+
+               String alertEventFields = keysSb.toString();
+               String alertEvent = sb.toString();
+
                context.addAll(evaluator.getAdditionalContext());
                String policyId = context.getProperty(Constants.POLICY_ID);
-               String alertMessage = "The Policy \"" + policyId + "\" has been 
detected with the below information: " + sb.toString() ;
+               String alertMessage = "The Policy \"" + policyId + "\" has been 
detected with the below information: " + alertEvent;
                String site = config.getString(EagleConfigConstants.EAGLE_PROPS 
+ "." + EagleConfigConstants.SITE);
                String application = 
config.getString(EagleConfigConstants.EAGLE_PROPS + "." + 
EagleConfigConstants.APPLICATION);
                String host = config.getString(EagleConfigConstants.EAGLE_PROPS 
+ "." + EagleConfigConstants.EAGLE_SERVICE + "." + EagleConfigConstants.HOST);
                Integer port = config.getInt(EagleConfigConstants.EAGLE_PROPS + 
"." + EagleConfigConstants.EAGLE_SERVICE + "." + EagleConfigConstants.PORT);
 
-               context.addProperty(Constants.ALERT_EVENT, sb.toString());
+               context.addProperty(Constants.ALERT_EVENT, alertEvent);
+               context.addProperty(Constants.ALERT_EVENT_FIELDS, 
alertEventFields);
                context.addProperty(Constants.ALERT_MESSAGE, alertMessage);
                context.addProperty(Constants.ALERT_TIMESTAMP_PROPERTY, 
DateTimeUtil.millisecondsToHumanDateWithSeconds(System.currentTimeMillis()));
                context.addProperty(EagleConfigConstants.APPLICATION, 
application);
@@ -104,6 +115,7 @@ public class SiddhiAlertAPIEntityRender implements 
ResultRender<AlertDefinitionA
                context.addProperty(Constants.POLICY_DETAIL_URL, 
UrlBuilder.buiildPolicyDetailUrl(host, port, tags));
                context.addProperty(Constants.ALERT_DETAIL_URL, 
UrlBuilder.buildAlertDetailUrl(host, port, entity));
                entity.setAlertContext(context.toJsonString());
+
                return entity;
        }       
 }

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/2eb5d538/eagle-core/eagle-data-process/eagle-stream-process-api/src/main/resources/application.conf
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-data-process/eagle-stream-process-api/src/main/resources/application.conf
 
b/eagle-core/eagle-data-process/eagle-stream-process-api/src/main/resources/application.conf
index 72c2ae5..526e47f 100644
--- 
a/eagle-core/eagle-data-process/eagle-stream-process-api/src/main/resources/application.conf
+++ 
b/eagle-core/eagle-data-process/eagle-stream-process-api/src/main/resources/application.conf
@@ -47,9 +47,14 @@
     "site" : "sandbox",
     "application": "SpadesMonitor",
     "dataJoinPollIntervalSec" : 30,
-    "mailHost" : "mailHost.com",
-    "mailSmtpPort":"25",
-    "mailDebug" : "true",
+    "mailHost" : "smtp.office365.com",
+    "mailSmtpPort":"587",
+    "mailSmtpAuth" : "true",
+    "mailSmtpUser" : "username",
+    "mailSmtpPassword" : "password",
+    #"mailSmtpSslEnable" : "true",
+    "mailSmtpTlsEnable" : "true",
+    "mailDebug" : "false",
     "balancePartitionEnabled" : true,
     #"partitionRefreshIntervalInMin" : 60,
     #"kafkaStatisticRangeInMin" : 60,
@@ -70,4 +75,4 @@
     "eagleStoreEnabled": true,
     "kafka_broker":"127.0.0.1:6667"
   }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/2eb5d538/eagle-core/eagle-policy/eagle-policy-base/src/main/java/org/apache/eagle/policy/common/Constants.java
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-policy/eagle-policy-base/src/main/java/org/apache/eagle/policy/common/Constants.java
 
b/eagle-core/eagle-policy/eagle-policy-base/src/main/java/org/apache/eagle/policy/common/Constants.java
index 2a33460..1b65685 100644
--- 
a/eagle-core/eagle-policy/eagle-policy-base/src/main/java/org/apache/eagle/policy/common/Constants.java
+++ 
b/eagle-core/eagle-policy/eagle-policy-base/src/main/java/org/apache/eagle/policy/common/Constants.java
@@ -53,6 +53,7 @@ public class Constants {
        public static final String POLICY_ID = "policyId";
     public static final String SOURCE_STREAMS = "sourceStreams";
     public static final String ALERT_EVENT = "alertEvent";
+       public static final String ALERT_EVENT_FIELDS = "alertEventFields";
        public static final String POLICY_DETAIL_URL = "policyDetailUrl";
        public static final String ALERT_DETAIL_URL = "alertDetailUrl";
 

Reply via email to