package com.iailab.module.infra.service.monitordisk; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.iailab.framework.tenant.core.aop.TenantIgnore; import com.iailab.module.infra.dal.dataobject.monitormem.MonitorMemDO; import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; import com.iailab.module.infra.controller.admin.monitordisk.vo.*; import com.iailab.module.infra.dal.dataobject.monitordisk.MonitorDiskDO; import com.iailab.framework.common.pojo.PageResult; import com.iailab.framework.common.util.object.BeanUtils; import com.iailab.module.infra.dal.mysql.monitordisk.MonitorDiskMapper; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import static com.iailab.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.iailab.module.infra.enums.ErrorCodeConstants.*; /** * 磁盘监控日志 Service 实现类 * * @author 超级管理员 */ @Service @Validated public class MonitorDiskServiceImpl implements MonitorDiskService { @Resource private MonitorDiskMapper monitorDiskMapper; @Override public Long createMonitorDisk(MonitorDiskSaveReqVO createReqVO) { // 插入 MonitorDiskDO monitorDisk = BeanUtils.toBean(createReqVO, MonitorDiskDO.class); monitorDiskMapper.insert(monitorDisk); // 返回 return monitorDisk.getId(); } @Override public void createMonitorDiskBatch(List createReqVOS) { // 插入 List monitorDiskDOS = BeanUtils.toBean(createReqVOS, MonitorDiskDO.class); monitorDiskDOS.stream().forEach(monitorDiskDO -> { monitorDiskDO.setTenantId(1); monitorDiskDO.setCreator("iailab"); }); monitorDiskMapper.insertBatch(monitorDiskDOS); } @Override public void updateMonitorDisk(MonitorDiskSaveReqVO updateReqVO) { // 校验存在 validateMonitorDiskExists(updateReqVO.getId()); // 更新 MonitorDiskDO updateObj = BeanUtils.toBean(updateReqVO, MonitorDiskDO.class); monitorDiskMapper.updateById(updateObj); } @Override public void deleteMonitorDisk(Long id) { // 校验存在 validateMonitorDiskExists(id); // 删除 monitorDiskMapper.deleteById(id); } private void validateMonitorDiskExists(Long id) { if (monitorDiskMapper.selectById(id) == null) { throw exception(MONITOR_DISK_NOT_EXISTS); } } @Override public MonitorDiskDO getMonitorDisk(Long id) { return monitorDiskMapper.selectById(id); } @Override public PageResult getMonitorDiskPage(MonitorDiskPageReqVO pageReqVO) { return monitorDiskMapper.selectPage(pageReqVO); } /** * 折线图展示 * @param reqVO 查询 * @return */ @Override public List>>> getMonitorDiskList(MonitorDiskReqVO reqVO) { List monitorDiskList = monitorDiskMapper.getMonitorDiskList(reqVO); if(ObjectUtils.isNotEmpty(monitorDiskList)) { // 根据 hostName 字段进行分组 Map> hostNameCollect = monitorDiskList.stream() .collect(Collectors.groupingBy(MonitorDiskDO::getHostName)); List>>> host = hostNameCollect.entrySet().stream().map(hostEntry -> { List hostValue = hostEntry.getValue(); String key = hostEntry.getKey(); Map>> hostItem = new HashMap<>(); // 根据 createTime 字段进行分组 Map> createTimeCollect = hostValue.stream() .collect(Collectors.groupingBy(MonitorDiskDO::getCreateTime)); List> collect = createTimeCollect.entrySet().stream().map(entry -> { List value = entry.getValue(); Map item = new HashMap<>(); value.stream().forEach(monitorDiskDO -> { item.put("createTime", monitorDiskDO.getCreateTime()); item.put(monitorDiskDO.getDisk(), monitorDiskDO.getSpaceRatio().multiply(new BigDecimal(100))); }); return item; }).collect(Collectors.toList()); hostItem.put(key, collect); return hostItem; }).collect(Collectors.toList()); return host; } return null; } /** * 饼图展示 * @param reqVO 查询 * @return */ @Override @TenantIgnore public List> getMonitorDiskInfo(MonitorDiskReqVO reqVO) { List monitorDiskInfo = monitorDiskMapper.getMonitorDiskInfo(reqVO); if(ObjectUtils.isNotEmpty(monitorDiskInfo)) { // 根据 hostName 字段进行分组 Map> hostNameCollect = monitorDiskInfo.stream() .collect(Collectors.groupingBy(MonitorDiskDO::getHostName)); List> collect = hostNameCollect.entrySet().stream().map(entry -> { List value = entry.getValue(); Map item = new HashMap<>(); List> disks = new ArrayList<>(); value.stream().forEach(monitorDiskDO -> { Map diskMap = new HashMap<>(); item.put("name", monitorDiskDO.getHostName()); item.put("ip", monitorDiskDO.getHostIp()); diskMap.put("disk", monitorDiskDO.getDisk()); diskMap.put("total", monitorDiskDO.getSpaceTotal().divide(new BigDecimal(1024)).setScale(3, BigDecimal.ROUND_HALF_UP).toString()); diskMap.put("used", monitorDiskDO.getSpaceUsed().divide(new BigDecimal(1024)).setScale(2, BigDecimal.ROUND_HALF_UP)); disks.add(diskMap); }); item.put("disks", disks); return item; }).collect(Collectors.toList()); return collect; } return null; } @Override public List getAllHost() { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("DISTINCT host_name"); // 添加 DISTINCT 修饰 List hosts = monitorDiskMapper.selectObjs(queryWrapper); return hosts; } @Override public List getAllIp() { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("DISTINCT host_ip"); // 添加 DISTINCT 修饰 List ips = monitorDiskMapper.selectObjs(queryWrapper); return ips; } }