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<MonitorDiskSaveReqVO> createReqVOS) {
|
// 插入
|
List<MonitorDiskDO> 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<MonitorDiskDO> getMonitorDiskPage(MonitorDiskPageReqVO pageReqVO) {
|
return monitorDiskMapper.selectPage(pageReqVO);
|
}
|
|
/**
|
* 折线图展示
|
* @param reqVO 查询
|
* @return
|
*/
|
@Override
|
public List<Map<String, List<Map<String, Object>>>> getMonitorDiskList(MonitorDiskReqVO reqVO) {
|
List<MonitorDiskDO> monitorDiskList = monitorDiskMapper.getMonitorDiskList(reqVO);
|
if(ObjectUtils.isNotEmpty(monitorDiskList)) {
|
// 根据 hostName 字段进行分组
|
Map<String, List<MonitorDiskDO>> hostNameCollect = monitorDiskList.stream()
|
.collect(Collectors.groupingBy(MonitorDiskDO::getHostName));
|
List<Map<String, List<Map<String, Object>>>> host = hostNameCollect.entrySet().stream().map(hostEntry -> {
|
List<MonitorDiskDO> hostValue = hostEntry.getValue();
|
String key = hostEntry.getKey();
|
Map<String, List<Map<String, Object>>> hostItem = new HashMap<>();
|
// 根据 createTime 字段进行分组
|
Map<LocalDateTime, List<MonitorDiskDO>> createTimeCollect = hostValue.stream()
|
.collect(Collectors.groupingBy(MonitorDiskDO::getCreateTime));
|
List<Map<String, Object>> collect = createTimeCollect.entrySet().stream().map(entry -> {
|
List<MonitorDiskDO> value = entry.getValue();
|
Map<String, Object> 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<Map<String, Object>> getMonitorDiskInfo(MonitorDiskReqVO reqVO) {
|
List<MonitorDiskDO> monitorDiskInfo = monitorDiskMapper.getMonitorDiskInfo(reqVO);
|
if(ObjectUtils.isNotEmpty(monitorDiskInfo)) {
|
// 根据 hostName 字段进行分组
|
Map<String, List<MonitorDiskDO>> hostNameCollect = monitorDiskInfo.stream()
|
.collect(Collectors.groupingBy(MonitorDiskDO::getHostName));
|
List<Map<String, Object>> collect = hostNameCollect.entrySet().stream().map(entry -> {
|
List<MonitorDiskDO> value = entry.getValue();
|
Map<String, Object> item = new HashMap<>();
|
List<Map<String, Object>> disks = new ArrayList<>();
|
value.stream().forEach(monitorDiskDO -> {
|
Map<String, Object> 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<String> getAllHost() {
|
QueryWrapper<MonitorDiskDO> queryWrapper = new QueryWrapper<>();
|
queryWrapper.select("DISTINCT host_name"); // 添加 DISTINCT 修饰
|
List<String> hosts = monitorDiskMapper.selectObjs(queryWrapper);
|
return hosts;
|
}
|
|
@Override
|
public List<String> getAllIp() {
|
QueryWrapper<MonitorDiskDO> queryWrapper = new QueryWrapper<>();
|
queryWrapper.select("DISTINCT host_ip"); // 添加 DISTINCT 修饰
|
List<String> ips = monitorDiskMapper.selectObjs(queryWrapper);
|
return ips;
|
}
|
|
}
|