SysServerService.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. // 麻省理工学院许可证
  2. //
  3. // 版权所有 (c) 2021-2023 zuohuaijun,大名科技(天津)有限公司 联系电话/微信:18020030720 QQ:515096995
  4. //
  5. // 特此免费授予获得本软件的任何人以处理本软件的权利,但须遵守以下条件:在所有副本或重要部分的软件中必须包括上述版权声明和本许可声明。
  6. //
  7. // 软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于对适销性、适用性和非侵权的保证。
  8. // 在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是因合同、侵权或其他方式引起的,与软件或其使用或其他交易有关。
  9. using AngleSharp.Html.Parser;
  10. using AspNetCoreRateLimit;
  11. using FluentEmail.Core;
  12. using Lazy.Captcha.Core;
  13. using Magicodes.ExporterAndImporter.Pdf;
  14. using Microsoft.Extensions.Hosting;
  15. using Nest;
  16. using OnceMi.AspNetCore.OSS;
  17. namespace Admin.NET.Core.Service;
  18. /// <summary>
  19. /// 系统服务器监控服务
  20. /// </summary>
  21. [ApiDescriptionSettings(Order = 290)]
  22. public class SysServerService : IDynamicApiController, ITransient
  23. {
  24. public SysServerService()
  25. {
  26. }
  27. /// <summary>
  28. /// 获取服务器配置信息
  29. /// </summary>
  30. /// <returns></returns>
  31. [DisplayName("获取服务器配置信息")]
  32. public dynamic GetServerBase()
  33. {
  34. return new
  35. {
  36. HostName = Environment.MachineName, // 主机名称
  37. SystemOs = RuntimeInformation.OSDescription, // 操作系统
  38. OsArchitecture = Environment.OSVersion.Platform.ToString() + " " + RuntimeInformation.OSArchitecture.ToString(), // 系统架构
  39. ProcessorCount = Environment.ProcessorCount + " 核", // CPU核心数
  40. SysRunTime = ComputerUtil.GetRunTime(), // 系统运行时间
  41. RemoteIp = ComputerUtil.GetIpFromOnline(), // 外网地址
  42. LocalIp = App.HttpContext?.Connection?.LocalIpAddress.ToString(), // 本地地址
  43. FrameworkDescription = RuntimeInformation.FrameworkDescription, // NET框架
  44. Environment = App.HostEnvironment.IsDevelopment() ? "Development" : "Production",
  45. Wwwroot = App.WebHostEnvironment.WebRootPath, // 网站根目录
  46. Stage = App.HostEnvironment.IsStaging() ? "Stage环境" : "非Stage环境", // 是否Stage环境
  47. };
  48. }
  49. /// <summary>
  50. /// 获取服务器使用信息
  51. /// </summary>
  52. /// <returns></returns>
  53. [DisplayName("获取服务器使用信息")]
  54. public dynamic GetServerUsed()
  55. {
  56. var programStartTime = Process.GetCurrentProcess().StartTime;
  57. var totalMilliseconds = (DateTime.Now - programStartTime).TotalMilliseconds.ToString();
  58. var ts = totalMilliseconds.Contains('.') ? totalMilliseconds.Split('.')[0] : totalMilliseconds;
  59. var programRunTime = DateTimeUtil.FormatTime(ts.ParseToLong());
  60. var memoryMetrics = ComputerUtil.GetComputerInfo();
  61. return new
  62. {
  63. memoryMetrics.FreeRam, // 空闲内存
  64. memoryMetrics.UsedRam, // 已用内存
  65. memoryMetrics.TotalRam, // 总内存
  66. memoryMetrics.RamRate, // 内存使用率
  67. memoryMetrics.CpuRate, // Cpu使用率
  68. StartTime = programStartTime.ToString("yyyy-MM-dd HH:mm:ss"), // 服务启动时间
  69. RunTime = programRunTime, // 服务运行时间
  70. };
  71. }
  72. /// <summary>
  73. /// 获取服务器磁盘信息
  74. /// </summary>
  75. /// <returns></returns>
  76. [DisplayName("获取服务器磁盘信息")]
  77. public dynamic GetServerDisk()
  78. {
  79. return ComputerUtil.GetDiskInfos();
  80. }
  81. /// <summary>
  82. /// 获取框架主要程序集
  83. /// </summary>
  84. /// <returns></returns>
  85. [DisplayName("获取框架主要程序集")]
  86. public dynamic GetAssemblyList()
  87. {
  88. var furionAssembly = typeof(App).Assembly.GetName();
  89. var sqlSugarAssembly = typeof(ISqlSugarClient).Assembly.GetName();
  90. var yitIdAssembly = typeof(YitIdHelper).Assembly.GetName();
  91. var redisAssembly = typeof(Redis).Assembly.GetName();
  92. var jsonAssembly = typeof(NewtonsoftJsonMvcCoreBuilderExtensions).Assembly.GetName();
  93. var excelAssembly = typeof(IExcelImporter).Assembly.GetName();
  94. var pdfAssembly = typeof(IPdfExporter).Assembly.GetName();
  95. var captchaAssembly = typeof(ICaptcha).Assembly.GetName();
  96. var wechatApiAssembly = typeof(WechatApiClient).Assembly.GetName();
  97. var wechatTenpayAssembly = typeof(WechatTenpayClient).Assembly.GetName();
  98. var ossAssembly = typeof(IOSSServiceFactory).Assembly.GetName();
  99. var parserAssembly = typeof(Parser).Assembly.GetName();
  100. var nestAssembly = typeof(IElasticClient).Assembly.GetName();
  101. var limitAssembly = typeof(IpRateLimitMiddleware).Assembly.GetName();
  102. var htmlParserAssembly = typeof(HtmlParser).Assembly.GetName();
  103. var fluentEmailAssembly = typeof(IFluentEmail).Assembly.GetName();
  104. return new[]
  105. {
  106. new { furionAssembly.Name, furionAssembly.Version },
  107. new { sqlSugarAssembly.Name, sqlSugarAssembly.Version },
  108. new { yitIdAssembly.Name, yitIdAssembly.Version },
  109. new { redisAssembly.Name, redisAssembly.Version },
  110. new { jsonAssembly.Name, jsonAssembly.Version },
  111. new { excelAssembly.Name, excelAssembly.Version },
  112. new { pdfAssembly.Name, pdfAssembly.Version },
  113. new { captchaAssembly.Name, captchaAssembly.Version },
  114. new { wechatApiAssembly.Name, wechatApiAssembly.Version },
  115. new { wechatTenpayAssembly.Name, wechatTenpayAssembly.Version },
  116. new { ossAssembly.Name, ossAssembly.Version },
  117. new { parserAssembly.Name, parserAssembly.Version },
  118. new { nestAssembly.Name, nestAssembly.Version },
  119. new { limitAssembly.Name, limitAssembly.Version },
  120. new { htmlParserAssembly.Name, htmlParserAssembly.Version },
  121. new { fluentEmailAssembly.Name, fluentEmailAssembly.Version },
  122. };
  123. }
  124. }