Package com.dianping.cat.consumer.problem

Source Code of com.dianping.cat.consumer.problem.ProblemReportMerger

package com.dianping.cat.consumer.problem;

import java.util.List;
import java.util.Stack;

import com.dianping.cat.consumer.problem.model.entity.Duration;
import com.dianping.cat.consumer.problem.model.entity.Entry;
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.consumer.problem.model.transform.DefaultMerger;

public class ProblemReportMerger extends DefaultMerger {
  private static final int SIZE = 60;

  public ProblemReportMerger(ProblemReport problemReport) {
    super(problemReport);
  }

  protected Entry findOrCreateEntry(Machine machine, Entry entry) {
    String type = entry.getType();
    String status = entry.getStatus();

    for (Entry e : machine.getEntries()) {
      if (e.getType().equals(type) && e.getStatus().equals(status)) {
        return e;
      }
    }

    Entry result = new Entry();

    result.setStatus(status).setType(type);
    machine.addEntry(result);
    return result;
  }

  @Override
  protected void mergeDuration(Duration old, Duration duration) {
    List<String> oldMessages = old.getMessages();
    List<String> newMessages = duration.getMessages();

    old.setValue(duration.getValue());
    old.setCount(old.getCount() + duration.getCount());

    mergeList(oldMessages, newMessages, SIZE);
  }

  protected List<String> mergeList(List<String> oldMessages, List<String> newMessages, int size) {
    int originalSize = oldMessages.size();
   
    if (originalSize < size) {
      int remainingSize = size - originalSize;

      if (remainingSize >= newMessages.size()) {
        oldMessages.addAll(newMessages);
      } else {
        oldMessages.addAll(newMessages.subList(0, remainingSize));
      }
    }
    return oldMessages;
  }

  @Override
  protected void mergeSegment(Segment old, Segment segment) {
    List<String> oldMessages = old.getMessages();
    List<String> newMessages = segment.getMessages();

    old.setCount(old.getCount() + segment.getCount());
    mergeList(oldMessages, newMessages, SIZE);
  }

  @Override
  protected void visitMachineChildren(Machine to, Machine from) {
    Stack<Object> objs = getObjects();

    for (Entry source : from.getEntries()) {
      Entry target = findOrCreateEntry(to, source);

      objs.push(target);
      source.accept(this);
      objs.pop();
    }
  }

  @Override
  public void visitProblemReport(ProblemReport problemReport) {
    super.visitProblemReport(problemReport);

    getProblemReport().getIps().addAll(problemReport.getIps());
    getProblemReport().getDomainNames().addAll(problemReport.getDomainNames());
  }
}
TOP

Related Classes of com.dianping.cat.consumer.problem.ProblemReportMerger

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.