You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@eagle.apache.org by qi...@apache.org on 2016/12/15 07:39:00 UTC
incubator-eagle git commit: [EAGLE-834] Improve and beautify
JobReportTemplate
Repository: incubator-eagle
Updated Branches:
refs/heads/master f430f521f -> 3082b5e62
[EAGLE-834] Improve and beautify JobReportTemplate
* Improve and beautify JobReportTemplate.vm
* Fix ratio as `double` instead of `String`
http://issues.apache.org/jira/browse/EAGLE-834
Author: Hao Chen <ha...@apache.org>
Closes #745 from haoch/ImproveJobReportTmpl.
Project: http://git-wip-us.apache.org/repos/asf/incubator-eagle/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-eagle/commit/3082b5e6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-eagle/tree/3082b5e6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-eagle/diff/3082b5e6
Branch: refs/heads/master
Commit: 3082b5e6264eb0051a60e7929cc5a78390cb7ac4
Parents: f430f52
Author: Hao Chen <ha...@apache.org>
Authored: Thu Dec 15 15:38:53 2016 +0800
Committer: Zhao, Qingwen <qi...@apache.org>
Committed: Thu Dec 15 15:38:53 2016 +0800
----------------------------------------------------------------------
.../eagle/common/mail/AlertEmailConstants.java | 1 +
.../eagle/common/mail/AlertEmailSender.java | 3 +-
.../mr/history/MRHistoryJobDailyReporter.java | 9 +-
.../src/main/resources/JobReportTemplate.vm | 587 +++++++++++++++----
.../src/main/resources/JobReportTemplatePure.vm | 141 +++++
.../history/MRHistoryJobDailyReporterTest.java | 10 +-
.../src/test/resources/JobReportTemplate.vm | 141 -----
7 files changed, 628 insertions(+), 264 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/3082b5e6/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/mail/AlertEmailConstants.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/mail/AlertEmailConstants.java b/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/mail/AlertEmailConstants.java
index 140d306..4a90c45 100644
--- a/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/mail/AlertEmailConstants.java
+++ b/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/mail/AlertEmailConstants.java
@@ -41,6 +41,7 @@ public class AlertEmailConstants {
public static final String ALERT_EMAIL_COUNT_PROPERTY = "count";
public static final String ALERT_EMAIL_ALERTLIST_PROPERTY = "alertList";
public static final String ALERT_EMAIL_ORIGIN_PROPERTY = "alertEmailOrigin";
+ public static final String VERSION = "version";
public static final String EAGLE_APPLICATION_EMAIL_SERVICE = "application.mailService";
public static final String EAGLE_COORDINATOR_EMAIL_SERVICE = "coordinator.mailService";
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/3082b5e6/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/mail/AlertEmailSender.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/mail/AlertEmailSender.java b/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/mail/AlertEmailSender.java
index ffc249d..7cf2ebd 100644
--- a/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/mail/AlertEmailSender.java
+++ b/eagle-core/eagle-common/src/main/java/org/apache/eagle/common/mail/AlertEmailSender.java
@@ -17,6 +17,7 @@
package org.apache.eagle.common.mail;
import org.apache.eagle.common.DateTimeUtil;
+import org.apache.eagle.common.Version;
import org.apache.velocity.VelocityContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -106,6 +107,6 @@ public class AlertEmailSender {
context.put(AlertEmailConstants.ALERT_EMAIL_COUNT_PROPERTY, alertContexts.size());
context.put(AlertEmailConstants.ALERT_EMAIL_ALERTLIST_PROPERTY, alertContexts);
context.put(AlertEmailConstants.ALERT_EMAIL_ORIGIN_PROPERTY, origin);
+ context.put(AlertEmailConstants.VERSION, Version.version);
}
-
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/3082b5e6/eagle-jpm/eagle-jpm-mr-history/src/main/java/org/apache/eagle/jpm/mr/history/MRHistoryJobDailyReporter.java
----------------------------------------------------------------------
diff --git a/eagle-jpm/eagle-jpm-mr-history/src/main/java/org/apache/eagle/jpm/mr/history/MRHistoryJobDailyReporter.java b/eagle-jpm/eagle-jpm-mr-history/src/main/java/org/apache/eagle/jpm/mr/history/MRHistoryJobDailyReporter.java
index 42f2b29..6b38244 100644
--- a/eagle-jpm/eagle-jpm-mr-history/src/main/java/org/apache/eagle/jpm/mr/history/MRHistoryJobDailyReporter.java
+++ b/eagle-jpm/eagle-jpm-mr-history/src/main/java/org/apache/eagle/jpm/mr/history/MRHistoryJobDailyReporter.java
@@ -32,7 +32,6 @@ import org.apache.eagle.metadata.service.ApplicationEntityService;
import org.apache.eagle.service.client.EagleServiceClientException;
import org.apache.eagle.service.client.IEagleServiceClient;
import org.apache.eagle.service.client.impl.EagleServiceClientImpl;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -176,7 +175,7 @@ public class MRHistoryJobDailyReporter extends AbstractScheduledService {
data.putAll(buildFinishedJobInfo(site, startTime, endTime));
data.put(NUM_TOP_USERS_KEY, numTopUsers);
data.put(JOB_OVERTIME_LIMIT_KEY, jobOvertimeLimit);
- data.put(ALERT_TITLE_KEY, String.format("%s Daily Job Report", site.toUpperCase()));
+ data.put(ALERT_TITLE_KEY, String.format("[%s] Daily Job Report", site.toUpperCase()));
data.put(REPORT_RANGE_KEY, String.format("%s ~ %s %s",
DateTimeUtil.millisecondsToHumanDateWithSeconds(startTime),
DateTimeUtil.millisecondsToHumanDateWithSeconds(endTime),
@@ -238,7 +237,7 @@ public class MRHistoryJobDailyReporter extends AbstractScheduledService {
JobSummeryInfo summeryInfo = new JobSummeryInfo();
summeryInfo.status = entry.getKey();
summeryInfo.numOfJobs = entry.getValue();
- summeryInfo.ratio = String.format("%.2f", entry.getValue() * 1d / totalJobs.get());
+ summeryInfo.ratio = Double.parseDouble(String.format("%.2f", entry.getValue() * 1d / totalJobs.get()));
statusCount.add(summeryInfo);
}
data.put(SUMMARY_INFO_KEY, statusCount);
@@ -300,7 +299,7 @@ public class MRHistoryJobDailyReporter extends AbstractScheduledService {
public static class JobSummeryInfo {
public String status;
public long numOfJobs;
- public String ratio;
+ public double ratio;
public String getStatus() {
return status;
@@ -310,7 +309,7 @@ public class MRHistoryJobDailyReporter extends AbstractScheduledService {
return numOfJobs;
}
- public String getRatio() {
+ public double getRatio() {
return ratio;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/3082b5e6/eagle-jpm/eagle-jpm-mr-history/src/main/resources/JobReportTemplate.vm
----------------------------------------------------------------------
diff --git a/eagle-jpm/eagle-jpm-mr-history/src/main/resources/JobReportTemplate.vm b/eagle-jpm/eagle-jpm-mr-history/src/main/resources/JobReportTemplate.vm
index fef83da..424306f 100644
--- a/eagle-jpm/eagle-jpm-mr-history/src/main/resources/JobReportTemplate.vm
+++ b/eagle-jpm/eagle-jpm-mr-history/src/main/resources/JobReportTemplate.vm
@@ -16,126 +16,491 @@
-->
<!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">
- #set ( $alert = $alertList[0] )
+#set ($alert = $alertList[0] )
+#set ($alertColor = "#337ab7")
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
<head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="viewport" content="width=device-width"/>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>$alert["alertTitle"]</title>
+ <style type="text/css">
+ img {
+ max-width: 100%;
+ }
+
+ body {
+ -webkit-font-smoothing: antialiased;
+ -webkit-text-size-adjust: none;
+ width: 100% !important;
+ height: 100%;
+ line-height: 1.6em;
+ }
+
+ body {
+ background-color: #f6f6f6;
+ }
+
+ @media only screen and (max-width: 640px) {
+ body {
+ padding: 0 !important;
+ }
+
+ h1 {
+ font-weight: 800 !important;
+ margin: 20px 0 5px !important;
+ }
+
+ h2 {
+ font-weight: 800 !important;
+ margin: 20px 0 5px !important;
+ }
+
+ h3 {
+ font-weight: 800 !important;
+ margin: 20px 0 5px !important;
+ }
+
+ h4 {
+ font-weight: 800 !important;
+ margin: 20px 0 5px !important;
+ }
+
+ h1 {
+ font-size: 22px !important;
+ }
+
+ h2 {
+ font-size: 18px !important;
+ }
+
+ h3 {
+ font-size: 16px !important;
+ }
+
+ .container {
+ padding: 0 !important;
+ width: 100% !important;
+ }
+
+ .content {
+ padding: 0 !important;
+ }
+
+ .content-wrap {
+ padding: 10px !important;
+ }
+
+ .invoice {
+ width: 100% !important;
+ }
+ }
+ </style>
</head>
-<body>
-<table class="body">
- <tr>
- <td align="center" valign="top">
- <!-- Eagle Body -->
- <table width="580">
- <tr>
- <!-- Title -->
- <td align="center">
- <h2>$alert["alertTitle"]</h2>
- </td>
- </tr>
-
- <!-- Basic Information -->
- <tr>
- <td style="padding: 20px 0 10px 0;">
- <p><b>Summery ($alert["reportRange"])</b></p>
- </td>
- </tr>
- <tr>
- <td>
- <table class="tableBordered" width="580">
- <tr>
- <th>Metrics</th>
- <th>Number of Jobs</th>
- <th>Ratio</th>
- </tr>
- #foreach($item in $alert["summaryInfo"])
- <tr>
- <td>$item.status</td>
- <td>$item.numOfJobs</td>
- <td>$item.ratio</td>
+
+<body itemscope itemtype="http://schema.org/EmailMessage"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; line-height: 1.6em; background-color: #f6f6f6; margin: 0;"
+ bgcolor="#f6f6f6">
+
+<table class="body-wrap"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; width: 100%; background-color: #f6f6f6; margin: 0;"
+ bgcolor="#f6f6f6">
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <td style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0;"
+ valign="top"></td>
+ <td class="container" width="600"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; display: block !important; max-width: 600px !important; clear: both !important; margin: 0 auto;"
+ valign="top">
+ <div class="content"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; max-width: 600px; display: block; margin: 0 auto; padding: 20px;">
+ <table class="main" width="100%" cellpadding="0" cellspacing="0"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; border-radius: 3px; background-color: #fff; margin: 0; border: 1px solid #e9e9e9;"
+ bgcolor="#fff">
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <td class="alert alert-warning"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 16px; vertical-align: top; color: #fff; font-weight: 500; text-align: center; border-radius: 3px 3px 0 0; background-color: $alertColor; margin: 0; padding: 20px;"
+ align="center" bgcolor="" valign="top">
+ <strong>$alert["alertTitle"]</strong>
+ </td>
+ </tr>
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <td class="content-wrap"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 20px;"
+ valign="top">
+ <table width="100%" cellpadding="0" cellspacing="0"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <th class="content-block"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;"
+ valign="top">
+ Job Summary
+ </th>
+ </tr>
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <td class="content-block"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;"
+ valign="top">
+ <i><strong>Time:</strong> $alert["reportRange"]</i>
+ </td>
+ </tr>
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <td class="content-block aligncenter"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; text-align: center; margin: 0; padding: 0 0 10px;"
+ align="center" valign="top">
+ <table class="invoice"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; text-align: left; width: 100%; margin: 10px auto;">
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <td style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 5px 0;"
+ valign="top">
+ <table class="invoice-items" cellpadding="0" cellspacing="0"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; width: 100%; margin: 0;">
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <th style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 5px 0;"
+ valign="top">
+ Status
+ </th>
+ <th style="text-align: center;font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 5px 0;"
+ valign="top">
+ Number of Jobs
+ </th>
+ <th style="text-align: center;font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 5px 0;"
+ valign="top">
+ Ratio
+ </th>
+ </tr>
+ #foreach($item in $alert["summaryInfo"])
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <td style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; border-top-width: 1px; border-top-color: #eee; border-top-style: solid; margin: 0; padding: 5px 0;"
+ valign="top">
+ $item.status
+ </td>
+ <td style="text-align: center;font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; border-top-width: 1px; border-top-color: #eee; border-top-style: solid; margin: 0; padding: 5px 0;"
+ valign="top">
+ $item.numOfJobs
+ </td>
+ <td style="text-align: center;font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; border-top-width: 1px; border-top-color: #eee; border-top-style: solid; margin: 0; padding: 5px 0;"
+ valign="top">
+ #set ($ratio_percentage = $item.ratio * 100)
+ $ratio_percentage %
+ </td>
+ </tr>
+ #end
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <th class="content-block"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;"
+ valign="top">
+## Top $alert["numTopUsers"] Users (Order by Number of Failed Jobs)
+ Top $alert["numTopUsers"] Failed Job Users
+ </th>
</tr>
- #end
- </table>
- </td>
- </tr>
-
- <!-- Top Users for Failed Jobs -->
- <tr>
- <td style="padding: 20px 0 10px 0;">
- <p><b>Top $alert["numTopUsers"] Users (Order by Number of Failed Jobs)</b></p>
- </td>
- </tr>
- <tr>
- <td>
- <table class="tableBordered" width="580">
- <tr>
- <th>Name</th>
- <th>Number of Failed Jobs</th>
- </tr>
- #foreach($userItem in $alert["failedJobUsers"].entrySet())
- <tr>
- <td>$userItem.key</td>
- <td>$userItem.value</td>
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <td class="content-block aligncenter"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; text-align: center; margin: 0; padding: 0 0 10px;"
+ align="center" valign="top">
+ <table class="invoice"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; text-align: left; width: 100%; margin: 10px auto;">
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <td style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 5px 0;"
+ valign="top">
+ <table class="invoice-items" cellpadding="0" cellspacing="0"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; width: 100%; margin: 0;">
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <th style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 5px 0;"
+ valign="top">
+ User Name
+ </th>
+ <th style="text-align: center;font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 5px 0;"
+ valign="top">
+ Number of Failed Jobs
+ </th>
+ </tr>
+ #foreach($userItem in $alert["failedJobUsers"].entrySet())
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <td style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; border-top-width: 1px; border-top-color: #eee; border-top-style: solid; margin: 0; padding: 5px 0;"
+ valign="top">
+ $userItem.key
+ </td>
+ <td style="text-align: center;font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; border-top-width: 1px; border-top-color: #eee; border-top-style: solid; margin: 0; padding: 5px 0;"
+ valign="top">$userItem.value
+ </td>
+ </tr>
+ #end
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
</tr>
- #end
- </table>
- </td>
- </tr>
- <tr>
- <td style="padding: 20px 0 10px 0;">
- <p>View more job information on <a href="$alert["eagleJobLink"]">Eagle</a></p>
- </td>
- </tr>
-
- <!-- Top Users for Failed Jobs -->
- <tr>
- <td style="padding: 20px 0 10px 0;">
- <p><b>Top $alert["numTopUsers"] Users (Order by Number of Succeeded Jobs Running over $alert["jobOvertimeLimit"] Hours)</b></p>
- </td>
- </tr>
- <tr>
- <td>
- <table class="tableBordered" width="580">
- <tr>
- <th>Name</th>
- <th>Number of Jobs Runing over $alert["jobOvertimeLimit"] hrs</th>
- </tr>
- #foreach($userItem in $alert["succeededJobUsers"].entrySet())
- <tr>
- <td>$userItem.key</td>
- <td>$userItem.value</td>
+
+
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <th class="content-block"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;"
+ valign="top">
+## Top $alert["numTopUsers"] Users (Order by Number of Succeeded Jobs Running over $alert["jobOvertimeLimit"] Hours)
+ Top $alert["numTopUsers"] Succeeded Job Users (Over $alert["jobOvertimeLimit"] Hours )
+ </th>
</tr>
- #end
- </table>
- </td>
- </tr>
-
- <!-- Top Users for All Jobs -->
- <tr>
- <td style="padding: 20px 0 10px 0;">
- <p><b>Top $alert["numTopUsers"] Users (Order by Number of Finished Jobs)</b></p>
- </td>
- </tr>
- <tr>
- <td>
- <table class="tableBordered" width="580">
- <tr>
- <th>Name</th>
- <th>Number of Finished Jobs</th>
- </tr>
- #foreach($userItem in $alert["finishedJobUsers"].entrySet())
- <tr>
- <td>$userItem.key</td>
- <td>$userItem.value</td>
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <td class="content-block aligncenter"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; text-align: center; margin: 0; padding: 0 0 10px;"
+ align="center" valign="top">
+ <table class="invoice"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; text-align: left; width: 100%; margin: 10px auto;">
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <td style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 5px 0;"
+ valign="top">
+ <table class="invoice-items" cellpadding="0" cellspacing="0"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; width: 100%; margin: 0;">
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <th style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 5px 0;"
+ valign="top">
+ User Name
+ </th>
+ <th style="text-align: center;font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 5px 0;"
+ valign="top">
+ Number of Succeeded Jobs
+## Over $alert["jobOvertimeLimit"] Hours
+ </th>
+ </tr>
+ #foreach($userItem in $alert["succeededJobUsers"].entrySet())
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <td style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; border-top-width: 1px; border-top-color: #eee; border-top-style: solid; margin: 0; padding: 5px 0;"
+ valign="top">
+ $userItem.key
+ </td>
+ <td style="text-align: center;font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; border-top-width: 1px; border-top-color: #eee; border-top-style: solid; margin: 0; padding: 5px 0;"
+ valign="top">$userItem.value
+ </td>
+ </tr>
+ #end
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
</tr>
- #end
- </table>
- </td>
- </tr>
- </table>
+
+
+
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <th class="content-block"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;"
+ valign="top">
+ Top $alert["numTopUsers"] Finished Job Users
+ </th>
+ </tr>
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <td class="content-block aligncenter"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; text-align: center; margin: 0; padding: 0 0 10px;"
+ align="center" valign="top">
+ <table class="invoice"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; text-align: left; width: 100%; margin: 10px auto;">
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <td style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 5px 0;"
+ valign="top">
+ <table class="invoice-items" cellpadding="0" cellspacing="0"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; width: 100%; margin: 0;">
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <th style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 5px 0;"
+ valign="top">
+ User Name
+ </th>
+ <th style="text-align:center; font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 5px 0;"
+ valign="top">
+ Number of Finished Jobs
+ </th>
+ </tr>
+ #foreach($userItem in $alert["finishedJobUsers"].entrySet())
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <td style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; border-top-width: 1px; border-top-color: #eee; border-top-style: solid; margin: 0; padding: 5px 0;"
+ valign="top">
+ $userItem.key
+ </td>
+ <td style="text-align:center; font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; border-top-width: 1px; border-top-color: #eee; border-top-style: solid; margin: 0; padding: 5px 0;"
+ valign="top">
+ $userItem.value
+ </td>
+ </tr>
+ #end
+ </table>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <td class="content-block"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;"
+ valign="top">
+ <a href="$alert["eagleJobLink"]" class="btn-primary"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; color: #FFF; text-decoration: none; line-height: 2em; font-weight: bold; text-align: center; cursor: pointer; display: inline-block; border-radius: 5px; text-transform: capitalize; background-color: $alertColor; margin: 0; border-color: $alertColor; border-style: solid; border-width: 10px 20px;">
+ View job details on Eagle
+ </a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ <div class="footer"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; width: 100%; clear: both; color: #999; margin: 0; padding: 20px;">
+ <table width="100%"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+ <td class="aligncenter content-block"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 12px; vertical-align: top; color: #999; text-align: center; margin: 0; padding: 0 0 20px;"
+ align="center" valign="top">
+ Powered by <a href="http://eagle.incubator.apache.org"
+ style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 12px; color: #999; text-decoration: underline; margin: 0;">Apache
+ Eagle</a> (version: $version)
+ </td>
+ </tr>
+ </table>
+ </div>
+ </div>
</td>
+ <td style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0;"
+ valign="top"></td>
</tr>
</table>
</body>
-</html>
\ No newline at end of file
+</html>
+
+##<body itemscope itemtype="http://schema.org/EmailMessage"
+## style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; line-height: 1.6em; background-color: #f6f6f6; margin: 0;"
+## bgcolor="#f6f6f6">
+##<table class="body-wrap"
+## style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; width: 100%; background-color: #f6f6f6; margin: 0;"
+## bgcolor="#f6f6f6">
+## <tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
+## <td class="container" width="600"
+## style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; display: block !important; max-width: 600px !important; clear: both !important; margin: 0 auto;"
+## valign="top">
+## <div class="content"
+## style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; max-width: 600px; display: block; margin: 0 auto; padding: 20px;">
+## <!-- Eagle Body -->
+## <table class="invoice-items" cellpadding="0" cellspacing="0"
+## style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; width: 100%; margin: 0;">
+## <tr>
+## <!-- Title -->
+## <td align="center">
+## <h2>$alert["alertTitle"]</h2>
+## </td>
+## </tr>
+## <!-- Basic Information -->
+## <tr>
+## <td style="padding: 20px 0 10px 0;">
+## <p><b>Summery ($alert["reportRange"])</b></p>
+## </td>
+## </tr>
+## <tr>
+## <td>
+## <table class="tableBordered" width="580">
+## <tr>
+## <th>Metrics</th>
+## <th>Number of Jobs</th>
+## <th>Ratio</th>
+## </tr>
+## #foreach($item in $alert["summaryInfo"])
+## <tr>
+## <td>$item.status</td>
+## <td>$item.numOfJobs</td>
+## <td>$item.ratio</td>
+## </tr>
+## #end
+## </table>
+## </td>
+## </tr>
+##
+## <!-- Top Users for Failed Jobs -->
+## <tr>
+## <td style="padding: 20px 0 10px 0;">
+## <p><b>Top $alert["numTopUsers"] Users (Order by Number of Failed Jobs)</b></p>
+## </td>
+## </tr>
+## <tr>
+## <td>
+## <table class="tableBordered" width="580">
+## <tr>
+## <th>Name</th>
+## <th>Number of Failed Jobs</th>
+## </tr>
+## #foreach($userItem in $alert["failedJobUsers"].entrySet())
+## <tr>
+## <td>$userItem.key</td>
+## <td>$userItem.value</td>
+## </tr>
+## #end
+## </table>
+## </td>
+## </tr>
+## <tr>
+## <td style="padding: 20px 0 10px 0;">
+## <p>View more job information on <a href="$alert["eagleJobLink"]">Eagle</a></p>
+## </td>
+## </tr>
+##
+## <!-- Top Users for Failed Jobs -->
+## <tr>
+## <td style="padding: 20px 0 10px 0;">
+## <p><b>Top $alert["numTopUsers"] Users (Order by Number of Succeeded Jobs Running
+## over $alert[
+## "jobOvertimeLimit"] Hours)</b></p>
+## </td>
+## </tr>
+## <tr>
+## <td>
+## <table class="tableBordered" width="580">
+## <tr>
+## <th>Name</th>
+## <th>Number of Jobs Runing over $alert["jobOvertimeLimit"] hrs</th>
+## </tr>
+## #foreach($userItem in $alert["succeededJobUsers"].entrySet())
+## <tr>
+## <td>$userItem.key</td>
+## <td>$userItem.value</td>
+## </tr>
+## #end
+## </table>
+## </td>
+## </tr>
+##
+## <!-- Top Users for All Jobs -->
+## <tr>
+## <td style="padding: 20px 0 10px 0;">
+## <p><b>Top $alert["numTopUsers"] Users (Order by Number of Finished Jobs)</b></p>
+## </td>
+## </tr>
+## <tr>
+## <td>
+## <table class="tableBordered" width="580">
+## <tr>
+## <th>Name</th>
+## <th>Number of Finished Jobs</th>
+## </tr>
+## #foreach($userItem in $alert["finishedJobUsers"].entrySet())
+## <tr>
+## <td>$userItem.key</td>
+## <td>$userItem.value</td>
+## </tr>
+## #end
+## </table>
+## </td>
+## </tr>
+## </table>
+## </div>
+## </td>
+## </tr>
+##</table>
+##</body>
+##</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/3082b5e6/eagle-jpm/eagle-jpm-mr-history/src/main/resources/JobReportTemplatePure.vm
----------------------------------------------------------------------
diff --git a/eagle-jpm/eagle-jpm-mr-history/src/main/resources/JobReportTemplatePure.vm b/eagle-jpm/eagle-jpm-mr-history/src/main/resources/JobReportTemplatePure.vm
new file mode 100644
index 0000000..fef83da
--- /dev/null
+++ b/eagle-jpm/eagle-jpm-mr-history/src/main/resources/JobReportTemplatePure.vm
@@ -0,0 +1,141 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<!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">
+ #set ( $alert = $alertList[0] )
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <meta name="viewport" content="width=device-width"/>
+ <title>$alert["alertTitle"]</title>
+</head>
+<body>
+<table class="body">
+ <tr>
+ <td align="center" valign="top">
+ <!-- Eagle Body -->
+ <table width="580">
+ <tr>
+ <!-- Title -->
+ <td align="center">
+ <h2>$alert["alertTitle"]</h2>
+ </td>
+ </tr>
+
+ <!-- Basic Information -->
+ <tr>
+ <td style="padding: 20px 0 10px 0;">
+ <p><b>Summery ($alert["reportRange"])</b></p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <table class="tableBordered" width="580">
+ <tr>
+ <th>Metrics</th>
+ <th>Number of Jobs</th>
+ <th>Ratio</th>
+ </tr>
+ #foreach($item in $alert["summaryInfo"])
+ <tr>
+ <td>$item.status</td>
+ <td>$item.numOfJobs</td>
+ <td>$item.ratio</td>
+ </tr>
+ #end
+ </table>
+ </td>
+ </tr>
+
+ <!-- Top Users for Failed Jobs -->
+ <tr>
+ <td style="padding: 20px 0 10px 0;">
+ <p><b>Top $alert["numTopUsers"] Users (Order by Number of Failed Jobs)</b></p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <table class="tableBordered" width="580">
+ <tr>
+ <th>Name</th>
+ <th>Number of Failed Jobs</th>
+ </tr>
+ #foreach($userItem in $alert["failedJobUsers"].entrySet())
+ <tr>
+ <td>$userItem.key</td>
+ <td>$userItem.value</td>
+ </tr>
+ #end
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td style="padding: 20px 0 10px 0;">
+ <p>View more job information on <a href="$alert["eagleJobLink"]">Eagle</a></p>
+ </td>
+ </tr>
+
+ <!-- Top Users for Failed Jobs -->
+ <tr>
+ <td style="padding: 20px 0 10px 0;">
+ <p><b>Top $alert["numTopUsers"] Users (Order by Number of Succeeded Jobs Running over $alert["jobOvertimeLimit"] Hours)</b></p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <table class="tableBordered" width="580">
+ <tr>
+ <th>Name</th>
+ <th>Number of Jobs Runing over $alert["jobOvertimeLimit"] hrs</th>
+ </tr>
+ #foreach($userItem in $alert["succeededJobUsers"].entrySet())
+ <tr>
+ <td>$userItem.key</td>
+ <td>$userItem.value</td>
+ </tr>
+ #end
+ </table>
+ </td>
+ </tr>
+
+ <!-- Top Users for All Jobs -->
+ <tr>
+ <td style="padding: 20px 0 10px 0;">
+ <p><b>Top $alert["numTopUsers"] Users (Order by Number of Finished Jobs)</b></p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <table class="tableBordered" width="580">
+ <tr>
+ <th>Name</th>
+ <th>Number of Finished Jobs</th>
+ </tr>
+ #foreach($userItem in $alert["finishedJobUsers"].entrySet())
+ <tr>
+ <td>$userItem.key</td>
+ <td>$userItem.value</td>
+ </tr>
+ #end
+ </table>
+ </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/3082b5e6/eagle-jpm/eagle-jpm-mr-history/src/test/java/org/apache/eagle/jpm/mr/history/MRHistoryJobDailyReporterTest.java
----------------------------------------------------------------------
diff --git a/eagle-jpm/eagle-jpm-mr-history/src/test/java/org/apache/eagle/jpm/mr/history/MRHistoryJobDailyReporterTest.java b/eagle-jpm/eagle-jpm-mr-history/src/test/java/org/apache/eagle/jpm/mr/history/MRHistoryJobDailyReporterTest.java
index 13c3350..472d602 100644
--- a/eagle-jpm/eagle-jpm-mr-history/src/test/java/org/apache/eagle/jpm/mr/history/MRHistoryJobDailyReporterTest.java
+++ b/eagle-jpm/eagle-jpm-mr-history/src/test/java/org/apache/eagle/jpm/mr/history/MRHistoryJobDailyReporterTest.java
@@ -69,11 +69,11 @@ public class MRHistoryJobDailyReporterTest {
MRHistoryJobDailyReporter.JobSummeryInfo summeryInfo1 = new MRHistoryJobDailyReporter.JobSummeryInfo();
summeryInfo1.status = "failed";
summeryInfo1.numOfJobs = 10;
- summeryInfo1.ratio = "0.1";
+ summeryInfo1.ratio = 0.1;
MRHistoryJobDailyReporter.JobSummeryInfo summeryInfo2 = new MRHistoryJobDailyReporter.JobSummeryInfo();
summeryInfo2.status = "succeeded";
summeryInfo2.numOfJobs = 90;
- summeryInfo2.ratio = "0.9";
+ summeryInfo2.ratio = 0.9;
summeryInfos.add(summeryInfo1);
summeryInfos.add(summeryInfo2);
alertData.put(SUMMARY_INFO_KEY, summeryInfos);
@@ -83,7 +83,6 @@ public class MRHistoryJobDailyReporterTest {
failedJobUsers.put("bob", 97d);
alertData.put(FAILED_JOB_USERS_KEY, failedJobUsers);
-
Map<String,Double> succeededJobUsers = new TreeMap<>();
succeededJobUsers.put("alice1", 100d);
succeededJobUsers.put("bob1", 97d);
@@ -95,15 +94,14 @@ public class MRHistoryJobDailyReporterTest {
finishedJobUsers.put("bob2", 97d);
alertData.put(FINISHED_JOB_USERS_KEY, finishedJobUsers);
- alertData.put(ALERT_TITLE_KEY, "Daily Job Report");
+ alertData.put(ALERT_TITLE_KEY, "[TEST_CLUSTER] Daily Job Report");
alertData.put(NUM_TOP_USERS_KEY, 2);
alertData.put(JOB_OVERTIME_LIMIT_KEY, 6);
long currentTimestamp = System.currentTimeMillis();
alertData.put(REPORT_RANGE_KEY, String.format(" %s ~ %s %s",
DateTimeUtil.millisecondsToHumanDateWithSeconds(currentTimestamp - 6 * DateTimeUtil.ONEHOUR),
DateTimeUtil.millisecondsToHumanDateWithSeconds(currentTimestamp), DateTimeUtil.CURRENT_TIME_ZONE.getID()));
- alertData.put("joblink", "http://localhost:9090");
+ alertData.put(EAGLE_JOB_LINK_KEY, "http://localhost:9090/#/site/sandbox/jpm/statistics");
return alertData;
}
-
}
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/3082b5e6/eagle-jpm/eagle-jpm-mr-history/src/test/resources/JobReportTemplate.vm
----------------------------------------------------------------------
diff --git a/eagle-jpm/eagle-jpm-mr-history/src/test/resources/JobReportTemplate.vm b/eagle-jpm/eagle-jpm-mr-history/src/test/resources/JobReportTemplate.vm
deleted file mode 100644
index fef83da..0000000
--- a/eagle-jpm/eagle-jpm-mr-history/src/test/resources/JobReportTemplate.vm
+++ /dev/null
@@ -1,141 +0,0 @@
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one or more
- ~ contributor license agreements. See the NOTICE file distributed with
- ~ this work for additional information regarding copyright ownership.
- ~ The ASF licenses this file to You under the Apache License, Version 2.0
- ~ (the "License"); you may not use this file except in compliance with
- ~ the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-<!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">
- #set ( $alert = $alertList[0] )
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- <meta name="viewport" content="width=device-width"/>
- <title>$alert["alertTitle"]</title>
-</head>
-<body>
-<table class="body">
- <tr>
- <td align="center" valign="top">
- <!-- Eagle Body -->
- <table width="580">
- <tr>
- <!-- Title -->
- <td align="center">
- <h2>$alert["alertTitle"]</h2>
- </td>
- </tr>
-
- <!-- Basic Information -->
- <tr>
- <td style="padding: 20px 0 10px 0;">
- <p><b>Summery ($alert["reportRange"])</b></p>
- </td>
- </tr>
- <tr>
- <td>
- <table class="tableBordered" width="580">
- <tr>
- <th>Metrics</th>
- <th>Number of Jobs</th>
- <th>Ratio</th>
- </tr>
- #foreach($item in $alert["summaryInfo"])
- <tr>
- <td>$item.status</td>
- <td>$item.numOfJobs</td>
- <td>$item.ratio</td>
- </tr>
- #end
- </table>
- </td>
- </tr>
-
- <!-- Top Users for Failed Jobs -->
- <tr>
- <td style="padding: 20px 0 10px 0;">
- <p><b>Top $alert["numTopUsers"] Users (Order by Number of Failed Jobs)</b></p>
- </td>
- </tr>
- <tr>
- <td>
- <table class="tableBordered" width="580">
- <tr>
- <th>Name</th>
- <th>Number of Failed Jobs</th>
- </tr>
- #foreach($userItem in $alert["failedJobUsers"].entrySet())
- <tr>
- <td>$userItem.key</td>
- <td>$userItem.value</td>
- </tr>
- #end
- </table>
- </td>
- </tr>
- <tr>
- <td style="padding: 20px 0 10px 0;">
- <p>View more job information on <a href="$alert["eagleJobLink"]">Eagle</a></p>
- </td>
- </tr>
-
- <!-- Top Users for Failed Jobs -->
- <tr>
- <td style="padding: 20px 0 10px 0;">
- <p><b>Top $alert["numTopUsers"] Users (Order by Number of Succeeded Jobs Running over $alert["jobOvertimeLimit"] Hours)</b></p>
- </td>
- </tr>
- <tr>
- <td>
- <table class="tableBordered" width="580">
- <tr>
- <th>Name</th>
- <th>Number of Jobs Runing over $alert["jobOvertimeLimit"] hrs</th>
- </tr>
- #foreach($userItem in $alert["succeededJobUsers"].entrySet())
- <tr>
- <td>$userItem.key</td>
- <td>$userItem.value</td>
- </tr>
- #end
- </table>
- </td>
- </tr>
-
- <!-- Top Users for All Jobs -->
- <tr>
- <td style="padding: 20px 0 10px 0;">
- <p><b>Top $alert["numTopUsers"] Users (Order by Number of Finished Jobs)</b></p>
- </td>
- </tr>
- <tr>
- <td>
- <table class="tableBordered" width="580">
- <tr>
- <th>Name</th>
- <th>Number of Finished Jobs</th>
- </tr>
- #foreach($userItem in $alert["finishedJobUsers"].entrySet())
- <tr>
- <td>$userItem.key</td>
- <td>$userItem.value</td>
- </tr>
- #end
- </table>
- </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-</body>
-</html>
\ No newline at end of file