SysServerService.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. using AspNetCoreRateLimit;
  2. using Lazy.Captcha.Core;
  3. using Magicodes.ExporterAndImporter.Excel;
  4. using Magicodes.ExporterAndImporter.Pdf;
  5. using Microsoft.Extensions.Hosting;
  6. using Nest;
  7. using NewLife.Caching;
  8. using OnceMi.AspNetCore.OSS;
  9. namespace Admin.NET.Core.Service;
  10. /// <summary>
  11. /// 系统服务器监控服务
  12. /// </summary>
  13. [ApiDescriptionSettings(Order = 185)]
  14. public class SysServerService : IDynamicApiController, ITransient
  15. {
  16. public SysServerService()
  17. {
  18. }
  19. /// <summary>
  20. /// 服务器配置信息
  21. /// </summary>
  22. /// <returns></returns>
  23. [HttpGet("/server/base")]
  24. public dynamic GetServerBase()
  25. {
  26. return new
  27. {
  28. HostName = Environment.MachineName, // 主机名称
  29. SystemOs = RuntimeInformation.OSDescription, // 操作系统
  30. OsArchitecture = Environment.OSVersion.Platform.ToString() + " " + RuntimeInformation.OSArchitecture.ToString(), // 系统架构
  31. ProcessorCount = Environment.ProcessorCount + " 核", // CPU核心数
  32. SysRunTime = ComputerUtil.GetRunTime(), // 系统运行时间
  33. RemoteIp = ComputerUtil.GetIpFromPCOnline(), // 外网地址
  34. LocalIp = App.HttpContext?.Connection?.LocalIpAddress.ToString(), // 本地地址
  35. FrameworkDescription = RuntimeInformation.FrameworkDescription, // NET框架
  36. Environment = App.HostEnvironment.IsDevelopment() ? "Development" : "Production",
  37. };
  38. }
  39. /// <summary>
  40. /// 服务器内存信息
  41. /// </summary>
  42. /// <returns></returns>
  43. [HttpGet("/server/use")]
  44. public dynamic GetServerUsed()
  45. {
  46. var programStartTime = Process.GetCurrentProcess().StartTime;
  47. var programRunTime = DateTimeUtil.FormatTime((DateTime.Now - programStartTime).TotalMilliseconds.ToString().Split('.')[0].ParseToLong());
  48. var memoryMetrics = ComputerUtil.GetComputerInfo();
  49. return new
  50. {
  51. memoryMetrics.FreeRam, // 空闲内存
  52. memoryMetrics.UsedRam, // 已用内存
  53. memoryMetrics.TotalRam, // 总内存
  54. memoryMetrics.RamRate, // 内存使用率
  55. memoryMetrics.CpuRate, // Cpu使用率
  56. StartTime = programStartTime.ToString("yyyy-MM-dd HH:mm:ss"), // 服务启动时间
  57. RunTime = programRunTime, // 服务运行时间
  58. };
  59. }
  60. /// <summary>
  61. /// 服务器磁盘信息
  62. /// </summary>
  63. /// <returns></returns>
  64. [HttpGet("/server/disk")]
  65. public dynamic GetServerDisk()
  66. {
  67. return ComputerUtil.GetDiskInfos();
  68. }
  69. /// <summary>
  70. /// 框架主要程序集
  71. /// </summary>
  72. /// <returns></returns>
  73. [HttpGet("/server/assembly")]
  74. public dynamic GetAssembly()
  75. {
  76. var furionAssembly = typeof(App).Assembly.GetName();
  77. var sqlSugarAssembly = typeof(ISqlSugarClient).Assembly.GetName();
  78. var yitIdAssembly = typeof(Yitter.IdGenerator.YitIdHelper).Assembly.GetName();
  79. var redisAssembly = typeof(Redis).Assembly.GetName();
  80. var jsonAssembly = typeof(NewtonsoftJsonMvcCoreBuilderExtensions).Assembly.GetName();
  81. var excelAssembly = typeof(IExcelImporter).Assembly.GetName();
  82. var pdfAssembly = typeof(IPdfExporter).Assembly.GetName();
  83. var captchaAssembly = typeof(ICaptcha).Assembly.GetName();
  84. var wechatApiAssembly = typeof(WechatApiClient).Assembly.GetName();
  85. var wechatTenpayAssembly = typeof(WechatTenpayClient).Assembly.GetName();
  86. var ossAssembly = typeof(IOSSServiceFactory).Assembly.GetName();
  87. var parserAssembly = typeof(Parser).Assembly.GetName();
  88. var nestAssembly = typeof(IElasticClient).Assembly.GetName();
  89. var limitAssembly = typeof(IpRateLimitMiddleware).Assembly.GetName();
  90. return new[]
  91. {
  92. new { furionAssembly.Name, furionAssembly.Version },
  93. new { sqlSugarAssembly.Name, sqlSugarAssembly.Version },
  94. new { yitIdAssembly.Name, yitIdAssembly.Version },
  95. new { redisAssembly.Name, redisAssembly.Version },
  96. new { jsonAssembly.Name, jsonAssembly.Version },
  97. new { excelAssembly.Name, excelAssembly.Version },
  98. new { pdfAssembly.Name, pdfAssembly.Version },
  99. new { captchaAssembly.Name, captchaAssembly.Version },
  100. new { wechatApiAssembly.Name, wechatApiAssembly.Version },
  101. new { wechatTenpayAssembly.Name, wechatTenpayAssembly.Version },
  102. new { ossAssembly.Name, ossAssembly.Version },
  103. new { parserAssembly.Name, parserAssembly.Version },
  104. new { nestAssembly.Name, nestAssembly.Version },
  105. new { limitAssembly.Name, limitAssembly.Version },
  106. };
  107. }
  108. }