提交 186ba62d 编写于 作者: Y youyong205

Merge pull request #419 from leonindy/master

refactor alert module
......@@ -66,17 +66,18 @@ import com.dianping.cat.report.task.alert.exception.AlertExceptionBuilder;
import com.dianping.cat.report.task.alert.exception.ExceptionAlert;
import com.dianping.cat.report.task.alert.manager.AlertManager;
import com.dianping.cat.report.task.alert.network.NetworkAlert;
import com.dianping.cat.report.task.alert.sender.SendManager;
import com.dianping.cat.report.task.alert.sender.decorator.Decorator;
import com.dianping.cat.report.task.alert.sender.decorator.DecoratorManager;
import com.dianping.cat.report.task.alert.sender.decorator.MailDecorator;
import com.dianping.cat.report.task.alert.sender.decorator.SmsDecorator;
import com.dianping.cat.report.task.alert.sender.decorator.WeixinDecorator;
import com.dianping.cat.report.task.alert.sender.dispatcher.Dispatcher;
import com.dianping.cat.report.task.alert.sender.dispatcher.DispatcherManager;
import com.dianping.cat.report.task.alert.sender.dispatcher.MailDispatcher;
import com.dianping.cat.report.task.alert.sender.dispatcher.SmsDispatcher;
import com.dianping.cat.report.task.alert.sender.dispatcher.WeixinDispatcher;
import com.dianping.cat.report.task.alert.sender.receiver.Seeker;
import com.dianping.cat.report.task.alert.sender.receiver.Contactor;
import com.dianping.cat.report.task.alert.sender.sender.MailSender;
import com.dianping.cat.report.task.alert.sender.sender.Sender;
import com.dianping.cat.report.task.alert.sender.sender.SenderManager;
import com.dianping.cat.report.task.alert.sender.sender.SmsSender;
import com.dianping.cat.report.task.alert.sender.sender.WeixinSender;
import com.dianping.cat.report.task.alert.summary.AlertSummaryDecorator;
import com.dianping.cat.report.task.alert.summary.AlertSummaryExecutor;
import com.dianping.cat.report.task.alert.summary.AlertSummaryFTLDecorator;
......@@ -118,11 +119,11 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
all.add(C(DataChecker.class, DefaultDataChecker.class));
all.add(C(RemoteMetricReportService.class).req(ServerConfigManager.class));
all.add(C(Dispatcher.class, MailDispatcher.ID, MailDispatcher.class).req(MailSMS.class));
all.add(C(Sender.class, MailSender.ID, MailSender.class));
all.add(C(Dispatcher.class, SmsDispatcher.ID, SmsDispatcher.class).req(MailSMS.class));
all.add(C(Sender.class, SmsSender.ID, SmsSender.class));
all.add(C(Dispatcher.class, WeixinDispatcher.ID, WeixinDispatcher.class).req(MailSMS.class));
all.add(C(Sender.class, WeixinSender.ID, WeixinSender.class));
all.add(C(Decorator.class, MailDecorator.ID, MailDecorator.class).req(ProjectDao.class));
......@@ -136,31 +137,30 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
.req(Decorator.class, SmsDecorator.ID, "smsDecorator")
.req(Decorator.class, WeixinDecorator.ID, "weixinDecorator"));
all.add(C(Seeker.class).req(ProjectDao.class, ProductLineConfigManager.class, AlertConfigManager.class));
all.add(C(Contactor.class).req(ProjectDao.class, ProductLineConfigManager.class, AlertConfigManager.class));
all.add(C(DispatcherManager.class)
.req(AlertPolicyManager.class, DecoratorManager.class, Seeker.class, AlertManager.class)
.req(Dispatcher.class, MailDispatcher.ID, "mailDispatcher")
.req(Dispatcher.class, WeixinDispatcher.ID, "weixinDispatcher")
.req(Dispatcher.class, SmsDispatcher.ID, "smsDispatcher"));
all.add(C(SenderManager.class).req(Sender.class, MailSender.ID, "mailSender")
.req(Sender.class, WeixinSender.ID, "weixinSender").req(Sender.class, SmsSender.ID, "smsSender"));
all.add(C(SendManager.class).req(AlertPolicyManager.class, DecoratorManager.class, Contactor.class,
AlertManager.class, SenderManager.class));
all.add(C(BusinessAlert.class).req(MetricConfigManager.class, ProductLineConfigManager.class,
BaselineService.class, AlertInfo.class).req(RemoteMetricReportService.class,
BusinessRuleConfigManager.class, DataChecker.class, DispatcherManager.class));
BusinessRuleConfigManager.class, DataChecker.class, SendManager.class));
all.add(C(NetworkAlert.class).req(ProductLineConfigManager.class, BaselineService.class, AlertInfo.class)
.req(RemoteMetricReportService.class, NetworkRuleConfigManager.class, DataChecker.class,
DispatcherManager.class));
all.add(C(NetworkAlert.class).req(ProductLineConfigManager.class, BaselineService.class, AlertInfo.class).req(
RemoteMetricReportService.class, NetworkRuleConfigManager.class, DataChecker.class, SendManager.class));
all.add(C(SystemAlert.class).req(ProductLineConfigManager.class, BaselineService.class, AlertInfo.class).req(
RemoteMetricReportService.class, SystemRuleConfigManager.class, DataChecker.class, DispatcherManager.class));
RemoteMetricReportService.class, SystemRuleConfigManager.class, DataChecker.class, SendManager.class));
all.add(C(AlertExceptionBuilder.class).req(ExceptionConfigManager.class));
all.add(C(ExceptionAlert.class).req(ExceptionConfigManager.class, AlertExceptionBuilder.class,
DispatcherManager.class).req(ModelService.class, TopAnalyzer.ID));
all.add(C(ExceptionAlert.class).req(ExceptionConfigManager.class, AlertExceptionBuilder.class, SendManager.class)
.req(ModelService.class, TopAnalyzer.ID));
all.add(C(ThirdPartyAlert.class).req(DispatcherManager.class));
all.add(C(ThirdPartyAlert.class).req(SendManager.class));
all.add(C(HttpConnector.class));
......
......@@ -26,7 +26,7 @@ import com.dianping.cat.home.rule.entity.Config;
import com.dianping.cat.report.baseline.BaselineService;
import com.dianping.cat.report.task.alert.sender.AlertEntity;
import com.dianping.cat.report.task.alert.sender.AlertEntity.AlertEntityBuilder;
import com.dianping.cat.report.task.alert.sender.dispatcher.DispatcherManager;
import com.dianping.cat.report.task.alert.sender.SendManager;
import com.dianping.cat.service.ModelPeriod;
import com.dianping.cat.service.ModelRequest;
import com.dianping.cat.system.config.BaseRuleConfigManager;
......@@ -52,7 +52,7 @@ public abstract class BaseAlert {
protected RemoteMetricReportService m_service;
@Inject
protected DispatcherManager m_dispatcherManager;
protected SendManager m_sendManager;
protected static final int DATA_AREADY_MINUTE = 1;
......@@ -246,7 +246,7 @@ public abstract class BaseAlert {
}
AlertEntity alertEntity = builder.getAlertEntity();
m_dispatcherManager.send(alertEntity);
m_sendManager.addAlert(alertEntity);
}
}
}
......
......@@ -75,7 +75,7 @@ public class BusinessAlert extends BaseAlert implements Task, LogEnabled {
builder.buildGroup(domain);
AlertEntity alertEntity = builder.getAlertEntity();
m_dispatcherManager.send(alertEntity);
m_sendManager.addAlert(alertEntity);
}
}
}
......
......@@ -23,7 +23,7 @@ import com.dianping.cat.report.page.top.TopMetric.Item;
import com.dianping.cat.report.task.alert.exception.AlertExceptionBuilder.AlertException;
import com.dianping.cat.report.task.alert.sender.AlertEntity;
import com.dianping.cat.report.task.alert.sender.AlertEntity.AlertEntityBuilder;
import com.dianping.cat.report.task.alert.sender.dispatcher.DispatcherManager;
import com.dianping.cat.report.task.alert.sender.SendManager;
import com.dianping.cat.service.ModelRequest;
import com.dianping.cat.service.ModelResponse;
import com.dianping.cat.system.config.ExceptionConfigManager;
......@@ -40,7 +40,7 @@ public class ExceptionAlert implements Task {
private ModelService<TopReport> m_topService;
@Inject
protected DispatcherManager m_dispatcherManager;
protected SendManager m_sendManager;
private static final long DURATION = TimeUtil.ONE_MINUTE;
......@@ -115,7 +115,7 @@ public class ExceptionAlert implements Task {
builder.buildMetric(metricName).buildProductline(domain).buildType(getName()).buildGroup(domain);
AlertEntity alertEntity = builder.getAlertEntity();
m_dispatcherManager.send(alertEntity);
m_sendManager.addAlert(alertEntity);
}
} catch (Exception e) {
Cat.logError(e);
......
......@@ -18,7 +18,7 @@ public class AlertManager {
Alert alert = new Alert();
alert.setDomain(alertEntity.getGroup());
alert.setAlertTime(alertEntity.getAlertDate());
alert.setAlertTime(alertEntity.getDate());
alert.setCategory(alertEntity.getType() + "-alert");
alert.setType(alertEntity.getLevel());
alert.setContent(message.getTitle() + "<br/>" + message.getContent());
......
......@@ -8,7 +8,7 @@ public class AlertEntity {
private String m_id;
private Date m_alertDate;
private Date m_date;
private String m_type;
......@@ -24,8 +24,8 @@ public class AlertEntity {
private Map<String, Object> m_paras = new HashMap<String, Object>();
public Date getAlertDate() {
return m_alertDate;
public Date getDate() {
return m_date;
}
public String getContent() {
......@@ -60,8 +60,8 @@ public class AlertEntity {
return m_type;
}
public void setAlertDate(Date alertDate) {
m_alertDate = alertDate;
public void setDate(Date alertDate) {
m_date = alertDate;
}
public void setContent(String content) {
......@@ -101,7 +101,7 @@ public class AlertEntity {
private AlertEntity m_alertEntity = new AlertEntity();
public AlertEntityBuilder buildDate(Date date) {
m_alertEntity.setAlertDate(date);
m_alertEntity.setDate(date);
return this;
}
......
package com.dianping.cat.report.task.alert.sender.dispatcher;
package com.dianping.cat.report.task.alert.sender;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.TimeUnit;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.unidal.helper.Threads;
import org.unidal.helper.Threads.Task;
import org.unidal.lookup.annotation.Inject;
import org.unidal.tuple.Pair;
import com.dianping.cat.Cat;
import com.dianping.cat.report.task.alert.manager.AlertManager;
import com.dianping.cat.report.task.alert.sender.AlertChannel;
import com.dianping.cat.report.task.alert.sender.AlertEntity;
import com.dianping.cat.report.task.alert.sender.AlertMessageEntity;
import com.dianping.cat.report.task.alert.sender.decorator.DecoratorManager;
import com.dianping.cat.report.task.alert.sender.receiver.Seeker;
import com.dianping.cat.report.task.alert.sender.receiver.Contactor;
import com.dianping.cat.report.task.alert.sender.sender.SenderManager;
import com.dianping.cat.system.config.AlertPolicyManager;
public class DispatcherManager implements Initializable {
public class SendManager implements Initializable {
@Inject
private AlertPolicyManager m_policyManager;
......@@ -26,30 +28,18 @@ public class DispatcherManager implements Initializable {
private DecoratorManager m_decoratorManager;
@Inject
private Seeker m_seeker;
private Contactor m_contactor;
@Inject
protected AlertManager m_alertManager;
@Inject(type = Dispatcher.class, value = MailDispatcher.ID)
protected Dispatcher m_mailDispatcher;
@Inject(type = Dispatcher.class, value = WeixinDispatcher.ID)
protected Dispatcher m_weixinDispatcher;
@Inject(type = Dispatcher.class, value = SmsDispatcher.ID)
protected Dispatcher m_smsDispatcher;
private Map<String, Dispatcher> m_dispatchers = new HashMap<String, Dispatcher>();
@Inject
protected SenderManager m_senderManager;
@Override
public void initialize() throws InitializationException {
m_dispatchers.put(m_mailDispatcher.getId(), m_mailDispatcher);
m_dispatchers.put(m_weixinDispatcher.getId(), m_weixinDispatcher);
m_dispatchers.put(m_smsDispatcher.getId(), m_smsDispatcher);
}
private BlockingQueue<AlertEntity> m_alerts = new LinkedBlockingDeque<AlertEntity>();
public boolean send(AlertEntity alert) {
private boolean send(AlertEntity alert) {
boolean result = true;
String type = alert.getType();
String group = alert.getGroup();
String level = alert.getLevel();
......@@ -60,29 +50,57 @@ public class DispatcherManager implements Initializable {
String channelName = channel.getName();
if (channels.contains(channelName)) {
Pair<String, String> pair = m_decoratorManager.generateTitleAndContent(alert, channelName);
List<String> receivers = m_seeker.queryReceivers(alert.getProductline(), channel, type);
List<String> receivers = m_contactor.queryReceivers(alert.getProductline(), channel, type);
AlertMessageEntity message = new AlertMessageEntity(group, pair.getKey(), pair.getValue(), receivers);
m_alertManager.storeAlert(alert, message);
Dispatcher dispatcher = m_dispatchers.get(channelName);
dispatcher.send(message, type);
if (!m_senderManager.sendAlert(channelName, type, message)) {
result = false;
}
}
}
return false;
return result;
}
public void setMailDispatcher(Dispatcher dispatcher) {
m_mailDispatcher = dispatcher;
public synchronized boolean addAlert(AlertEntity alert) {
return m_alerts.offer(alert);
}
public void setSmsDispatcher(Dispatcher dispatcher) {
m_smsDispatcher = dispatcher;
private class SendExecutor implements Task {
@Override
public void run() {
boolean active = true;
while (active) {
try {
AlertEntity alert = m_alerts.poll(5, TimeUnit.MILLISECONDS);
if (alert != null) {
send(alert);
}
} catch (Exception e) {
Cat.logError(e);
break;
}
}
}
@Override
public String getName() {
return "send-executor";
}
@Override
public void shutdown() {
}
}
public void setWeixinDispatcher(Dispatcher dispatcher) {
m_weixinDispatcher = dispatcher;
@Override
public void initialize() throws InitializationException {
Threads.forGroup("Cat").start(new SendExecutor());
}
}
......@@ -22,6 +22,12 @@ public abstract class DefaultDecorator implements Decorator {
protected String buildContactInfo(String domainName) {
try {
if (domainName.startsWith("f5-")) {
domainName = domainName.substring(3);
} else if (domainName.startsWith("switch-")) {
domainName = domainName.substring(7);
}
Project project = m_projectDao.findByDomain(domainName, ProjectEntity.READSET_FULL);
String owners = project.getOwner();
String phones = project.getPhone();
......@@ -46,7 +52,7 @@ public abstract class DefaultDecorator implements Decorator {
try {
StringBuilder sb = new StringBuilder();
String domain = alert.getGroup();
String date = m_fromat.format(alert.getAlertDate());
String date = m_fromat.format(alert.getDate());
sb.append("[CAT异常告警] [项目: ").append(domain).append("] : ");
sb.append(alert.getContent()).append("[时间: ").append(date).append("]");
......
package com.dianping.cat.report.task.alert.sender.dispatcher;
import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Cat;
import com.dianping.cat.message.Event;
import com.dianping.cat.report.task.alert.sender.AlertMessageEntity;
import com.dianping.cat.system.tool.MailSMS;
public class WeixinDispatcher implements Dispatcher, LogEnabled {
@Inject
private MailSMS m_mailSms;
public static final String ID = "weixin";
private Logger m_logger;
@Override
public boolean send(AlertMessageEntity message, String type) {
try {
m_mailSms
.sendWeiXin(message.getTitle(), message.getContent(), message.getGroup(), message.getReceiverString());
String messageStr = message.toString();
Cat.logEvent("AlertWeiixin", type, Event.SUCCESS, messageStr);
m_logger.info("AlertWeiixin " + messageStr);
return true;
} catch (Exception ex) {
Cat.logError("send weixin error " + message.toString(), ex);
return false;
}
}
@Override
public String getId() {
return ID;
}
@Override
public void enableLogging(Logger logger) {
m_logger = logger;
}
}
......@@ -17,7 +17,7 @@ import com.dianping.cat.report.task.alert.sender.AlertChannel;
import com.dianping.cat.system.config.AlertConfigManager;
import com.site.helper.Splitters;
public class Seeker {
public class Contactor {
@Inject
protected ProjectDao m_projectDao;
......
package com.dianping.cat.report.task.alert.sender.dispatcher;
package com.dianping.cat.report.task.alert.sender.sender;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
import org.unidal.lookup.annotation.Inject;
import org.unidal.helper.Files;
import com.dianping.cat.Cat;
import com.dianping.cat.message.Event;
import com.dianping.cat.report.task.alert.sender.AlertMessageEntity;
import com.dianping.cat.system.tool.MailSMS;
public class MailDispatcher implements Dispatcher, LogEnabled {
@Inject
private MailSMS m_mailSms;
public class MailSender implements Sender, LogEnabled {
public static final String ID = "mail";
......@@ -21,9 +24,14 @@ public class MailDispatcher implements Dispatcher, LogEnabled {
@Override
public boolean send(AlertMessageEntity message, String type) {
try {
m_mailSms.sendEmail(message.getTitle(), message.getContent(), message.getReceivers());
String messageStr = message.toString();
if (!sendEmail(message)) {
Cat.logEvent("AlertMailError", type, Event.SUCCESS, messageStr);
m_logger.info("AlertMailError " + messageStr);
return false;
}
Cat.logEvent("AlertMail", type, Event.SUCCESS, messageStr);
m_logger.info("AlertMail " + messageStr);
return true;
......@@ -33,6 +41,56 @@ public class MailDispatcher implements Dispatcher, LogEnabled {
}
}
private boolean sendEmail(AlertMessageEntity message) {
String title = message.getTitle();
String content = message.getContent();
List<String> emails = message.getReceivers();
StringBuilder sb = new StringBuilder();
for (String email : emails) {
InputStream in = null;
OutputStreamWriter writer = null;
try {
title = title.replaceAll(",", " ");
content = content.replaceAll(",", " ");
String value = title + "," + content;
URL url = new URL("http://10.1.1.51/mail.v?type=1500&key=title,body&re=yong.you@dianping.com&to=" + email);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
writer = new OutputStreamWriter(conn.getOutputStream());
writer.write("&value=" + value);
writer.flush();
in = conn.getInputStream();
String result = Files.forIO().readFrom(in, "utf-8");
sb.append(result).append("");
} catch (Exception e) {
m_logger.error(e.getMessage(), e);
} finally {
try {
if (in != null) {
in.close();
}
if (writer != null) {
writer.close();
}
} catch (IOException e) {
}
}
}
if (sb.indexOf("200") > -1) {
return true;
} else {
return false;
}
}
@Override
public String getId() {
return ID;
......
package com.dianping.cat.report.task.alert.sender.dispatcher;
package com.dianping.cat.report.task.alert.sender.sender;
import com.dianping.cat.report.task.alert.sender.AlertMessageEntity;
public interface Dispatcher {
public interface Sender {
String getId();
......
package com.dianping.cat.report.task.alert.sender.sender;
import java.util.HashMap;
import java.util.Map;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.report.task.alert.sender.AlertMessageEntity;
public class SenderManager implements Initializable {
@Inject(type = Sender.class, value = MailSender.ID)
protected Sender m_mailSender;
@Inject(type = Sender.class, value = WeixinSender.ID)
protected Sender m_weixinSender;
@Inject(type = Sender.class, value = SmsSender.ID)
protected Sender m_smsSender;
private Map<String, Sender> m_senders = new HashMap<String, Sender>();
@Override
public void initialize() throws InitializationException {
m_senders.put(m_mailSender.getId(), m_mailSender);
m_senders.put(m_weixinSender.getId(), m_weixinSender);
m_senders.put(m_smsSender.getId(), m_smsSender);
}
public boolean sendAlert(String channelName, String type, AlertMessageEntity message) {
Sender sender = m_senders.get(channelName);
return sender.send(message, type);
}
public void setMailSender(Sender sender) {
m_mailSender = sender;
}
public void setSmsSender(Sender sender) {
m_smsSender = sender;
}
public void setWeixinSender(Sender sender) {
m_weixinSender = sender;
}
}
package com.dianping.cat.report.task.alert.sender.dispatcher;
package com.dianping.cat.report.task.alert.sender.sender;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.List;
import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
import org.unidal.lookup.annotation.Inject;
import org.unidal.helper.Files;
import com.dianping.cat.Cat;
import com.dianping.cat.message.Event;
import com.dianping.cat.report.task.alert.sender.AlertMessageEntity;
import com.dianping.cat.system.tool.MailSMS;
public class SmsDispatcher implements Dispatcher, LogEnabled {
@Inject
private MailSMS m_mailSms;
public class SmsSender implements Sender, LogEnabled {
public static final String ID = "sms";
......@@ -21,9 +24,14 @@ public class SmsDispatcher implements Dispatcher, LogEnabled {
@Override
public boolean send(AlertMessageEntity message, String type) {
try {
m_mailSms.sendSms(message.getTitle() + message.getContent(), null, message.getReceivers());
String messageStr = message.toString();
if (!sendSms(message)) {
Cat.logEvent("AlertSmsError", type, Event.SUCCESS, messageStr);
m_logger.info("AlertSmsError " + messageStr);
return false;
}
Cat.logEvent("AlertSms", type, Event.SUCCESS, messageStr);
m_logger.info("AlertSms " + messageStr);
return true;
......@@ -33,6 +41,39 @@ public class SmsDispatcher implements Dispatcher, LogEnabled {
}
}
private boolean sendSms(AlertMessageEntity message) {
String content = message.getTitle() + " " + message.getContent();
List<String> phones = message.getReceivers();
StringBuilder sb = new StringBuilder();
for (String phone : phones) {
InputStream in = null;
try {
String format = "http://10.1.1.84/sms/send/json?jsonm={type:808,mobile:\"%s\",pair:{body=\"%s\"}}";
String urlAddress = String.format(format, phone, URLEncoder.encode(content, "utf-8"));
URL url = new URL(urlAddress);
URLConnection conn = url.openConnection();
in = conn.getInputStream();
sb.append(Files.forIO().readFrom(in, "utf-8")).append("");
} catch (Exception e) {
m_logger.error(e.getMessage(), e);
} finally {
try {
if (in != null) {
in.close();
}
} catch (IOException e) {
}
}
}
if (sb.indexOf("200") > -1) {
return true;
} else {
return false;
}
}
@Override
public String getId() {
return ID;
......
package com.dianping.cat.report.task.alert.sender.sender;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
import com.dianping.cat.Cat;
import com.dianping.cat.message.Event;
import com.dianping.cat.report.task.alert.sender.AlertMessageEntity;
public class WeixinSender implements Sender, LogEnabled {
private static final String WEIXIN_URL = "http://dpoa.api.dianping.com/app/monitor/cat/push";
private static final String SUCCESS_TEXT = "{\"success\":\"1\"}";
public static final String ID = "weixin";
private Logger m_logger;
@Override
public boolean send(AlertMessageEntity message, String type) {
try {
String messageStr = message.toString();
if (!sendWeixin(message, type)) {
Cat.logEvent("AlertWeixinError", type, Event.SUCCESS, messageStr);
m_logger.info("AlertWeixinError " + messageStr);
return false;
}
Cat.logEvent("AlertWeiixin", type, Event.SUCCESS, messageStr);
m_logger.info("AlertWeiixin " + messageStr);
return true;
} catch (Exception ex) {
Cat.logError("send weixin error " + message.toString(), ex);
return false;
}
}
private boolean sendWeixin(AlertMessageEntity message, String type) {
String domain = message.getGroup();
String title = message.getTitle();
String content = message.getContent();
String weixins = message.getReceiverString();
String urlDomain = null;
String urlTitle = null;
String urlContent = null;
String urlWeixins = null;
String urlType = null;
try {
urlDomain = URLEncoder.encode(domain, "UTF-8");
urlTitle = URLEncoder.encode(title, "UTF-8");
urlContent = URLEncoder.encode(content.replaceAll("<a href.*(?=</a>)</a>", ""), "UTF-8");
urlWeixins = URLEncoder.encode(weixins, "UTF-8");
urlType = URLEncoder.encode(type, "UTF-8");
} catch (UnsupportedEncodingException e) {
Cat.logError("transfer weixin content error:" + title + " " + content + " " + domain + " " + weixins, e);
return false;
}
String urlParameters = "domain=" + urlDomain + "&email=" + urlWeixins + "&title=" + urlTitle + "&content="
+ urlContent + "&type=" + urlType;
try {
HttpURLConnection connection = (HttpURLConnection) new URL(WEIXIN_URL).openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder builder = new StringBuilder();
while ((inputLine = reader.readLine()) != null) {
builder.append(inputLine);
}
reader.close();
String responseText = builder.toString();
if (responseText.equals(SUCCESS_TEXT)) {
Cat.logEvent("WeiXinSend", "send_success", Event.SUCCESS, "send success:" + domain + " " + title + " "
+ content + " " + weixins + " " + responseText);
return true;
} else {
Cat.logEvent("WeiXinSend", "send_fail", Event.SUCCESS, "send fail:" + domain + " " + title + " "
+ content + " " + weixins + " " + responseText);
return false;
}
} else {
Cat.logEvent("WeiXinSend", "network_fail", Event.SUCCESS, "network fail:" + domain + " " + title + " "
+ content + " " + weixins);
return false;
}
} catch (Exception ex) {
Cat.logEvent("WeiXinSend", "error", Event.SUCCESS, "error:" + domain + " " + title + " " + content + " "
+ weixins);
Cat.logError("send weixin error:" + domain + " " + title + " " + content + " " + weixins, ex);
return false;
}
}
@Override
public String getId() {
return ID;
}
@Override
public void enableLogging(Logger logger) {
m_logger = logger;
}
}
......@@ -19,12 +19,12 @@ import com.dianping.cat.helper.TimeUtil;
import com.dianping.cat.message.Transaction;
import com.dianping.cat.report.task.alert.sender.AlertEntity;
import com.dianping.cat.report.task.alert.sender.AlertEntity.AlertEntityBuilder;
import com.dianping.cat.report.task.alert.sender.dispatcher.DispatcherManager;
import com.dianping.cat.report.task.alert.sender.SendManager;
public class ThirdPartyAlert implements Task {
@Inject
private DispatcherManager m_dispatcherManager;
private SendManager m_sendManager;
private static final long DURATION = TimeUtil.ONE_MINUTE;
......@@ -83,7 +83,7 @@ public class ThirdPartyAlert implements Task {
builder.buildMetric(getName()).buildProductline(domain).buildType(getName()).buildGroup(domain);
AlertEntity alertEntity = builder.getAlertEntity();
m_dispatcherManager.send(alertEntity);
m_sendManager.addAlert(alertEntity);
}
t.setStatus(Transaction.SUCCESS);
} catch (Exception e) {
......
......@@ -564,34 +564,19 @@
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.Dispatcher</role>
<role>com.dianping.cat.report.task.alert.sender.sender.Sender</role>
<role-hint>mail</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.dispatcher.MailDispatcher</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.system.tool.MailSMS</role>
</requirement>
</requirements>
<implementation>com.dianping.cat.report.task.alert.sender.sender.MailSender</implementation>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.Dispatcher</role>
<role>com.dianping.cat.report.task.alert.sender.sender.Sender</role>
<role-hint>sms</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.dispatcher.SmsDispatcher</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.system.tool.MailSMS</role>
</requirement>
</requirements>
<implementation>com.dianping.cat.report.task.alert.sender.sender.SmsSender</implementation>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.Dispatcher</role>
<role>com.dianping.cat.report.task.alert.sender.sender.Sender</role>
<role-hint>weixin</role-hint>
<implementation>com.dianping.cat.report.task.alert.sender.dispatcher.WeixinDispatcher</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.system.tool.MailSMS</role>
</requirement>
</requirements>
<implementation>com.dianping.cat.report.task.alert.sender.sender.WeixinSender</implementation>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.decorator.Decorator</role>
......@@ -654,8 +639,8 @@
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.receiver.Seeker</role>
<implementation>com.dianping.cat.report.task.alert.sender.receiver.Seeker</implementation>
<role>com.dianping.cat.report.task.alert.sender.receiver.Contactor</role>
<implementation>com.dianping.cat.report.task.alert.sender.receiver.Contactor</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
......@@ -669,35 +654,44 @@
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.DispatcherManager</role>
<implementation>com.dianping.cat.report.task.alert.sender.dispatcher.DispatcherManager</implementation>
<role>com.dianping.cat.report.task.alert.sender.sender.SenderManager</role>
<implementation>com.dianping.cat.report.task.alert.sender.sender.SenderManager</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.system.config.AlertPolicyManager</role>
<role>com.dianping.cat.report.task.alert.sender.sender.Sender</role>
<role-hint>mail</role-hint>
<field-name>mailSender</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.decorator.DecoratorManager</role>
<role>com.dianping.cat.report.task.alert.sender.sender.Sender</role>
<role-hint>weixin</role-hint>
<field-name>weixinSender</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.receiver.Seeker</role>
<role>com.dianping.cat.report.task.alert.sender.sender.Sender</role>
<role-hint>sms</role-hint>
<field-name>smsSender</field-name>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.SendManager</role>
<implementation>com.dianping.cat.report.task.alert.sender.SendManager</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.report.task.alert.manager.AlertManager</role>
<role>com.dianping.cat.system.config.AlertPolicyManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.Dispatcher</role>
<role-hint>mail</role-hint>
<field-name>mailDispatcher</field-name>
<role>com.dianping.cat.report.task.alert.sender.decorator.DecoratorManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.Dispatcher</role>
<role-hint>weixin</role-hint>
<field-name>weixinDispatcher</field-name>
<role>com.dianping.cat.report.task.alert.sender.receiver.Contactor</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.Dispatcher</role>
<role-hint>sms</role-hint>
<field-name>smsDispatcher</field-name>
<role>com.dianping.cat.report.task.alert.manager.AlertManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.sender.SenderManager</role>
</requirement>
</requirements>
</component>
......@@ -727,7 +721,7 @@
<role>com.dianping.cat.report.task.alert.DataChecker</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.DispatcherManager</role>
<role>com.dianping.cat.report.task.alert.sender.SendManager</role>
</requirement>
</requirements>
</component>
......@@ -754,7 +748,7 @@
<role>com.dianping.cat.report.task.alert.DataChecker</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.DispatcherManager</role>
<role>com.dianping.cat.report.task.alert.sender.SendManager</role>
</requirement>
</requirements>
</component>
......@@ -781,7 +775,7 @@
<role>com.dianping.cat.report.task.alert.DataChecker</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.DispatcherManager</role>
<role>com.dianping.cat.report.task.alert.sender.SendManager</role>
</requirement>
</requirements>
</component>
......@@ -805,7 +799,7 @@
<role>com.dianping.cat.report.task.alert.exception.AlertExceptionBuilder</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.DispatcherManager</role>
<role>com.dianping.cat.report.task.alert.sender.SendManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.page.model.spi.ModelService</role>
......@@ -818,7 +812,7 @@
<implementation>com.dianping.cat.report.task.alert.thirdParty.ThirdPartyAlert</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.dispatcher.DispatcherManager</role>
<role>com.dianping.cat.report.task.alert.sender.SendManager</role>
</requirement>
</requirements>
</component>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册