Package com.dianping.cat.report.page.problem

Source Code of com.dianping.cat.report.page.problem.DetailStatistics$StatusStatistics

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

import java.util.ArrayList;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import org.unidal.lookup.util.StringUtils;

import com.dianping.cat.consumer.problem.model.entity.Entry;
import com.dianping.cat.consumer.problem.model.entity.JavaThread;
import com.dianping.cat.consumer.problem.model.entity.Machine;
import com.dianping.cat.consumer.problem.model.entity.Segment;
import com.dianping.cat.consumer.problem.model.transform.BaseVisitor;
import com.dianping.cat.helper.SortHelper;

public class DetailStatistics extends BaseVisitor {

  private String m_groupName;

  private String m_ip = "";

  private int m_minute;

  private Map<String, TypeStatistics> m_status = new TreeMap<String, TypeStatistics>();

  private String m_threadId;

  public Map<String, TypeStatistics> getStatus() {
    return m_status;
  }

  public String getSubTitle() {
    StringBuilder sb = new StringBuilder();
    if (StringUtils.isEmpty(m_threadId) && StringUtils.isEmpty(m_groupName)) {
      return "All Thread Groups";
    } else if (!StringUtils.isEmpty(m_groupName) && StringUtils.isEmpty(m_threadId)) {
      return "All Threads in Group:" + m_groupName;
    } else if (!StringUtils.isEmpty(m_groupName) && !StringUtils.isEmpty(m_threadId)) {
      return "Thread :" + m_threadId;
    }
    return sb.toString();
  }

  public String getUrl() {
    StringBuilder sb = new StringBuilder();
    if (!StringUtils.isEmpty(m_groupName)) {
      sb.append("&group=").append(m_groupName);
    }
    if (!StringUtils.isEmpty(m_threadId)) {
      sb.append("&thread=").append(m_threadId);
    }
    return sb.toString();
  }

  private boolean isContents(String groupName, String threadId) {
    if (m_groupName != null && m_groupName.equals(groupName) == false) {
      return false;
    }
    if (m_threadId != null && m_threadId.equals(threadId) == false) {
      return false;
    }
    return true;
  }

  public DetailStatistics setGroupName(String groupName) {
    m_groupName = groupName;
    return this;
  }

  public DetailStatistics setIp(String ip) {
    m_ip = ip;
    return this;
  }

  public DetailStatistics setMinute(int minute) {
    m_minute = minute;
    return this;
  }

  public DetailStatistics setThreadId(String threadId) {
    m_threadId = threadId;
    return this;
  }

  private void statisticsSegment(Segment segment, String type, String status) {
    TypeStatistics statusValue = m_status.get(type);

    if (statusValue == null) {
      statusValue = new TypeStatistics(type);
      m_status.put(type, statusValue);
    }
    statusValue.statics(status, segment);
  }

  @Override
  public void visitMachine(Machine machine) {
    if (machine.getIp().equals(m_ip)) {
      List<Entry> entries = machine.getEntries();
      for (Entry entry : entries) {
        Map<String, JavaThread> threads = entry.getThreads();
        for (JavaThread thread : threads.values()) {
          String threadId = thread.getId();
          String groupName = thread.getGroupName();
          if (isContents(groupName, threadId)) {
            Segment segment = thread.getSegments().get(m_minute);
            if (segment != null) {
              statisticsSegment(segment, entry.getType(), entry.getStatus());
            }
          }
        }
      }
    }
  }

  public static class StatusStatistics {
    private int m_count;

    private List<String> m_links = new ArrayList<String>();

    private String m_status;

    private StatusStatistics(String status) {
      m_status = status;
    }

    public void addLinks(String link) {
      m_links.add(link);
    }

    public int getCount() {
      return m_count;
    }

    public List<String> getLinks() {
      return m_links;
    }

    public String getStatus() {
      return m_status;
    }

    public StatusStatistics setCount(int count) {
      m_count = count;
      return this;
    }

    public StatusStatistics setLinks(List<String> links) {
      m_links = links;
      return this;
    }

    public StatusStatistics setStatus(String status) {
      m_status = status;
      return this;
    }

    public void statics(Segment segment) {
      m_count += segment.getCount();
      if (m_links.size() < 60) {
        m_links.addAll(segment.getMessages());
        if (m_links.size() > 60) {
          m_links = m_links.subList(0, 60);
        }
      }
    }
  }

  public static class TypeStatistics {
    private int m_count;

    private Map<String, StatusStatistics> m_status = new LinkedHashMap<String, StatusStatistics>();

    private String m_type;

    public TypeStatistics(String type) {
      m_type = type;
    }

    public int getCount() {
      return m_count;
    }

    public Map<String, StatusStatistics> getStatus() {
      Map<String, StatusStatistics> result = SortHelper.sortMap(m_status,
            new Comparator<java.util.Map.Entry<String, StatusStatistics>>() {
              @Override
              public int compare(java.util.Map.Entry<String, StatusStatistics> o1,
                    java.util.Map.Entry<String, StatusStatistics> o2) {
                return o2.getValue().getCount() - o1.getValue().getCount();
              }
            });
      return result;
    }

    public String getType() {
      return m_type;
    }

    public TypeStatistics setCount(int count) {
      m_count = count;
      return this;
    }

    public void setStatus(Map<String, StatusStatistics> status) {
      m_status = status;
    }

    public TypeStatistics setType(String type) {
      m_type = type;
      return this;
    }

    public void statics(String status, Segment segment) {
      m_count += segment.getCount();
      StatusStatistics value = m_status.get(status);
      if (value == null) {
        value = new StatusStatistics(status);
        m_status.put(status, value);
      }
      value.statics(segment);
    }
  }
}
TOP

Related Classes of com.dianping.cat.report.page.problem.DetailStatistics$StatusStatistics

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.