You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
5.4 KiB
147 lines
5.4 KiB
/* |
|
* 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.dolphinscheduler.alert.plugin; |
|
|
|
import org.apache.dolphinscheduler.alert.manager.DingTalkManager; |
|
import org.apache.dolphinscheduler.alert.manager.EmailManager; |
|
import org.apache.dolphinscheduler.alert.manager.EnterpriseWeChatManager; |
|
import org.apache.dolphinscheduler.alert.utils.Constants; |
|
import org.apache.dolphinscheduler.alert.utils.DingTalkUtils; |
|
import org.apache.dolphinscheduler.alert.utils.EnterpriseWeChatUtils; |
|
import org.apache.dolphinscheduler.common.utils.CollectionUtils; |
|
import org.apache.dolphinscheduler.common.utils.StringUtils; |
|
import org.apache.dolphinscheduler.plugin.api.AlertPlugin; |
|
import org.apache.dolphinscheduler.plugin.model.AlertData; |
|
import org.apache.dolphinscheduler.plugin.model.AlertInfo; |
|
import org.apache.dolphinscheduler.plugin.model.PluginName; |
|
|
|
import java.util.ArrayList; |
|
import java.util.Arrays; |
|
import java.util.HashMap; |
|
import java.util.List; |
|
import java.util.Map; |
|
|
|
import org.slf4j.Logger; |
|
import org.slf4j.LoggerFactory; |
|
|
|
/** |
|
* EmailAlertPlugin |
|
* <p> |
|
* This plugin is a default plugin, and mix up email and enterprise wechat, because adapt with former alert behavior |
|
*/ |
|
public class EmailAlertPlugin implements AlertPlugin { |
|
|
|
private static final Logger logger = LoggerFactory.getLogger(EmailAlertPlugin.class); |
|
|
|
private PluginName pluginName; |
|
|
|
private static final EmailManager emailManager = new EmailManager(); |
|
private static final EnterpriseWeChatManager weChatManager = new EnterpriseWeChatManager(); |
|
private static final DingTalkManager dingTalkManager = new DingTalkManager(); |
|
|
|
public EmailAlertPlugin() { |
|
this.pluginName = new PluginName(); |
|
this.pluginName.setEnglish(Constants.PLUGIN_DEFAULT_EMAIL_EN); |
|
this.pluginName.setChinese(Constants.PLUGIN_DEFAULT_EMAIL_CH); |
|
} |
|
|
|
@Override |
|
public String getId() { |
|
return Constants.PLUGIN_DEFAULT_EMAIL_ID; |
|
} |
|
|
|
@Override |
|
public PluginName getName() { |
|
return pluginName; |
|
} |
|
|
|
@Override |
|
@SuppressWarnings("unchecked") |
|
public Map<String, Object> process(AlertInfo info) { |
|
Map<String, Object> retMaps = new HashMap<>(); |
|
|
|
AlertData alert = info.getAlertData(); |
|
|
|
List<String> receiversList = (List<String>) info.getProp(Constants.PLUGIN_DEFAULT_EMAIL_RECEIVERS); |
|
|
|
// receiving group list |
|
// custom receiver |
|
String receivers = alert.getReceivers(); |
|
if (StringUtils.isNotEmpty(receivers)) { |
|
String[] splits = receivers.split(","); |
|
receiversList.addAll(Arrays.asList(splits)); |
|
} |
|
|
|
List<String> receiversCcList = new ArrayList<>(); |
|
// Custom Copier |
|
String receiversCc = alert.getReceiversCc(); |
|
if (StringUtils.isNotEmpty(receiversCc)) { |
|
String[] splits = receiversCc.split(","); |
|
receiversCcList.addAll(Arrays.asList(splits)); |
|
} |
|
|
|
if (CollectionUtils.isEmpty(receiversList) && CollectionUtils.isEmpty(receiversCcList)) { |
|
logger.warn("alert send error : At least one receiver address required"); |
|
retMaps.put(Constants.STATUS, "false"); |
|
retMaps.put(Constants.MESSAGE, "execution failure,At least one receiver address required."); |
|
return retMaps; |
|
} |
|
|
|
retMaps = emailManager.send(receiversList, receiversCcList, alert.getTitle(), alert.getContent(), |
|
alert.getShowType()); |
|
|
|
//send flag |
|
boolean flag = false; |
|
|
|
if (retMaps == null) { |
|
retMaps = new HashMap<>(); |
|
retMaps.put(Constants.MESSAGE, "alert send error."); |
|
retMaps.put(Constants.STATUS, "false"); |
|
logger.info("alert send error : {}", retMaps.get(Constants.MESSAGE)); |
|
return retMaps; |
|
} |
|
|
|
flag = Boolean.parseBoolean(String.valueOf(retMaps.get(Constants.STATUS))); |
|
|
|
if (flag) { |
|
logger.info("alert send success"); |
|
retMaps.put(Constants.MESSAGE, "email send success."); |
|
if (EnterpriseWeChatUtils.isEnable()) { |
|
logger.info("Enterprise WeChat is enable!"); |
|
try { |
|
String token = EnterpriseWeChatUtils.getToken(); |
|
weChatManager.send(info, token); |
|
} catch (Exception e) { |
|
logger.error(e.getMessage(), e); |
|
} |
|
} |
|
|
|
if (DingTalkUtils.IS_ENABLE_DING_TALK) { |
|
logger.info("Ding Talk is enable."); |
|
dingTalkManager.send(info); |
|
} |
|
|
|
} else { |
|
retMaps.put(Constants.MESSAGE, "alert send error."); |
|
logger.info("alert send error : {}", retMaps.get(Constants.MESSAGE)); |
|
} |
|
|
|
return retMaps; |
|
} |
|
|
|
}
|
|
|