提交 ab4cd9dd 编写于 作者: lakernote's avatar lakernote

优化trace

上级 0dae7131
......@@ -6,6 +6,9 @@ import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @author laker
*/
@Data
public class Span {
private String id;
......@@ -19,5 +22,6 @@ public class Span {
private SpanType spanType;
private int order;
private int level = 0;
private boolean max;
private List<Span> childs = new ArrayList<>();
}
package com.laker.admin.framework.aop.trace;
/**
* @author laker
*/
public enum SpanType {
Controller,
Service,
......
......@@ -6,45 +6,70 @@ import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
* @author laker
*/
@Data
public class Trace {
private int depth;
private String tracingId;
/**
*
*/
private int depth = 0;
/**
* 存储 span结果
*/
private List<Span> spans = new ArrayList<>();
/**
* 方法调用栈
*/
private LinkedList<Span> activeSpanStack = new LinkedList<>();
private Span peek() {
if (activeSpanStack.isEmpty()) {
return null;
}
return activeSpanStack.getLast();
}
private Span pop() {
return activeSpanStack.removeLast();
}
/**
* 添加 span
*
* @param span
*/
public void addSpan(Span span) {
span.setOrder(++depth);
// 查询出栈中最新的span
Span latest = current();
if (latest != null) {
span.setLevel(1);
// 栈为空设置栈leve为 0
if (latest == null) {
span.setLevel(0);
// 栈不为空
} else {
// 设置level 为上个level +1
span.setLevel(latest.getLevel() + 1);
// 添加进其 子span列表
latest.getChilds().add(span);
}
// 入栈
activeSpanStack.addLast(span);
}
public Span current() {
return peek();
}
public boolean stopSpan(Span current) {
// 出栈
Span pop = pop();
// 栈不为空且是第一层栈 则加入到 trace的spans
if (pop != null && pop.getLevel() == 0) {
spans.add(pop);
}
return activeSpanStack.isEmpty();
}
public Span current() {
return peek();
}
private Span peek() {
if (activeSpanStack.isEmpty()) {
return null;
}
return activeSpanStack.getLast();
}
private Span pop() {
return activeSpanStack.removeLast();
}
}
......@@ -63,8 +63,9 @@ public class TraceContext {
return;
}
spans.sort(Comparator.comparing(Span::getOrder));
spans.stream().max(Comparator.comparing(Span::getCost)).get().setMax(true);
for (Span span : spans) {
log.warn("{}({})[{}]:[{}]-{}", append + BAR, span.getOrder(), span.getCost(), span.getSpanType(), span.getId());
log.warn("{}{}{}{}({})[{}ms]:[{}]-{}", append + BAR, span.isMax() ? "【" : "[", span.getLevel(), span.isMax() ? "】" : "]", span.getOrder(), span.getCost(), span.getSpanType(), span.getId());
logSpan(span.getChilds(), append + BAR);
}
......
......@@ -8,6 +8,9 @@ import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* @author laker
*/
@Component
@Slf4j
@Aspect
......
......@@ -69,6 +69,7 @@ public class ExtLeaveController extends BaseFlowController {
this.setFlowStatusInfo(extLeave);
});
sysUserService.getUserDataPowers(StpUtil.getLoginIdAsLong());
return PageResponse.ok(records, pageList.getTotal());
}
......
package com.laker.admin.module.sys.mapper;
import com.laker.admin.module.sys.entity.SysDept;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.laker.admin.framework.aop.trace.LakerTrace;
import com.laker.admin.framework.aop.trace.SpanType;
import com.laker.admin.module.sys.entity.SysDept;
/**
* <p>
* Mapper 接口
* Mapper 接口
* </p>
*
* @author laker
* @since 2021-08-11
*/
@LakerTrace(spanType = SpanType.Mapper)
public interface SysDeptMapper extends BaseMapper<SysDept> {
}
......@@ -2,6 +2,8 @@ package com.laker.admin.module.sys.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.laker.admin.framework.aop.trace.LakerTrace;
import com.laker.admin.framework.aop.trace.SpanType;
import com.laker.admin.framework.aop.trace.TraceCodeBlock;
import com.laker.admin.framework.ext.mybatis.UserDataPower;
import com.laker.admin.module.sys.entity.SysUser;
import com.laker.admin.module.sys.mapper.SysDeptMapper;
......@@ -20,24 +22,25 @@ import java.util.List;
* @author laker
* @since 2021-08-05
*/
@LakerTrace(spanType = SpanType.Service)
@Service
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService {
@Autowired
SysDeptMapper deptMapper;
@LakerTrace
@LakerTrace(spanType = SpanType.Service)
@Override
public SysUser getUserAndDeptById(Long userId) {
SysUser user = this.getById(userId);
if (user == null) {
return null;
}
user.setDept(deptMapper.selectById(user.getDeptId()));
TraceCodeBlock.trace("deptMapper.selectById", value -> user.setDept(deptMapper.selectById(user.getDeptId())));
return user;
}
@Override
public List<UserDataPower> getUserDataPowers(Long userId) {
return this.getBaseMapper().getUserDataPowers(userId);
return TraceCodeBlock.trace("sysUserMapper.getUserDataPowers", () -> this.getBaseMapper().getUserDataPowers(userId));
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册