提交 4ec54278 编写于 作者: L leon.li

alert summary phase 1

上级 e1afcfec
......@@ -53,7 +53,9 @@ com.dianping.cat.report.page.system.Handler.class,
com.dianping.cat.report.page.cdn.Handler.class,
com.dianping.cat.report.page.app.Handler.class
com.dianping.cat.report.page.app.Handler.class,
com.dianping.cat.report.page.summary.Handler.class
})
public class ReportModule extends AbstractModule {
......
......@@ -51,7 +51,9 @@ public enum ReportPage implements Page {
CDN("cdn", "cdn", "Cdn", "Cdn", true),
APP("app", "app", "App", "App", true);
APP("app", "app", "App", "App", true),
SUMMARY("summary", "summary", "Summary", "Summary", true);
private String m_name;
......
package com.dianping.cat.report.page.summary;
public enum Action implements org.unidal.web.mvc.Action {
VIEW("view");
private String m_name;
private Action(String name) {
m_name = name;
}
public static Action getByName(String name, Action defaultAction) {
for (Action action : Action.values()) {
if (action.getName().equals(name)) {
return action;
}
}
return defaultAction;
}
@Override
public String getName() {
return m_name;
}
}
package com.dianping.cat.report.page.summary;
import com.dianping.cat.report.ReportContext;
public class Context extends ReportContext<Payload> {
}
package com.dianping.cat.report.page.summary;
import java.io.IOException;
import javax.servlet.ServletException;
import org.unidal.lookup.annotation.Inject;
import org.unidal.web.mvc.PageHandler;
import org.unidal.web.mvc.annotation.InboundActionMeta;
import org.unidal.web.mvc.annotation.OutboundActionMeta;
import org.unidal.web.mvc.annotation.PayloadMeta;
import com.dianping.cat.report.ReportPage;
import com.dianping.cat.report.task.alert.summary.AlertSummaryExecutor;
public class Handler implements PageHandler<Context> {
@Inject
private JspViewer m_jspViewer;
@Inject
AlertSummaryExecutor m_executor;
@Override
@PayloadMeta(Payload.class)
@InboundActionMeta(name = "summary")
public void handleInbound(Context ctx) throws ServletException, IOException {
// display only, no action here
}
@Override
@OutboundActionMeta(name = "summary")
public void handleOutbound(Context ctx) throws ServletException, IOException {
Model model = new Model(ctx);
Payload payload = ctx.getPayload();
Action action = payload.getAction();
switch (action) {
case VIEW:
String summaryContent = m_executor.execute(payload.getDomain(), payload.getTime(), payload.getEmails());
model.setSummaryContent(summaryContent);
break;
}
model.setAction(Action.VIEW);
model.setPage(ReportPage.SUMMARY);
if (!ctx.isProcessStopped()) {
m_jspViewer.view(ctx, model);
}
}
}
package com.dianping.cat.report.page.summary;
public enum JspFile {
VIEW("/jsp/report/summary/summary_view.jsp"),
;
private String m_path;
private JspFile(String path) {
m_path = path;
}
public String getPath() {
return m_path;
}
}
package com.dianping.cat.report.page.summary;
import com.dianping.cat.report.ReportPage;
import org.unidal.web.mvc.view.BaseJspViewer;
public class JspViewer extends BaseJspViewer<ReportPage, Action, Context, Model> {
@Override
protected String getJspFilePath(Context ctx, Model model) {
Action action = model.getAction();
switch (action) {
case VIEW:
return JspFile.VIEW.getPath();
}
throw new RuntimeException("Unknown action: " + action);
}
}
package com.dianping.cat.report.page.summary;
import com.dianping.cat.report.ReportPage;
import org.unidal.web.mvc.ViewModel;
public class Model extends ViewModel<ReportPage, Action, Context> {
private String m_summaryContent;
public Model(Context ctx) {
super(ctx);
}
@Override
public Action getDefaultAction() {
return Action.VIEW;
}
public String getSummaryContent() {
return m_summaryContent;
}
public void setSummaryContent(String summaryContent) {
m_summaryContent = summaryContent;
}
}
package com.dianping.cat.report.page.summary;
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.report.ReportPage;
public class Payload implements ActionPayload<ReportPage, Action> {
private ReportPage m_page;
@FieldMeta("op")
private Action m_action;
@FieldMeta("domain")
private String m_domain;
@FieldMeta("time")
private String m_time;
@FieldMeta("emails")
private String m_emails;
private SimpleDateFormat m_sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public Action getAction() {
if (m_action == null) {
return Action.VIEW;
} else {
return m_action;
}
}
public String getDomain() {
if (m_domain == null || "".equals(m_domain)) {
return null;
} else {
return m_domain;
}
}
public String getEmails() {
if (m_emails == null || "".equals(m_emails)) {
return null;
} else {
return m_emails;
}
}
@Override
public ReportPage getPage() {
return m_page;
}
public Date getTime() {
try {
return m_sdf.parse(m_time);
} catch (Exception ex) {
return new Date();
}
}
public void setAction(String action) {
m_action = Action.getByName(action, Action.VIEW);
}
public void setDomain(String domain) {
m_domain = domain;
}
public void setEmails(String emails) {
m_emails = emails;
}
public void setPage(ReportPage page) {
m_page = page;
}
@Override
public void setPage(String page) {
m_page = ReportPage.getByName(page, ReportPage.SUMMARY);
}
public void setTime(String time) {
m_time = time;
}
@Override
public void validate(ActionContext<?> ctx) {
if (m_action == null) {
m_action = Action.VIEW;
}
}
}
......@@ -13,7 +13,7 @@ public class AlertSummaryDecorator {
private static final String css = "<style> th, .alert-content { white-space: nowrap; } </style>";
private static final String tableHead = " <table class=\"table table-bordered table-striped table-hover\"> <thead> <tr> <th>告警类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th> <th>详细警告信息</th> </tr> </thead> <tbody>";
private static final String tableHead = " <table class=\"table table-bordered table-striped table-hover\"> <thead> <tr> <th>告警类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th> <th colspan=\"5\">详细警告信息</th> </tr> </thead> <tbody>";
private static final String tableTail = " </tbody></table>";
......
......@@ -47,12 +47,15 @@ public class AlertSummaryExecutor {
public String execute(String domain, Date date, String receiverStr) {
try {
System.out.println("begin");
AlertSummary alertSummary = m_alertSummaryGenerator.generateAlertSummary(domain, date);
System.out.println("---" + alertSummary.toString());
m_alertSummaryManager.insert(alertSummary);
String title = buildMailTitle(domain, date);
String content = m_alertSummaryDecorator.generateHtml(alertSummary);
List<String> receivers = builderReceivers(receiverStr);
m_mailSms.sendEmail(title, content, receivers);
System.out.println(title + "---" + content + "---" + receivers);
return content;
} catch (Exception e) {
......
......@@ -24,9 +24,9 @@ public class NavigationBar {
ReportPage.HOME,
ReportPage.METRIC,
ReportPage.USERMONITOR,
ReportPage.TRANSACTION,
ReportPage.EVENT,
......@@ -44,9 +44,9 @@ public class NavigationBar {
ReportPage.DEPENDENCY,
ReportPage.NETWORK,
ReportPage.CDN,
ReportPage.SYSTEM,
ReportPage.ALTERATION,
......@@ -54,9 +54,9 @@ public class NavigationBar {
ReportPage.STATE,
ReportPage.STATISTICS,
ReportPage.LOGVIEW,
};
ReportPage.SUMMARY, };
}
}
......@@ -15,15 +15,15 @@
<statement><![CDATA[
SELECT <FIELDS/>
FROM <TABLE/>
WHERE <FIELD name='alert_time'/> >= ${start-time}
AND <FIELD name='alert_time'/> <= ${end-time}
WHERE <FIELD name='alert-time'/> >= ${start-time}
AND <FIELD name='alert-time'/> <= ${end-time}
<IF type='NOT_NULL' field='category'>
AND <FIELD name='category'/> = ${category}
</IF>
<IF type='NOT_NULL' field='domain'>
AND <FIELD name='domain'/> = ${domain}
</IF>
ORDER BY <FIELD name='alert_time'/> asc
ORDER BY <FIELD name='alert-time'/> asc
]]></statement>
</query>
<query name="query-alerts-by-time-category" type="SELECT"
......@@ -34,12 +34,12 @@
<statement><![CDATA[
SELECT <FIELDS/>
FROM <TABLE/>
WHERE <FIELD name='alert_time'/> >= ${start-time}
AND <FIELD name='alert_time'/> <= ${end-time}
WHERE <FIELD name='alert-time'/> >= ${start-time}
AND <FIELD name='alert-time'/> <= ${end-time}
<IF type='NOT_NULL' field='category'>
AND <FIELD name='category'/> = ${category}
</IF>
ORDER BY <FIELD name='alert_time'/> asc
ORDER BY <FIELD name='alert-time'/> asc
]]></statement>
</query>
</query-defs>
......
......@@ -1937,6 +1937,45 @@
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.summary.AlertSummaryExecutor</role>
<implementation>com.dianping.cat.report.task.alert.summary.AlertSummaryExecutor</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.report.task.alert.summary.AlertSummaryGenerator</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.summary.AlertSummaryManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.summary.AlertSummaryDecorator</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.tool.MailSMS</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.summary.AlertSummaryGenerator</role>
<implementation>com.dianping.cat.report.task.alert.summary.AlertSummaryGenerator</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.home.dal.report.AlertDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.page.dependency.graph.TopologyGraphManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.summary.AlertSummaryManager</role>
<implementation>com.dianping.cat.report.task.alert.summary.AlertSummaryManager</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.home.dal.report.AlertSummaryDao</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.system.config.NetGraphConfigManager</role>
<implementation>com.dianping.cat.system.config.NetGraphConfigManager</implementation>
......@@ -1963,6 +2002,16 @@
<data-source-name>cat</data-source-name>
</configuration>
</component>
<component>
<role>org.unidal.dal.jdbc.mapping.TableProvider</role>
<role-hint>alert-summary</role-hint>
<implementation>org.unidal.dal.jdbc.mapping.SimpleTableProvider</implementation>
<configuration>
<logical-table-name>alert-summary</logical-table-name>
<physical-table-name>alert_summary</physical-table-name>
<data-source-name>cat</data-source-name>
</configuration>
</component>
<component>
<role>org.unidal.dal.jdbc.mapping.TableProvider</role>
<role-hint>alteration</role-hint>
......@@ -2052,6 +2101,15 @@
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.home.dal.report.AlertSummaryDao</role>
<implementation>com.dianping.cat.home.dal.report.AlertSummaryDao</implementation>
<requirements>
<requirement>
<role>org.unidal.dal.jdbc.QueryEngine</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.home.dal.report.AlterationDao</role>
<implementation>com.dianping.cat.home.dal.report.AlterationDao</implementation>
......@@ -3651,6 +3709,88 @@
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.page.summary.Handler</role>
<implementation>com.dianping.cat.report.page.summary.Handler</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.report.page.summary.JspViewer</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.summary.AlertSummaryExecutor</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.page.summary.JspViewer</role>
<implementation>com.dianping.cat.report.page.summary.JspViewer</implementation>
<requirements>
<requirement>
<role>org.unidal.web.mvc.view.model.ModelHandler</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.summary.AlertSummaryExecutor</role>
<implementation>com.dianping.cat.report.task.alert.summary.AlertSummaryExecutor</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.report.task.alert.summary.AlertSummaryGenerator</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.summary.AlertSummaryManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.summary.AlertSummaryDecorator</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.tool.MailSMS</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.summary.AlertSummaryGenerator</role>
<implementation>com.dianping.cat.report.task.alert.summary.AlertSummaryGenerator</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.home.dal.report.AlertDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.page.dependency.graph.TopologyGraphManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.home.dal.report.AlertDao</role>
<implementation>com.dianping.cat.home.dal.report.AlertDao</implementation>
<requirements>
<requirement>
<role>org.unidal.dal.jdbc.QueryEngine</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.summary.AlertSummaryManager</role>
<implementation>com.dianping.cat.report.task.alert.summary.AlertSummaryManager</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.home.dal.report.AlertSummaryDao</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.home.dal.report.AlertSummaryDao</role>
<implementation>com.dianping.cat.home.dal.report.AlertSummaryDao</implementation>
<requirements>
<requirement>
<role>org.unidal.dal.jdbc.QueryEngine</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.task.alert.summary.AlertSummaryDecorator</role>
<implementation>com.dianping.cat.report.task.alert.summary.AlertSummaryDecorator</implementation>
</component>
<component>
<role>com.dianping.cat.system.SystemModule</role>
<implementation>com.dianping.cat.system.SystemModule</implementation>
......
......@@ -74,6 +74,9 @@
<page name="app" title="App" path="app" template="default">
<description>App</description>
</page>
<page name="summary" title="Summary" path="summary" template="default">
<description>Summary</description>
</page>
</module>
<module name="system" path="s" default="false">
<page name="alarm" title="Alarm" default="true" path="alarm" view="/jsp/system/alarm/alarm.jsp">
......
<%@ page contentType="text/html; charset=utf-8" %>
<jsp:useBean id="ctx" type="com.dianping.cat.report.page.summary.Context" scope="request"/>
<jsp:useBean id="payload" type="com.dianping.cat.report.page.summary.Payload" scope="request"/>
<jsp:useBean id="model" type="com.dianping.cat.report.page.summary.Model" scope="request"/>
<%@ taglib prefix="a" uri="/WEB-INF/app.tld"%>
<%@ taglib prefix="w" uri="http://www.unidal.org/web/core"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="res" uri="http://www.unidal.org/webres"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<form id="form" method="post" action="summary?op=view">
警告时间
<input type="text" name="time" id="time" value="<fmt:formatDate value="${payload.time}" pattern="yyyy-MM-dd HH:mm:ss"/>" style="height:auto" class="input-medium" placeholder="格式如:2014-07-01 00:00:00">
应用名
<input type="text" name="domain" id="domain" value="${payload.domain}" style="height:auto" class="input-small">
发送邮箱
<input type="text" name="emails" id="emails" value="${payload.emails}" style="height:auto" class="input-small" placeholder="用半角逗号分割,可为空">
<input class="btn btn-primary btn-small" value="查询" type="submit">
</form>
${model.summaryContent}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册