diff --git a/Infrastructure/Helper/ComputerHelper.cs b/Infrastructure/Helper/ComputerHelper.cs index 20ae87e..2695d4b 100644 --- a/Infrastructure/Helper/ComputerHelper.cs +++ b/Infrastructure/Helper/ComputerHelper.cs @@ -1,4 +1,5 @@ using Infrastructure.Extensions; +using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; @@ -19,19 +20,20 @@ namespace Infrastructure try { MemoryMetricsClient client = new(); - MemoryMetrics memoryMetrics = client.GetMetrics(); - memoryMetrics.FreeRam = Math.Ceiling(memoryMetrics.Free / 1024) + "GB"; - memoryMetrics.UsedRam = Math.Ceiling(memoryMetrics.Used / 1024) + "GB"; - memoryMetrics.TotalRAM = Math.Ceiling(memoryMetrics.Total / 1024).ToString() + " GB"; + MemoryMetrics memoryMetrics = IsUnix() ? client.GetUnixMetrics() : client.GetWindowsMetrics(); + + memoryMetrics.FreeRam = Math.Round(memoryMetrics.Free / 1024, 2) + "GB"; + memoryMetrics.UsedRam = Math.Round(memoryMetrics.Used / 1024, 2) + "GB"; + memoryMetrics.TotalRAM = Math.Round(memoryMetrics.Total / 1024, 2) + "GB"; memoryMetrics.RAMRate = Math.Ceiling(100 * memoryMetrics.Used / memoryMetrics.Total).ToString() + "%"; memoryMetrics.CPURate = Math.Ceiling(GetCPURate().ParseToDouble()) + "%"; return memoryMetrics; } catch (Exception ex) { - Console.WriteLine(ex.Message); + Console.WriteLine("获取内存使用出错,msg=" + ex.Message + "," + ex.StackTrace); } - return null; + return new MemoryMetrics(); } /// @@ -42,20 +44,52 @@ namespace Infrastructure { List diskInfos = new(); - var driv = DriveInfo.GetDrives(); - foreach (var item in driv) + if (IsUnix()) { - var obj = new DiskInfo() + try { - DickName = item.Name, - TypeName = item.DriveType.ToString(), - TotalFree = item.TotalFreeSpace / 1024 / 1024 / 1024, - TotalSize = item.TotalSize / 1024 / 1024 / 1024, - AvailableFreeSpace = item.AvailableFreeSpace / 1024 / 1024 / 1024, - }; - obj.AvailablePercent = decimal.Ceiling(((decimal)(obj.TotalSize - obj.AvailableFreeSpace) /(decimal)obj.TotalSize) * 100); - diskInfos.Add(obj); + string output = ShellHelper.Bash("df -m / | awk '{print $2,$3,$4,$5,$6}'"); + var arr = output.Split('\n', StringSplitOptions.RemoveEmptyEntries); + if (arr.Length == 0) return diskInfos; + + var rootDisk = arr[1].Split(' ', (char)StringSplitOptions.RemoveEmptyEntries); + if (rootDisk == null || rootDisk.Length == 0) + { + return diskInfos; + } + DiskInfo diskInfo = new() + { + DiskName = "/", + TotalSize = long.Parse(rootDisk[0]) / 1024, + Used = long.Parse(rootDisk[1]) / 1024, + AvailableFreeSpace = long.Parse(rootDisk[2]) / 1024, + AvailablePercent = decimal.Parse(rootDisk[3].Replace("%", "")) + }; + diskInfos.Add(diskInfo); + } + catch (Exception ex) + { + Console.WriteLine("获取磁盘信息出错了" + ex.Message); + } } + else + { + var driv = DriveInfo.GetDrives(); + foreach (var item in driv) + { + var obj = new DiskInfo() + { + DiskName = item.Name, + TypeName = item.DriveType.ToString(), + TotalSize = item.TotalSize / 1024 / 1024 / 1024, + AvailableFreeSpace = item.AvailableFreeSpace / 1024 / 1024 / 1024, + }; + obj.Used = obj.TotalSize - obj.AvailableFreeSpace; + obj.AvailablePercent = decimal.Ceiling(obj.Used / (decimal)obj.TotalSize * 100); + diskInfos.Add(obj); + } + } + return diskInfos; } @@ -81,6 +115,10 @@ namespace Infrastructure return cpuRate; } + /// + /// 获取系统运行时间 + /// + /// public static string GetRunTime() { string runTime = string.Empty; @@ -88,8 +126,7 @@ namespace Infrastructure { if (IsUnix()) { - string output = ShellHelper.Bash("uptime -s"); - output = output.Trim(); + string output = ShellHelper.Bash("uptime -s").Trim(); runTime = DateTimeHelper.FormatTime((DateTime.Now - output.ParseToDateTime()).TotalMilliseconds.ToString().Split('.')[0].ParseToLong()); } else @@ -104,7 +141,7 @@ namespace Infrastructure } catch (Exception ex) { - Console.WriteLine(ex.Message); + Console.WriteLine("获取runTime出错" + ex.Message); } return runTime; } @@ -115,8 +152,11 @@ namespace Infrastructure /// public class MemoryMetrics { + [JsonIgnore] public double Total { get; set; } + [JsonIgnore] public double Used { get; set; } + [JsonIgnore] public double Free { get; set; } public string UsedRam { get; set; } @@ -143,11 +183,15 @@ namespace Infrastructure /// /// 磁盘名 /// - public string DickName { get; set; } + public string DiskName { get; set; } public string TypeName { get; set; } public long TotalFree { get; set; } public long TotalSize { get; set; } /// + /// 已使用 + /// + public long Used { get; set; } + /// /// 可使用 /// public long AvailableFreeSpace { get; set; } @@ -156,63 +200,54 @@ namespace Infrastructure public class MemoryMetricsClient { - public MemoryMetrics GetMetrics() - { - if (ComputerHelper.IsUnix()) - { - return GetUnixMetrics(); - } - return GetWindowsMetrics(); - } + #region 获取内存信息 /// /// windows系统获取内存信息 /// /// - private MemoryMetrics GetWindowsMetrics() + public MemoryMetrics GetWindowsMetrics() { string output = ShellHelper.Cmd("wmic", "OS get FreePhysicalMemory,TotalVisibleMemorySize /Value"); + var metrics = new MemoryMetrics(); + var lines = output.Trim().Split('\n', (char)StringSplitOptions.RemoveEmptyEntries); + + if (lines.Length <= 0) return metrics; - var lines = output.Trim().Split('\n'); var freeMemoryParts = lines[0].Split('=', (char)StringSplitOptions.RemoveEmptyEntries); var totalMemoryParts = lines[1].Split('=', (char)StringSplitOptions.RemoveEmptyEntries); - var metrics = new MemoryMetrics(); metrics.Total = Math.Round(double.Parse(totalMemoryParts[1]) / 1024, 0); - metrics.Free = Math.Round(double.Parse(freeMemoryParts[1]) / 1024, 0); + metrics.Free = Math.Round(double.Parse(freeMemoryParts[1]) / 1024, 0);//m metrics.Used = metrics.Total - metrics.Free; return metrics; } - /// - /// windows 获取磁盘信息 - /// - private void GetWindowsDiskInfo() - { - string output = ShellHelper.Cmd("wmic", "diskdrive get Size /Value"); - - Console.WriteLine(output); - } - /// /// Unix系统获取 /// /// - private MemoryMetrics GetUnixMetrics() + public MemoryMetrics GetUnixMetrics() { - string output = ShellHelper.Bash("free -m"); - - var lines = output.Split('\n'); - var memory = lines[1].Split(' ', (char)StringSplitOptions.RemoveEmptyEntries); - + string output = ShellHelper.Bash("free -m | awk '{print $2,$3,$4,$5,$6}'"); var metrics = new MemoryMetrics(); - metrics.Total = double.Parse(memory[1]); - metrics.Used = double.Parse(memory[2]); - metrics.Free = double.Parse(memory[3]); + var lines = output.Split('\n', (char)StringSplitOptions.RemoveEmptyEntries); + if (lines.Length <= 0) return metrics; + + if (lines != null && lines.Length > 0) + { + var memory = lines[1].Split(' ', (char)StringSplitOptions.RemoveEmptyEntries); + if (memory.Length >= 3) + { + metrics.Total = double.Parse(memory[0]); + metrics.Used = double.Parse(memory[1]); + metrics.Free = double.Parse(memory[2]);//m + } + } return metrics; } + #endregion } - } \ No newline at end of file diff --git a/Infrastructure/OptionsSetting.cs b/Infrastructure/OptionsSetting.cs index dc36620..be68c71 100644 --- a/Infrastructure/OptionsSetting.cs +++ b/Infrastructure/OptionsSetting.cs @@ -22,6 +22,7 @@ namespace Infrastructure public MailOptions MailOptions { get; set; } public Upload Upload { get; set; } public ALYUN_OCS ALYUN_OCS { get; set; } + public JwtSettings JwtSettings { get; set; } } /// /// 发送邮件数据配置 diff --git a/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs b/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs index 0054ff4..46238ca 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs @@ -16,6 +16,7 @@ using ZR.Service.System.IService; using Hei.Captcha; using ZR.Common; using ZR.Service.System; +using Microsoft.Extensions.Options; namespace ZR.Admin.WebApi.Controllers.System { @@ -33,6 +34,8 @@ namespace ZR.Admin.WebApi.Controllers.System private readonly SecurityCodeHelper SecurityCodeHelper; private readonly ISysConfigService sysConfigService; private readonly ISysRoleService roleService; + private readonly OptionsSetting jwtSettings; + public SysLoginController( IHttpContextAccessor contextAccessor, ISysMenuService sysMenuService, @@ -41,7 +44,8 @@ namespace ZR.Admin.WebApi.Controllers.System ISysPermissionService permissionService, ISysConfigService configService, ISysRoleService sysRoleService, - SecurityCodeHelper captcha) + SecurityCodeHelper captcha, + IOptions jwtSettings) { httpContextAccessor = contextAccessor; SecurityCodeHelper = captcha; @@ -51,6 +55,7 @@ namespace ZR.Admin.WebApi.Controllers.System this.permissionService = permissionService; this.sysConfigService = configService; roleService = sysRoleService; + this.jwtSettings = jwtSettings.Value; } @@ -82,7 +87,7 @@ namespace ZR.Admin.WebApi.Controllers.System LoginUser loginUser = new(user, roles, permissions); CacheHelper.SetCache(GlobalConstant.UserPermKEY + user.UserId, loginUser); - return SUCCESS(JwtUtil.GenerateJwtToken(HttpContext.AddClaims(loginUser))); + return SUCCESS(JwtUtil.GenerateJwtToken(HttpContext.AddClaims(loginUser), jwtSettings.JwtSettings)); } /// diff --git a/ZR.Admin.WebApi/Controllers/System/monitor/MonitorController.cs b/ZR.Admin.WebApi/Controllers/System/monitor/MonitorController.cs index b5ea834..dda4236 100644 --- a/ZR.Admin.WebApi/Controllers/System/monitor/MonitorController.cs +++ b/ZR.Admin.WebApi/Controllers/System/monitor/MonitorController.cs @@ -1,4 +1,5 @@ using Infrastructure; +using Infrastructure.Extensions; using Infrastructure.Model; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Hosting; @@ -7,8 +8,6 @@ using Microsoft.Extensions.Options; using System; using System.Diagnostics; using System.Runtime.InteropServices; -using ZR.Admin.WebApi.Filters; -using ZR.Common; namespace ZR.Admin.WebApi.Controllers.monitor { @@ -17,7 +16,7 @@ namespace ZR.Admin.WebApi.Controllers.monitor { private OptionsSetting Options; private IWebHostEnvironment HostEnvironment; - + private NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); public MonitorController(IOptions options, IWebHostEnvironment hostEnvironment) { this.HostEnvironment = hostEnvironment; @@ -55,13 +54,16 @@ namespace ZR.Admin.WebApi.Controllers.monitor string version = RuntimeInformation.FrameworkDescription; string appRAM = ((double)Process.GetCurrentProcess().WorkingSet64 / 1048576).ToString("N2") + " MB"; string startTime = Process.GetCurrentProcess().StartTime.ToString("yyyy-MM-dd HH:mm:ss"); - string runTime = Process.GetCurrentProcess().StartTime.ToString("yyyy-MM-dd HH:mm:ss"); - string serverIP = (Request.HttpContext.Connection.LocalIpAddress.MapToIPv4().ToString() + ":" + Request.HttpContext.Connection.LocalPort);//获取服务器IP + string sysRunTime = ComputerHelper.GetRunTime(); + string serverIP = Request.HttpContext.Connection.LocalIpAddress.MapToIPv4().ToString() + ":" + Request.HttpContext.Connection.LocalPort;//获取服务器IP + var programStartTime = Process.GetCurrentProcess().StartTime; + string programRunTime = DateTimeHelper.FormatTime((DateTime.Now - programStartTime).TotalMilliseconds.ToString().Split('.')[0].ParseToLong()); var data = new { cpu = ComputerHelper.GetComputerInfo(), - sys = new { cpuNum, computerName, osName, osArch, serverIP }, + disk = ComputerHelper.GetDiskInfos(), + sys = new { cpuNum, computerName, osName, osArch, serverIP, runTime = sysRunTime }, app = new { name = HostEnvironment.EnvironmentName, @@ -70,9 +72,9 @@ namespace ZR.Admin.WebApi.Controllers.monitor version, appRAM, startTime, - runTime, + runTime = programRunTime, host = serverIP - } + }, }; return SUCCESS(data); diff --git a/ZR.Admin.WebApi/Framework/JwtUtil.cs b/ZR.Admin.WebApi/Framework/JwtUtil.cs index 4a438ec..90cc023 100644 --- a/ZR.Admin.WebApi/Framework/JwtUtil.cs +++ b/ZR.Admin.WebApi/Framework/JwtUtil.cs @@ -39,11 +39,12 @@ namespace ZR.Admin.WebApi.Framework /// 生成token /// /// + /// /// - public static string GenerateJwtToken(List claims) + public static string GenerateJwtToken(List claims, JwtSettings jwtSettings) { - JwtSettings jwtSettings = new(); - ConfigUtils.Instance.Bind("JwtSettings", jwtSettings); + //JwtSettings jwtSettings = new(); + //ConfigUtils.Instance.Bind("JwtSettings", jwtSettings); var authTime = DateTime.Now; var expiresAt = authTime.AddMinutes(jwtSettings.Expire); diff --git a/ZR.Vue/src/views/monitor/server/index.vue b/ZR.Vue/src/views/monitor/server/index.vue index 1688005..c728c50 100644 --- a/ZR.Vue/src/views/monitor/server/index.vue +++ b/ZR.Vue/src/views/monitor/server/index.vue @@ -123,7 +123,7 @@ 磁盘状态 -
{{sysFile.dickName }}盘使用率
+
{{sysFile.diskName }}盘使用率
@@ -132,6 +132,9 @@
空闲:{{ sysFile.availableFreeSpace }}GB +
+
+ 已用:{{ sysFile.used }}GB
@@ -139,7 +142,7 @@
- +
@@ -264,7 +267,7 @@ export default { } this.intervalId = setInterval(() => { this.getList(); - }, 5000); + }, 10000); }, /** * 停止定时器