using IRaCIS.Core.Domain.Share; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration.Json; using IRaCIS.Core.Infrastructure.Extention; using SharpCompress.Common; using System.Text.Json; using System.Text.Json.Nodes; using System.Text.Encodings.Web; using Newtonsoft.Json.Linq; using Newtonsoft.Json; using IRaCIS.Core.Infrastructure; namespace IRaCIS.Core.Application.Service.Common { [ApiExplorerSettings(GroupName = "Common")] public class SystemMonitor : BaseService { public void GetDiskInfo() { // Get all drives var drives = DriveInfo.GetDrives(); // Loop through each drive and get info foreach (var drive in drives) { if (drive.IsReady && drive.DriveType == DriveType.Fixed) { long totalSize = drive.TotalSize; long availableSpace = drive.AvailableFreeSpace; long usedSpace = totalSize - availableSpace; double usedSpacePercent = (double)usedSpace / totalSize * 100; Console.WriteLine($"Drive {drive.Name}: Total size = {totalSize / (1024 * 1024)} MB, Available space = {availableSpace / (1024 * 1024)} MB, Used space = {usedSpace / (1024 * 1024)} MB ({usedSpacePercent:F2}%)"); } } } public string GetBestStoreDisk() { var json = File.ReadAllText("appsettings.json"); JObject jsonObject = JObject.Parse(json, new JsonLoadSettings() { CommentHandling = CommentHandling.Load }); int switchingRatio = 80; try { switchingRatio = (int)jsonObject["IRaCISImageStore"]["SwitchingRatio"]; } catch (Exception e) { //---解析Json文件配置出现问题 throw new BusinessValidationFailedException(_localizer["SysMon_JsonConfig"]+e.Message); } //默认存储的路径 var defaultStoreRootFolder = Path.Combine((Directory.GetParent(_hostEnvironment.ContentRootPath.TrimEnd('\\'))).IfNullThrowException().FullName, StaticData.Folder.IRaCISDataFolder); DriveInfo defaultDrive = new DriveInfo(Path.GetPathRoot(defaultStoreRootFolder)); var drives = DriveInfo.GetDrives().Where(t => !t.Name.Contains("C") && !t.Name.Contains("c")) .Where(d => d.DriveType == DriveType.Fixed && d.IsReady) //剩余空间最多的 .OrderByDescending(d => d.AvailableFreeSpace) //存储空间相同,则按照按照总空间从大到小排序 .ThenByDescending(d => d.TotalSize - d.TotalFreeSpace); var bestDrive = drives.FirstOrDefault(); var bestStoreRootFolder = string.Empty; //仅仅只有C 盘 if (bestDrive == null || ((double)(defaultDrive.TotalSize - defaultDrive.TotalFreeSpace) / defaultDrive.TotalSize) * 100 < switchingRatio) { bestStoreRootFolder = defaultStoreRootFolder; } else { bestStoreRootFolder = Path.Combine(bestDrive?.RootDirectory.FullName, _hostEnvironment.EnvironmentName); } //找到最优驱动器 DriveInfo drive = new DriveInfo(Path.GetPathRoot(bestStoreRootFolder)); //最优盘符使用率超过百分之80 if (((double)(drive.TotalSize - drive.TotalFreeSpace) / drive.TotalSize) * 100 > switchingRatio) { } if (!Directory.Exists(bestStoreRootFolder)) { Directory.CreateDirectory(bestStoreRootFolder); } return bestStoreRootFolder; } public class GeneralRule { public string Endpoint { get; set; } public string Period { get; set; } public int Limit { get; set; } } public void UpdateAppSettings(string key, string newValue) { List generalRules = new List() { new GeneralRule() { Endpoint = "*", Period = "1s", Limit = 3 }, new GeneralRule() { Endpoint = "*", Period = "15m", Limit = 100 }, new GeneralRule() { Endpoint = "*", Period = "12h", Limit = 1000 }, new GeneralRule() { Endpoint = "*", Period = "7d", Limit = 10000 } }; // 读取 Json 文件 string jsonFilePath = "appsettings.json"; var json = File.ReadAllText("appsettings.json"); JObject jsonObject = JObject.Parse(json, new JsonLoadSettings() { CommentHandling = CommentHandling.Load }); // 操作UpdateConfig对象 jsonObject["UpdateConfig"][key] = newValue; jsonObject["UpdateConfig"]["testArray"] = JArray.FromObject(generalRules); // 将更改保存回 Json 文件 File.WriteAllText(jsonFilePath, jsonObject.ToString()); } } }