| @@ -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()); | |||
| @@ -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); | |||
| } | |||
| @@ -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); | |||
| } | |||
| } | |||