You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2018/02/04 00:51:38 UTC

[35/50] [abbrv] kylin git commit: KYLIN-2909 refactor to host templates in each modules

KYLIN-2909 refactor to host templates in each modules

This closes #91


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/74e3f614
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/74e3f614
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/74e3f614

Branch: refs/heads/sync
Commit: 74e3f614d6a9cc2807865b8fb210836880b8da85
Parents: c96e1b1
Author: lidongsjtu <li...@apache.org>
Authored: Sun Jan 28 19:02:10 2018 +0800
Committer: lidongsjtu <li...@apache.org>
Committed: Sun Jan 28 19:42:26 2018 +0800

----------------------------------------------------------------------
 core-common/pom.xml                             |  30 +-
 .../kylin/common/util/EmailTemplateEnum.java    |  49 ---
 .../kylin/common/util/EmailTemplateFactory.java |  93 -----
 .../kylin/common/util/MailTemplateProvider.java |  77 ++++
 .../main/resources/templates/JOB_DISCARD.ftl    | 275 --------------
 .../src/main/resources/templates/JOB_ERROR.ftl  | 372 -------------------
 .../main/resources/templates/JOB_SUCCEED.ftl    | 274 --------------
 .../templates/METADATA_PERSIST_FAIL.ftl         | 179 ---------
 .../common/util/EmailTemplateFactoryTest.java   |  32 --
 .../kylin/job/execution/AbstractExecutable.java |  10 +-
 .../kylin/job/util/ExecutableStateUtil.java     |  38 --
 .../kylin/job/util/MailNotificationUtil.java    |  81 ++++
 .../resources/mail_templates/JOB_DISCARD.ftl    | 275 ++++++++++++++
 .../main/resources/mail_templates/JOB_ERROR.ftl | 372 +++++++++++++++++++
 .../resources/mail_templates/JOB_SUCCEED.ftl    | 274 ++++++++++++++
 .../mail_templates/METADATA_PERSIST_FAIL.ftl    | 179 +++++++++
 .../job/util/MailNotificationUtilTest.java      |  65 ++++
 .../org/apache/kylin/engine/mr/CubingJob.java   |  22 +-
 18 files changed, 1337 insertions(+), 1360 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/74e3f614/core-common/pom.xml
----------------------------------------------------------------------
diff --git a/core-common/pom.xml b/core-common/pom.xml
index 47d16f0..4d12a47 100644
--- a/core-common/pom.xml
+++ b/core-common/pom.xml
@@ -64,7 +64,7 @@
             <groupId>com.jcraft</groupId>
             <artifactId>jsch</artifactId>
         </dependency>
-        
+
         <!-- Metric & Tracing -->
         <dependency>
             <groupId>org.apache.kylin</groupId>
@@ -77,7 +77,7 @@
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
-        
+
         <dependency>
             <groupId>io.dropwizard.metrics</groupId>
             <artifactId>metrics-jvm</artifactId>
@@ -96,30 +96,4 @@
             <version>0.1.2</version>
         </dependency>
     </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>copy-templates</id>
-                        <phase>process-sources</phase>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>${basedir}/target/classes/templates</outputDirectory>
-                            <resources>
-                                <resource>
-                                    <directory>${basedir}/src/main/resources/templates</directory>
-                                </resource>
-                            </resources>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
 </project>

http://git-wip-us.apache.org/repos/asf/kylin/blob/74e3f614/core-common/src/main/java/org/apache/kylin/common/util/EmailTemplateEnum.java
----------------------------------------------------------------------
diff --git a/core-common/src/main/java/org/apache/kylin/common/util/EmailTemplateEnum.java b/core-common/src/main/java/org/apache/kylin/common/util/EmailTemplateEnum.java
deleted file mode 100644
index 699aa7a..0000000
--- a/core-common/src/main/java/org/apache/kylin/common/util/EmailTemplateEnum.java
+++ /dev/null
@@ -1,49 +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.
-*/
-
-package org.apache.kylin.common.util;
-
-import com.google.common.base.Strings;
-
-public enum EmailTemplateEnum {
-    JOB_DISCARD("JOB_DISCARD"), JOB_ERROR("JOB_ERROR"), JOB_SUCCEED("JOB_SUCCEED"), //
-    METADATA_PERSIST_FAIL("METADATA_PERSIST_FAIL");
-
-    private final String templateName;
-
-    EmailTemplateEnum(String name) {
-        this.templateName = name;
-    }
-
-    public static EmailTemplateEnum getByName(String name) {
-        if (Strings.isNullOrEmpty(name)) {
-            return null;
-        }
-        for (EmailTemplateEnum value : EmailTemplateEnum.values()) {
-            if (value.templateName.equalsIgnoreCase(name)) {
-                return value;
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public String toString() {
-        return templateName;
-    }
-}

http://git-wip-us.apache.org/repos/asf/kylin/blob/74e3f614/core-common/src/main/java/org/apache/kylin/common/util/EmailTemplateFactory.java
----------------------------------------------------------------------
diff --git a/core-common/src/main/java/org/apache/kylin/common/util/EmailTemplateFactory.java b/core-common/src/main/java/org/apache/kylin/common/util/EmailTemplateFactory.java
deleted file mode 100644
index 2acea5d..0000000
--- a/core-common/src/main/java/org/apache/kylin/common/util/EmailTemplateFactory.java
+++ /dev/null
@@ -1,93 +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.
-*/
-
-package org.apache.kylin.common.util;
-
-import java.io.StringWriter;
-import java.io.Writer;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.Map;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Joiner;
-
-import freemarker.template.Configuration;
-import freemarker.template.Template;
-
-public class EmailTemplateFactory {
-
-    private static final Logger logger = LoggerFactory.getLogger(EmailTemplateFactory.class);
-
-    public static final String NA = "NA";
-
-    private static String localHostName;
-    static {
-        try {
-            localHostName = InetAddress.getLocalHost().getCanonicalHostName();
-        } catch (UnknownHostException e) {
-            localHostName = "UNKNOWN";
-        }
-    }
-
-    public static String getLocalHostName() {
-        return localHostName;
-    }
-
-    public static String getEmailTitle(String... titleParts) {
-        return "[" + Joiner.on("]-[").join(titleParts).toString() + "]";
-    }
-
-    private static EmailTemplateFactory instance = new EmailTemplateFactory();
-
-    public static EmailTemplateFactory getInstance() {
-        return instance;
-    }
-
-    private final Configuration configuration;
-
-    private EmailTemplateFactory() {
-        configuration = new Configuration(Configuration.getVersion());
-        configuration.setClassForTemplateLoading(EmailTemplateFactory.class, "/templates");
-        configuration.setDefaultEncoding("UTF-8");
-    }
-
-    public String buildEmailContent(EmailTemplateEnum state, Map<String, Object> root) {
-        try {
-            Template template = getTemplate(state);
-            if (template == null) {
-                return "Cannot find email template for " + state;
-            }
-            try (Writer out = new StringWriter()) {
-                template.process(root, out);
-                return out.toString();
-            }
-        } catch (Throwable e) {
-            return e.getLocalizedMessage();
-        }
-    }
-
-    private Template getTemplate(EmailTemplateEnum state) throws Throwable {
-        if (state == null) {
-            return null;
-        }
-        return configuration.getTemplate(state.toString() + ".ftl");
-    }
-}

http://git-wip-us.apache.org/repos/asf/kylin/blob/74e3f614/core-common/src/main/java/org/apache/kylin/common/util/MailTemplateProvider.java
----------------------------------------------------------------------
diff --git a/core-common/src/main/java/org/apache/kylin/common/util/MailTemplateProvider.java b/core-common/src/main/java/org/apache/kylin/common/util/MailTemplateProvider.java
new file mode 100644
index 0000000..d403fbc
--- /dev/null
+++ b/core-common/src/main/java/org/apache/kylin/common/util/MailTemplateProvider.java
@@ -0,0 +1,77 @@
+/*
+ * 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.
+*/
+
+package org.apache.kylin.common.util;
+
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.Map;
+
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+
+/**
+ * Use a key to find a template for email.
+ *
+ * The template file is [KEY].ftl file under /mail_templates directory with classloader.
+ */
+public class MailTemplateProvider {
+
+    private static final Logger logger = LoggerFactory.getLogger(MailTemplateProvider.class);
+
+    private static MailTemplateProvider DEFAULT_INSTANCE = new MailTemplateProvider();
+
+    public static MailTemplateProvider getInstance() {
+        return DEFAULT_INSTANCE;
+    }
+
+    private final Configuration configuration;
+
+    private MailTemplateProvider() {
+        configuration = new Configuration(Configuration.getVersion());
+        configuration.setClassForTemplateLoading(MailTemplateProvider.class, "/mail_templates");
+        configuration.setDefaultEncoding("UTF-8");
+    }
+
+    public String buildMailContent(String tplKey, Map<String, Object> data) {
+        try {
+            Template template = getTemplate(tplKey);
+            if (template == null) {
+                return "Cannot find email template for " + tplKey;
+            }
+
+            try (Writer out = new StringWriter()) {
+                template.process(data, out);
+                return out.toString();
+            }
+        } catch (Throwable e) {
+            return e.getLocalizedMessage();
+        }
+    }
+
+    private Template getTemplate(String tplKey) throws Throwable {
+        if (StringUtils.isEmpty(tplKey)) {
+            return null;
+        }
+        return configuration.getTemplate(tplKey + ".ftl");
+    }
+}

http://git-wip-us.apache.org/repos/asf/kylin/blob/74e3f614/core-common/src/main/resources/templates/JOB_DISCARD.ftl
----------------------------------------------------------------------
diff --git a/core-common/src/main/resources/templates/JOB_DISCARD.ftl b/core-common/src/main/resources/templates/JOB_DISCARD.ftl
deleted file mode 100644
index b00e9aa..0000000
--- a/core-common/src/main/resources/templates/JOB_DISCARD.ftl
+++ /dev/null
@@ -1,275 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-    <meta http-equiv="Content-Type" content="Multipart/Alternative; charset=UTF-8"/>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
-</head>
-
-<style>
-    html {
-        font-size: 10px;
-    }
-
-    * {
-        box-sizing: border-box;
-    }
-
-    a:hover,
-    a:focus {
-        color: #23527c;
-        text-decoration: underline;
-    }
-
-    a:focus {
-        outline: 5px auto -webkit-focus-ring-color;
-        outline-offset: -2px;
-    }
-</style>
-
-<body>
-<div style="margin-left:5%;margin-right:5%;font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-<span style="
-    line-height: 1.1;font-size: 18px;">
-    <p style="text-align:left;">Dear Kylin user,</p>
-    <p>It's a pity that the job is discarded. Thank you for using Kylin.</p>
-</span>
-    <hr style="margin-top: 20px;
-    margin-bottom: 20px;
-    border: 0;
-    border-top: 1px solid #eee;">
-    <h1>
-    <span style="display: inline;
-            background-color: #607D8B;
-            color: #fff;
-            line-height: 1;
-            font-weight: 700;
-            font-size:36px;
-            text-align: center;">&nbsp;Discarded&nbsp;</span>
-    </h1>
-    <hr style="margin-top: 20px;
-            margin-bottom: 20px;
-            border: 0;
-            border-top: 1px solid #eee;">
-    <table cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse;border:1px solid #f8f8f8">
-
-        <tr>
-
-            <td style="padding: 10px 15px;
-                    background-color: #eeeeee;
-                    border:1px solid #f8f8f8;">
-                <h4 style="margin-top: 0;
-                        margin-bottom: 0;
-                        font-size: 16px;
-                        color: inherit;
-                        color: #404040;
-                        font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-                ${job_name}
-                </h4>
-            </td>
-        </tr>
-
-        <tr>
-
-            <td style="padding: 10px 15px;
-                    background-color: #eeeeee;
-                    border:1px solid #f8f8f8;">
-                <h4 style="margin-top: 0;
-                        margin-bottom: 0;
-                        font-size: 16px;
-                        color: inherit;
-                        color: #404040;
-                        font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-                ${env_name}
-                </h4>
-            </td>
-        </tr>
-
-        <tr>
-
-            <td style="padding: 15px;">
-                <table cellpadding="0" cellspacing="0" width="100%"
-                       style="margin-bottom: 20px;border:1 solid #ddd;border-collapse: collapse;font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">Submitter
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${submitter}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">Job Engine
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${job_engine}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">Project
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${project_name}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">Cube Name
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${cube_name}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">
-                            Source Records Count
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${source_records_count}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">Start Time
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${start_time}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">
-                            Duration
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${duration}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">MR Waiting Time
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${mr_waiting}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">
-                            Last Update Time
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${last_update_time}
-                        </td>
-                    </tr>
-                </table>
-            </td>
-        </tr>
-    </table>
-    <hr style="margin-top: 20px;
-    margin-bottom: 20px;
-    border: 0;
-    border-top: 1px solid #eee;">
-    <h4 style="font-weight: 500;
-    line-height: 1.1;font-size:18px;">
-        <p>Best Wishes!</p>
-        <p style="margin: 0 0 10px;"><b>Kylin Team</b></p>
-    </h4>
-</div>
-</body>
-
-</html>Ò
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/kylin/blob/74e3f614/core-common/src/main/resources/templates/JOB_ERROR.ftl
----------------------------------------------------------------------
diff --git a/core-common/src/main/resources/templates/JOB_ERROR.ftl b/core-common/src/main/resources/templates/JOB_ERROR.ftl
deleted file mode 100644
index 6012037..0000000
--- a/core-common/src/main/resources/templates/JOB_ERROR.ftl
+++ /dev/null
@@ -1,372 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-    <meta http-equiv="Content-Type" content="Multipart/Alternative; charset=UTF-8"/>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
-</head>
-
-<style>
-    html {
-        font-size: 10px;
-    }
-
-    * {
-        box-sizing: border-box;
-    }
-
-    a:hover,
-    a:focus {
-        color: #23527c;
-        text-decoration: underline;
-    }
-
-    a:focus {
-        outline: 5px auto -webkit-focus-ring-color;
-        outline-offset: -2px;
-    }
-</style>
-
-<body>
-<div style="margin-left:5%;margin-right:5%;font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-<span style="
-    line-height: 1.1;font-size: 18px;">
-    <p style="text-align:left;">Dear Kylin user,</p>
-    <p>This cube <strong>failure</strong> may be caused by backend platform being busy, please try again.</p>
-    <p>Thank you for using Kylin and we apologize for the inconvenience.</p>
-</span>
-    <hr style="margin-top: 20px;
-    margin-bottom: 20px;
-    border: 0;
-    border-top: 1px solid #eee;">
-    <h1>
-    <span style="display: inline;
-            background-color: #d9534f;
-            color: #fff;
-            line-height: 1;
-            font-weight: 700;
-            font-size:36px;
-            text-align: center;">&nbsp;Error&nbsp;</span>
-    </h1>
-    <hr style="margin-top: 20px;
-            margin-bottom: 20px;
-            border: 0;
-            border-top: 1px solid #eee;">
-
-    <table cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse;border:1px solid #ebccd1;">
-
-        <tr>
-
-            <td style="padding: 10px 15px;
-                    background-color: #f2dede;
-                    border:1px solid #ebccd1;">
-                <h4 style="margin-top: 0;
-                        margin-bottom: 0;
-                        font-size: 16px;
-                        color: inherit;
-                        color: #a94442;
-                        font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-                ${job_name}
-                </h4>
-            </td>
-        </tr>
-        <tr>
-
-            <td style="padding: 10px 15px;
-                    background-color: #f2dede;
-                    border:1px solid #ebccd1;">
-                <h4 style="margin-top: 0;
-                        margin-bottom: 0;
-                        font-size: 16px;
-                        color: inherit;
-                        color: #a94442;
-                        font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-                ${env_name}
-                </h4>
-            </td>
-        </tr>
-        <tr>
-
-            <td style="padding: 15px;">
-                <table cellpadding="0" cellspacing="0" width="100%"
-                       style="margin-bottom: 20px;border:1 solid #ddd;border-collapse: collapse;font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">Submitter
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${submitter}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">Job Engine
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${job_engine}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">Project
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${project_name}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">Cube Name
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${cube_name}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">
-                            Source Records Count
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${source_records_count}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">Start Time
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${start_time}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">
-                            Duration
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${duration}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">MR Waiting Time
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${mr_waiting}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">
-                            Last Update Time
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${last_update_time}
-                        </td>
-                    </tr>
-                </table>
-            </td>
-        </tr>
-
-        <tr>
-
-            <td style="padding: 10px 15px;
-                    background-color: #f2dede;
-                    border:1px solid #ebccd1;">
-                <h4 style="margin-top: 0;
-                        margin-bottom: 0;
-                        font-size: 16px;
-                        color: inherit;
-                        color: #a94442;
-                        font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-                    Job Error Details
-                </h4>
-            </td>
-        </tr>
-        <tr>
-
-            <td style="padding: 15px;">
-                <table cellpadding="0" cellspacing="0" width="100%"
-                       style="margin-bottom: 20px;border:1 solid #ddd;border-collapse: collapse;font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">
-                            Error Step
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${error_step}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">
-                            MR Job
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${mr_job_id}
-                        </td>
-                    </tr>
-                </table>
-            </td>
-        </tr>
-
-        <tr>
-
-            <td style="padding: 10px 15px;
-                    background-color: #f2dede;
-                    border:1px solid #ebccd1;">
-                <h4 style="margin-top: 0;
-                        margin-bottom: 0;
-                        font-size: 16px;
-                        color: inherit;
-                        color: #a94442;
-                        font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-                    Logs
-                </h4>
-            </td>
-        </tr>
-        <tr>
-
-            <td style="padding: 15px;">
-                <table cellpadding="0" cellspacing="0" width="100%"
-                       style="margin-bottom: 20px;border:1 solid #ddd;border-collapse: collapse;font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-                    <tr>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-
-                            <pre style="white-space: pre-wrap;">${error_log}</pre>
-                        </td>
-                    </tr>
-                </table>
-            </td>
-        </tr>
-    </table>
-    <hr style="margin-top: 20px;
-    margin-bottom: 20px;
-    border: 0;
-    border-top: 1px solid #eee;">
-    <h4 style="font-weight: 500;
-    line-height: 1.1;font-size:18px;">
-        <p>Best Wishes!</p>
-        <p style="margin: 0 0 10px;"><b>Kylin Team</b></p>
-    </h4>
-</div>
-</body>
-
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/kylin/blob/74e3f614/core-common/src/main/resources/templates/JOB_SUCCEED.ftl
----------------------------------------------------------------------
diff --git a/core-common/src/main/resources/templates/JOB_SUCCEED.ftl b/core-common/src/main/resources/templates/JOB_SUCCEED.ftl
deleted file mode 100644
index f1fb45c..0000000
--- a/core-common/src/main/resources/templates/JOB_SUCCEED.ftl
+++ /dev/null
@@ -1,274 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-    <meta http-equiv="Content-Type" content="Multipart/Alternative; charset=UTF-8"/>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
-</head>
-
-<style>
-    html {
-        font-size: 10px;
-    }
-
-    * {
-        box-sizing: border-box;
-    }
-
-    a:hover,
-    a:focus {
-        color: #23527c;
-        text-decoration: underline;
-    }
-
-    a:focus {
-        outline: 5px auto -webkit-focus-ring-color;
-        outline-offset: -2px;
-    }
-</style>
-
-<body>
-<div style="margin-left:5%;margin-right:5%;font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-<span style="line-height: 1.1;font-size: 18px;">
-    <p style="text-align:left;">Dear Kylin user,</p>
-    <p>Congratulations! Please feel free to query based on kylin cube. Thank you for using Kylin.</p>
-</span>
-    <hr style="margin-top: 20px;
-            margin-bottom: 20px;
-            border: 0;
-            border-top: 1px solid #eee;">
-    <h1>
-    <span style="display: inline;
-            background-color: #5cb85c;
-            color: #fff;
-            line-height: 1;
-            font-weight: 700;
-            font-size:36px;
-            text-align: center;">&nbsp;Succeed&nbsp;</span>
-    </h1>
-    <hr style="margin-top: 20px;
-            margin-bottom: 20px;
-            border: 0;
-            border-top: 1px solid #eee;">
-    <table cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse;border:1px solid #d6e9c6;">
-
-        <tr>
-
-            <td style="padding: 10px 15px;
-                    background-color: #dff0d8;
-                    border:1px solid #d6e9c6;">
-                <h4 style="margin-top: 0;
-                        margin-bottom: 0;
-                        font-size: 16px;
-                        color: inherit;
-                        color: #3c763d;
-                        font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-                ${job_name}
-                </h4>
-            </td>
-        </tr>
-
-        <tr>
-
-            <td style="padding: 10px 15px;
-                    background-color: #dff0d8;
-                    border:1px solid #d6e9c6;">
-                <h4 style="margin-top: 0;
-                        margin-bottom: 0;
-                        font-size: 16px;
-                        color: inherit;
-                        color: #3c763d;
-                        font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-                ${env_name}
-                </h4>
-            </td>
-        </tr>
-
-        <tr>
-
-            <td style="padding: 15px;">
-                <table cellpadding="0" cellspacing="0" width="100%"
-                       style="margin-bottom: 20px;border:1 solid #ddd;border-collapse: collapse;font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">Submitter
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${submitter}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">Job Engine
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${job_engine}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">Project
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${project_name}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">Cube Name
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${cube_name}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">
-                            Source Records Count
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${source_records_count}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">Start Time
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${start_time}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">
-                            Duration
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${duration}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">MR Waiting Time
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${mr_waiting}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">
-                            Last Update Time
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${last_update_time}
-                        </td>
-                    </tr>
-                </table>
-            </td>
-        </tr>
-    </table>
-    <hr style="margin-top: 20px;
-            margin-bottom: 20px;
-            border: 0;
-            border-top: 1px solid #eee;">
-    <h4 style="font-weight: 500;
-            line-height: 1.1;font-size:18px;">
-        <p>Best Wishes!</p>
-        <p style="margin: 0 0 10px;"><b>Kylin Team</b></p>
-    </h4>
-</div>
-</body>
-
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/kylin/blob/74e3f614/core-common/src/main/resources/templates/METADATA_PERSIST_FAIL.ftl
----------------------------------------------------------------------
diff --git a/core-common/src/main/resources/templates/METADATA_PERSIST_FAIL.ftl b/core-common/src/main/resources/templates/METADATA_PERSIST_FAIL.ftl
deleted file mode 100644
index 2511b57..0000000
--- a/core-common/src/main/resources/templates/METADATA_PERSIST_FAIL.ftl
+++ /dev/null
@@ -1,179 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
-    <meta http-equiv="Content-Type" content="Multipart/Alternative; charset=UTF-8"/>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
-</head>
-
-<style>
-    html {
-        font-size: 10px;
-    }
-
-    * {
-        box-sizing: border-box;
-    }
-
-    a:hover,
-    a:focus {
-        color: #23527c;
-        text-decoration: underline;
-    }
-
-    a:focus {
-        outline: 5px auto -webkit-focus-ring-color;
-        outline-offset: -2px;
-    }
-</style>
-
-<body>
-<div style="margin-left:5%;margin-right:5%;font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-        <span style="line-height: 1.1;font-size: 18px;">
-    <p style="text-align:left;">Dear Kylin user,</p>
-    <p>Kylin fails to update the job output due to some hbase issue. Need to ask Hadoop Service Team for help as soon as possible.</p>
-</span>
-    <hr style="margin-top: 20px;
-            margin-bottom: 20px;
-            border: 0;
-            border-top: 1px solid #eee;">
-    <h1>
-            <span style="display: inline;
-                    background-color: #d9534f;
-                    color: #fff;
-                    line-height: 1;
-                    font-weight: 700;
-                    font-size:36px;
-                    text-align: center;">&nbsp;Error&nbsp;</span>
-    </h1>
-    <hr style="margin-top: 20px;
-            margin-bottom: 20px;
-            border: 0;
-            border-top: 1px solid #eee;">
-    <table cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse;border:1px solid #ebccd1;">
-
-        <tr>
-
-            <td style="padding: 10px 15px;
-                    background-color: #f2dede;
-                    border:1px solid #ebccd1;">
-                <h4 style="margin-top: 0;
-                        margin-bottom: 0;
-                        font-size: 16px;
-                        color: inherit;
-                        color: #a94442;
-                        font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-                ${job_name}
-                </h4>
-            </td>
-        </tr>
-
-        <tr>
-
-            <td style="padding: 10px 15px;
-                    background-color: #f2dede;
-                    border:1px solid #ebccd1;">
-                <h4 style="margin-top: 0;
-                        margin-bottom: 0;
-                        font-size: 16px;
-                        color: inherit;
-                        color: #a94442;
-                        font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-                ${env_name}
-                </h4>
-            </td>
-        </tr>
-
-        <tr>
-
-            <td style="padding: 15px;">
-                <table cellpadding="0" cellspacing="0" width="100%"
-                       style="margin-bottom: 20px;border:1 solid #ddd;border-collapse: collapse;font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">Submitter
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${submitter}
-                        </td>
-                    </tr>
-                    <tr>
-                        <th width="30%" style="padding: 8px;
-                                            line-height: 1.42857143;
-                                            vertical-align: top;
-                                            border: 1px solid #ddd;
-                                            text-align: left;
-                                            font-size: medium;
-                                            font-style: normal;">Job Engine
-                        </th>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                        ${job_engine}
-                        </td>
-                    </tr>
-                </table>
-            </td>
-        </tr>
-
-        <tr>
-
-            <td style="padding: 10px 15px;
-                    background-color: #f2dede;
-                    border:1px solid #ebccd1;">
-                <h4 style="margin-top: 0;
-                        margin-bottom: 0;
-                        font-size: 16px;
-                        color: inherit;
-                        color: #a94442;
-                        font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-                    Logs
-                </h4>
-            </td>
-        </tr>
-        <tr>
-
-            <td style="padding: 15px;">
-                <table cellpadding="0" cellspacing="0" width="100%"
-                       style="margin-bottom: 20px;border:1 solid #ddd;border-collapse: collapse;font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
-                    <tr>
-                        <td style="padding: 8px;
-                                line-height: 1.42857143;
-                                vertical-align: top;
-                                border: 1px solid #ddd;
-                                font-size: medium;
-                                font-style: normal;">
-                            <pre style="white-space: pre-wrap;">${error_log}</pre>
-                        </td>
-                    </tr>
-                </table>
-            </td>
-        </tr>
-    </table>
-    <hr style="margin-top: 20px;
-    margin-bottom: 20px;
-    border: 0;
-    border-top: 1px solid #eee;">
-    <h4 style="font-weight: 500;
-            line-height: 1.1;font-size:18px;">
-        <p>Best Wishes!</p>
-        <p style="margin: 0 0 10px;"><b>Kylin Team</b></p>
-    </h4>
-</div>
-</body>
-
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/kylin/blob/74e3f614/core-common/src/test/java/org/apache/kylin/common/util/EmailTemplateFactoryTest.java
----------------------------------------------------------------------
diff --git a/core-common/src/test/java/org/apache/kylin/common/util/EmailTemplateFactoryTest.java b/core-common/src/test/java/org/apache/kylin/common/util/EmailTemplateFactoryTest.java
deleted file mode 100644
index 6acbd75..0000000
--- a/core-common/src/test/java/org/apache/kylin/common/util/EmailTemplateFactoryTest.java
+++ /dev/null
@@ -1,32 +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.
-*/
-
-package org.apache.kylin.common.util;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-public class EmailTemplateFactoryTest {
-
-    @Test
-    public void testGetEmailTitle() {
-        String[] titleParts = new String[] { "JOB", "SUCCEED" };
-        Assert.assertEquals("[" + titleParts[0] + "]-[" + titleParts[1] + "]",
-                EmailTemplateFactory.getEmailTitle(titleParts));
-    }
-}

http://git-wip-us.apache.org/repos/asf/kylin/blob/74e3f614/core-job/src/main/java/org/apache/kylin/job/execution/AbstractExecutable.java
----------------------------------------------------------------------
diff --git a/core-job/src/main/java/org/apache/kylin/job/execution/AbstractExecutable.java b/core-job/src/main/java/org/apache/kylin/job/execution/AbstractExecutable.java
index f4015bf..1a84871 100644
--- a/core-job/src/main/java/org/apache/kylin/job/execution/AbstractExecutable.java
+++ b/core-job/src/main/java/org/apache/kylin/job/execution/AbstractExecutable.java
@@ -29,14 +29,13 @@ import java.util.regex.Matcher;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.kylin.common.KylinConfig;
-import org.apache.kylin.common.util.EmailTemplateEnum;
-import org.apache.kylin.common.util.EmailTemplateFactory;
 import org.apache.kylin.common.util.MailService;
 import org.apache.kylin.common.util.Pair;
 import org.apache.kylin.common.util.StringUtil;
 import org.apache.kylin.job.exception.ExecuteException;
 import org.apache.kylin.job.exception.PersistentException;
 import org.apache.kylin.job.impl.threadpool.DefaultContext;
+import org.apache.kylin.job.util.MailNotificationUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -194,13 +193,12 @@ public abstract class AbstractExecutable implements Executable, Idempotent {
         dataMap.put("job_name", getName());
         dataMap.put("env_name", context.getConfig().getDeployEnv());
         dataMap.put("submitter", StringUtil.noBlank(getSubmitter(), "missing submitter"));
-        dataMap.put("job_engine", EmailTemplateFactory.getLocalHostName());
+        dataMap.put("job_engine", MailNotificationUtil.getLocalHostName());
         dataMap.put("error_log",
                 Matcher.quoteReplacement(StringUtil.noBlank(exception.getMessage(), "no error message")));
 
-        String content = EmailTemplateFactory.getInstance().buildEmailContent(EmailTemplateEnum.METADATA_PERSIST_FAIL,
-                dataMap);
-        String title = EmailTemplateFactory.getEmailTitle("METADATA PERSIST", "FAIL",
+        String content = MailNotificationUtil.getMailContent(MailNotificationUtil.METADATA_PERSIST_FAIL, dataMap);
+        String title = MailNotificationUtil.getMailTitle("METADATA PERSIST", "FAIL",
                 context.getConfig().getDeployEnv());
 
         new MailService(context.getConfig()).sendMail(users, title, content);

http://git-wip-us.apache.org/repos/asf/kylin/blob/74e3f614/core-job/src/main/java/org/apache/kylin/job/util/ExecutableStateUtil.java
----------------------------------------------------------------------
diff --git a/core-job/src/main/java/org/apache/kylin/job/util/ExecutableStateUtil.java b/core-job/src/main/java/org/apache/kylin/job/util/ExecutableStateUtil.java
deleted file mode 100644
index 66f806c..0000000
--- a/core-job/src/main/java/org/apache/kylin/job/util/ExecutableStateUtil.java
+++ /dev/null
@@ -1,38 +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.
-*/
-
-package org.apache.kylin.job.util;
-
-import org.apache.kylin.common.util.EmailTemplateEnum;
-import org.apache.kylin.job.execution.ExecutableState;
-
-public class ExecutableStateUtil {
-
-    public static EmailTemplateEnum getEmailTemplateEnum(ExecutableState state) {
-        switch (state) {
-        case ERROR:
-            return EmailTemplateEnum.JOB_ERROR;
-        case DISCARDED:
-            return EmailTemplateEnum.JOB_DISCARD;
-        case SUCCEED:
-            return EmailTemplateEnum.JOB_SUCCEED;
-        default:
-            return null;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/kylin/blob/74e3f614/core-job/src/main/java/org/apache/kylin/job/util/MailNotificationUtil.java
----------------------------------------------------------------------
diff --git a/core-job/src/main/java/org/apache/kylin/job/util/MailNotificationUtil.java b/core-job/src/main/java/org/apache/kylin/job/util/MailNotificationUtil.java
new file mode 100644
index 0000000..31c5b20
--- /dev/null
+++ b/core-job/src/main/java/org/apache/kylin/job/util/MailNotificationUtil.java
@@ -0,0 +1,81 @@
+/*
+ * 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.
+*/
+
+package org.apache.kylin.job.util;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.Map;
+
+import org.apache.kylin.common.util.MailTemplateProvider;
+import org.apache.kylin.job.execution.ExecutableState;
+
+import com.google.common.base.Joiner;
+
+public class MailNotificationUtil {
+    public static final String JOB_ERROR = "JOB_ERROR";
+    public static final String JOB_DISCARD = "JOB_DISCARD";
+    public static final String JOB_SUCCEED = "JOB_SUCCEED";
+    public static final String METADATA_PERSIST_FAIL = "METADATA_PERSIST_FAIL";
+
+    public static final String NA = "NA";
+
+    private static String localHostName;
+
+    static {
+        try {
+            localHostName = InetAddress.getLocalHost().getCanonicalHostName();
+        } catch (UnknownHostException e) {
+            localHostName = "UNKNOWN";
+        }
+    }
+
+    private static String getMailTemplateKey(ExecutableState state) {
+        switch (state) {
+        case ERROR:
+            return JOB_ERROR;
+        case DISCARDED:
+            return JOB_DISCARD;
+        case SUCCEED:
+            return JOB_SUCCEED;
+        default:
+            return null;
+        }
+    }
+
+    public static String getLocalHostName() {
+        return localHostName;
+    }
+
+    public static String getMailContent(ExecutableState state, Map<String, Object> dataMap) {
+        return MailTemplateProvider.getInstance().buildMailContent(MailNotificationUtil.getMailTemplateKey(state),
+                dataMap);
+    }
+
+    public static String getMailContent(String key, Map<String, Object> dataMap) {
+        return MailTemplateProvider.getInstance().buildMailContent(key, dataMap);
+    }
+
+    public static String getMailTitle(String... titleParts) {
+        return "[" + Joiner.on("]-[").join(titleParts) + "]";
+    }
+
+    public static boolean hasMailNotification(ExecutableState state) {
+        return getMailTemplateKey(state) != null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/kylin/blob/74e3f614/core-job/src/main/resources/mail_templates/JOB_DISCARD.ftl
----------------------------------------------------------------------
diff --git a/core-job/src/main/resources/mail_templates/JOB_DISCARD.ftl b/core-job/src/main/resources/mail_templates/JOB_DISCARD.ftl
new file mode 100644
index 0000000..9712982
--- /dev/null
+++ b/core-job/src/main/resources/mail_templates/JOB_DISCARD.ftl
@@ -0,0 +1,275 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+    <meta http-equiv="Content-Type" content="Multipart/Alternative; charset=UTF-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+</head>
+
+<style>
+    html {
+        font-size: 10px;
+    }
+
+    * {
+        box-sizing: border-box;
+    }
+
+    a:hover,
+    a:focus {
+        color: #23527c;
+        text-decoration: underline;
+    }
+
+    a:focus {
+        outline: 5px auto -webkit-focus-ring-color;
+        outline-offset: -2px;
+    }
+</style>
+
+<body>
+<div style="margin-left:5%;margin-right:5%;font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
+<span style="
+    line-height: 1.1;font-size: 18px;">
+    <p style="text-align:left;">Dear Kylin user,</p>
+    <p>It's a pity that the job is discarded. Thank you for using Kylin.</p>
+</span>
+    <hr style="margin-top: 20px;
+    margin-bottom: 20px;
+    border: 0;
+    border-top: 1px solid #eee;">
+    <h1>
+    <span style="display: inline;
+            background-color: #607D8B;
+            color: #fff;
+            line-height: 1;
+            font-weight: 700;
+            font-size:36px;
+            text-align: center;">&nbsp;Discarded&nbsp;</span>
+    </h1>
+    <hr style="margin-top: 20px;
+            margin-bottom: 20px;
+            border: 0;
+            border-top: 1px solid #eee;">
+    <table cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse;border:1px solid #f8f8f8">
+
+        <tr>
+
+            <td style="padding: 10px 15px;
+                    background-color: #eeeeee;
+                    border:1px solid #f8f8f8;">
+                <h4 style="margin-top: 0;
+                        margin-bottom: 0;
+                        font-size: 16px;
+                        color: inherit;
+                        color: #404040;
+                        font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
+                ${job_name}
+                </h4>
+            </td>
+        </tr>
+
+        <tr>
+
+            <td style="padding: 10px 15px;
+                    background-color: #eeeeee;
+                    border:1px solid #f8f8f8;">
+                <h4 style="margin-top: 0;
+                        margin-bottom: 0;
+                        font-size: 16px;
+                        color: inherit;
+                        color: #404040;
+                        font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
+                ${env_name}
+                </h4>
+            </td>
+        </tr>
+
+        <tr>
+
+            <td style="padding: 15px;">
+                <table cellpadding="0" cellspacing="0" width="100%"
+                       style="margin-bottom: 20px;border:1 solid #ddd;border-collapse: collapse;font-family: 'Trebuchet MS ', Arial, Helvetica, sans-serif;">
+                    <tr>
+                        <th width="30%" style="padding: 8px;
+                                            line-height: 1.42857143;
+                                            vertical-align: top;
+                                            border: 1px solid #ddd;
+                                            text-align: left;
+                                            font-size: medium;
+                                            font-style: normal;">Submitter
+                        </th>
+                        <td style="padding: 8px;
+                                line-height: 1.42857143;
+                                vertical-align: top;
+                                border: 1px solid #ddd;
+                                font-size: medium;
+                                font-style: normal;">
+                        ${submitter}
+                        </td>
+                    </tr>
+                    <tr>
+                        <th width="30%" style="padding: 8px;
+                                            line-height: 1.42857143;
+                                            vertical-align: top;
+                                            border: 1px solid #ddd;
+                                            text-align: left;
+                                            font-size: medium;
+                                            font-style: normal;">Job Engine
+                        </th>
+                        <td style="padding: 8px;
+                                line-height: 1.42857143;
+                                vertical-align: top;
+                                border: 1px solid #ddd;
+                                font-size: medium;
+                                font-style: normal;">
+                        ${job_engine}
+                        </td>
+                    </tr>
+                    <tr>
+                        <th width="30%" style="padding: 8px;
+                                            line-height: 1.42857143;
+                                            vertical-align: top;
+                                            border: 1px solid #ddd;
+                                            text-align: left;
+                                            font-size: medium;
+                                            font-style: normal;">Project
+                        </th>
+                        <td style="padding: 8px;
+                                line-height: 1.42857143;
+                                vertical-align: top;
+                                border: 1px solid #ddd;
+                                font-size: medium;
+                                font-style: normal;">
+                        ${project_name}
+                        </td>
+                    </tr>
+                    <tr>
+                        <th width="30%" style="padding: 8px;
+                                            line-height: 1.42857143;
+                                            vertical-align: top;
+                                            border: 1px solid #ddd;
+                                            text-align: left;
+                                            font-size: medium;
+                                            font-style: normal;">Cube Name
+                        </th>
+                        <td style="padding: 8px;
+                                line-height: 1.42857143;
+                                vertical-align: top;
+                                border: 1px solid #ddd;
+                                font-size: medium;
+                                font-style: normal;">
+                        ${cube_name}
+                        </td>
+                    </tr>
+                    <tr>
+                        <th width="30%" style="padding: 8px;
+                                            line-height: 1.42857143;
+                                            vertical-align: top;
+                                            border: 1px solid #ddd;
+                                            text-align: left;
+                                            font-size: medium;
+                                            font-style: normal;">
+                            Source Records Count
+                        </th>
+                        <td style="padding: 8px;
+                                line-height: 1.42857143;
+                                vertical-align: top;
+                                border: 1px solid #ddd;
+                                font-size: medium;
+                                font-style: normal;">
+                        ${source_records_count}
+                        </td>
+                    </tr>
+                    <tr>
+                        <th width="30%" style="padding: 8px;
+                                            line-height: 1.42857143;
+                                            vertical-align: top;
+                                            border: 1px solid #ddd;
+                                            text-align: left;
+                                            font-size: medium;
+                                            font-style: normal;">Start Time
+                        </th>
+                        <td style="padding: 8px;
+                                line-height: 1.42857143;
+                                vertical-align: top;
+                                border: 1px solid #ddd;
+                                font-size: medium;
+                                font-style: normal;">
+                        ${start_time}
+                        </td>
+                    </tr>
+                    <tr>
+                        <th width="30%" style="padding: 8px;
+                                            line-height: 1.42857143;
+                                            vertical-align: top;
+                                            border: 1px solid #ddd;
+                                            text-align: left;
+                                            font-size: medium;
+                                            font-style: normal;">
+                            Duration
+                        </th>
+                        <td style="padding: 8px;
+                                line-height: 1.42857143;
+                                vertical-align: top;
+                                border: 1px solid #ddd;
+                                font-size: medium;
+                                font-style: normal;">
+                        ${duration}
+                        </td>
+                    </tr>
+                    <tr>
+                        <th width="30%" style="padding: 8px;
+                                            line-height: 1.42857143;
+                                            vertical-align: top;
+                                            border: 1px solid #ddd;
+                                            text-align: left;
+                                            font-size: medium;
+                                            font-style: normal;">MR Waiting Time
+                        </th>
+                        <td style="padding: 8px;
+                                line-height: 1.42857143;
+                                vertical-align: top;
+                                border: 1px solid #ddd;
+                                font-size: medium;
+                                font-style: normal;">
+                        ${mr_waiting}
+                        </td>
+                    </tr>
+                    <tr>
+                        <th width="30%" style="padding: 8px;
+                                            line-height: 1.42857143;
+                                            vertical-align: top;
+                                            border: 1px solid #ddd;
+                                            text-align: left;
+                                            font-size: medium;
+                                            font-style: normal;">
+                            Last Update Time
+                        </th>
+                        <td style="padding: 8px;
+                                line-height: 1.42857143;
+                                vertical-align: top;
+                                border: 1px solid #ddd;
+                                font-size: medium;
+                                font-style: normal;">
+                        ${last_update_time}
+                        </td>
+                    </tr>
+                </table>
+            </td>
+        </tr>
+    </table>
+    <hr style="margin-top: 20px;
+    margin-bottom: 20px;
+    border: 0;
+    border-top: 1px solid #eee;">
+    <h4 style="font-weight: 500;
+    line-height: 1.1;font-size:18px;">
+        <p>Best Wishes!</p>
+        <p style="margin: 0 0 10px;"><b>Kylin Team</b></p>
+    </h4>
+</div>
+</body>
+
+</html>
\ No newline at end of file