147 lines
4.8 KiB
C#
147 lines
4.8 KiB
C#
using IRaCIS.Core.Application.Helper;
|
|
using IRaCIS.Core.Infrastructure;
|
|
using Microsoft.AspNetCore.Hosting;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
namespace IRaCIS.Core.Application.Service.Common
|
|
{
|
|
[ApiExplorerSettings(GroupName = "Common")]
|
|
public class SystemMonitor(IStringLocalizer _localizer, IWebHostEnvironment _hostEnvironment) : 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 = FileStoreHelper.GetIRaCISRootDataFolder(_hostEnvironment);
|
|
|
|
|
|
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<GeneralRule> generalRules = new List<GeneralRule>()
|
|
{
|
|
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());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
}
|