SysServerService.cs 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. // Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
  2. //
  3. // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
  4. //
  5. // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
  6. #if NET9_0_OR_GREATER
  7. using XiHan.Framework.Utils.HardwareInfos;
  8. using XiHan.Framework.Utils.Reflections;
  9. using XiHan.Framework.Utils.Runtime;
  10. using ReflectionHelper = XiHan.Framework.Utils.Reflections.ReflectionHelper;
  11. #endif // NET9_0_OR_GREATER
  12. namespace Admin.NET.Core.Service;
  13. /// <summary>
  14. /// 系统服务器监控服务 🧩
  15. /// </summary>
  16. [ApiDescriptionSettings(Order = 290, Description = "服务器监控")]
  17. public class SysServerService : IDynamicApiController, ITransient
  18. {
  19. public SysServerService()
  20. {
  21. }
  22. #if NET9_0_OR_GREATER
  23. /// <summary>
  24. /// 获取服务器硬件信息
  25. /// </summary>
  26. /// <returns></returns>
  27. [DisplayName("获取服务器硬件信息")]
  28. public SystemHardwareInfo HardwareInfo()
  29. {
  30. var hardwareInfo = HardwareInfoManager.GetSystemHardwareInfo();
  31. return hardwareInfo;
  32. }
  33. /// <summary>
  34. /// 获取服务器运行时信息
  35. /// </summary>
  36. /// <returns></returns>
  37. [DisplayName("获取服务器运行时信息")]
  38. public SystemRuntimeInfo RuntimeInfo()
  39. {
  40. var systemRuntimeInfo = RuntimeInfoManger.GetSystemRuntimeInfo();
  41. return systemRuntimeInfo;
  42. }
  43. /// <summary>
  44. /// 获取框架主要程序集
  45. /// </summary>
  46. /// <returns></returns>
  47. [DisplayName("获取框架主要程序集")]
  48. public List<NuGetPackage> NuGetPackagesInfo()
  49. {
  50. var nuGetPackages = ReflectionHelper.GetNuGetPackages("Admin.NET");
  51. return nuGetPackages;
  52. }
  53. #endif // NET9_0_OR_GREATER
  54. /// <summary>
  55. /// 获取服务器配置信息 🔖
  56. /// </summary>
  57. /// <returns></returns>
  58. [DisplayName("获取服务器配置信息")]
  59. public dynamic GetServerBase()
  60. {
  61. return new
  62. {
  63. HostName = Environment.MachineName, // 主机名称
  64. SystemOs = ComputerUtil.GetOSInfo(),//RuntimeInformation.OSDescription, // 操作系统
  65. OsArchitecture = Environment.OSVersion.Platform.ToString() + " " + RuntimeInformation.OSArchitecture.ToString(), // 系统架构
  66. ProcessorCount = Environment.ProcessorCount + " 核", // CPU核心数
  67. SysRunTime = ComputerUtil.GetRunTime(), // 系统运行时间
  68. RemoteIp = ComputerUtil.GetIpFromOnline(), // 外网地址
  69. LocalIp = App.HttpContext?.Connection?.LocalIpAddress!.MapToIPv4().ToString(), // 本地地址
  70. FrameworkDescription = RuntimeInformation.FrameworkDescription + " / " + App.GetOptions<DbConnectionOptions>().ConnectionConfigs[0].DbType.ToString(), // NET框架 + 数据库类型
  71. Environment = App.HostEnvironment.IsDevelopment() ? "Development" : "Production",
  72. Wwwroot = App.WebHostEnvironment.WebRootPath, // 网站根目录
  73. Stage = App.HostEnvironment.IsStaging() ? "Stage环境" : "非Stage环境", // 是否Stage环境
  74. };
  75. }
  76. /// <summary>
  77. /// 获取服务器使用信息 🔖
  78. /// </summary>
  79. /// <returns></returns>
  80. [DisplayName("获取服务器使用信息")]
  81. public dynamic GetServerUsed()
  82. {
  83. var programStartTime = Process.GetCurrentProcess().StartTime;
  84. var totalMilliseconds = (DateTime.Now - programStartTime).TotalMilliseconds.ToString();
  85. var ts = totalMilliseconds.Contains('.') ? totalMilliseconds.Split('.')[0] : totalMilliseconds;
  86. var programRunTime = DateTimeUtil.FormatTime(ts.ParseToLong());
  87. var memoryMetrics = ComputerUtil.GetComputerInfo();
  88. return new
  89. {
  90. memoryMetrics.FreeRam, // 空闲内存
  91. memoryMetrics.UsedRam, // 已用内存
  92. memoryMetrics.TotalRam, // 总内存
  93. memoryMetrics.RamRate, // 内存使用率
  94. memoryMetrics.CpuRates, // Cpu使用率多CPU未完成
  95. memoryMetrics.CpuRate, // Cpu 1使用率
  96. StartTime = programStartTime.ToString("yyyy-MM-dd HH:mm:ss"), // 服务启动时间
  97. RunTime = programRunTime, // 服务运行时间
  98. };
  99. }
  100. /// <summary>
  101. /// 获取服务器磁盘信息 🔖
  102. /// </summary>
  103. /// <returns></returns>
  104. [DisplayName("获取服务器磁盘信息")]
  105. public dynamic GetServerDisk()
  106. {
  107. return ComputerUtil.GetDiskInfos();
  108. }
  109. /// <summary>
  110. /// 获取框架主要程序集 🔖
  111. /// </summary>
  112. /// <returns></returns>
  113. [DisplayName("获取框架主要程序集")]
  114. public dynamic GetAssemblyList()
  115. {
  116. var furionAssembly = typeof(App).Assembly.GetName();
  117. var sqlSugarAssembly = typeof(ISqlSugarClient).Assembly.GetName();
  118. var yitIdAssembly = typeof(YitIdHelper).Assembly.GetName();
  119. var redisAssembly = typeof(Redis).Assembly.GetName();
  120. var jsonAssembly = typeof(NewtonsoftJsonMvcCoreBuilderExtensions).Assembly.GetName();
  121. var excelAssembly = typeof(IExcelImporter).Assembly.GetName();
  122. var pdfAssembly = typeof(Magicodes.ExporterAndImporter.Pdf.IPdfExporter).Assembly.GetName();
  123. var wordAssembly = typeof(Magicodes.ExporterAndImporter.Word.IWordExporter).Assembly.GetName();
  124. var captchaAssembly = typeof(Lazy.Captcha.Core.ICaptcha).Assembly.GetName();
  125. var wechatApiAssembly = typeof(WechatApiClient).Assembly.GetName();
  126. var wechatTenpayAssembly = typeof(WechatTenpayClient).Assembly.GetName();
  127. var ossAssembly = typeof(OnceMi.AspNetCore.OSS.IOSSServiceFactory).Assembly.GetName();
  128. var parserAssembly = typeof(Parser).Assembly.GetName();
  129. var elasticsearchClientAssembly = typeof(Elastic.Clients.Elasticsearch.ElasticsearchClient).Assembly.GetName();
  130. var limitAssembly = typeof(AspNetCoreRateLimit.IpRateLimitMiddleware).Assembly.GetName();
  131. var htmlParserAssembly = typeof(AngleSharp.Html.Parser.HtmlParser).Assembly.GetName();
  132. var fluentEmailAssembly = typeof(MailKit.Net.Smtp.SmtpClient).Assembly.GetName();
  133. var qRCodeGeneratorAssembly = typeof(QRCoder.QRCodeGenerator).Assembly.GetName();
  134. var alibabaSendSmsRequestAssembly = typeof(AlibabaCloud.SDK.Dysmsapi20170525.Models.SendSmsRequest).Assembly.GetName();
  135. var tencentSendSmsRequestAssembly = typeof(TencentCloud.Sms.V20190711.Models.SendSmsRequest).Assembly.GetName();
  136. var imageAssembly = typeof(Image).Assembly.GetName();
  137. var rabbitMQAssembly = typeof(RabbitMQEventSourceStore).Assembly.GetName();
  138. var ldapConnectionAssembly = typeof(Novell.Directory.Ldap.LdapConnection).Assembly.GetName();
  139. var ipToolAssembly = typeof(IPTools.Core.IpTool).Assembly.GetName();
  140. var weixinAuthenticationOptionsAssembly = typeof(AspNet.Security.OAuth.Weixin.WeixinAuthenticationOptions).Assembly.GetName();
  141. var giteeAuthenticationOptionsAssembly = typeof(AspNet.Security.OAuth.Gitee.GiteeAuthenticationOptions).Assembly.GetName();
  142. var hashidsAssembly = typeof(HashidsNet.Hashids).Assembly.GetName();
  143. var sftpClientAssembly = typeof(Renci.SshNet.SftpClient).Assembly.GetName();
  144. var hardwareInfoAssembly = typeof(Hardware.Info.HardwareInfo).Assembly.GetName();
  145. return new[]
  146. {
  147. new { furionAssembly.Name, furionAssembly.Version },
  148. new { sqlSugarAssembly.Name, sqlSugarAssembly.Version },
  149. new { yitIdAssembly.Name, yitIdAssembly.Version },
  150. new { redisAssembly.Name, redisAssembly.Version },
  151. new { jsonAssembly.Name, jsonAssembly.Version },
  152. new { excelAssembly.Name, excelAssembly.Version },
  153. new { pdfAssembly.Name, pdfAssembly.Version },
  154. new { wordAssembly.Name, wordAssembly.Version },
  155. new { captchaAssembly.Name, captchaAssembly.Version },
  156. new { wechatApiAssembly.Name, wechatApiAssembly.Version },
  157. new { wechatTenpayAssembly.Name, wechatTenpayAssembly.Version },
  158. new { ossAssembly.Name, ossAssembly.Version },
  159. new { parserAssembly.Name, parserAssembly.Version },
  160. new { elasticsearchClientAssembly.Name, elasticsearchClientAssembly.Version },
  161. new { limitAssembly.Name, limitAssembly.Version },
  162. new { htmlParserAssembly.Name, htmlParserAssembly.Version },
  163. new { fluentEmailAssembly.Name, fluentEmailAssembly.Version },
  164. new { qRCodeGeneratorAssembly.Name, qRCodeGeneratorAssembly.Version },
  165. new { alibabaSendSmsRequestAssembly.Name, alibabaSendSmsRequestAssembly.Version },
  166. new { tencentSendSmsRequestAssembly.Name, tencentSendSmsRequestAssembly.Version },
  167. new { imageAssembly.Name, imageAssembly.Version },
  168. new { rabbitMQAssembly.Name, rabbitMQAssembly.Version },
  169. new { ldapConnectionAssembly.Name, ldapConnectionAssembly.Version },
  170. new { ipToolAssembly.Name, ipToolAssembly.Version },
  171. new { weixinAuthenticationOptionsAssembly.Name, weixinAuthenticationOptionsAssembly.Version },
  172. new { giteeAuthenticationOptionsAssembly.Name, giteeAuthenticationOptionsAssembly.Version },
  173. new { hashidsAssembly.Name, hashidsAssembly.Version },
  174. new { sftpClientAssembly.Name, sftpClientAssembly.Version },
  175. new { hardwareInfoAssembly.Name, hardwareInfoAssembly.Version },
  176. };
  177. }
  178. }