using Common;
using Masuit.MyBlogs.Core.Extensions.Hangfire;
using Masuit.MyBlogs.Core.Hubs;
using Masuit.MyBlogs.Core.Infrastructure.Services.Interface;
using Masuit.MyBlogs.Core.Models.Entity;
using Masuit.MyBlogs.Core.Models.Enum;
using Masuit.Tools;
using Masuit.Tools.Hardware;
using Masuit.Tools.Logging;
using Masuit.Tools.Models;
using Masuit.Tools.Systems;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace Masuit.MyBlogs.Core.Controllers
{
///
/// 系统设置
///
public class SystemController : AdminController
{
///
/// 系统设置
///
public ISystemSettingService SystemSettingService { get; set; }
///
/// 系统设置
///
///
///
public SystemController(IUserInfoService userInfoService, ISystemSettingService systemSettingService)
{
UserInfoService = userInfoService;
SystemSettingService = systemSettingService;
}
///
/// 获取硬件基本信息
///
///
public ActionResult GetBaseInfo()
{
List cpuInfo = SystemInfo.GetCpuInfo();
RamInfo ramInfo = SystemInfo.GetRamInfo();
string osVersion = SystemInfo.GetOsVersion();
var total = new StringBuilder();
var free = new StringBuilder();
var usage = new StringBuilder();
SystemInfo.DiskTotalSpace().ForEach(kv =>
{
total.Append(kv.Key + kv.Value + " | ");
});
SystemInfo.DiskFree().ForEach(kv => free.Append(kv.Key + kv.Value + " | "));
SystemInfo.DiskUsage().ForEach(kv => usage.Append(kv.Key + kv.Value.ToString("P") + " | "));
IList mac = SystemInfo.GetMacAddress();
IList ips = SystemInfo.GetIPAddress();
var span = DateTime.Now - CommonHelper.StartupTime;
var boot = DateTime.Now - SystemInfo.BootTime();
return Json(new
{
runningTime = $"{span.Days}天{span.Hours}小时{span.Minutes}分钟",
bootTime = $"{boot.Days}天{boot.Hours}小时{boot.Minutes}分钟",
cpuInfo,
ramInfo,
osVersion,
diskInfo = new
{
total = total.ToString(),
free = free.ToString(),
usage = usage.ToString()
},
netInfo = new
{
mac,
ips
}
});
}
///
/// 获取历史性能计数器
///
///
public ActionResult GetHistoryList()
{
return Json(new
{
cpu = MyHub.PerformanceCounter.Select(c => new[]
{
c.Time,
c.CpuLoad
}),
mem = MyHub.PerformanceCounter.Select(c => new[]
{
c.Time,
c.MemoryUsage
}),
temp = MyHub.PerformanceCounter.Select(c => new[]
{
c.Time,
c.Temperature
}),
read = MyHub.PerformanceCounter.Select(c => new[]
{
c.Time,
c.DiskRead
}),
write = MyHub.PerformanceCounter.Select(c => new[]
{
c.Time,
c.DiskWrite
}),
down = MyHub.PerformanceCounter.Select(c => new[]
{
c.Time,
c.Download
}),
up = MyHub.PerformanceCounter.Select(c => new[]
{
c.Time,
c.Upload
}),
});
}
///
/// 获取设置信息
///
///
public ActionResult GetSettings()
{
var list = SystemSettingService.GetAll().Select(s => new
{
s.Name,
s.Value
}).ToList();
return ResultData(list);
}
///
/// 获取设置项
///
///
///
[AllowAnonymous]
public ActionResult GetSetting(string name)
{
var entity = SystemSettingService.GetFirstEntity(s => s.Name.Equals(name));
return ResultData(entity);
}
///
/// 保存设置
///
///
///
public ActionResult Save(string sets)
{
SystemSetting[] settings = JsonConvert.DeserializeObject>(sets).ToArray();
ConcurrentDictionary> dic = new ConcurrentDictionary>();
settings.FirstOrDefault(s => s.Name.Equals("DenyArea"))?.Value.Split(',', ',').ForEach(area =>
{
if (CommonHelper.DenyAreaIP.TryGetValue(area, out var hs))
{
dic[area] = hs;
}
else
{
dic[area] = new HashSet();
}
});
CommonHelper.DenyAreaIP = dic;
System.IO.File.WriteAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data", "denyareaip.txt"), CommonHelper.DenyAreaIP.ToJsonString(), Encoding.UTF8);
foreach (var set in settings)
{
var entry = SystemSettingService.GetFirstEntity(s => s.Name.Equals(set.Name));
if (entry is null)
{
SystemSettingService.AddEntity(set);
}
else
{
entry.Value = set.Value;
SystemSettingService.UpdateEntity(entry);
}
}
var b = SystemSettingService.SaveChanges() > 0;
CommonHelper.SystemSettings = SystemSettingService.GetAll().ToDictionary(s => s.Name, s => s.Value); //同步设置
return ResultData(null, b, b ? "设置保存成功!" : "设置保存失败!");
}
///
/// 获取状态
///
///
public ActionResult GetStatus()
{
Array array = Enum.GetValues(typeof(Status));
var list = new List