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

增加长事务监控

上级 e5a0281b
......@@ -41,30 +41,24 @@ public class TreeView {
final StringBuilder treeSB = new StringBuilder();
recursive(0, true, "", root, new Callback() {
@Override
public void callback(int deep, boolean isLast, String prefix,
Node node) {
treeSB.append(prefix).append(
isLast ? STEP_FIRST_CHAR : STEP_NORMAL_CHAR);
if (isPrintCost && !node.isRoot()) {
if (node == maxCost) {
// the node with max cost will be highlighted
treeSB.append("[max]:" + node.toString().toString());
} else {
treeSB.append(node.toString());
}
recursive(0, true, "", root, (deep, isLast, prefix, node) -> {
treeSB.append(prefix).append(
isLast ? STEP_FIRST_CHAR : STEP_NORMAL_CHAR);
if (isPrintCost && !node.isRoot()) {
if (node == maxCost) {
// the node with max cost will be highlighted
treeSB.append("[max]:" + node);
} else {
treeSB.append(node);
}
treeSB.append(node.data);
if (node.mark != null && node.mark.length() != 0) {
treeSB.append(" [").append(node.mark)
.append(node.marks > 1 ? "," + node.marks : "")
.append("]");
}
treeSB.append("\n");
}
treeSB.append(node.data);
if (node.mark != null && node.mark.length() != 0) {
treeSB.append(" [").append(node.mark)
.append(node.marks > 1 ? "," + node.marks : "")
.append("]");
}
treeSB.append("\n");
});
return treeSB.toString();
......@@ -94,12 +88,8 @@ public class TreeView {
* @param node
*/
private void findMaxCostNode(Node node) {
if (!node.isRoot() && !node.parent.isRoot()) {
if (maxCost == null) {
maxCost = node;
} else if (maxCost.totalCost < node.totalCost) {
maxCost = node;
}
if (!node.isRoot() && !node.parent.isRoot() && (maxCost == null || (maxCost.totalCost < node.totalCost))) {
maxCost = node;
}
if (!node.isLeaf()) {
for (Node n : node.children) {
......@@ -171,9 +161,9 @@ public class TreeView {
/**
* 子节点
*/
final List<Node> children = new ArrayList<Node>();
final List<Node> children = new ArrayList<>();
final Map<String, Node> map = new HashMap<String, Node>();
final Map<String, Node> map = new HashMap<>();
/**
* 开始时间戳
......@@ -237,12 +227,12 @@ public class TreeView {
}
Node markBegin() {
beginTimestamp = System.nanoTime();
beginTimestamp = System.currentTimeMillis();
return this;
}
Node markEnd() {
endTimestamp = System.nanoTime();
endTimestamp = System.currentTimeMillis();
long cost = getCost();
if (cost < minCost) {
......@@ -267,24 +257,17 @@ public class TreeView {
return endTimestamp - beginTimestamp;
}
/**
* convert nano-seconds to milli-seconds
*/
double getCostInMillis(long nanoSeconds) {
return nanoSeconds / 1000000.0;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
if (times <= 1) {
sb.append("[").append(getCostInMillis(getCost()))
sb.append("[").append(getCost())
.append(TIME_UNIT).append("] ");
} else {
sb.append("[min=").append(getCostInMillis(minCost))
sb.append("[min=").append(minCost)
.append(TIME_UNIT).append(",max=")
.append(getCostInMillis(maxCost)).append(TIME_UNIT)
.append(",total=").append(getCostInMillis(totalCost))
.append(maxCost).append(TIME_UNIT)
.append(",total=").append(totalCost)
.append(TIME_UNIT).append(",count=").append(times)
.append("] ");
}
......
package com.laker.admin.framework.ext.transaction;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.laker.admin.framework.aop.trace.SpanType;
import com.laker.admin.framework.aop.trace.TraceContext;
import lombok.extern.slf4j.Slf4j;
......@@ -9,7 +7,6 @@ import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import javax.sql.DataSource;
import java.util.Date;
/**
* @author: laker
......@@ -28,7 +25,7 @@ public class LakerDataSourceTransactionManager extends DataSourceTransactionMana
protected void doBegin(Object transaction, TransactionDefinition definition) {
String name = definition.getName();
TraceContext.addSpan("LakerDataSourceTransactionManager.doBegin", SpanType.Transaction);
dateThreadLocal.set(new Transaction(new Date(), name));
dateThreadLocal.set(new Transaction(System.currentTimeMillis(), name));
super.doBegin(transaction, definition);
}
......@@ -37,15 +34,15 @@ public class LakerDataSourceTransactionManager extends DataSourceTransactionMana
super.doCleanupAfterCompletion(transaction);
TraceContext.stopSpan();
Transaction transactionT = dateThreadLocal.get();
log.info("事务耗时监控!transaction:{},time:{}ms", transactionT.name, DateUtil.between(new Date(), transactionT.begin, DateUnit.MS));
log.info("事务耗时监控!transaction:{},time:{}ms", transactionT.name, System.currentTimeMillis() - transactionT.begin);
dateThreadLocal.remove();
}
class Transaction {
Date begin;
long begin;
String name;
Transaction(Date begin, String name) {
Transaction(long begin, String name) {
this.begin = begin;
this.name = name;
}
......
......@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.laker.admin.framework.aop.metrics.Metrics;
import com.laker.admin.framework.exception.BusinessException;
import com.laker.admin.framework.model.PageResponse;
import com.laker.admin.framework.model.Response;
......@@ -18,11 +17,8 @@ import com.laker.admin.module.sys.service.ISysRolePowerService;
import com.laker.admin.module.sys.service.ISysRoleService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
......@@ -35,7 +31,6 @@ import java.util.List;
*/
@RestController
@RequestMapping("/sys/role")
@Metrics
public class SysRoleController {
@Autowired
ISysRoleService sysRoleService;
......@@ -108,19 +103,8 @@ public class SysRoleController {
@PutMapping("/saveRolePower")
@ApiOperation(value = "保存角色权限数据")
@SaCheckPermission("role.update.power")
@Transactional(rollbackFor = Exception.class)
public Response saveRolePower(Long roleId, String powerIds) {
List<String> stringList = Arrays.asList(powerIds.split(","));
sysRolePowerService.remove(Wrappers.<SysRolePower>lambdaQuery().eq(SysRolePower::getRoleId, roleId));
List<SysRolePower> rolePowers = new ArrayList<>();
stringList.forEach(powerId -> {
SysRolePower sysRolePower = new SysRolePower();
sysRolePower.setRoleId(roleId);
sysRolePower.setPowerId(Long.valueOf(powerId));
rolePowers.add(sysRolePower);
});
boolean saveBatch = sysRolePowerService.saveBatch(rolePowers);
return Response.ok(saveBatch);
return Response.ok(sysRolePowerService.saveRolePower(roleId, powerIds));
}
......
......@@ -13,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface ISysRolePowerService extends IService<SysRolePower> {
boolean saveRolePower(Long roleId, String powerIds);
}
package com.laker.admin.module.sys.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.laker.admin.module.sys.entity.SysRolePower;
import com.laker.admin.module.sys.mapper.SysRolePowerMapper;
import com.laker.admin.module.sys.service.ISysRolePowerService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* <p>
* 服务实现类
* 服务实现类
* </p>
*
* @author laker
......@@ -17,4 +23,18 @@ import org.springframework.stereotype.Service;
@Service
public class SysRolePowerServiceImpl extends ServiceImpl<SysRolePowerMapper, SysRolePower> implements ISysRolePowerService {
@Transactional(rollbackFor = Exception.class)
@Override
public boolean saveRolePower(Long roleId, String powerIds) {
List<String> stringList = Arrays.asList(powerIds.split(","));
this.remove(Wrappers.<SysRolePower>lambdaQuery().eq(SysRolePower::getRoleId, roleId));
List<SysRolePower> rolePowers = new ArrayList<>();
stringList.forEach(powerId -> {
SysRolePower sysRolePower = new SysRolePower();
sysRolePower.setRoleId(roleId);
sysRolePower.setPowerId(Long.valueOf(powerId));
rolePowers.add(sysRolePower);
});
return this.saveBatch(rolePowers);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册