Browse Source

fix redis chart offline data

tags/v0.8.5^2
yk 2 years ago
parent
commit
2148af0689
3 changed files with 62 additions and 2 deletions
  1. +5
    -2
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/controller/DmDigitalmanController.java
  2. +45
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/emcs/controller/DmExceptionLogController.java
  3. +12
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/emcs/service/BaseRedisListDataCache.java

+ 5
- 2
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/digitalmans/controller/DmDigitalmanController.java View File

@@ -56,6 +56,7 @@ import org.springframework.web.bind.annotation.RestController;

import java.io.Serializable;
import java.text.ParseException;
import java.time.Duration;
import java.util.List;

/**
@@ -266,8 +267,6 @@ public class DmDigitalmanController extends BaseController<DmDigitalmanQuery, Dm
String cpu_max = heartBeatObj.getString("cpuinfo_max_freq");
String cpu_scaling = heartBeatObj.getString("scaling_cur_freq");
String cpu = Double.valueOf(cpu_scaling) / Double.valueOf(cpu_max) * 100 + "";
String memory_cur = heartBeatObj.getString("memory_total");
// String memoryTotal = heartBeatObj.getString("MemTotal").substring(0,heartBeatObj.getString("MemTotal").length() - 2);
String memoryTotal = heartBeatObj.getString("memory_total");
Double memoryFree = Double.valueOf(heartBeatObj.getString("memory_free"));
String memory = (Double.valueOf(memoryTotal) - memoryFree) / Double.valueOf(memoryTotal) * 100 + "";
@@ -282,12 +281,16 @@ public class DmDigitalmanController extends BaseController<DmDigitalmanQuery, Dm
if (StringUtils.isNotEmpty(devId)) {
if (StringUtils.isNotEmpty(network)){
baseRedisListDataCache.init (REDIS_LIST_SIZE).addToList(HEART_MQTT_PREFIX+":"+devId+":network", new RedisBaseDto(occurTime, network));
baseRedisListDataCache.setListExpiration(HEART_MQTT_PREFIX+":"+devId+":network", Duration.ofHours(1));

}
if (StringUtils.isNotEmpty(cpu)) {
baseRedisListDataCache.init(REDIS_LIST_SIZE).addToList(HEART_MQTT_PREFIX + ":" + devId + ":cpu", new RedisBaseDto(occurTime, cpu));
baseRedisListDataCache.setListExpiration(HEART_MQTT_PREFIX+":"+devId+":cpu", Duration.ofHours(1));
}
if (StringUtils.isNotEmpty(memory)) {
baseRedisListDataCache.init(REDIS_LIST_SIZE).addToList(HEART_MQTT_PREFIX + ":" + devId + ":memory", new RedisBaseDto(occurTime, memory));
baseRedisListDataCache.setListExpiration(HEART_MQTT_PREFIX+":"+devId+":memory", Duration.ofHours(1));
}
}
System.err.println(heartBeatObj.toJSONString());


+ 45
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/emcs/controller/DmExceptionLogController.java View File

@@ -12,6 +12,7 @@ import com.xueyi.common.security.annotation.RequiresPermissions;
import com.xueyi.common.web.entity.controller.BaseController;
import com.xueyi.system.api.digitalmans.domain.vo.NumberOfAlertToChartVo;
import com.xueyi.system.emcs.domain.dto.DmExceptionLogDto;
import com.xueyi.system.emcs.domain.dto.RedisBaseDto;
import com.xueyi.system.emcs.domain.query.DmExceptionLogQuery;
import com.xueyi.system.emcs.service.BaseRedisListDataCache;
import com.xueyi.system.emcs.service.IDmExceptionLogService;
@@ -32,6 +33,7 @@ import java.io.Serializable;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Month;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
@@ -119,17 +121,60 @@ public class DmExceptionLogController extends BaseController<DmExceptionLogQuery
return super.edit(dto);
}

public static List<String> getRecentHourTimes() {
List<String> recentHourTimes = new ArrayList<>();

// 获取当前时间
LocalDateTime now = LocalDateTime.now();

// 获取一个小时前的时间
LocalDateTime oneHourAgo = now.minusHours(1);

// 从一个小时前的时间开始,每分钟递增,直到当前时间
LocalDateTime current = oneHourAgo;
while (current.isBefore(now)) {
// 格式化时间为HH:mm
String formattedTime = current.format(DateTimeFormatter.ofPattern("HH:mm"));

// 添加到列表中
recentHourTimes.add(formattedTime);

// 当前时间加一分钟
current = current.plusMinutes(1);
}

return recentHourTimes;
}

@GetMapping( value = "/chart/{devId}")
public AjaxResult queryChartData(@PathVariable String devId) {
JSONObject json = new JSONObject();

List<String> times = getRecentHourTimes();
Arrays.stream(CHART_TYPES).toList().forEach(item->{
List<Serializable> redisList = new ArrayList<>();
String key = HEART_MQTT_PREFIX + ":" + devId + ":" + item;
redisList = baseRedisListDataCache.getList(key);
if (redisList!= null && redisList.size() > 0) {
RedisBaseDto baseDto = (RedisBaseDto) redisList.get(redisList.size()-1);
String occur = baseDto.getOccurTime();
String last = times.get(times.size()-1);
LocalTime localTime1 = LocalTime.parse(occur);
LocalTime localTime2 = LocalTime.parse(last);
LocalTime localTime = localTime2.minusMinutes(3);
if (localTime.compareTo(localTime1) > 0 ){
JSONObject redisDto = new JSONObject();
redisDto.put("occurTime", localTime2.format(DateTimeFormatter.ofPattern("HH:mm")));
redisDto.put("val", "N");
redisList.add(redisDto);
}
}
redisList.get(redisList.size()-1);
json.put(item, redisList);
});

System.err.println(getRecentHourTimes());

return success(json);
}



+ 12
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/emcs/service/BaseRedisListDataCache.java View File

@@ -5,7 +5,11 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.io.Serializable;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
* @author yk
@@ -38,4 +42,12 @@ public class BaseRedisListDataCache {
public List<Serializable> getList(String key) {
return redisTemplate.opsForList().range(key, 0, -1);
}


public void setListExpiration(String key, Duration duration) {
// 计算过期时间的秒数
long expirationSeconds = LocalDateTime.now().plus(duration).until(LocalDateTime.now(), ChronoUnit.SECONDS);
// 设置键的过期时间
redisTemplate.expire(key, expirationSeconds, TimeUnit.SECONDS);
}
}

Loading…
Cancel
Save