Commit afae711f by Jony.L

算力资源结构真实数据统计;API请求趋势真实数据统计

parent 0442af88
...@@ -5,6 +5,7 @@ import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexApiCall ...@@ -5,6 +5,7 @@ import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexApiCall
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexComputeDistributionRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexComputeDistributionRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexOrdersCountRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexOrdersCountRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexOverallSituationRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexOverallSituationRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeDashboardRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexTopBarRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexTopBarRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexUsersCountRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexUsersCountRespVO;
import com.luhu.computility.module.biz.service.home.HomeIndexService; import com.luhu.computility.module.biz.service.home.HomeIndexService;
...@@ -78,6 +79,13 @@ public class HomeIndexController { ...@@ -78,6 +79,13 @@ public class HomeIndexController {
return success(homeIndexService.getComputeDistribution(type)); return success(homeIndexService.getComputeDistribution(type));
} }
@GetMapping("/getAllDashboardData")
@Operation(summary = "获取首页大屏所有数据")
@PermitAll
public CommonResult<HomeDashboardRespVO> getAllDashboardData() {
return success(homeIndexService.getAllDashboardData());
}
} }
...@@ -23,7 +23,8 @@ public class HomeIndexComputeDistributionRespVO { ...@@ -23,7 +23,8 @@ public class HomeIndexComputeDistributionRespVO {
@Schema(description = "计算资源分布") @Schema(description = "计算资源分布")
private List<ComputeDistribution> resource; private List<ComputeDistribution> resource;
class ComputeDistribution{ @Data
public static class ComputeDistribution{
private String name; private String name;
private double value; private double value;
} }
......
...@@ -5,6 +5,7 @@ import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexApiCall ...@@ -5,6 +5,7 @@ import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexApiCall
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexComputeDistributionRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexComputeDistributionRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexOrdersCountRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexOrdersCountRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexOverallSituationRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexOverallSituationRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeDashboardRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexTopBarRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexTopBarRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexUsersCountRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexUsersCountRespVO;
...@@ -30,4 +31,6 @@ public interface HomeIndexService { ...@@ -30,4 +31,6 @@ public interface HomeIndexService {
HomeIndexComputeDistributionRespVO getComputeDistribution(String type); HomeIndexComputeDistributionRespVO getComputeDistribution(String type);
HomeDashboardRespVO getAllDashboardData();
} }
...@@ -14,10 +14,12 @@ import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexApiCall ...@@ -14,10 +14,12 @@ import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexApiCall
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexComputeDistributionRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexComputeDistributionRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexOrdersCountRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexOrdersCountRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexOverallSituationRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexOverallSituationRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeDashboardRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexTopBarRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexTopBarRespVO;
import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexUsersCountRespVO; import com.luhu.computility.module.biz.controller.admin.home.vo.HomeIndexUsersCountRespVO;
import com.luhu.computility.module.compute.api.order.ComputeOrderStatisticsApi; import com.luhu.computility.module.compute.api.order.ComputeOrderStatisticsApi;
import com.luhu.computility.module.compute.api.order.ComputeStatisticsApi; import com.luhu.computility.module.compute.api.order.ComputeStatisticsApi;
import com.luhu.computility.module.compute.api.order.dto.ComputeDistributionDTO;
import com.luhu.computility.module.compute.api.order.dto.ComputeOrderStatisticsDTO; import com.luhu.computility.module.compute.api.order.dto.ComputeOrderStatisticsDTO;
import com.luhu.computility.module.compute.api.order.dto.ResourceOrderRespDTO; import com.luhu.computility.module.compute.api.order.dto.ResourceOrderRespDTO;
import com.luhu.computility.module.compute.api.order.dto.ResourceOrderSnapshotStatisticDTO; import com.luhu.computility.module.compute.api.order.dto.ResourceOrderSnapshotStatisticDTO;
...@@ -320,7 +322,31 @@ public class HomeIndexServiceImpl implements HomeIndexService { ...@@ -320,7 +322,31 @@ public class HomeIndexServiceImpl implements HomeIndexService {
@Override @Override
public HomeIndexComputeDistributionRespVO getComputeDistribution(String type) { public HomeIndexComputeDistributionRespVO getComputeDistribution(String type) {
return null; ComputeDistributionDTO distributionDTO = computeStatisticsApi.getComputeDistribution();
HomeIndexComputeDistributionRespVO result = new HomeIndexComputeDistributionRespVO();
List<HomeIndexComputeDistributionRespVO.ComputeDistribution> gpuList = convertToVoList(distributionDTO.getGpu());
List<HomeIndexComputeDistributionRespVO.ComputeDistribution> sourceList = convertToVoList(distributionDTO.getSource());
List<HomeIndexComputeDistributionRespVO.ComputeDistribution> resourceList = convertToVoList(distributionDTO.getResource());
result.setGpu(gpuList);
result.setSource(sourceList);
result.setResource(resourceList);
return result;
}
private List<HomeIndexComputeDistributionRespVO.ComputeDistribution> convertToVoList(List<ComputeDistributionDTO.DistributionItem> itemList) {
if (CollectionUtils.isEmpty(itemList)) {
return java.util.Collections.emptyList();
}
return itemList.stream().map(item -> {
HomeIndexComputeDistributionRespVO.ComputeDistribution vo = new HomeIndexComputeDistributionRespVO.ComputeDistribution();
vo.setName(item.getName());
vo.setValue(item.getValue().doubleValue());
return vo;
}).collect(Collectors.toList());
} }
@Override @Override
...@@ -499,6 +525,129 @@ public class HomeIndexServiceImpl implements HomeIndexService { ...@@ -499,6 +525,129 @@ public class HomeIndexServiceImpl implements HomeIndexService {
throw new ServiceException("无效的统计时间类型:" + dateType); throw new ServiceException("无效的统计时间类型:" + dateType);
} }
@Override
public HomeDashboardRespVO getAllDashboardData() {
HomeDashboardRespVO result = new HomeDashboardRespVO();
// 1. 平台总体态势(算力总规模、已租赁算力、算力利用率、运行中任务数)
HomeIndexOverallSituationRespVO overallSituation = getOverallSituation();
HomeDashboardRespVO.OverallSituationVO overallSituationVO = new HomeDashboardRespVO.OverallSituationVO();
overallSituationVO.setAllCompute(overallSituation.getAllCompute().toString());
overallSituationVO.setLeaseCompute(overallSituation.getLeaseCompute().toString());
overallSituationVO.setComputeUtilizationRate(overallSituation.getComputeUtilizationRate().toString());
overallSituationVO.setRunningTaskCount(overallSituation.getRunningTaskCount());
result.setOverallSituation(overallSituationVO);
// 2. 算力资源结构分布(GPU型号分布、算力来源分布、计算资源分布)
HomeIndexComputeDistributionRespVO computeDistribution = getComputeDistribution(null);
HomeDashboardRespVO.ComputeDistributionVO computeDistributionVO = new HomeDashboardRespVO.ComputeDistributionVO();
computeDistributionVO.setGpu(convertGpuDistribution(computeDistribution.getGpu()));
computeDistributionVO.setSource(convertDistribution(computeDistribution.getSource()));
computeDistributionVO.setResource(convertDistribution(computeDistribution.getResource()));
result.setComputeDistribution(computeDistributionVO);
// 3. API调用趋势(按日/月/年三个维度统计)
Map<String, List<HomeDashboardRespVO.ApiCallsVO>> apiCallsMap = new HashMap<>();
apiCallsMap.put("d", convertApiCalls(getApiCallsData("d")));
apiCallsMap.put("m", convertApiCalls(getApiCallsData("m")));
apiCallsMap.put("y", convertApiCalls(getApiCallsData("y")));
result.setApiCalls(apiCallsMap);
// 4. 订单数据(算力订单和API订单的统计,按日/月/年三个维度)
Map<String, List<HomeDashboardRespVO.OrderStatisticsVO>> ordersMap = new HashMap<>();
ordersMap.put("d", convertOrders(getOrdersData("d")));
ordersMap.put("m", convertOrders(getOrdersData("m")));
ordersMap.put("y", convertOrders(getOrdersData("y")));
result.setOrders(ordersMap);
// 5. 用户管理数据(用户统计,按日/月/年三个维度)
Map<String, List<HomeDashboardRespVO.UserStatisticsVO>> usersMap = new HashMap<>();
usersMap.put("d", convertUsers(getUsersData("d")));
usersMap.put("m", convertUsers(getUsersData("m")));
usersMap.put("y", convertUsers(getUsersData("y")));
result.setUsers(usersMap);
// 6. 服务能力数据(上线应用数和API数量的历年统计,暂时返回空数据)
HomeDashboardRespVO.ServiceCapabilityVO serviceCapabilityVO = new HomeDashboardRespVO.ServiceCapabilityVO();
serviceCapabilityVO.setYears(new ArrayList<>());
serviceCapabilityVO.setAppOnline(new ArrayList<>());
serviceCapabilityVO.setApiOnline(new ArrayList<>());
result.setServiceCapability(serviceCapabilityVO);
// 7. 轮播数据(月度应用和模型服务数据,暂时返回空列表)
result.setCarouselItems(new ArrayList<>());
return result;
}
// 转换GPU分布数据
private List<HomeDashboardRespVO.DistributionItem> convertGpuDistribution(List<HomeIndexComputeDistributionRespVO.ComputeDistribution> list) {
if (CollectionUtils.isEmpty(list)) {
return new ArrayList<>();
}
return list.stream().map(item -> {
HomeDashboardRespVO.DistributionItem vo = new HomeDashboardRespVO.DistributionItem();
vo.setName(item.getName());
vo.setValue(item.getValue());
return vo;
}).collect(Collectors.toList());
}
// 转换分布数据(算力来源、计算资源)
private List<HomeDashboardRespVO.DistributionItem> convertDistribution(List<HomeIndexComputeDistributionRespVO.ComputeDistribution> list) {
if (CollectionUtils.isEmpty(list)) {
return new ArrayList<>();
}
return list.stream().map(item -> {
HomeDashboardRespVO.DistributionItem vo = new HomeDashboardRespVO.DistributionItem();
vo.setName(item.getName());
vo.setValue(item.getValue());
return vo;
}).collect(Collectors.toList());
}
// 转换API调用数据
private List<HomeDashboardRespVO.ApiCallsVO> convertApiCalls(List<HomeIndexApiCallsRespVO> list) {
if (CollectionUtils.isEmpty(list)) {
return new ArrayList<>();
}
return list.stream().map(item -> {
HomeDashboardRespVO.ApiCallsVO vo = new HomeDashboardRespVO.ApiCallsVO();
vo.setCountDate(item.getCountDate());
vo.setCallsCount(item.getCallsCount());
return vo;
}).collect(Collectors.toList());
}
// 转换订单统计数据
private List<HomeDashboardRespVO.OrderStatisticsVO> convertOrders(List<HomeIndexOrdersCountRespVO> list) {
if (CollectionUtils.isEmpty(list)) {
return new ArrayList<>();
}
return list.stream().map(item -> {
HomeDashboardRespVO.OrderStatisticsVO vo = new HomeDashboardRespVO.OrderStatisticsVO();
vo.setCountDate(item.getCountDate());
vo.setComputeOrdersCount(item.getComputeOrdersCount());
vo.setApiOrdersCount(item.getApiOrdersCount());
vo.setComputeOrdersAmount(item.getComputeOrdersAmount());
vo.setApiOrdersAmount(item.getApiOrdersAmount());
vo.setTotalOrdersCount(item.getTotalOrdersCount());
vo.setTotalOrdersAmount(item.getTotalOrdersAmount());
return vo;
}).collect(Collectors.toList());
}
// 转换用户统计数据
private List<HomeDashboardRespVO.UserStatisticsVO> convertUsers(List<HomeIndexUsersCountRespVO> list) {
if (CollectionUtils.isEmpty(list)) {
return new ArrayList<>();
}
return list.stream().map(item -> {
HomeDashboardRespVO.UserStatisticsVO vo = new HomeDashboardRespVO.UserStatisticsVO();
vo.setCountDate(item.getCountDate());
vo.setUsersCount(item.getUsersCount());
return vo;
}).collect(Collectors.toList());
}
} }
package com.luhu.computility.module.compute.api.order; package com.luhu.computility.module.compute.api.order;
import com.luhu.computility.module.compute.api.order.dto.ComputeDistributionDTO;
import com.luhu.computility.module.compute.api.order.dto.ResourceOrderSnapshotStatisticDTO; import com.luhu.computility.module.compute.api.order.dto.ResourceOrderSnapshotStatisticDTO;
import com.luhu.computility.module.compute.api.order.dto.ResourceSpuStatisticDTO; import com.luhu.computility.module.compute.api.order.dto.ResourceSpuStatisticDTO;
...@@ -14,4 +15,6 @@ public interface ComputeStatisticsApi { ...@@ -14,4 +15,6 @@ public interface ComputeStatisticsApi {
ResourceOrderSnapshotStatisticDTO queryResourceOrderSnapshotStatistic(); ResourceOrderSnapshotStatisticDTO queryResourceOrderSnapshotStatistic();
ResourceSpuStatisticDTO getAllCompute(); ResourceSpuStatisticDTO getAllCompute();
ComputeDistributionDTO getComputeDistribution();
} }
package com.luhu.computility.module.compute.api.order.dto;
import lombok.Data;
import java.util.List;
/**
* @Author: jony
* @Date : 2026/01/13 17:00
* @VERSION v1.0
*/
@Data
public class ComputeDistributionDTO {
private List<DistributionItem> gpu;
private List<DistributionItem> source;
private List<DistributionItem> resource;
@Data
public static class DistributionItem {
private String name;
private Long value;
}
}
package com.luhu.computility.module.compute.service.impl; package com.luhu.computility.module.compute.service.impl;
import com.luhu.computility.module.compute.api.order.ComputeStatisticsApi; import com.luhu.computility.module.compute.api.order.ComputeStatisticsApi;
import com.luhu.computility.module.compute.api.order.dto.ComputeDistributionDTO;
import com.luhu.computility.module.compute.api.order.dto.ResourceOrderSnapshotStatisticDTO; import com.luhu.computility.module.compute.api.order.dto.ResourceOrderSnapshotStatisticDTO;
import com.luhu.computility.module.compute.api.order.dto.ResourceSpuStatisticDTO; import com.luhu.computility.module.compute.api.order.dto.ResourceSpuStatisticDTO;
import com.luhu.computility.module.compute.dal.dataobject.resourcecategory.ResourceCategoryDO;
import com.luhu.computility.module.compute.dal.dataobject.resourcespu.ResourceSpuDO;
import com.luhu.computility.module.compute.dal.mysql.resourcecategory.ResourceCategoryMapper;
import com.luhu.computility.module.compute.dal.mysql.resourceordersnapshot.ResourceOrderSnapshotMapper; import com.luhu.computility.module.compute.dal.mysql.resourceordersnapshot.ResourceOrderSnapshotMapper;
import com.luhu.computility.module.compute.dal.mysql.resourcespu.ResourceSpuMapper; import com.luhu.computility.module.compute.dal.mysql.resourcespu.ResourceSpuMapper;
import com.luhu.computility.module.compute.enums.ResourceSpuStatus;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* 算力资源订单统计API实现类 * 算力资源订单统计API实现类
...@@ -25,6 +34,9 @@ public class ComputeStatisticsApiImpl implements ComputeStatisticsApi { ...@@ -25,6 +34,9 @@ public class ComputeStatisticsApiImpl implements ComputeStatisticsApi {
@Resource @Resource
private ResourceSpuMapper resourceSpuMapper; private ResourceSpuMapper resourceSpuMapper;
@Resource
private ResourceCategoryMapper resourceCategoryMapper;
@Override @Override
public ResourceSpuStatisticDTO getAllCompute() { public ResourceSpuStatisticDTO getAllCompute() {
...@@ -37,6 +49,74 @@ public class ComputeStatisticsApiImpl implements ComputeStatisticsApi { ...@@ -37,6 +49,74 @@ public class ComputeStatisticsApiImpl implements ComputeStatisticsApi {
return resourceOrderSnapshotMapper.queryResourceOrderSnapshotStatistic(); return resourceOrderSnapshotMapper.queryResourceOrderSnapshotStatistic();
} }
@Override
public ComputeDistributionDTO getComputeDistribution() {
ComputeDistributionDTO result = new ComputeDistributionDTO();
List<ResourceSpuDO> spuList = resourceSpuMapper.selectList();
List<ResourceSpuDO> onlineSpuList = spuList.stream()
.filter(spu -> spu.getStatus() != null && spu.getStatus().equals(ResourceSpuStatus.ONLINE.getValue()))
.collect(Collectors.toList());
if (CollectionUtils.isEmpty(onlineSpuList)) {
return result;
}
// GPU型号分布
Map<String, Long> gpuCountMap = onlineSpuList.stream()
.filter(spu -> spu.getGpu() != null)
.collect(Collectors.groupingBy(ResourceSpuDO::getGpu, Collectors.counting()));
List<ComputeDistributionDTO.DistributionItem> gpuList = gpuCountMap.entrySet().stream()
.map(entry -> {
ComputeDistributionDTO.DistributionItem item = new ComputeDistributionDTO.DistributionItem();
item.setName(entry.getKey());
item.setValue(entry.getValue());
return item;
})
.collect(Collectors.toList());
// 算力来源分布
Map<String, Long> sourceCountMap = onlineSpuList.stream()
.filter(spu -> spu.getSource() != null)
.collect(Collectors.groupingBy(ResourceSpuDO::getSource, Collectors.counting()));
List<ComputeDistributionDTO.DistributionItem> sourceList = sourceCountMap.entrySet().stream()
.map(entry -> {
ComputeDistributionDTO.DistributionItem item = new ComputeDistributionDTO.DistributionItem();
item.setName(entry.getKey());
item.setValue(entry.getValue());
return item;
})
.collect(Collectors.toList());
// 计算资源分布(按分类)
// 查询所有分类,用于将 categoryId 转换为分类名称
List<ResourceCategoryDO> categoryList = resourceCategoryMapper.selectList();
Map<Long, String> categoryIdToNameMap = categoryList.stream()
.collect(Collectors.toMap(ResourceCategoryDO::getId, ResourceCategoryDO::getName));
Map<Long, Long> categoryCountMap = onlineSpuList.stream()
.filter(spu -> spu.getCategoryId() != null)
.collect(Collectors.groupingBy(ResourceSpuDO::getCategoryId, Collectors.counting()));
List<ComputeDistributionDTO.DistributionItem> resourceList = categoryCountMap.entrySet().stream()
.map(entry -> {
ComputeDistributionDTO.DistributionItem item = new ComputeDistributionDTO.DistributionItem();
// 使用分类名称而不是 categoryId
String categoryName = categoryIdToNameMap.get(entry.getKey());
item.setName(categoryName != null ? categoryName : "未知分类");
item.setValue(entry.getValue());
return item;
})
.collect(Collectors.toList());
result.setGpu(gpuList);
result.setSource(sourceList);
result.setResource(resourceList);
return result;
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment