package com.zy.asrs.task.handler;
|
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.baomidou.mybatisplus.plugins.Page;
|
import com.zy.asrs.entity.ApiLog;
|
import com.zy.asrs.service.ApiLogService;
|
import com.zy.asrs.task.AbstractHandler;
|
import com.zy.asrs.task.core.ReturnT;
|
import com.zy.common.utils.DingDingPush;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
|
|
@Slf4j
|
@Service
|
@Transactional
|
public class ExceptionNoticeHandler extends AbstractHandler<String> {
|
@Autowired
|
private ApiLogService apiLogService;
|
@Transactional
|
public ReturnT<String> start() {
|
try {
|
EntityWrapper<ApiLog> wrapper = new EntityWrapper<>();
|
wrapper.eq("result", 0).isNull("memo").orderBy("create_time", false);
|
Page<ApiLog> page = apiLogService.selectPage(new Page<>(1, 1), wrapper);
|
if (page.getRecords() != null && !page.getRecords().isEmpty()) {
|
ApiLog item = page.getRecords().get(0);
|
StringBuilder sb = new StringBuilder();
|
sb.append("异常告警-ERROR").append("\n");
|
sb.append("时间: ").append(item.getCreateTime$()).append("\n");
|
sb.append("接口: ").append(nvl(item.getNamespace())).append(" ").append(nvl(item.getUrl())).append("\n");
|
sb.append("相关信息: ").append(nvl(item.getClientIp())).append("\n");
|
sb.append("请求: ").append(cut(nvl(item.getRequest()), 500)).append("\n");
|
sb.append("响应: ").append(cut(nvl(item.getResponse()), 500)).append("\n");
|
DingDingPush.send(sb.toString());
|
item.setMemo("PUSHED");
|
apiLogService.updateById(item);
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
return FAIL.setMsg(e.getMessage());
|
}
|
return SUCCESS;
|
}
|
|
private String nvl(String s) {
|
return s == null ? "" : s;
|
}
|
|
private String cut(String s, int max) {
|
if (s == null) {
|
return "";
|
}
|
return s.length() > max ? s.substring(0, max) : s;
|
}
|
}
|