fix:完善服务器图表
This commit is contained in:
parent
a5412c684e
commit
b5211003a5
|
@ -9,15 +9,9 @@ public class TokenContext implements AutoCloseable{
|
||||||
private final ThreadLocal<String> userToken = new ThreadLocal<>();
|
private final ThreadLocal<String> userToken = new ThreadLocal<>();
|
||||||
|
|
||||||
public void setToken() {
|
public void setToken() {
|
||||||
userToken.set(TokenUtils.threadToken());
|
userToken.set(TokenUtils.getTempToken());
|
||||||
}
|
|
||||||
|
|
||||||
public void refreshToken(){
|
|
||||||
userToken.set(TokenUtils.refreshThreadToken());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() throws Exception {
|
public void close() throws Exception { userToken.remove(); }
|
||||||
userToken.remove();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ public interface MonitorConstant {
|
||||||
String ITEM_OSNAME = "osName";
|
String ITEM_OSNAME = "osName";
|
||||||
String ITEM_STARTTIME = "startTime";
|
String ITEM_STARTTIME = "startTime";
|
||||||
String ITEM_CPUTYPE = "cpuType";
|
String ITEM_CPUTYPE = "cpuType";
|
||||||
|
String RESPONSE_SUCCESS_RATE = "responseSuccessRate";
|
||||||
|
|
||||||
|
|
||||||
String PRIFIX_DISKUSED = "diskUsed";
|
String PRIFIX_DISKUSED = "diskUsed";
|
||||||
|
|
|
@ -33,11 +33,9 @@ public interface RedisConstant {
|
||||||
|
|
||||||
String SERVER_STATUS = "Status:Server_Status";
|
String SERVER_STATUS = "Status:Server_Status";
|
||||||
|
|
||||||
String EMAIL_SENDER = "Email_Sender";
|
String EMAIL_SENDER = "EmailSender";
|
||||||
|
|
||||||
String MANAGE_TOKEN = "Token:Manage"; // 运管系统Token
|
String MANAGE_TOKEN = "Token:Manage"; // 运管系统Token
|
||||||
|
|
||||||
String QIYE_EMAIL_TOKEN = "Token:QiyeEmail"; // 网易企业邮箱Token
|
String QIYE_EMAIL_TOKEN = "Token:QiyeEmail"; // 网易企业邮箱Token
|
||||||
|
|
||||||
String THREAD_TOKEN = "Token:Thread"; // 线程中设置Token 定时任务中使用Feign调用接口使用 否则提示401
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -164,34 +164,8 @@ public class TokenUtils {
|
||||||
String secret = CommonConstant.TEMP_TOKEN_SECRET;
|
String secret = CommonConstant.TEMP_TOKEN_SECRET;
|
||||||
// 模拟登录生成Token
|
// 模拟登录生成Token
|
||||||
String token = JwtUtil.sign(username, secret);
|
String token = JwtUtil.sign(username, secret);
|
||||||
// 设置Token缓存有效时间为 5 分钟
|
// 设置Token缓存有效时间为 3 分钟
|
||||||
redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token, 5 * 60);
|
redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token, 3 * 60);
|
||||||
return token;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String threadToken() {
|
|
||||||
RedisUtil redisUtil = SpringContextUtils.getBean(RedisUtil.class);
|
|
||||||
if (redisUtil.hasKey(RedisConstant.THREAD_TOKEN))
|
|
||||||
return (String) redisUtil.get(RedisConstant.THREAD_TOKEN);
|
|
||||||
|
|
||||||
String username = CommonConstant.TEMP_TOKEN_USERNAME;
|
|
||||||
String secret = CommonConstant.TEMP_TOKEN_SECRET;
|
|
||||||
// 模拟登录生成Token
|
|
||||||
String token = JwtUtil.sign(username, secret);
|
|
||||||
// 设置Token缓存有效时间为 6h
|
|
||||||
redisUtil.set(RedisConstant.THREAD_TOKEN, token, 6 * 60 * 60);
|
|
||||||
return token;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String refreshThreadToken(){
|
|
||||||
RedisUtil redisUtil = SpringContextUtils.getBean(RedisUtil.class);
|
|
||||||
|
|
||||||
String username = CommonConstant.TEMP_TOKEN_USERNAME;
|
|
||||||
String secret = CommonConstant.TEMP_TOKEN_SECRET;
|
|
||||||
// 模拟登录生成Token
|
|
||||||
String token = JwtUtil.sign(username, secret);
|
|
||||||
// 设置Token缓存有效时间为 6h
|
|
||||||
redisUtil.set(RedisConstant.THREAD_TOKEN, token, 6 * 60 * 60);
|
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,5 +47,7 @@ public class BasicInfo {
|
||||||
|
|
||||||
private double memoryUsed;
|
private double memoryUsed;
|
||||||
|
|
||||||
|
private double responseSuccessRate;
|
||||||
|
|
||||||
private Map<String, Object> diskUsed;
|
private Map<String, Object> diskUsed;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@ public class ItemDto implements Serializable{
|
||||||
this.itemId = alarmItem.getId();
|
this.itemId = alarmItem.getId();
|
||||||
this.name = alarmItem.getName();
|
this.name = alarmItem.getName();
|
||||||
this.units = alarmItem.getUnits();
|
this.units = alarmItem.getUnits();
|
||||||
|
this.valueType = alarmItem.getValueType();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemDto(AlarmItemDe alarmItemDe) {
|
public ItemDto(AlarmItemDe alarmItemDe) {
|
||||||
|
|
|
@ -20,4 +20,6 @@ public class Item {
|
||||||
private String status;
|
private String status;
|
||||||
|
|
||||||
private String lastValue; // 监控项最新值
|
private String lastValue; // 监控项最新值
|
||||||
|
|
||||||
|
private String valueType;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,4 +20,7 @@ public class AlarmItem extends JeecgEntity {
|
||||||
|
|
||||||
@TableField("host_id")
|
@TableField("host_id")
|
||||||
private String hostId;
|
private String hostId;
|
||||||
|
|
||||||
|
@TableField("value_type")
|
||||||
|
private String valueType;
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,21 +76,12 @@ public class StatusAspect {
|
||||||
@Autowired
|
@Autowired
|
||||||
private IAlarmItemService alarmItemService;
|
private IAlarmItemService alarmItemService;
|
||||||
|
|
||||||
// 新增邮箱服务器信息后 异步更新其状态信息
|
// 新增|修改邮箱服务器信息后 异步更新其状态信息
|
||||||
|
// 并更新一个可用的发件服务器缓存到Redis
|
||||||
@Async
|
@Async
|
||||||
@AfterReturning("execution(* org.jeecg.modules.service.impl.SysEmailServiceImpl.create(..))")
|
@AfterReturning("execution(* org.jeecg.modules.service.impl.SysEmailServiceImpl.create(..)) ||" +
|
||||||
|
"execution(* org.jeecg.modules.service.impl.SysEmailServiceImpl.update(..))")
|
||||||
public void updateEamilStatus(JoinPoint point){
|
public void updateEamilStatus(JoinPoint point){
|
||||||
Object[] args = point.getArgs();
|
|
||||||
if (ArrayUtil.length(args) == 0) return;
|
|
||||||
SysEmail email = (SysEmail) args[0];
|
|
||||||
emailService.status2Redis(email);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 修改邮箱服务器信息后 异步更新其状态信息
|
|
||||||
// 并更新一个可用的发件服务器缓存到Reids
|
|
||||||
@Async
|
|
||||||
@AfterReturning("execution(* org.jeecg.modules.service.impl.SysEmailServiceImpl.update(..))")
|
|
||||||
public void updateEamil(JoinPoint point){
|
|
||||||
emailService.sender2Redis();
|
emailService.sender2Redis();
|
||||||
Object[] args = point.getArgs();
|
Object[] args = point.getArgs();
|
||||||
if (ArrayUtil.length(args) == 0) return;
|
if (ArrayUtil.length(args) == 0) return;
|
||||||
|
@ -195,11 +186,11 @@ public class StatusAspect {
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Server时 同步删除数据库中相关联的监控项&报警规则
|
* 删除Server时 同步删除关联的监控项&报警规则
|
||||||
* */
|
* */
|
||||||
@Async
|
@Async
|
||||||
@AfterReturning(value = "execution(* org.jeecg.modules.service.impl.SysServerServiceImpl.deleteById(..))", returning = "result")
|
@AfterReturning(value = "execution(* org.jeecg.modules.service.impl.SysServerServiceImpl.deleteById(..))", returning = "result")
|
||||||
public void deleteItems(JoinPoint point, Object result){
|
public void serverDelete(JoinPoint point, Object result){
|
||||||
if (ObjectUtil.isNotNull(result)){
|
if (ObjectUtil.isNotNull(result)){
|
||||||
String hostId = ((Result<String>) result).getResult();
|
String hostId = ((Result<String>) result).getResult();
|
||||||
// 删除服务器相关联的监控项
|
// 删除服务器相关联的监控项
|
||||||
|
@ -212,15 +203,34 @@ public class StatusAspect {
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 删除Email|Database时 同步删除Redis和数据库中相关联的预警规则
|
* 删除Database时 同步删除关联的报警规则
|
||||||
* */
|
* */
|
||||||
@Async
|
@Async
|
||||||
@AfterReturning("execution(* org.jeecg.modules.service.impl.SysEmailServiceImpl.deleteById(..)) || " +
|
@AfterReturning("execution(* org.jeecg.modules.service.impl.SysDatabaseServiceImpl.deleteById(..))")
|
||||||
"execution(* org.jeecg.modules.service.impl.SysDatabaseServiceImpl.deleteById(..))")
|
public void databaseDelete(JoinPoint point){
|
||||||
public void deleteRules(JoinPoint point){
|
// 删除数据库相关联的报警规则
|
||||||
// 删除数据库和邮箱相关联的报警规则
|
|
||||||
Object[] args = point.getArgs();
|
Object[] args = point.getArgs();
|
||||||
if (ArrayUtil.length(args) > 0)
|
if (ArrayUtil.length(args) > 0)
|
||||||
alarmRuleService.deleteBySourceId((String) args[0]);
|
alarmRuleService.deleteBySourceId((String) args[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 删除Email时 同步删除关联的报警规则
|
||||||
|
* 同时 如果是Redis中缓存的发件服务器 清空Redis缓存
|
||||||
|
* */
|
||||||
|
@Async
|
||||||
|
@AfterReturning("execution(* org.jeecg.modules.service.impl.SysEmailServiceImpl.deleteById(..))")
|
||||||
|
public void emailDelete(JoinPoint point){
|
||||||
|
Object[] args = point.getArgs();
|
||||||
|
if (ArrayUtil.length(args) > 0){
|
||||||
|
String emailId = (String) args[0];
|
||||||
|
// 删除邮箱关联的报警规则
|
||||||
|
alarmRuleService.deleteBySourceId(emailId);
|
||||||
|
// 如果是发件服务器 清除Redis缓存
|
||||||
|
SysEmail sender = (SysEmail) redisUtil.get(RedisConstant.EMAIL_SENDER);
|
||||||
|
if (ObjectUtil.isNull(sender)) return;
|
||||||
|
if (StrUtil.equals(emailId, sender.getId()))
|
||||||
|
redisUtil.del(RedisConstant.EMAIL_SENDER);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,31 +1,11 @@
|
||||||
package org.jeecg.modules.idc;
|
package org.jeecg.modules.idc;
|
||||||
|
|
||||||
import cn.hutool.core.map.MapUtil;
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.jeecg.common.api.dto.message.MessageDTO;
|
|
||||||
import org.jeecg.common.config.mqtoken.UserTokenContext;
|
|
||||||
import org.jeecg.common.constant.enums.MessageTypeEnum;
|
|
||||||
import org.jeecg.common.util.JDBCUtil;
|
|
||||||
import org.jeecg.common.util.ParamUtil;
|
|
||||||
import org.jeecg.modules.base.dto.ConnR;
|
|
||||||
import org.jeecg.modules.feignclient.SystemClient;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
import org.springframework.scheduling.annotation.Scheduled;
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
import static org.jeecg.common.util.TokenUtils.getTempToken;
|
|
||||||
import static org.jeecg.modules.base.enums.Template.IDC_DATASOURCE_STATUS;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Component
|
@Component
|
||||||
|
@ -35,7 +15,7 @@ public class IDCDataFetch {
|
||||||
private TemplateManager templateManager;
|
private TemplateManager templateManager;
|
||||||
|
|
||||||
// 定时拾取IDC数据
|
// 定时拾取IDC数据
|
||||||
@Scheduled(initialDelay = 5, fixedDelay = 10, timeUnit = TimeUnit.SECONDS)
|
//@Scheduled(initialDelay = 5, fixedDelay = 10, timeUnit = TimeUnit.SECONDS)
|
||||||
public void fetch() {
|
public void fetch() {
|
||||||
try {
|
try {
|
||||||
JdbcTemplate template = templateManager.getTemplate();
|
JdbcTemplate template = templateManager.getTemplate();
|
||||||
|
|
|
@ -54,8 +54,6 @@ public class TemplateManager {
|
||||||
|
|
||||||
private final ConcurrentMap<String, JdbcTemplate> templateMap = new ConcurrentHashMap<>();
|
private final ConcurrentMap<String, JdbcTemplate> templateMap = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
private TemplateManager(){}
|
|
||||||
|
|
||||||
private void setTemplate(JdbcTemplate template){
|
private void setTemplate(JdbcTemplate template){
|
||||||
templateMap.put(templateKey, template);
|
templateMap.put(templateKey, template);
|
||||||
}
|
}
|
||||||
|
@ -67,7 +65,7 @@ public class TemplateManager {
|
||||||
/*
|
/*
|
||||||
* 定时检查inland/oversea数据源的的连接状态
|
* 定时检查inland/oversea数据源的的连接状态
|
||||||
* */
|
* */
|
||||||
@Scheduled(fixedDelay = 10, timeUnit = TimeUnit.SECONDS)
|
// @Scheduled(fixedDelay = 10, timeUnit = TimeUnit.SECONDS)
|
||||||
private void checkTemplate(){
|
private void checkTemplate(){
|
||||||
try (TokenContext tokenContext = new TokenContext()){
|
try (TokenContext tokenContext = new TokenContext()){
|
||||||
MessageDTO messageDTO = new MessageDTO(null, IDC_DATASOURCE_STATUS.getCode(), "admin");
|
MessageDTO messageDTO = new MessageDTO(null, IDC_DATASOURCE_STATUS.getCode(), "admin");
|
||||||
|
@ -79,7 +77,7 @@ public class TemplateManager {
|
||||||
template = JDBCUtil.template(urlM, usernameM, passwordM);
|
template = JDBCUtil.template(urlM, usernameM, passwordM);
|
||||||
this.setTemplate(template);
|
this.setTemplate(template);
|
||||||
} else {
|
} else {
|
||||||
// 为当前线程设置临时Token 避免OpenFeign调用其它服务接口时403
|
// 为当前线程设置临时Token 避免OpenFeign调用其它服务接口时401
|
||||||
tokenContext.setToken();
|
tokenContext.setToken();
|
||||||
|
|
||||||
// 给admin发送数据源异常消息
|
// 给admin发送数据源异常消息
|
||||||
|
@ -88,11 +86,6 @@ public class TemplateManager {
|
||||||
data.put("param2", connR.getInfo());
|
data.put("param2", connR.getInfo());
|
||||||
messageDTO.setData(data);
|
messageDTO.setData(data);
|
||||||
try { systemClient.sendTo(messageDTO); }
|
try { systemClient.sendTo(messageDTO); }
|
||||||
catch (FeignException.Unauthorized e) {
|
|
||||||
// 刷新临时Token 重新发送信息
|
|
||||||
tokenContext.refreshToken();
|
|
||||||
systemClient.sendTo(messageDTO);
|
|
||||||
}
|
|
||||||
catch(Exception e) {log.error("发送inland数据源异常信息失败: {}" , e.getMessage());}
|
catch(Exception e) {log.error("发送inland数据源异常信息失败: {}" , e.getMessage());}
|
||||||
connR = JDBCUtil.isConnection(urlS, usernameS, passwordS);
|
connR = JDBCUtil.isConnection(urlS, usernameS, passwordS);
|
||||||
if (connR.isConn()){
|
if (connR.isConn()){
|
||||||
|
@ -105,11 +98,6 @@ public class TemplateManager {
|
||||||
data.put("param2", connR.getInfo());
|
data.put("param2", connR.getInfo());
|
||||||
messageDTO.setData(data);
|
messageDTO.setData(data);
|
||||||
try { systemClient.sendTo(messageDTO); }
|
try { systemClient.sendTo(messageDTO); }
|
||||||
catch (FeignException.Unauthorized e) {
|
|
||||||
// 刷新临时Token 重新发送信息
|
|
||||||
tokenContext.refreshToken();
|
|
||||||
systemClient.sendTo(messageDTO);
|
|
||||||
}
|
|
||||||
catch(Exception e) {log.error("发送oversea数据源异常信息失败: {}" , e.getMessage());}
|
catch(Exception e) {log.error("发送oversea数据源异常信息失败: {}" , e.getMessage());}
|
||||||
}
|
}
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
|
|
|
@ -323,6 +323,12 @@ public class SysServerServiceImpl extends ServiceImpl<SysServerMapper, SysServer
|
||||||
Double memoryUsedValue = NumUtil.keep(memoryUsed, 1);
|
Double memoryUsedValue = NumUtil.keep(memoryUsed, 1);
|
||||||
memoryUsedValue = ObjectUtil.isNull(memoryUsedValue) ? 0 : memoryUsedValue;
|
memoryUsedValue = ObjectUtil.isNull(memoryUsedValue) ? 0 : memoryUsedValue;
|
||||||
|
|
||||||
|
// 服务器响应成功率
|
||||||
|
empty = items.get(MonitorConstant.RESPONSE_SUCCESS_RATE);
|
||||||
|
String responseSuccessRate = ObjectUtil.isNull(empty) ? null : empty.getLastValue(); // 100
|
||||||
|
Double responseSuccessRateValue = NumUtil.keep(responseSuccessRate, 1);
|
||||||
|
responseSuccessRateValue = ObjectUtil.isNull(responseSuccessRateValue) ? 0 : responseSuccessRateValue;
|
||||||
|
|
||||||
// 磁盘使用情况
|
// 磁盘使用情况
|
||||||
Map<String, String> diskUsedMap = items.entrySet().stream() // 6.540206
|
Map<String, String> diskUsedMap = items.entrySet().stream() // 6.540206
|
||||||
.filter(entry -> entry.getKey().contains(MonitorConstant.PRIFIX_DISKUSED))
|
.filter(entry -> entry.getKey().contains(MonitorConstant.PRIFIX_DISKUSED))
|
||||||
|
@ -342,7 +348,8 @@ public class SysServerServiceImpl extends ServiceImpl<SysServerMapper, SysServer
|
||||||
.setCpuCores(cpuCores).setTotalDiskPar(totalDiskPar).setHostName(hostName)
|
.setCpuCores(cpuCores).setTotalDiskPar(totalDiskPar).setHostName(hostName)
|
||||||
.setOsVersion(osVersion).setNetwork(netWork).setLocation(location).setIp(ip)
|
.setOsVersion(osVersion).setNetwork(netWork).setLocation(location).setIp(ip)
|
||||||
.setZone(zone).setOsName(osName).setStartTime(startTime).setCpuType(cpuType)
|
.setZone(zone).setOsName(osName).setStartTime(startTime).setCpuType(cpuType)
|
||||||
.setCpuUsed(cpuUsedValue).setMemoryUsed(memoryUsedValue).setDiskUsed(diskUsedValue);
|
.setCpuUsed(cpuUsedValue).setMemoryUsed(memoryUsedValue)
|
||||||
|
.setResponseSuccessRate(responseSuccessRateValue).setDiskUsed(diskUsedValue);
|
||||||
return Result.OK(basicInfo);
|
return Result.OK(basicInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@ import org.jeecg.common.util.SpringContextUtils;
|
||||||
import org.jeecg.modules.feignclient.AbnormalAlarmClient;
|
import org.jeecg.modules.feignclient.AbnormalAlarmClient;
|
||||||
import org.quartz.*;
|
import org.quartz.*;
|
||||||
|
|
||||||
import static org.jeecg.common.util.TokenUtils.getTempToken;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 此处的同步是指:当定时任务的执行时间大于任务的时间
|
* 此处的同步是指:当定时任务的执行时间大于任务的时间
|
||||||
|
|
|
@ -119,6 +119,7 @@ public class GardsSampleDataServiceImpl extends ServiceImpl<GardsSampleDataMappe
|
||||||
List<String> suitable = ListUtil.toList(ORIGINAL, RNAUTO, RNMAN);
|
List<String> suitable = ListUtil.toList(ORIGINAL, RNAUTO, RNMAN);
|
||||||
List<OwnerDto> ownerDtos = baseMapper.containSampleId("SAMPLE_ID").stream()
|
List<OwnerDto> ownerDtos = baseMapper.containSampleId("SAMPLE_ID").stream()
|
||||||
.filter(owner -> CollUtil.contains(suitable, owner.getOwner()))
|
.filter(owner -> CollUtil.contains(suitable, owner.getOwner()))
|
||||||
|
.filter(owner -> StrUtil.contains(owner.getTableName(), "GARDS"))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
String DOT = StrUtil.DOT;
|
String DOT = StrUtil.DOT;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user