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

Source Code of com.dianping.cat.report.page.problem.GroupLevelInfo$GroupStatistics

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

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeSet;

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.ProblemReport;
import com.dianping.cat.consumer.problem.model.entity.Segment;
import com.dianping.cat.helper.SortHelper;
import com.dianping.cat.report.view.ProblemReportHelper;

public class GroupLevelInfo {
  private List<String> m_datas = new ArrayList<String>();

  private Map<String, GroupStatistics> m_groupStatistics = new LinkedHashMap<String, GroupStatistics>();

  private int m_minutes;

  private Model m_model;

  public GroupLevelInfo(Model model) {
    m_model = model;
    m_minutes = model.getLastMinute();
  }

  public GroupLevelInfo display(ProblemReport report) {
    Machine machine = report.getMachines().get(m_model.getIpAddress());
    if (machine == null) {
      return null;
    }
    List<Entry> entries = machine.getEntries();
    for (Entry temp : entries) {
      Map<String, JavaThread> threads = temp.getThreads();

      for (java.util.Map.Entry<String, JavaThread> entry : threads.entrySet()) {
        JavaThread thread = entry.getValue();

        String groupName = thread.getGroupName();
        GroupStatistics statistics = findOrCreatGroupStatistics(groupName, m_minutes);
        statistics.add(thread.getSegments(), temp.getType());
      }
    }
    long currentTimeMillis = System.currentTimeMillis();
    long currentHours = currentTimeMillis - currentTimeMillis % (60 * 60 * 1000);
    if (currentHours == m_model.getLongDate()) {
      for (int i = m_minutes; i >= 0; i--) {
        m_datas.add(getShowDetailByMinte(i));
      }
    } else {
      for (int i = 0; i <= m_minutes; i++) {
        m_datas.add(getShowDetailByMinte(i));
      }
    }
    return this;
  }

  public GroupStatistics findOrCreatGroupStatistics(String groupName, int lastMinute) {
    m_minutes = lastMinute;

    GroupStatistics value = m_groupStatistics.get(groupName);
    if (value == null) {
      GroupStatistics result = new GroupStatistics(lastMinute);

      m_groupStatistics.put(groupName, result);
      return result;
    } else {
      return value;
    }
  }

  public List<String> getDatas() {
    return m_datas;
  }

  public List<String> getGroups() {
    return SortHelper.sortDomain(m_groupStatistics.keySet());
  }

  private String getShowDetailByMinte(int minute) {
    Map<String, String> params = new LinkedHashMap<String, String>();
    String baseUrl = "/cat/r/p?op=detail";
    params.put("domain", m_model.getDomain());
    params.put("ip", m_model.getIpAddress());
    params.put("date", m_model.getDate());
    params.put("minute", Integer.toString(minute));

    StringBuilder sb = new StringBuilder().append("<td>");
    String minuteStr = m_model.getDisplayHour() + ":";
    if (minute < 10) {
      minuteStr = minuteStr + "0" + Integer.toString(minute);
    } else {
      minuteStr = minuteStr + Integer.toString(minute);
    }

    sb.append(ProblemReportHelper.creatLinkString(baseUrl, "minute", params, minuteStr));
    sb.append("</td>");

    for (String group : getGroups()) {
      sb.append("<td>");
      params.put("group", group);
      GroupStatistics value = m_groupStatistics.get(group);
      for (String temp : value.getStatistics().get(minute)) {
        String url = ProblemReportHelper.creatLinkString(baseUrl, temp, params, "");
        sb.append(url);
      }
      sb.append("</td>");
    }
    return sb.toString();
  }

  public static class GroupStatistics {

    private Map<Integer, TreeSet<String>> m_statistics = new LinkedHashMap<Integer, TreeSet<String>>();

    public GroupStatistics(int lastMinute) {
      for (int i = 0; i <= lastMinute; i++) {

        m_statistics.put(i, new TreeSet<String>());
      }
    }

    public void add(Map<Integer, Segment> segments, String type) {
      for (java.util.Map.Entry<Integer, Segment> entry : segments.entrySet()) {
        findOrCreat(entry.getKey()).add(type);
      }
    }

    public TreeSet<String> findOrCreat(Integer key) {
      TreeSet<String> result = m_statistics.get(key);
      if (result == null) {
        result = new TreeSet<String>();
        m_statistics.put(key, result);
      }
      return result;
    }

    public Map<Integer, TreeSet<String>> getStatistics() {
      return m_statistics;
    }

    public TreeSet<String> getTag(int minutes) {
      return m_statistics.get(minutes);
    }
  }
}
TOP

Related Classes of com.dianping.cat.report.page.problem.GroupLevelInfo$GroupStatistics

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.