diff --git a/LoongPanel-Asp/Controllers/JobController.cs b/LoongPanel-Asp/Controllers/JobController.cs index 4825c62..ba786cd 100755 --- a/LoongPanel-Asp/Controllers/JobController.cs +++ b/LoongPanel-Asp/Controllers/JobController.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Mvc; +using System.Text.RegularExpressions; +using Microsoft.AspNetCore.Mvc; namespace LoongPanel_Asp.Controllers; @@ -9,16 +10,47 @@ public class JobController(ApplicationDbContext dbContext) : ControllerBase [HttpGet("GetJobList")] public IActionResult GetJobList([FromQuery]string? serverId=null) { - var serverMonitoringData = dbContext.ServerMonitoringData; - var dataNameTypesWithDataType = serverMonitoringData - .Where(x=>!string.IsNullOrEmpty(serverId) || x.ServerId==serverId) - .GroupBy(x => x.DataName) + var wildcardRules = new Dictionary> + { + { "CPU总体参数", ["CpuTotalUsage","CpuTotalSpeed","CpuIOWaitUsage","CpuSystemUsage","CpuUserUsage"] }, + { "CPU单核参数", ["CpuSingleSpeed-*"] }, + { "CPU用户参数", ["CpuUsage-*"] }, + { "内存总体参数", ["MemoryCache","MemoryFree","MemoryTotal","MemoryTotalUsage","MemoryUsed"] }, + { "内存用户参数", ["MemoryUsage-*"] }, + { "Swap参数", ["SwapFree","SwapTotal","SwapTotalUsage","SwapUsed"] }, + { "各个磁盘参数", ["DiskTps-*","DiskTps-*","DiskUtil-*","DiskWriteKB-*","DiskWriteKB-*","DiskAwait-*","DiskReadKB-*"] }, + { "磁盘总体参数", ["DiskTotalUsage"] }, + { "网络总体参数", ["InterfaceTotalUtilizationPercentage"] }, + { "各个网络接口参数", ["InterfaceUtilizationPercentage-*","InterfaceUtilizationPercentage-*","ReceivedPacketsPerSecond-*","TransmittedPacketsPerSecond-*"] }, + { "进程", ["PhrasePatternCount","ProcessTotalCount","ThreadsTotalCount"] }, + { "用户进程", ["UserProcesses-*"] }, + + }; + var filteredData = dbContext.ServerMonitoringData + .Where(x => string.IsNullOrEmpty(serverId) || x.ServerId == serverId) + .GroupBy(item => item.DataType).Select(item => item.First()).ToList(); + + // 先对每个元素应用匹配规则,然后根据匹配结果进行分组 + var groupedData = filteredData + .Select(x => new + { + x.DataName, + x.DataType, + GroupName = wildcardRules.FirstOrDefault(rule => x.DataType != null && IsMatch(x.DataType, rule.Value)).Key ?? "其他" + }) + .GroupBy(x => x.GroupName) .Select(group => new { - DataName = group.Key, group.First().DataType ,group.First().ServerId + GroupName=group.Key, + Items = group.ToList() }) .ToList(); - return Ok(dataNameTypesWithDataType); + return Ok(groupedData); } -} \ No newline at end of file + private bool IsMatch(string input, List patterns) + { + return patterns.Select(pattern => "^" + Regex.Escape(pattern).Replace("\\*", ".*") + "$").Any(regexPattern => Regex.IsMatch(input, regexPattern)); + } +} +