package com.taobao.easyweb.core.request.debug; import com.taobao.easyweb.core.Configuration; import com.taobao.easyweb.core.app.App; import com.taobao.easyweb.core.app.AppContainer; import com.taobao.easyweb.core.bean.BeanFactory; import com.taobao.easyweb.core.request.PageMethod; import com.taobao.easyweb.core.request.RequestMapping; import com.taobao.easyweb.core.velocity.VelocityEngine; import com.taobao.easyweb.core.velocity.VmToolFactory; import org.apache.commons.io.IOUtils; import org.springframework.stereotype.Component; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.io.*; import java.util.*; /** * User: jimmey/shantong * DateTime: 13-4-25 ����11:21 */ @Component public class DebugHelper { private static String code; private static List<String> messages = new LinkedList<String>(); static { try { InputStream in = DebugHelper.class.getClassLoader().getResourceAsStream("com/taobao/easyweb/core/request/debug/debug.vm"); code = IOUtils.toString(in); } catch (Exception e) { code = "code not found, error message is " + e.getMessage(); } messages.add("������ϵ��<a target=\"_blank\" href=\"http://www.taobao.com/webww/ww.php?ver=3&touid=%E5%8D%95%E9%80%9A&siteid=cntaobao&status=1&charset=utf-8\"><img border=\"0\" src=\"http://amos.alicdn.com/realonline.aw?v=2&uid=%E5%8D%95%E9%80%9A&site=cntaobao&s=1&charset=utf-8\" alt=\"���������ҷ���Ϣ\" /></a>"); messages.add("<a target=\"_blank\" href=\"https://github.com/jimgithub/easyweb/issues/new\">��������</a>"); messages.add("<a target=\"_blank\" href=\"https://github.com/jimgithub/easyweb/issues/new\">�鿴��������</a>"); messages.add("<a target=\"_blank\" href=\"https://github.com/jimgithub/easyweb/wiki/%E9%97%AE%E9%A2%98%E6%8E%92%E6%9F%A5\">�鿴Easyweb�ĵ�</a>"); messages.add("��лʹ��Easyweb����ӭ�����������ͽ��飡��"); } @Resource private VelocityEngine velocityEngine; public String pageNotFount(HttpServletRequest request) { DebugInfo debugInfo = getCommonInfo(request); Map<String, PageMethod> pages = RequestMapping.getAppPages(); String msg = "ҳ�� ��" + request.getRequestURI() + "�� û������"; if (pages != null) { for (String url : pages.keySet()) { if (url.endsWith(request.getRequestURI())) { PageMethod pageMethod = pages.get(url); StringBuilder sb = new StringBuilder(); sb.append("����ҳ�桾" + url + "��<br>"); sb.append("��ȷ���ڡ�").append(pageMethod.getFile().getAbsolutePath()); sb.append("���ļ��еġ�").append(pageMethod.getMethod()).append("��������@Pageע��������ȷ<br>"); sb.append("<b style='color:red'>�Ƿ�method���ò���ȷ</b><br>"); sb.append("�ڴ��ĵ�ַΪ��").append(url).append("����ʵ��Ϊ��").append(RequestMapping.getUrl(request)).append("��"); msg = sb.toString(); } } } debugInfo.addErrorInfo(new Info("��������", "ҳ�治����")); debugInfo.addErrorInfo(new Info("ԭ��˵��", msg)); return render(debugInfo); } public String pipelineException(HttpServletRequest request, Throwable e) { DebugInfo debugInfo = getCommonInfo(request); StringWriter writer = new StringWriter(); e.printStackTrace(new PrintWriter(writer)); debugInfo.addErrorInfo(new Info("��������", "pipelineִ��һ��")); debugInfo.addErrorInfo(new Info("������Ϣ", "���� " + request.getRequestURL() + " �����쳣")); debugInfo.addErrorInfo(new Info("��ϸ��ջ", writer.toString(), 1)); return render(debugInfo); } public String serverError(HttpServletRequest request, Throwable e) { DebugInfo debugInfo = getCommonInfo(request); StringWriter writer = new StringWriter(); PageMethod method = RequestMapping.getPageMthod(request); e.printStackTrace(new PrintWriter(writer)); debugInfo.addErrorInfo(new Info("��������", "����˴���")); debugInfo.addErrorInfo(new Info("������Ϣ", "���� " + request.getRequestURL() + " �����쳣")); debugInfo.addErrorInfo(new Info("groovy�ļ�", method.getFile().getAbsolutePath())); debugInfo.addErrorInfo(new Info("ִ�еķ���", method.getMethod())); debugInfo.addErrorInfo(new Info("��ϸ��ջ", writer.toString(), 1)); return render(debugInfo); } public String appStarting(HttpServletRequest request) { DebugInfo debugInfo = getCommonInfo(request); debugInfo.addErrorInfo(new Info("��������", "Ӧ������������")); return render(debugInfo); } public String deployError(HttpServletRequest request) { DebugInfo debugInfo = getCommonInfo(request); debugInfo.addErrorInfo(new Info("��������", "Ӧ������ʧ��")); return render(debugInfo); } public String appNotExist(HttpServletRequest request) { DebugInfo debugInfo = getCommonInfo(request); debugInfo.addErrorInfo(new Info("��������", "Ӧ�ò�����")); return render(debugInfo); } public String appRemove(HttpServletRequest request) { DebugInfo debugInfo = getCommonInfo(request); debugInfo.addErrorInfo(new Info("��������", "Ӧ�ñ����ߣ�ɾ����")); return render(debugInfo); } private DebugInfo getCommonInfo(HttpServletRequest request) { DebugInfo debugInfo = new DebugInfo(request); setAppLog(debugInfo); debugInfo.setAppInfos(deployInfo()); debugInfo.addCommonInfo(new Info("������Ϣ", Configuration.print(), 2, 200)); return debugInfo; } private List<AppInfo> deployInfo() { List<AppInfo> list = new ArrayList<AppInfo>(); Collection<App> apps = AppContainer.getApps(); for (App app : apps) { AppInfo info = new AppInfo(app); info.setBeans(BeanFactory.getBeans(app)); info.setVmTools(VmToolFactory.getAppTools(app.getAppKey())); info.setPages(RequestMapping.getAppPages(app.getAppKey())); list.add(info); } return list; } private void setAppLog(DebugInfo info) { if (info.getApp() == null) { return; } File log = new File(Configuration.getAppLog(info.getApp().getAppKey())); if (!log.exists()) { return; } info.addCommonInfo(new Info("��־Ŀ¼", log.getAbsolutePath())); try { String content = IOUtils.toString(new FileInputStream(log)); int length = content.length(); if (length > 10000) { content = "...\n" + content.substring(length - 10000, length); } info.addCommonInfo(new Info("��־����", content, 2, 200)); } catch (IOException e) { } } private String render(DebugInfo info) { if (Configuration.isOnline()) { //log return ""; } Map<String, Object> context = new HashMap<String, Object>(); context.put("debugInfo", info); context.put("messages", messages); return velocityEngine.renderTemplate("com/taobao/easyweb/core/request/debug/debug.vm", code, context); } }