提交 74dc0d75 编写于 作者: Y youyong205

modify the testcase

上级 72cb183b
......@@ -44,7 +44,7 @@ public class BucketHandler implements Task {
for (Entry<Integer, HashMap<String, AppData>> outerEntry : m_mergedData.entrySet()) {
HashMap<String, AppData> value = outerEntry.getValue();
for (Entry<String, AppData> entry : value.entrySet()) {
AppData appData = entry.getValue();
AppDataCommand proto = new AppDataCommand();
......
......@@ -43,6 +43,7 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
all.add(C(MessageSender.class, TcpSocketSender.ID, TcpSocketSender.class) //
.is(PER_LOOKUP) //
.req(ClientConfigManager.class)
.req(MessageStatistics.class, "default", "m_statistics") //
.req(MessageCodec.class, PlainTextMessageCodec.ID, "m_codec"));
all.add(C(TransportManager.class, DefaultTransportManager.class) //
......
......@@ -58,8 +58,8 @@ public class ClientConfigManager implements LogEnabled {
}
/**
* Return the max total message node size for the whole message, children after this limit will be split into another child
* message tree.
* Return the max total message node size for the whole message, children after this limit will be split into another
* child message tree.
*
* @return
*/
......@@ -98,8 +98,8 @@ public class ClientConfigManager implements LogEnabled {
}
public int getTaggedTransactionCacheSize() {
return 1024;
}
return 1024;
}
public void initialize(File configFile) throws Exception {
ClientConfig globalConfig = null;
......@@ -149,9 +149,19 @@ public class ClientConfigManager implements LogEnabled {
m_config = clientConfig;
}
public String getServerConfigUrl(){
return "http://server";
public String getServerConfigUrl() {
if (m_config == null) {
return null;
} else {
List<Server> servers = m_config.getServers();
for (Server server : servers) {
return String.format("http://%s:%d/cat/s/router?domain=%s", server.getIp(), server.getPort(), getDomain()
.getId());
}
}
return null;
}
public boolean isCatEnabled() {
......
......@@ -26,12 +26,15 @@ import org.unidal.helper.Threads.Task;
import org.unidal.helper.Urls;
import org.unidal.tuple.Pair;
import com.dianping.cat.configuration.ClientConfigManager;
import com.dianping.cat.message.spi.MessageQueue;
import com.site.helper.Splitters;
public class ChannelManager implements Task {
private List<InetSocketAddress> m_serverAddresses;
private ClientConfigManager m_configManager;
private ClientBootstrap m_bootstrap;
private ChannelFuture m_activeFuture;
......@@ -56,8 +59,6 @@ public class ChannelManager implements Task {
private MessageQueue m_queue;
private String m_serverUrl = "http://10.1.6.128:8080/cat/r/router?op=api";
private String m_lastServers;
private List<InetSocketAddress> parse(String content) {
......@@ -72,38 +73,14 @@ public class ChannelManager implements Task {
return address;
}
int count = 0;
private String getServerConfig() {
if (true) {
int current = count++;
if (current % 2 == 0) {
return "127.0.0.1:2280;192.168.213.115:2280;";
}
if (current % 2 == 1) {
return "192.168.213.115:2280;127.0.0.1:2280;";
}
}
try {
InputStream currentServer = Urls.forIO().readTimeout(3000).connectTimeout(1000).openStream(m_serverUrl);
InputStream currentServer = Urls.forIO().readTimeout(3000).connectTimeout(1000)
.openStream(m_configManager.getServerConfigUrl());
String content = Files.forIO().readFrom(currentServer, "utf-8");
return content.trim();
} catch (Exception e) {
long current = System.currentTimeMillis();
if (current % 3 == 0) {
return "10.1.6.127:2280;10.1.6.128:2280;10.1.6.129:2280;";
}
if (current % 3 == 1) {
return "10.1.6.121:2280;10.1.6.122:2280;10.1.6.123:2280;";
}
if (current % 3 == 2) {
return "10.1.6.124:2280;10.1.6.125:2280;10.1.6.126:2280;";
}
return null;
}
}
......@@ -147,9 +124,11 @@ public class ChannelManager implements Task {
}
}
public ChannelManager(Logger logger, List<InetSocketAddress> serverAddresses, MessageQueue queue) {
public ChannelManager(Logger logger, List<InetSocketAddress> serverAddresses, MessageQueue queue,
ClientConfigManager configManager) {
m_logger = logger;
m_queue = queue;
m_configManager = configManager;
ExecutorService bossExecutor = Threads.forPool().getFixedThreadPool("Cat-TcpSocketSender-Boss", 10);
ExecutorService workerExecutor = Threads.forPool().getFixedThreadPool("Cat-TcpSocketSender-Worker", 10);
......@@ -333,4 +312,5 @@ public class ChannelManager implements Task {
}
}
}
}
\ No newline at end of file
......@@ -13,6 +13,7 @@ import org.unidal.helper.Threads;
import org.unidal.helper.Threads.Task;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.configuration.ClientConfigManager;
import com.dianping.cat.message.spi.MessageCodec;
import com.dianping.cat.message.spi.MessageQueue;
import com.dianping.cat.message.spi.MessageStatistics;
......@@ -29,6 +30,9 @@ public class TcpSocketSender implements Task, MessageSender, LogEnabled {
@Inject
private MessageStatistics m_statistics;
@Inject
private ClientConfigManager m_configManager;
private MessageQueue m_queue = new DefaultMessageQueue(SIZE);
private List<InetSocketAddress> m_serverAddresses;
......@@ -73,7 +77,7 @@ public class TcpSocketSender implements Task, MessageSender, LogEnabled {
@Override
public void initialize() {
m_manager = new ChannelManager(m_logger, m_serverAddresses, m_queue);
m_manager = new ChannelManager(m_logger, m_serverAddresses, m_queue, m_configManager);
Threads.forGroup("Cat").start(this);
Threads.forGroup("Cat").start(m_manager);
......
......@@ -41,6 +41,9 @@
<implementation>com.dianping.cat.message.io.TcpSocketSender</implementation>
<instantiation-strategy>per-lookup</instantiation-strategy>
<requirements>
<requirement>
<role>com.dianping.cat.configuration.ClientConfigManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.message.spi.MessageStatistics</role>
<field-name>m_statistics</field-name>
......
......@@ -338,7 +338,7 @@ public class ServerConfigManager implements Initializable, LogEnabled {
return defaultValue;
}
}
public boolean validateDomain(String domain) {
return !domain.equals("PhoenixAgent") && !domain.equals(Constants.FRONT_END) && !domain.equals(Constants.ALL);
}
......
......@@ -64,9 +64,9 @@ import com.dianping.cat.report.task.alert.RemoteMetricReportService;
import com.dianping.cat.report.task.alert.business.BusinessAlert;
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.manager.AlertEntityService;
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.AlertManager;
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;
......@@ -142,25 +142,25 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
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(AlertManager.class).req(AlertPolicyManager.class, DecoratorManager.class, Contactor.class,
AlertEntityService.class, SenderManager.class));
all.add(C(BusinessAlert.class).req(MetricConfigManager.class, ProductLineConfigManager.class,
BaselineService.class, AlertInfo.class).req(RemoteMetricReportService.class,
BusinessRuleConfigManager.class, DataChecker.class, SendManager.class));
BusinessRuleConfigManager.class, DataChecker.class, AlertManager.class));
all.add(C(NetworkAlert.class).req(ProductLineConfigManager.class, BaselineService.class, AlertInfo.class).req(
RemoteMetricReportService.class, NetworkRuleConfigManager.class, DataChecker.class, SendManager.class));
RemoteMetricReportService.class, NetworkRuleConfigManager.class, DataChecker.class, AlertManager.class));
all.add(C(SystemAlert.class).req(ProductLineConfigManager.class, BaselineService.class, AlertInfo.class).req(
RemoteMetricReportService.class, SystemRuleConfigManager.class, DataChecker.class, SendManager.class));
RemoteMetricReportService.class, SystemRuleConfigManager.class, DataChecker.class, AlertManager.class));
all.add(C(AlertExceptionBuilder.class).req(ExceptionConfigManager.class));
all.add(C(ExceptionAlert.class).req(ExceptionConfigManager.class, AlertExceptionBuilder.class, SendManager.class)
all.add(C(ExceptionAlert.class).req(ExceptionConfigManager.class, AlertExceptionBuilder.class, AlertManager.class)
.req(ModelService.class, TopAnalyzer.ID));
all.add(C(ThirdPartyAlert.class).req(SendManager.class));
all.add(C(ThirdPartyAlert.class).req(AlertManager.class));
all.add(C(HttpConnector.class));
......@@ -294,7 +294,7 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
all.add(C(NetGraphManager.class).req(ServerConfigManager.class, RemoteMetricReportService.class).req(
ReportServiceManager.class, NetGraphBuilder.class, AlertInfo.class, NetGraphConfigManager.class));
all.add(C(AlertManager.class).req(AlertDao.class));
all.add(C(AlertEntityService.class).req(AlertDao.class));
all.add(C(AlertExceptionBuilder.class).req(ExceptionConfigManager.class));
......
......@@ -24,6 +24,18 @@ public class TimeUtil {
return cal.getTime();
}
public static Date getCurrentDay(int index) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
cal.add(Calendar.DAY_OF_MONTH, index);
return cal.getTime();
}
public static Date getCurrentHour(int index) {
Calendar cal = Calendar.getInstance();
......
......@@ -54,6 +54,7 @@ import com.dianping.cat.home.dal.report.WeeklyReportContent;
import com.dianping.cat.home.dal.report.WeeklyReportContentDao;
import com.dianping.cat.home.heavy.entity.HeavyReport;
import com.dianping.cat.home.nettopo.entity.NetGraphSet;
import com.dianping.cat.home.router.entity.RouterConfig;
import com.dianping.cat.home.service.entity.ServiceReport;
import com.dianping.cat.home.utilization.entity.UtilizationReport;
......@@ -86,6 +87,11 @@ public class DefaultReportServiceManager extends ContainerHolder implements Repo
private Map<String, ReportService> m_reportServices;
@Override
public void initialize() throws InitializationException {
m_reportServices = lookupMap(ReportService.class);
}
@Override
public boolean insertDailyReport(DailyReport report, byte[] content) {
try {
......@@ -193,6 +199,13 @@ public class DefaultReportServiceManager extends ContainerHolder implements Repo
}
}
@Override
public AlertReport queryAlertReport(String domain, Date start, Date end) {
ReportService<AlertReport> reportService = m_reportServices.get(Constants.REPORT_ALERT);
return reportService.queryReport(domain, start, end);
}
public Set<String> queryAllDomainNames(Date start, Date end, String name) {
ReportService<TransactionReport> reportService = m_reportServices.get(TransactionAnalyzer.ID);
......@@ -247,12 +260,26 @@ public class DefaultReportServiceManager extends ContainerHolder implements Repo
return reportService.queryReport(domain, start, end);
}
@Override
public NetGraphSet queryNetTopologyReport(String domain, Date start, Date end) {
ReportService<NetGraphSet> reportService = m_reportServices.get(Constants.REPORT_NET_TOPOLOGY);
return reportService.queryReport(domain, start, end);
}
public ProblemReport queryProblemReport(String domain, Date start, Date end) {
ReportService<ProblemReport> reportService = m_reportServices.get(ProblemAnalyzer.ID);
return reportService.queryReport(domain, start, end);
}
@Override
public RouterConfig queryRouterConfigReport(String domain, Date start, Date end) {
ReportService<RouterConfig> reportService = m_reportServices.get(Constants.REPORT_ROUTER);
return reportService.queryReport(domain, start, end);
}
public ServiceReport queryServiceReport(String domain, Date start, Date end) {
ReportService<ServiceReport> reportService = m_reportServices.get(Constants.REPORT_SERVICE);
......@@ -284,23 +311,4 @@ public class DefaultReportServiceManager extends ContainerHolder implements Repo
return reportService.queryReport(domain, start, end);
}
@Override
public NetGraphSet queryNetTopologyReport(String domain, Date start, Date end) {
ReportService<NetGraphSet> reportService = m_reportServices.get(Constants.REPORT_NET_TOPOLOGY);
return reportService.queryReport(domain, start, end);
}
@Override
public AlertReport queryAlertReport(String domain, Date start, Date end) {
ReportService<AlertReport> reportService = m_reportServices.get(Constants.REPORT_ALERT);
return reportService.queryReport(domain, start, end);
}
@Override
public void initialize() throws InitializationException {
m_reportServices = lookupMap(ReportService.class);
}
}
......@@ -21,6 +21,7 @@ import com.dianping.cat.home.alert.report.entity.AlertReport;
import com.dianping.cat.home.bug.entity.BugReport;
import com.dianping.cat.home.heavy.entity.HeavyReport;
import com.dianping.cat.home.nettopo.entity.NetGraphSet;
import com.dianping.cat.home.router.entity.RouterConfig;
import com.dianping.cat.home.service.entity.ServiceReport;
import com.dianping.cat.home.utilization.entity.UtilizationReport;
......@@ -67,5 +68,7 @@ public interface ReportServiceManager {
public UtilizationReport queryUtilizationReport(String domain, Date start, Date end);
public NetGraphSet queryNetTopologyReport(String domain, Date start, Date end);
public RouterConfig queryRouterConfigReport(String domain, Date start, Date end);
}
......@@ -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.SendManager;
import com.dianping.cat.report.task.alert.sender.AlertManager;
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 SendManager m_sendManager;
protected AlertManager m_sendManager;
protected static final int DATA_AREADY_MINUTE = 1;
......@@ -237,7 +237,8 @@ public abstract class BaseAlert {
AlertEntityBuilder builder = new AlertEntity().new AlertEntityBuilder();
builder.buildDate(alertResult.getAlertTime()).buildContent(alertResult.getContent())
.buildLevel(alertResult.getAlertLevel());
builder.buildMetric(metricName).buildProductline(productlineName).buildType(getName());
builder.buildMetric(metricName).buildType(getName());
if ("network".equals(getName())) {
builder.buildGroup(productlineName);
} else {
......
......@@ -23,6 +23,8 @@ import com.dianping.cat.report.task.alert.sender.AlertEntity.AlertEntityBuilder;
public class BusinessAlert extends BaseAlert implements Task, LogEnabled {
public static String ID = "business";
@Inject
protected MetricConfigManager m_metricConfigManager;
......@@ -33,7 +35,7 @@ public class BusinessAlert extends BaseAlert implements Task, LogEnabled {
@Override
public String getName() {
return "business";
return ID;
}
public boolean needAlert(MetricItemConfig config) {
......@@ -70,7 +72,7 @@ public class BusinessAlert extends BaseAlert implements Task, LogEnabled {
AlertEntityBuilder builder = new AlertEntity().new AlertEntityBuilder();
builder.buildDate(alertResult.getAlertTime()).buildContent(alertResult.getContent())
.buildLevel(alertResult.getAlertLevel());
builder.buildMetric(metricName).buildProductline(product).buildType(getName());
builder.buildMetric(metricName).buildType(getName());
builder.buildGroup(domain);
AlertEntity alertEntity = builder.getAlertEntity();
......
......@@ -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.SendManager;
import com.dianping.cat.report.task.alert.sender.AlertManager;
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 SendManager m_sendManager;
protected AlertManager m_sendManager;
private static final long DURATION = TimeUtil.ONE_MINUTE;
......@@ -112,7 +112,7 @@ public class ExceptionAlert implements Task {
AlertEntityBuilder builder = new AlertEntity().new AlertEntityBuilder();
builder.buildDate(new Date()).buildLevel(exception.getType()).buildContent(exception.toString());
builder.buildMetric(metricName).buildProductline(domain).buildType(getName()).buildGroup(domain);
builder.buildMetric(metricName).buildType(getName()).buildGroup(domain);
AlertEntity alertEntity = builder.getAlertEntity();
m_sendManager.addAlert(alertEntity);
......
......@@ -9,7 +9,7 @@ import com.dianping.cat.home.dal.report.AlertDao;
import com.dianping.cat.report.task.alert.sender.AlertEntity;
import com.dianping.cat.report.task.alert.sender.AlertMessageEntity;
public class AlertManager {
public class AlertEntityService {
@Inject
private AlertDao m_alertDao;
......
......@@ -10,6 +10,15 @@ public enum AlertChannel {
private String m_name;
public static AlertChannel findByName(String name) {
for (AlertChannel channel : values()) {
if(channel.getName().equals(name)){
return channel;
}
}
return null;
}
private AlertChannel(String name) {
m_name = name;
}
......
......@@ -6,8 +6,6 @@ import java.util.Map;
public class AlertEntity {
private String m_id;
private Date m_date;
private String m_type;
......@@ -16,8 +14,6 @@ public class AlertEntity {
private String m_level;
private String m_productline;
private String m_metric;
private String m_content;
......@@ -36,10 +32,6 @@ public class AlertEntity {
return m_group;
}
public String getId() {
return m_id;
}
public String getLevel() {
return m_level;
}
......@@ -52,10 +44,6 @@ public class AlertEntity {
return m_paras;
}
public String getProductline() {
return m_productline;
}
public String getType() {
return m_type;
}
......@@ -72,10 +60,6 @@ public class AlertEntity {
m_group = group;
}
public void setId(String id) {
m_id = id;
}
public void setLevel(String level) {
m_level = level;
}
......@@ -88,10 +72,6 @@ public class AlertEntity {
m_paras = paras;
}
public void setProductline(String productline) {
m_productline = productline;
}
public void setType(String type) {
m_type = type;
}
......@@ -120,11 +100,6 @@ public class AlertEntity {
return this;
}
public AlertEntityBuilder buildProductline(String productline) {
m_alertEntity.setProductline(productline);
return this;
}
public AlertEntityBuilder buildMetric(String metric) {
m_alertEntity.setMetric(metric);
return this;
......
......@@ -13,13 +13,13 @@ 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.manager.AlertEntityService;
import com.dianping.cat.report.task.alert.sender.decorator.DecoratorManager;
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 SendManager implements Initializable {
public class AlertManager implements Initializable {
@Inject
private AlertPolicyManager m_policyManager;
......@@ -31,7 +31,7 @@ public class SendManager implements Initializable {
private Contactor m_contactor;
@Inject
protected AlertManager m_alertManager;
protected AlertEntityService m_alertEntityService;
@Inject
protected SenderManager m_senderManager;
......@@ -39,32 +39,29 @@ public class SendManager implements Initializable {
private BlockingQueue<AlertEntity> m_alerts = new LinkedBlockingDeque<AlertEntity>();
private boolean send(AlertEntity alert) {
boolean result = true;
boolean result = false;
String type = alert.getType();
String group = alert.getGroup();
String level = alert.getLevel();
List<AlertChannel> channels = m_policyManager.queryChannels(type, group, level);
String channels = m_policyManager.queryChannels(type, group, level);
for (AlertChannel channel : AlertChannel.values()) {
for (AlertChannel channel : channels) {
String channelName = channel.getName();
if (channels.contains(channelName)) {
Pair<String, String> pair = m_decoratorManager.generateTitleAndContent(alert, channelName);
List<String> receivers = m_contactor.queryReceivers(alert.getProductline(), channel, type);
AlertMessageEntity message = new AlertMessageEntity(group, pair.getKey(), pair.getValue(), receivers);
Pair<String, String> pair = m_decoratorManager.generateTitleAndContent(alert, channelName);
List<String> receivers = m_contactor.queryReceivers(group, channel, type);
String content = pair.getValue();
AlertMessageEntity message = new AlertMessageEntity(group, pair.getKey(), content, receivers);
m_alertManager.storeAlert(alert, message);
m_alertEntityService.storeAlert(alert, message);
if (!m_senderManager.sendAlert(channelName, type, message)) {
result = false;
}
if (m_senderManager.sendAlert(channelName, type, message)) {
result = true;
}
}
return result;
}
public synchronized boolean addAlert(AlertEntity alert) {
public boolean addAlert(AlertEntity alert) {
return m_alerts.offer(alert);
}
......
......@@ -8,7 +8,7 @@ public class AlertMessageEntity {
private String m_title;
private String m_content;
private List<String> m_receivers;
public AlertMessageEntity(String group, String title, String content, List<String> receivers) {
......
package com.dianping.cat.report.task.alert.sender;
public class SplitProcessor {
public String process(String content,AlertChannel channel){
return null;
}
}
......@@ -4,10 +4,10 @@ import com.dianping.cat.report.task.alert.sender.AlertEntity;
public interface Decorator {
String getId();
public String getId();
String generateTitle(AlertEntity alert);
String generateContent(AlertEntity alert);
public String generateTitle(AlertEntity alert);
public String generateContent(AlertEntity alert);
}
......@@ -25,8 +25,10 @@ public class DecoratorManager implements Initializable {
public Pair<String, String> generateTitleAndContent(AlertEntity alert, String channelName) {
Decorator decorator = m_decorators.get(channelName);
return new Pair<String, String>(decorator.generateTitle(alert), decorator.generateContent(alert));
String title = decorator.generateTitle(alert);
String content = decorator.generateContent(alert);
return new Pair<String, String>(title, content);
}
@Override
......
......@@ -83,36 +83,38 @@ public abstract class DefaultDecorator implements Decorator {
public String generateTitle(AlertEntity alert) {
String type = alert.getType();
String group = alert.getGroup();
if ("business".equals(type)) {
StringBuilder sb = new StringBuilder();
sb.append("[业务告警] [产品线 ").append(alert.getProductline()).append("]");
sb.append("[业务告警] [产品线 ").append(group).append("]");
sb.append("[业务指标 ").append(alert.getMetric()).append("]");
return sb.toString();
}
if ("network".equals(type)) {
StringBuilder sb = new StringBuilder();
sb.append("[网络告警] [产品线 ").append(alert.getProductline()).append("]");
sb.append("[网络告警] [产品线 ").append(group).append("]");
sb.append("[网络指标 ").append(alert.getMetric()).append("]");
return sb.toString();
}
if ("system".equals(type)) {
StringBuilder sb = new StringBuilder();
sb.append("[系统告警] [产品线 ").append(alert.getProductline()).append("]");
sb.append("[系统告警] [产品线 ").append(group).append("]");
sb.append("[系统指标 ").append(alert.getMetric()).append("]");
return sb.toString();
}
if ("exception".equals(type)) {
StringBuilder sb = new StringBuilder();
sb.append("[CAT异常告警] [项目: ").append(alert.getGroup()).append("]");
sb.append("[CAT异常告警] [项目: ").append(group).append("]");
return sb.toString();
}
if ("thidparty".equals(type)) {
StringBuilder sb = new StringBuilder();
sb.append("[CAT第三方告警] [项目: ").append(alert.getGroup()).append("]");
sb.append("[CAT第三方告警] [项目: ").append(group).append("]");
return sb.toString();
}
......
......@@ -8,7 +8,6 @@ public class MailDecorator extends DefaultDecorator {
@Override
public String generateContent(AlertEntity alert) {
String content;
if ("exception".equals(alert.getType())) {
......
......@@ -4,8 +4,8 @@ import com.dianping.cat.report.task.alert.sender.AlertMessageEntity;
public interface Sender {
String getId();
public String getId();
boolean send(AlertMessageEntity message, String type);
public boolean send(AlertMessageEntity message, String alertType);
}
......@@ -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.SendManager;
import com.dianping.cat.report.task.alert.sender.AlertManager;
public class ThirdPartyAlert implements Task {
@Inject
private SendManager m_sendManager;
private AlertManager m_sendManager;
private static final long DURATION = TimeUtil.ONE_MINUTE;
......@@ -80,7 +80,7 @@ public class ThirdPartyAlert implements Task {
AlertEntityBuilder builder = new AlertEntity().new AlertEntityBuilder();
builder.buildDate(new Date()).buildLevel("warning").buildContent(thirdPartyAlerts.toString());
builder.buildMetric(getName()).buildProductline(domain).buildType(getName()).buildGroup(domain);
builder.buildMetric(getName()).buildType(getName()).buildGroup(domain);
AlertEntity alertEntity = builder.getAlertEntity();
m_sendManager.addAlert(alertEntity);
......
package com.dianping.cat.system.config;
import java.util.ArrayList;
import java.util.List;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.unidal.dal.jdbc.DalNotFoundException;
......@@ -15,6 +18,7 @@ import com.dianping.cat.home.alert.policy.entity.Group;
import com.dianping.cat.home.alert.policy.entity.Level;
import com.dianping.cat.home.alert.policy.entity.Type;
import com.dianping.cat.home.alert.policy.transform.DefaultSaxParser;
import com.dianping.cat.report.task.alert.sender.AlertChannel;
public class AlertPolicyManager implements Initializable {
......@@ -33,22 +37,36 @@ public class AlertPolicyManager implements Initializable {
return m_config;
}
public String queryChannels(String typeName, String groupName, String levelName) {
public List<AlertChannel> queryChannels(String typeName, String groupName, String levelName) {
try {
Type type = m_config.findType(typeName);
Group group = type.findGroup(groupName);
if (group == null) {
group = type.findGroup(DEFAULT_TYPE);
}
Level level = group.findLevel(levelName);
if (level == null) {
return "";
return new ArrayList<AlertChannel>();
} else {
String send = level.getSend();
String[] sends = send.split(",");
List<AlertChannel> channels = new ArrayList<AlertChannel>();
for (String str : sends) {
AlertChannel channel = AlertChannel.findByName(str);
if (channel != null) {
channels.add(channel);
}
}
return channels;
}
return level.getSend();
} catch (Exception ex) {
return "";
return new ArrayList<AlertChannel>();
}
}
......
......@@ -40,15 +40,29 @@ public class RouterConfigManager implements Initializable, LogEnabled {
public RouterConfig getRouterConfig() {
return m_routerConfig;
}
public String queryBackUpServer(){
public String queryBackUpServer() {
return m_routerConfig.getBackupServer();
}
public int queryPort(){
public int queryPort() {
return m_routerConfig.getPort();
}
public List<String> queryRandomServers() {
List<String> servers = queryEnableServers();
int length = servers.size();
int index = (int) (Math.random() * length);
List<String> result = new ArrayList<String>();
for (int i = 0; i < 2; i++) {
servers.add(servers.get((index + 1) % index));
}
servers.add(queryBackUpServer());
return result;
}
public List<String> queryEnableServers() {
List<DefaultServer> servers = m_routerConfig.getDefaultServers();
List<String> result = new ArrayList<String>();
......@@ -61,6 +75,7 @@ public class RouterConfigManager implements Initializable, LogEnabled {
return result;
}
@Override
public void initialize() throws InitializationException {
try {
......@@ -96,7 +111,7 @@ public class RouterConfigManager implements Initializable, LogEnabled {
try {
m_routerConfig = DefaultSaxParser.parse(xml);
boolean result = storeConfig();
return result;
} catch (Exception e) {
Cat.logError(e);
......
package com.dianping.cat.system.page.router;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletException;
import com.dianping.cat.Constants;
import com.dianping.cat.helper.TimeUtil;
import com.dianping.cat.home.router.entity.Domain;
import com.dianping.cat.home.router.entity.RouterConfig;
import com.dianping.cat.home.router.entity.Server;
import com.dianping.cat.report.service.ReportServiceManager;
import com.dianping.cat.system.SystemPage;
import com.dianping.cat.system.config.RouterConfigManager;
......@@ -17,13 +24,13 @@ import org.unidal.web.mvc.annotation.PayloadMeta;
public class Handler implements PageHandler<Context> {
@Inject
private JspViewer m_jspViewer;
@Inject
private ReportServiceManager m_reportService;
@Inject
private RouterConfigManager m_configManager;
@Override
@PayloadMeta(Payload.class)
@InboundActionMeta(name = "router")
......@@ -37,19 +44,61 @@ public class Handler implements PageHandler<Context> {
Model model = new Model(ctx);
Payload payload = ctx.getPayload();
Action action = payload.getAction();
switch(action){
Date date = payload.getDate();
Date end = new Date(date.getTime() + TimeUtil.ONE_DAY);
RouterConfig report = m_reportService.queryRouterConfigReport(Constants.CAT, date, end);
switch (action) {
case API:
if (report != null) {
Domain domain = report.findDomain(payload.getDomain());
String str = null;
if (domain == null) {
m_configManager.getRouterConfig().getDefaultServers();
List<String> servers = m_configManager.queryRandomServers();
str = buildServerStr(servers, m_configManager.queryPort());
} else {
List<Server> servers = domain.getServers();
str = buildServerStr(servers);
}
model.setContent(str);
} else {
model.setContent("");
}
break;
case MODEL:
if (report != null) {
model.setContent(report.toString());
}
break;
}
model.setAction(Action.API);
model.setPage(SystemPage.ROUTER);
if (!ctx.isProcessStopped()) {
m_jspViewer.view(ctx, model);
m_jspViewer.view(ctx, model);
}
}
private String buildServerStr(List<String> servers, int port) {
StringBuilder sb = new StringBuilder();
for (String server : servers) {
sb.append(server).append(":").append(port).append(";");
}
return sb.toString();
}
private String buildServerStr(List<Server> servers) {
StringBuilder sb = new StringBuilder();
for (Server server : servers) {
sb.append(server.getId()).append(":").append(server.getPort()).append(";");
}
return sb.toString();
}
}
package com.dianping.cat.system.page.router;
public enum JspFile {
API("/jsp/system/router.jsp"),
API("/jsp/system/router/router.jsp"),
MODEL("/jsp/system/router/router.jsp"),
;
......
......@@ -12,7 +12,7 @@ public class JspViewer extends BaseJspViewer<SystemPage, Action, Context, Model>
case API:
return JspFile.API.getPath();
case MODEL:
return JspFile.API.getPath();
return JspFile.MODEL.getPath();
}
throw new RuntimeException("Unknown action: " + action);
......
......@@ -4,6 +4,17 @@ import com.dianping.cat.system.SystemPage;
import org.unidal.web.mvc.ViewModel;
public class Model extends ViewModel<SystemPage, Action, Context> {
private String m_content;
public String getContent() {
return m_content;
}
public void setContent(String content) {
m_content = content;
}
public Model(Context ctx) {
super(ctx);
}
......
package com.dianping.cat.system.page.router;
import com.dianping.cat.system.SystemPage;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.unidal.web.mvc.ActionContext;
import org.unidal.web.mvc.ActionPayload;
import org.unidal.web.mvc.payload.annotation.FieldMeta;
import com.dianping.cat.helper.TimeUtil;
import com.dianping.cat.system.SystemPage;
public class Payload implements ActionPayload<SystemPage, Action> {
private SystemPage m_page;
@FieldMeta("op")
private Action m_action;
@FieldMeta("domain")
private String m_domain;
@FieldMeta("date")
private String m_date;
public String getDomain() {
return m_domain;
}
private SystemPage m_page;
@FieldMeta("op")
private Action m_action;
@FieldMeta("domain")
private String m_domain;
@FieldMeta("date")
private String m_date;
private SimpleDateFormat m_sdf = new SimpleDateFormat("yyyy-MM-dd");
public String getDomain() {
return m_domain;
}
public void setDomain(String domain) {
m_domain = domain;
}
m_domain = domain;
}
public String getDate() {
return m_date;
}
public Date getDate() {
try {
return m_sdf.parse(m_date);
} catch (ParseException e) {
return TimeUtil.getCurrentDay(-1);
}
}
public void setDate(String date) {
m_date = date;
}
m_date = date;
}
public void setAction(String action) {
m_action = Action.getByName(action, Action.API);
}
@Override
public Action getAction() {
return m_action;
}
@Override
public SystemPage getPage() {
return m_page;
}
@Override
public void setPage(String page) {
m_page = SystemPage.getByName(page, SystemPage.ROUTER);
}
@Override
public void validate(ActionContext<?> ctx) {
if (m_action == null) {
m_action = Action.API;
}
}
m_action = Action.getByName(action, Action.API);
}
@Override
public Action getAction() {
return m_action;
}
@Override
public SystemPage getPage() {
return m_page;
}
@Override
public void setPage(String page) {
m_page = SystemPage.getByName(page, SystemPage.ROUTER);
}
@Override
public void validate(ActionContext<?> ctx) {
if (m_action == null) {
m_action = Action.API;
}
}
}
......@@ -16,6 +16,5 @@
</entity>
<entity name="server">
<attribute name="id" value-type="String"/>
<attribute name="port" value-type="int" />
</entity>
</model>
\ No newline at end of file
......@@ -471,8 +471,8 @@
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.manager.AlertManager</role>
<implementation>com.dianping.cat.report.task.alert.manager.AlertManager</implementation>
<role>com.dianping.cat.report.task.alert.manager.AlertEntityService</role>
<implementation>com.dianping.cat.report.task.alert.manager.AlertEntityService</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.home.dal.report.AlertDao</role>
......@@ -675,8 +675,8 @@
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.sender.SendManager</role>
<implementation>com.dianping.cat.report.task.alert.sender.SendManager</implementation>
<role>com.dianping.cat.report.task.alert.sender.AlertManager</role>
<implementation>com.dianping.cat.report.task.alert.sender.AlertManager</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.system.config.AlertPolicyManager</role>
......@@ -688,7 +688,7 @@
<role>com.dianping.cat.report.task.alert.sender.receiver.Contactor</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.manager.AlertManager</role>
<role>com.dianping.cat.report.task.alert.manager.AlertEntityService</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.sender.SenderManager</role>
......@@ -721,7 +721,7 @@
<role>com.dianping.cat.report.task.alert.DataChecker</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.SendManager</role>
<role>com.dianping.cat.report.task.alert.sender.AlertManager</role>
</requirement>
</requirements>
</component>
......@@ -748,7 +748,7 @@
<role>com.dianping.cat.report.task.alert.DataChecker</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.SendManager</role>
<role>com.dianping.cat.report.task.alert.sender.AlertManager</role>
</requirement>
</requirements>
</component>
......@@ -775,7 +775,7 @@
<role>com.dianping.cat.report.task.alert.DataChecker</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.SendManager</role>
<role>com.dianping.cat.report.task.alert.sender.AlertManager</role>
</requirement>
</requirements>
</component>
......@@ -799,7 +799,7 @@
<role>com.dianping.cat.report.task.alert.exception.AlertExceptionBuilder</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.SendManager</role>
<role>com.dianping.cat.report.task.alert.sender.AlertManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.page.model.spi.ModelService</role>
......@@ -812,7 +812,7 @@
<implementation>com.dianping.cat.report.task.alert.thirdParty.ThirdPartyAlert</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.SendManager</role>
<role>com.dianping.cat.report.task.alert.sender.AlertManager</role>
</requirement>
</requirements>
</component>
......@@ -4312,6 +4312,12 @@
<requirement>
<role>com.dianping.cat.system.page.router.JspViewer</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.service.ReportServiceManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.config.RouterConfigManager</role>
</requirement>
</requirements>
</component>
<component>
......
<%@ page contentType="text/html; charset=utf-8" %>
<jsp:useBean id="ctx" type="com.dianping.cat.system.page.router.Context" scope="request"/>
<jsp:useBean id="payload" type="com.dianping.cat.system.page.router.Payload" scope="request"/>
<jsp:useBean id="model" type="com.dianping.cat.system.page.router.Model" scope="request"/>
View of router page under system
\ No newline at end of file
${model.content}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册