ProcessCostTimeFilter.java 1.3 KB
Newer Older
A
ascrutae 已提交
1
package com.a.eye.skywalking.analysis.chainbuild.filter.impl;
Z
zhangxin10 已提交
2

A
ascrutae 已提交
3 4 5 6
import com.a.eye.skywalking.analysis.chainbuild.SpanEntry;
import com.a.eye.skywalking.analysis.chainbuild.po.ChainNode;
import com.a.eye.skywalking.analysis.chainbuild.filter.SpanNodeProcessFilter;
import com.a.eye.skywalking.analysis.chainbuild.util.SubLevelSpanCostCounter;
Z
zhangxin10 已提交
7 8

public class ProcessCostTimeFilter extends SpanNodeProcessFilter {
wu-sheng's avatar
wu-sheng 已提交
9
	@Override
wu-sheng's avatar
wu-sheng 已提交
10
	public void doFilter(SpanEntry spanEntry, ChainNode node, SubLevelSpanCostCounter costMap) {
wu-sheng's avatar
wu-sheng 已提交
11 12 13 14
		node.setCost(spanEntry.getCost());
		
		this.saveCostAsSubNodeCost(spanEntry, node, costMap);
		this.computeChainNodeCost(costMap, node);
Z
zhangxin10 已提交
15

wu-sheng's avatar
wu-sheng 已提交
16 17
		this.doNext(spanEntry, node, costMap);
	}
Z
zhangxin10 已提交
18

wu-sheng's avatar
wu-sheng 已提交
19
	private void saveCostAsSubNodeCost(SpanEntry spanEntry, ChainNode node,
wu-sheng's avatar
wu-sheng 已提交
20
			SubLevelSpanCostCounter costMap) {
wu-sheng's avatar
wu-sheng 已提交
21 22 23 24
		long subNodeCost = spanEntry.getCost();
		if (costMap.exists(spanEntry.getParentLevelId())) {
			subNodeCost += costMap.get(spanEntry.getParentLevelId());
		}
Z
zhangxin10 已提交
25

wu-sheng's avatar
wu-sheng 已提交
26 27
		costMap.put(spanEntry.getParentLevelId(), subNodeCost);
	}
wu-sheng's avatar
wu-sheng 已提交
28

wu-sheng's avatar
wu-sheng 已提交
29
	private void computeChainNodeCost(SubLevelSpanCostCounter costMap, ChainNode node) {
wu-sheng's avatar
wu-sheng 已提交
30 31 32 33 34 35 36 37 38 39
		String levelId = node.getParentLevelId();
		if (levelId != null && levelId.length() > 0) {
			levelId += ".";
		}
		levelId += node.getLevelId() + "";

		if (costMap.exists(levelId)) {
			node.setCost(node.getCost() - costMap.get(levelId));
		}
	}
Z
zhangxin10 已提交
40
}