using Hangfire;
using Masuit.MyBlogs.Core.Common;
using Masuit.MyBlogs.Core.Common.Mails;
using Masuit.MyBlogs.Core.Extensions.Firewall;
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.DateTimeExt;
using Masuit.Tools.Logging;
using Masuit.Tools.Models;
using Masuit.Tools.Systems;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using System.Net;
using System.Text;
namespace Masuit.MyBlogs.Core.Controllers
{
///
/// 系统设置
///
public class SystemController : AdminController
{
///
/// 系统设置
///
public ISystemSettingService SystemSettingService { get; set; }
///
/// 获取历史性能计数器
///
///
public IActionResult GetCounterHistory()
{
var counters = PerfCounter.List.OrderBy(c => c.Time);
var list = counters.Count() < 5000 ? counters : counters.GroupBy(c => c.Time / 60000).Select(g => new PerformanceCounter
{
Time = g.Key * 60000,
CpuLoad = g.OrderBy(c => c.CpuLoad).Skip(1).Take(g.Count() - 2).Select(c => c.CpuLoad).DefaultIfEmpty().Average(),
DiskRead = g.OrderBy(c => c.DiskRead).Skip(1).Take(g.Count() - 2).Select(c => c.DiskRead).DefaultIfEmpty().Average(),
DiskWrite = g.OrderBy(c => c.DiskWrite).Skip(1).Take(g.Count() - 2).Select(c => c.DiskWrite).DefaultIfEmpty().Average(),
Download = g.OrderBy(c => c.Download).Skip(1).Take(g.Count() - 2).Select(c => c.Download).DefaultIfEmpty().Average(),
Upload = g.OrderBy(c => c.Upload).Skip(1).Take(g.Count() - 2).Select(c => c.Upload).DefaultIfEmpty().Average(),
MemoryUsage = g.OrderBy(c => c.MemoryUsage).Skip(1).Take(g.Count() - 2).Select(c => c.MemoryUsage).DefaultIfEmpty().Average()
});
return Ok(new
{
cpu = list.Select(c => new[]
{
c.Time,
c.CpuLoad.ToDecimal(2)
}),
mem = list.Select(c => new[]
{
c.Time,
c.MemoryUsage.ToDecimal(2)
}),
read = list.Select(c => new[]
{
c.Time,
c.DiskRead.ToDecimal(2)
}),
write = list.Select(c => new[]
{
c.Time,
c.DiskWrite.ToDecimal(2)
}),
down = list.Select(c => new[]
{
c.Time,
c.Download.ToDecimal(2)
}),
up = list.Select(c => new[]
{
c.Time,
c.Upload.ToDecimal(2)
})
});
}
///
/// 获取设置信息
///
///
public ActionResult GetSettings()
{
var list = SystemSettingService.GetAll().Select(s => new
{
s.Name,
s.Value
}).ToList();
return ResultData(list);
}
///
/// 保存设置
///
///
///
public async Task Save(string sets)
{
var settings = JsonConvert.DeserializeObject>(sets).ToArray();
var b = await SystemSettingService.AddOrUpdateSavedAsync(s => s.Name, settings) > 0;
var dic = settings.ToDictionary(s => s.Name, s => s.Value); //同步设置
foreach (var (key, value) in dic)
{
CommonHelper.SystemSettings.AddOrUpdate(key, value);
}
return ResultData(null, b, b ? "设置保存成功!" : "设置保存失败!");
}
///
/// 获取状态
///
///
public ActionResult GetStatus()
{
Array array = Enum.GetValues(typeof(Status));
var list = new List