Package com.dianping.cat.report.page.home

Source Code of com.dianping.cat.report.page.home.Handler

package com.dianping.cat.report.page.home;

import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;
import java.util.TreeMap;

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.consumer.RealtimeConsumer;
import com.dianping.cat.message.spi.core.MessageConsumer;
import com.dianping.cat.report.ReportPage;

public class Handler implements PageHandler<Context> {
  @Inject
  private JspViewer m_jspViewer;

  @Inject(type = MessageConsumer.class)
  private RealtimeConsumer m_realtimeConsumer;

  @Override
  @PayloadMeta(Payload.class)
  @InboundActionMeta(name = "home")
  public void handleInbound(Context ctx) throws ServletException, IOException {
    Payload payload = ctx.getPayload();

    if (payload.getAction() == Action.CHECKPOINT) {
      m_realtimeConsumer.doCheckpoint();
    }
  }

  @Override
  @OutboundActionMeta(name = "home")
  public void handleOutbound(Context ctx) throws ServletException, IOException {
    Model model = new Model(ctx);
    Payload payload = ctx.getPayload();

    model.setAction(payload.getAction());
    model.setPage(ReportPage.HOME);
    model.setDomain(payload.getDomain());
    model.setLongDate(payload.getDate());

    switch (payload.getAction()) {
    case THREAD_DUMP:
      showThreadDump(model, payload);
      break;
    case VIEW:
      break;
    case CHECKPOINT:
      break;
    default:
      break;
    }

    m_jspViewer.view(ctx, model);
  }

  private void showThreadDump(Model model, Payload payload) {
    ThreadMXBean bean = ManagementFactory.getThreadMXBean();
    ThreadInfo[] threads = bean.dumpAllThreads(true, true);
    StringBuilder sb = new StringBuilder(32768);
    int index = 1;

    TreeMap<String, ThreadInfo> sortedThreads = new TreeMap<String, ThreadInfo>();

    for (ThreadInfo thread : threads) {
      sortedThreads.put(thread.getThreadName(), thread);
    }

    sb.append("Threads: ").append(threads.length);
    sb.append("<pre>");

    for (ThreadInfo thread : sortedThreads.values()) {
      sb.append(index++).append(": <a href=\"#").append(thread.getThreadId()).append("\">")
            .append(thread.getThreadName()).append("</a>\r\n");
    }

    sb.append("\r\n");
    sb.append("\r\n");

    index = 1;

    for (ThreadInfo thread : sortedThreads.values()) {
      sb.append("<a name=\"").append(thread.getThreadId()).append("\">").append(index++).append(": ").append(thread)
            .append("\r\n");
    }

    sb.append("</pre>");

    model.setContent(sb.toString());
  }
}
TOP

Related Classes of com.dianping.cat.report.page.home.Handler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.