Package com.dianping.cat.consumer.state

Source Code of com.dianping.cat.consumer.state.StateReportMerger

package com.dianping.cat.consumer.state;

import com.dianping.cat.consumer.state.model.entity.Detail;
import com.dianping.cat.consumer.state.model.entity.Machine;
import com.dianping.cat.consumer.state.model.entity.Message;
import com.dianping.cat.consumer.state.model.entity.ProcessDomain;
import com.dianping.cat.consumer.state.model.entity.StateReport;
import com.dianping.cat.consumer.state.model.transform.DefaultMerger;

public class StateReportMerger extends DefaultMerger {

  public StateReportMerger(StateReport stateReport) {
    super(stateReport);
  }

  @Override
  protected void mergeDetail(Detail old, Detail detail) {
    old.setSize(detail.getSize() + old.getSize());
    old.setTotal(detail.getTotal() + old.getTotal());
    old.setTotalLoss(detail.getTotalLoss() + old.getTotalLoss());
  }

  @Override
  protected void mergeMachine(Machine old, Machine machine) {
    double oldCount = 0;
    double newCount = 0;
    if (old.getAvgTps() > 0) {
      oldCount = old.getTotal() / old.getAvgTps();
    }
    if (machine.getAvgTps() > 0) {
      newCount = machine.getTotal() / machine.getAvgTps();
    }
    double totalCount = oldCount + newCount;
    if (totalCount > 0) {
      old.setAvgTps((old.getTotal() + machine.getTotal()) / totalCount);
    }

    old.setTotal(old.getTotal() + machine.getTotal());
    old.setTotalLoss(old.getTotalLoss() + machine.getTotalLoss());
    old.setSize(old.getSize() + machine.getSize());

    old.setDump(old.getDump() + machine.getDump());
    old.setDumpLoss(old.getDumpLoss() + machine.getDumpLoss());
    old.setDelaySum(old.getDelaySum() + machine.getDelaySum());
    old.setDelayCount(old.getDelayCount() + machine.getDelayCount());

    old.setBlockTotal(old.getBlockTotal() + machine.getBlockTotal());
    old.setBlockLoss(old.getBlockLoss() + machine.getBlockLoss());
    old.setBlockTime(old.getBlockTime() + machine.getBlockTime());
    old.setPigeonTimeError(old.getPigeonTimeError() + machine.getPigeonTimeError());
    old.setNetworkTimeError(old.getNetworkTimeError() + machine.getNetworkTimeError());

    if (machine.getMaxTps() > old.getMaxTps()) {
      old.setMaxTps(machine.getMaxTps());
    }

    long count = old.getDelayCount();
    double sum = old.getDelaySum();
    if (count > 0) {
      old.setDelayAvg(sum / count);
    }
  }

  @Override
  protected void mergeMessage(Message old, Message message) {
    old.setTime(message.getTime());
    old.setId(message.getId());
    old.setTotal(old.getTotal() + message.getTotal());
    old.setTotalLoss(old.getTotalLoss() + message.getTotalLoss());
    old.setSize(old.getSize() + message.getSize());
    old.setDumpLoss(old.getDumpLoss() + message.getDumpLoss());
    old.setDump(old.getDump() + message.getDump());
    old.setDelayCount(old.getDelayCount() + message.getDelayCount());
    old.setDelaySum(old.getDelaySum() + message.getDelaySum());
    old.setBlockTotal(old.getBlockTotal() + message.getBlockTotal());
    old.setBlockLoss(old.getBlockLoss() + message.getBlockLoss());
    old.setBlockTime(old.getBlockTime() + message.getBlockTime());
    old.setPigeonTimeError(old.getPigeonTimeError() + message.getPigeonTimeError());
    old.setNetworkTimeError(old.getNetworkTimeError() + message.getNetworkTimeError());
  }

  @Override
  protected void mergeProcessDomain(ProcessDomain old, ProcessDomain processDomain) {
    old.getIps().addAll(processDomain.getIps());
    old.setSize(old.getSize() + processDomain.getSize());
    old.setTotal(old.getTotal() + processDomain.getTotal());
    old.setTotalLoss(old.getTotalLoss() + processDomain.getTotalLoss());
  }

  @Override
  public void visitStateReport(StateReport stateReport) {
    super.visitStateReport(stateReport);

    StateReport report = getStateReport();
    report.setDomain(stateReport.getDomain());
    report.setStartTime(stateReport.getStartTime());
    report.setEndTime(stateReport.getEndTime());
  }

}
TOP

Related Classes of com.dianping.cat.consumer.state.StateReportMerger

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.