From e77c7fa2df80c3d17aaa1b37332a1d44e47d1f91 Mon Sep 17 00:00:00 2001 From: niyyzf Date: Sat, 29 Jun 2024 18:16:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LoongPanel-Asp.sln | 6 - LoongPanel-Asp.sln.DotSettings.user | 1 + LoongPanel-Asp/ApplicationDbContext.cs | 28 +- .../4503e3c7-94c6-4ea7-acfc-d503031504fa.ini | 3 + LoongPanel-Asp/Configs/alert.ini | 2 - LoongPanel-Asp/Configs/jobs.ini | 10 +- LoongPanel-Asp/Configs/servers.ini | 12 +- .../Controllers/AccountController.cs | 146 +- .../Controllers/PublicFileController.cs | 37 + .../Controllers/ServerController.cs | 312 +- LoongPanel-Asp/Helpers/DataHelper.cs | 37 +- LoongPanel-Asp/Helpers/JobConfigHelper.cs | 112 +- LoongPanel-Asp/Hubs/SessionHub.cs | 3 - LoongPanel-Asp/Hubs/TerminalHub.cs | 36 + LoongPanel-Asp/Init.cs | 62 + LoongPanel-Asp/Jobs/CpuJob.cs | 26 +- LoongPanel-Asp/Jobs/DiskJob.cs | 14 +- LoongPanel-Asp/Jobs/MemoryJob.cs | 2 +- LoongPanel-Asp/Jobs/NetworkJob.cs | 2 +- LoongPanel-Asp/Jobs/ProcessJob.cs | 8 +- LoongPanel-Asp/Jobs/UserJob.cs | 71 + LoongPanel-Asp/LoongPanel-Asp.csproj | 6 +- LoongPanel-Asp/LoongPanel-Asp.csproj.user | 6 +- .../Middlewares/ApiPermissionMiddleware.cs | 11 +- .../Middlewares/PermissionMiddleware.cs | 6 + LoongPanel-Asp/Models/AccountModel.cs | 9 +- LoongPanel-Asp/Program.cs | 17 +- LoongPanel-Asp/Servers/SSHService.cs | 2 +- LoongPanel-Asp/Servers/SSHStreamService.cs | 112 + .../UserConfigs/Layouts/default.json | 318 +- LoongPanel-Asp/appsettings.json | 17 +- .../markdowns/templates/巡检模板1.md | 31 + LoongPanel-Asp/my.pfx | Bin 0 -> 2691 bytes web/.env | 2 +- web/app.vue | 1 + web/base.scss | 2 + web/bun.lockb | Bin 0 -> 509790 bytes web/components/AddCard.vue | 4 +- web/components/Cards/ICard.vue | 4 +- web/components/Cards/IChart.vue | 4 +- web/components/Cards/MiniCard.vue | 12 +- web/components/Charts/AreaChart2.vue | 244 + web/components/DocIcons/word.vue | 56 + web/components/MarkdownEdit.vue | 175 + web/components/ServerUserPage/UserList.vue | 137 + web/components/Term.vue | 85 +- web/components/UserPage/UserItem.vue | 8 +- web/components/UserPage/UserPageAddUser.vue | 220 + web/components/UserPage/UserPageBar.vue | 29 +- web/components/XScroll.vue | 3 +- web/components/shell/FloaterBar.vue | 4 - web/components/shell/SideBar.vue | 20 +- web/components/shell/TitleBar.vue | 1 + web/layouts/Main.vue | 70 +- web/localhost+3-key.pem | 28 + web/localhost+3.pem | 26 + web/nuxt.config.ts | 8 +- web/package.json | 1 + web/pages/SignIn.vue | 6 +- web/pages/host.vue | 50 +- web/pages/host/cpu.vue | 268 +- web/pages/host/disk/[[id]].vue | 162 +- web/pages/host/gpu/[[id]].vue | 11 - web/pages/host/memory.vue | 277 +- web/pages/host/network/[[id]].vue | 198 +- web/pages/host/networkList.vue | 216 + web/pages/host/process.vue | 223 + web/pages/inspectionRecords.vue | 304 + web/pages/serverUser.vue | 113 + web/pages/serverUser/[[id]].vue | 63 + web/pages/userInfo/[[id]].vue | 98 + web/public/audios/audio_0a383a4c11.mp3 | Bin 0 -> 6144 bytes web/yarn.lock | 8642 ----------------- 73 files changed, 3401 insertions(+), 9839 deletions(-) create mode 100644 LoongPanel-Asp/Configs/Alerts/4503e3c7-94c6-4ea7-acfc-d503031504fa.ini delete mode 100644 LoongPanel-Asp/Configs/alert.ini create mode 100644 LoongPanel-Asp/Controllers/PublicFileController.cs create mode 100644 LoongPanel-Asp/Hubs/TerminalHub.cs create mode 100644 LoongPanel-Asp/Init.cs create mode 100644 LoongPanel-Asp/Jobs/UserJob.cs create mode 100644 LoongPanel-Asp/Servers/SSHStreamService.cs create mode 100644 LoongPanel-Asp/markdowns/templates/巡检模板1.md create mode 100644 LoongPanel-Asp/my.pfx create mode 100644 web/bun.lockb create mode 100644 web/components/Charts/AreaChart2.vue create mode 100644 web/components/DocIcons/word.vue create mode 100644 web/components/MarkdownEdit.vue create mode 100644 web/components/ServerUserPage/UserList.vue create mode 100644 web/components/UserPage/UserPageAddUser.vue create mode 100644 web/localhost+3-key.pem create mode 100644 web/localhost+3.pem delete mode 100644 web/pages/host/gpu/[[id]].vue create mode 100644 web/pages/host/networkList.vue create mode 100644 web/pages/host/process.vue create mode 100644 web/pages/inspectionRecords.vue create mode 100644 web/pages/serverUser.vue create mode 100644 web/pages/serverUser/[[id]].vue create mode 100644 web/pages/userInfo/[[id]].vue create mode 100644 web/public/audios/audio_0a383a4c11.mp3 delete mode 100644 web/yarn.lock diff --git a/LoongPanel-Asp.sln b/LoongPanel-Asp.sln index 6aa2584..6d3584a 100755 --- a/LoongPanel-Asp.sln +++ b/LoongPanel-Asp.sln @@ -2,8 +2,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LoongPanel-Asp", "LoongPanel-Asp\LoongPanel-Asp.csproj", "{3AED83DF-9EF2-4AC6-BDBC-6E1C9D823405}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pty.Net", "PtyTerminal\Pty.Net\Pty.Net.csproj", "{FEE728E2-BD7E-49C5-BC52-A9AE66D84DD5}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -14,9 +12,5 @@ Global {3AED83DF-9EF2-4AC6-BDBC-6E1C9D823405}.Debug|Any CPU.Build.0 = Debug|Any CPU {3AED83DF-9EF2-4AC6-BDBC-6E1C9D823405}.Release|Any CPU.ActiveCfg = Release|Any CPU {3AED83DF-9EF2-4AC6-BDBC-6E1C9D823405}.Release|Any CPU.Build.0 = Release|Any CPU - {FEE728E2-BD7E-49C5-BC52-A9AE66D84DD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FEE728E2-BD7E-49C5-BC52-A9AE66D84DD5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FEE728E2-BD7E-49C5-BC52-A9AE66D84DD5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FEE728E2-BD7E-49C5-BC52-A9AE66D84DD5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/LoongPanel-Asp.sln.DotSettings.user b/LoongPanel-Asp.sln.DotSettings.user index 6fb4815..c1ff35d 100755 --- a/LoongPanel-Asp.sln.DotSettings.user +++ b/LoongPanel-Asp.sln.DotSettings.user @@ -1,4 +1,5 @@  + True <AssemblyExplorer> <Assembly Path="C:\Users\niyyz\.nuget\packages\czgl.systeminfo\2.2.0\lib\net7.0\CZGL.SystemInfo.dll" /> </AssemblyExplorer> \ No newline at end of file diff --git a/LoongPanel-Asp/ApplicationDbContext.cs b/LoongPanel-Asp/ApplicationDbContext.cs index f23ab78..b73234e 100755 --- a/LoongPanel-Asp/ApplicationDbContext.cs +++ b/LoongPanel-Asp/ApplicationDbContext.cs @@ -1,4 +1,5 @@ using System.ComponentModel.DataAnnotations; +using System.Security.Cryptography; using System.Text.Json; using LoongPanel_Asp.Models; using LoongPanel_Asp.utils; @@ -88,7 +89,7 @@ public class ApplicationDbContext(DbContextOptions options InitializeRoles(modelBuilder); } - private static void InitializeRoles(ModelBuilder modelBuilder) + private void InitializeRoles(ModelBuilder modelBuilder) { string[] roleNames = ["Admin", "User"]; @@ -114,12 +115,11 @@ public class ApplicationDbContext(DbContextOptions options Name = roleName, NormalizedName = roleName.ToUpperInvariant(), ApiPermissions = - ["1","2,","3","4","5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20"], - RouterPermissions = ["1", "2", "3", "4"] + ["1","2","3","4","5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20","21","22","23","24","25","26","27","28","29","30"], + RouterPermissions = ["1", "2", "3", "4","5","6","7","8","9","10","11","12","13","14"] }); } - - + var apiRouterPermissions = ControllerScanner.GetApiPermissions(); foreach (var permission in apiRouterPermissions) @@ -133,14 +133,23 @@ public class ApplicationDbContext(DbContextOptions options //创建列表 {name:"主页",rote:"/Home"} List rotePermissions = [ - new RotePermission { Id = 1, Name = "主页", Router = "/Home" }, - new RotePermission { Id = 2, Name = "用户", Router = "/User" }, - new RotePermission { Id = 3, Name = "cpu", Router = "/Host/Cpu" }, - new RotePermission { Id = 4, Name = "内存", Router = "/Host/Memory" } + new RotePermission { Id = 1, Name = "主页", Router = "/home" }, + new RotePermission { Id = 2, Name = "用户", Router = "^/user+$" }, + new RotePermission { Id = 3, Name = "cpu", Router = "/host/cpu" }, + new RotePermission { Id = 4, Name = "内存", Router = "/host/memory" }, + new RotePermission { Id = 5, Name = "磁盘", Router = "^/host/disk/.+$" }, + new RotePermission { Id = 6, Name = "网络设备", Router = "^/host/network/.+$" }, + new RotePermission { Id = 7, Name = "Gpu", Router = "^/host/gpu/.+$" }, + new RotePermission { Id = 8, Name = "用户详细", Router = "^/userinfo/.+$" }, + new RotePermission { Id = 9, Name = "用户监测", Router = "^/serveruser/.+$" }, + new RotePermission { Id = 10, Name = "进程列表", Router = "/host/process" }, + new RotePermission { Id = 11, Name = "网络连接列表", Router = "/host/networklist" }, + new RotePermission { Id = 12, Name = "巡检记录", Router = "/inspectionrecords" }, ]; foreach (var permission in rotePermissions) modelBuilder.Entity().HasData(permission); } + } public class ApplicationUser : IdentityUser @@ -151,7 +160,6 @@ public class ApplicationUser : IdentityUser [MaxLength(255)] public string? Desc { get; set; } - //职位 [MaxLength(255)] public required string Posts { get; set; } [MaxLength(255)] public string? Address { get; set; } diff --git a/LoongPanel-Asp/Configs/Alerts/4503e3c7-94c6-4ea7-acfc-d503031504fa.ini b/LoongPanel-Asp/Configs/Alerts/4503e3c7-94c6-4ea7-acfc-d503031504fa.ini new file mode 100644 index 0000000..6a7ffec --- /dev/null +++ b/LoongPanel-Asp/Configs/Alerts/4503e3c7-94c6-4ea7-acfc-d503031504fa.ini @@ -0,0 +1,3 @@ +[CpuTotalUsage_d3YT] +Notify=20 +Warning=30 \ No newline at end of file diff --git a/LoongPanel-Asp/Configs/alert.ini b/LoongPanel-Asp/Configs/alert.ini deleted file mode 100644 index 013ac4e..0000000 --- a/LoongPanel-Asp/Configs/alert.ini +++ /dev/null @@ -1,2 +0,0 @@ -[CpuTotalUsage] -Value=80 \ No newline at end of file diff --git a/LoongPanel-Asp/Configs/jobs.ini b/LoongPanel-Asp/Configs/jobs.ini index 8979c78..06ba629 100755 --- a/LoongPanel-Asp/Configs/jobs.ini +++ b/LoongPanel-Asp/Configs/jobs.ini @@ -68,4 +68,12 @@ ValueName = 网络总使用率 Description = A simple job that uses the Network JobType = LoongPanel_Asp.Jobs.NetworkTotalJob, LoongPanel-Asp Executor = d3YT,xseg -CronExpression = 3/15 * * * * ? * \ No newline at end of file +CronExpression = 3/15 * * * * ? * + +[UserTotalJob] +Group = User +ValueName = 分用户总使用 +Description = A simple job that uses the Network +JobType = LoongPanel_Asp.Jobs.UserTotalJob, LoongPanel-Asp +Executor = d3YT,xseg +CronExpression = 5/15 * * * * ? * \ No newline at end of file diff --git a/LoongPanel-Asp/Configs/servers.ini b/LoongPanel-Asp/Configs/servers.ini index bf3fd32..6264983 100644 --- a/LoongPanel-Asp/Configs/servers.ini +++ b/LoongPanel-Asp/Configs/servers.ini @@ -2,14 +2,14 @@ address = 192.168.0.26 port = 22 serverName = 龙芯 -password = loongnix -username = loongnix +password = loongpanel +username = loongpanel https = false [xseg] -address = 127.0.0.1 +address = 129.204.245.145 port = 22 -serverName = 本机 -password = 123123 -username = zwb +serverName = 远端debian +password = loongpanel +username = loongpanel https = false \ No newline at end of file diff --git a/LoongPanel-Asp/Controllers/AccountController.cs b/LoongPanel-Asp/Controllers/AccountController.cs index a38f2fc..73d5dda 100755 --- a/LoongPanel-Asp/Controllers/AccountController.cs +++ b/LoongPanel-Asp/Controllers/AccountController.cs @@ -18,141 +18,43 @@ public class AccountController( ILiteDatabase db) : ControllerBase { - [HttpPost("SendVerificationCode")] - public async Task SendVerificationCode([FromBody] EmailModel model) - { - if (!ModelState.IsValid) return BadRequest(ModelState); - - try - { - var code = emailHelper.GenerateVerificationCode(); - Console.WriteLine(code); - await emailHelper.SendVerificationEmailAsync(model.Email, code); - - // 生成过期时间 5分钟 - var expireTime = DateTime.Now.AddMinutes(5); - var col = db.GetCollection("EmailCode"); - var userCode = new EmailCode - { - Email = model.Email, - Code = code, - ExpireTime = expireTime - }; - - col.EnsureIndex(x => x.Email, true); - - // 使用 Upsert 来插入或更新验证码记录 - col.DeleteMany(x => x.Email == model.Email); - col.Insert(userCode); - - // 注册成功,返回一个合适的响应 - return Ok("Registration successful. Please check your email for the verification code."); - } - catch (Exception ex) - { - // Log the exception - Console.WriteLine(ex.Message); - // 返回一个错误响应 - return StatusCode(StatusCodes.Status500InternalServerError, - $"An error occurred while processing your request.{ex.Message}"); - } - } - [HttpPost("Register")] public async Task Register([FromBody] RegisterModel model) { - if (!ModelState.IsValid) return BadRequest(new ApiResponse(ApiResponseState.Error, "Invalid request")); - + if (!ModelState.IsValid) return BadRequest("错误的请求"); try { - // 获取code,email - var col = db.GetCollection("EmailCode"); - // 使用email查询 - var userCode = col.FindOne(x => x.Email == model.Email); - // 判断结果 - if (userCode == null) return BadRequest(new ApiResponse(ApiResponseState.Error, "Code not found")); - - if (userCode.Code != model.Code) - return BadRequest(new ApiResponse(ApiResponseState.Error, "Code does not match")); - - // 判断是否过期 - if (userCode.ExpireTime < DateTime.Now) - return BadRequest(new ApiResponse(ApiResponseState.Error, "Code expired")); - - // 注册用户 - if (HttpContext.RequestServices.GetService(typeof(UserManager)) is not - UserManager manager) - return StatusCode(StatusCodes.Status500InternalServerError, - new ApiResponse(ApiResponseState.Error, "UserManager not found")); - - var user = new ApplicationUser + //判断用户名,邮箱是否唯一 + var user = await userManager.FindByNameAsync(model.UserName); + if (user != null) return BadRequest("用户名已存在"); + + //创建用户 + user = new ApplicationUser { - UserName = model.UserName, - Email = model.Email, - PhoneNumber = model.Phone, - NickName = model.NickName, - EmailConfirmed = true, - Avatar = $"https://api.multiavatar.com/{model.UserName}.svg", - Posts = "员工", + Posts = model.Position, CreateDate = DateTime.UtcNow, - ModifiedDate = DateTime.UtcNow + ModifiedDate = DateTime.UtcNow, + Email = model.Email, + UserName = model.UserName, + PhoneNumber = model.Phone, + NickName = model.FullName, }; - - var result = await manager.CreateAsync(user, model.Password); - // 验证成功,删除验证码 - col.DeleteMany(x => x.Email == model.Email); - - if (!result.Succeeded) - return BadRequest(new ApiResponse(ApiResponseState.Error, "User creation failed", null, result.Errors)); - - // 添加用户角色 - if (HttpContext.RequestServices.GetService(typeof(RoleManager)) is not - RoleManager roleManager) - { - // 如果角色管理器不存在,删除刚刚创建的用户 - await manager.DeleteAsync(user); - return StatusCode(StatusCodes.Status500InternalServerError, - new ApiResponse(ApiResponseState.Error, "RoleManager not found")); - } - - var roleResult = await manager.AddToRoleAsync(user, "user"); - - if (!roleResult.Succeeded) - { - // 如果角色分配失败,删除刚刚创建的用户 - await manager.DeleteAsync(user); - return BadRequest(new ApiResponse(ApiResponseState.Error, "Role assignment failed", null, - roleResult.Errors)); - } - - // 用户注册成功 - return Ok(new ApiResponse(ApiResponseState.Success, "User registered successfully")); + var result = await userManager.CreateAsync(user, model.Password); + if (!result.Succeeded) return BadRequest("无法创建用户,"+string.Join(",",result.Errors.ToList().Select(e=>e.Description))); + + //添加用户到默认角色 + result = await userManager.AddToRoleAsync(user, model.Role); + if (!result.Succeeded) return BadRequest("无法创建用户,"+string.Join(",",result.Errors.ToList().Select(e=>e.Description))); + return Ok("用户创建成功"); } - catch (Exception ex) + catch (Exception e) { - // Log the exception - Console.WriteLine(ex.Message); - return StatusCode(StatusCodes.Status500InternalServerError, - "An error occurred while processing your request."); + Console.WriteLine(e); + throw; } } - - [HttpPost("VerifyEmailName")] - public async Task VerifyEmailName([FromBody] VerifyEmailNameModel model) - { - if (!ModelState.IsValid) return BadRequest(new ApiResponse(ApiResponseState.Error, "Invalid request", null)); - - var user = await userManager.FindByEmailAsync(model.Email); - - if (user != null) return Ok(new ApiResponse(ApiResponseState.Error, "Email already exists", null)); - - var userName = await userManager.FindByNameAsync(model.UserName); - - if (userName != null) return Ok(new ApiResponse(ApiResponseState.Error, "UserName already exists", null)); - - return Ok(new ApiResponse(ApiResponseState.Success, "Email and UserName are available", null)); - } + [HttpPost("Login")] public async Task Login([FromBody] LoginModel model) diff --git a/LoongPanel-Asp/Controllers/PublicFileController.cs b/LoongPanel-Asp/Controllers/PublicFileController.cs new file mode 100644 index 0000000..0a862fe --- /dev/null +++ b/LoongPanel-Asp/Controllers/PublicFileController.cs @@ -0,0 +1,37 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.Net.Http.Headers; + +namespace LoongPanel_Asp.Controllers; + +[ApiController] +[Route("Api/[controller]")] +public class PublicFileController(IWebHostEnvironment webHostEnvironment) : ControllerBase +{ + [HttpPost("UploadImage")] + public async Task UploadImage(IFormFile? file) + { + if (file == null || file.Length == 0) + { + return BadRequest("文件不能为空"); + } + var allowedExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif" }; + var extension = Path.GetExtension(file.FileName).ToLowerInvariant(); + Console.WriteLine(extension); + if (!allowedExtensions.Contains(extension)) + { + return BadRequest("不支持的文件类型"); + } + var uploadsFolderPath = Path.Combine(webHostEnvironment.WebRootPath, "public/image"); + if (!Directory.Exists(uploadsFolderPath)) + { + Directory.CreateDirectory(uploadsFolderPath); + } + + var uniqueFileName = $"{Guid.NewGuid()}{extension}"; + var filePath = Path.Combine(uploadsFolderPath, uniqueFileName); + await using var stream = new FileStream(filePath, FileMode.Create); + await file.CopyToAsync(stream); + var fileUrl = $"/public/image/{uniqueFileName}"; + return Ok(new { fileUrl }); + } +} \ No newline at end of file diff --git a/LoongPanel-Asp/Controllers/ServerController.cs b/LoongPanel-Asp/Controllers/ServerController.cs index 2e33789..f8568bd 100755 --- a/LoongPanel-Asp/Controllers/ServerController.cs +++ b/LoongPanel-Asp/Controllers/ServerController.cs @@ -1,5 +1,7 @@ using System.Collections.Concurrent; using System.Collections.Specialized; +using System.Dynamic; +using System.Globalization; using System.Net; using System.Net.Sockets; using System.Text; @@ -7,6 +9,7 @@ using System.Text.RegularExpressions; using LoongPanel_Asp.Helpers; using LoongPanel_Asp.Models; using LoongPanel_Asp.Servers; +using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; @@ -187,8 +190,8 @@ public class ServerController(IServiceProvider serviceProvider, ApplicationDbCon var serverConfigs = JobConfigHelper.GetServers().ToList(); var server = serverConfigs.Find(x =>x.Id == serverId); if (server == null) return BadRequest(); - var output = await sshClient?.ExecuteCommandAsync(serverId,$"echo {server.Password}","|","sudo -S fdisk -l","|","grep 'Disk /'","|","awk '{print $2,$3}'")!; - if (string.IsNullOrEmpty(output)) return BadRequest(); + var output = await sshClient?.ExecuteCommandAsync(serverId,$"echo {server.Password}","|","sudo -S /usr/sbin/fdisk -l","|","grep 'Disk /'","|","awk '{print $2,$3}'")!; + if (string.IsNullOrEmpty(output)) return BadRequest(output); var diskList = output.Split("\n", StringSplitOptions.RemoveEmptyEntries); var outList = diskList.Select(disk => disk.Split(":", StringSplitOptions.RemoveEmptyEntries)).Select(info => new { name = info[0], size = info[1] }).ToList(); return Ok(outList); @@ -206,6 +209,19 @@ public class ServerController(IServiceProvider serviceProvider, ApplicationDbCon var data = output.Split('\n', StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()).ToList(); return Ok(data); } + [HttpGet("GetServerNetworkEquipmentInfo")] + public async Task GetServerNetworkEquipmentInfo([FromQuery] string serverId,[FromQuery] string networkId) + { + var sshClient = serviceProvider.GetService(); + var serverConfigs = JobConfigHelper.GetServers().ToList(); + var server = serverConfigs.Find(x =>x.Id == serverId); + if (server == null) return BadRequest(); + var output = await sshClient?.ExecuteCommandAsync(serverId,"/usr/sbin/ifconfig",networkId)!; + if (string.IsNullOrEmpty(output)) return BadRequest(); + output = string.Join(" ", output.Split("\n", StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim())); + var data = output.Split(" ", StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()).Skip(1).ToList(); + return Ok(data); + } [HttpGet("GetServerGpuList")] public async Task GetServerGpuList([FromQuery] string serverId) { @@ -226,9 +242,19 @@ public class ServerController(IServiceProvider serviceProvider, ApplicationDbCon var serverConfigs = JobConfigHelper.GetServers().ToList(); var server = serverConfigs.Find(x =>x.Id == serverId); if (server == null) return BadRequest(); + var type = "ata"; + if (diskId.StartsWith("nvme")) type = "nvme"; + else if (diskId.StartsWith("vd")) type = "ata"; + else if (diskId.StartsWith("sd")) type = "ata"; + else if (diskId.StartsWith("hd")) type = "ata"; diskId = $"/dev/{diskId}"; - var output = await sshClient?.ExecuteCommandAsync(serverId,$"echo '{server.Password}'","|","sudo -S","smartctl -i",diskId,"-T permissive","|","awk 'NR>4'")!; - if (string.IsNullOrEmpty(output)) return BadRequest(); + var output = await sshClient?.ExecuteCommandAsync(serverId,$"echo '{server.Password}'","|","sudo -S","/usr/sbin/smartctl -i",diskId,$"-d {type}","-T permissive","2>/dev/null","|","awk 'NR>4'")!; + if (string.IsNullOrEmpty(output)) return BadRequest(output); + if (output.Contains("=== START OF INFORMATION SECTION ===")) + { + //截断 + output = output.Substring(output.IndexOf("=== START OF INFORMATION SECTION ===", StringComparison.Ordinal) + "=== START OF INFORMATION SECTION ===".Length); + } var diskInfo = output .Split('\n', StringSplitOptions.RemoveEmptyEntries) .Select(line => line.Trim().Split(':')) @@ -240,34 +266,238 @@ public class ServerController(IServiceProvider serviceProvider, ApplicationDbCon return Ok(diskInfo); } - [HttpGet("GetServerTerminalPath")] - public async Task GetServerTerminalPath([FromQuery] string serverId) + [HttpGet("GetServerUserList")] + public async Task GetServerUserList([FromQuery] string serverId) { - var serverConfig = JobConfigHelper.GetServers().Find(x => x.Id == serverId); - if (serverConfig == null) return BadRequest(); - //获得本机ip - string? localIp; - using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0)) + var sshClient = serviceProvider.GetService(); + var serverConfigs = JobConfigHelper.GetServers().ToList(); + var server = serverConfigs.Find(x =>x.Id == serverId); + if (server == null) return BadRequest(); + var output = await sshClient?.ExecuteCommandAsync(serverId,"awk -F: '$1 != \"nobody\" && $1 != \"build\" && $3 >= 1000 {print $1}'","/etc/passwd")!; + if (string.IsNullOrEmpty(output)) return BadRequest("无法获得用户树"); + var data = output.Split('\n', StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()).ToList(); + output = await sshClient?.ExecuteCommandAsync(serverId,"w -husf","|"," awk '$2 !~ /^tty/ {print$1, $2}'"," |"," sort ","|"," uniq")!; + var onlineList = output.Split('\n', StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()).ToList(); + output = await sshClient?.ExecuteCommandAsync(serverId,"lastlog | awk 'NR > 1 { if ($2 ~ /^**Never/) {print $1, \"-\",\"NULL\"} else {print $1,$2, substr($0,index($0,$3))}}' ")!; + if (string.IsNullOrEmpty(output)) return BadRequest("无法获得用户登录记录"); + var loginList = output.Split('\n', StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()).ToList(); + var serverUserList = new List(); + data.ForEach(x => { - await socket.ConnectAsync("8.8.8.8", 65530); - var endPoint = socket.LocalEndPoint as IPEndPoint; - localIp = endPoint?.Address.ToString(); + var d = new ServerUserInfo + { + Name = x, + IsOnline = false, + LastLoginTime = null, + Port = null, + Address = "::1" + }; + serverUserList.Add(d); + }); + + onlineList.ForEach(x => + { + var line = x.Split(' ', StringSplitOptions.RemoveEmptyEntries).ToList(); + var d = serverUserList.Find(y => y.Name == line[0]); + if (d == null) return; + d.IsOnline = true; + d.Address = line[1]; + }); + + loginList.ForEach(x => + { + var len = x.Split(' ', StringSplitOptions.RemoveEmptyEntries).ToList(); + var name = len[0]; + var d = serverUserList.Find(y => y.Name == name); + if(d==null) return; + var port = len[1]; + var time = string.Join(" ",len.Skip(2).ToList()); + if (time != "NULL") + { + DateTimeOffset.TryParseExact(time, + "ddd MMM d HH:mm:ss zzz yyyy", + CultureInfo.InvariantCulture, + DateTimeStyles.None, + out var dateTimeOffset); + time = dateTimeOffset.ToString("G"); + } + d.LastLoginTime = time; + d.Port = port; + }); + serverUserList = serverUserList.OrderByDescending(x => x.IsOnline).ThenByDescending(x => x.LastLoginTime).ToList(); + return Ok(serverUserList); + } + + + [HttpGet("GetServerProcessesList")] + public async Task GetServerProcessesList([FromQuery] string serverId,[FromQuery] string? userName) + { + var sshClient = serviceProvider.GetService(); + var serverConfigs = JobConfigHelper.GetServers().ToList(); + var server = serverConfigs.Find(x => x.Id == serverId); + if (server == null) return BadRequest(); + var output = await sshClient?.ExecuteCommandAsync(serverId, + "ps -eo pid,user,%cpu,%mem,comm --sort=-%cpu | awk 'NR>1'",userName!=null?$"| grep {userName}":"" )!; + var data = output.Split("\n", StringSplitOptions.RemoveEmptyEntries); + var processList = data.Select(x => + { + x=x.Trim(); + var line = x.Split(' ', StringSplitOptions.RemoveEmptyEntries).ToList(); + return new + { + Pid=line[0], + User = line[1], + Cpu=line[2], + Memory=line[3], + ProcessName=string.Join(" ",line.Skip(4)) + }; + }).ToList(); + return Ok(processList); + } + + [HttpGet("GetServerProcessesKill")] + public async Task GetServerProcessesKill([FromQuery] string serverId, [FromQuery] string pid,[FromQuery] bool force=false) + { + var sshClient = serviceProvider.GetService(); + var serverConfigs = JobConfigHelper.GetServers().ToList(); + var server = serverConfigs.Find(x => x.Id == serverId); + if (server == null) return BadRequest(); + var output = await sshClient?.ExecuteCommandAsync(serverId, + $"echo {server.Password}","|","sudo -SS","kill",force?"-9":"-15",pid )!; + return Ok($"关闭信号已发送,{output}"); + } + [HttpGet("GetServerNetworkList")] + public async Task GetServerNetworkList([FromQuery] string serverId, [FromQuery] string? userName) + { + var sshClient = serviceProvider.GetService(); + var serverConfigs = JobConfigHelper.GetServers().ToList(); + var server = serverConfigs.Find(x => x.Id == serverId); + if (server == null) return BadRequest(); + var output = await sshClient?.ExecuteCommandAsync(serverId, + $"echo {server.Password}","|","sudo -S ss -tunapo")!; + if (string.IsNullOrEmpty(output)) return BadRequest("返回为空"); + try + { + var data = output.Split("\n", StringSplitOptions.RemoveEmptyEntries) + .Skip(1) // 跳过第一行 + .Select(x => x.Trim()) + .Select(x => x.Split(' ', StringSplitOptions.RemoveEmptyEntries)) + .Where(x => x.Length != 7).ToList(); + + var networkList = data.Select(x => new + { + netId=x[0], + recvQ=x[2], + sendQ=x[3], + addressForm=x[4], + addressTo=x[5], + process=x[6].Split("),(",StringSplitOptions.RemoveEmptyEntries).Select(s=>new + { + name=s.Split(",")[0].Replace("users:((\"","").Replace("\"",""), + pid=s.Split(",")[1].Split("=",StringSplitOptions.RemoveEmptyEntries)[1] + }) + }); + return Ok(networkList); } - //拼接网络路径 - var uriBuilder = new UriBuilder + catch (Exception e) { - Scheme = "http", - Host = localIp, - Port = 8888, - }; - var query = System.Web.HttpUtility.ParseQueryString(uriBuilder.Query); - query["hostname"]=serverConfig.Address; - query["username"] = serverConfig.Username; - query["password"] = Convert.ToBase64String(Encoding.UTF8.GetBytes(serverConfig.Password)); - query["port"] = serverConfig.Port.ToString(); - uriBuilder.Query = query.ToString(); - var url = uriBuilder.Uri.ToString(); - return Ok(url); + return BadRequest(e.Message); + } + } + + [HttpPost("UpLoadWord")] + public async Task UpLoadWord( + [FromQuery] string serverId, + [FromQuery] string userName, + [FromQuery] string wordId, + [FromBody] WordModel content) + { + // 拼接路径 markdowns/ServerId/id.json + var path = Path.Combine(AppContext.BaseDirectory,"markdowns",serverId, $"{wordId}.json"); + var createAt=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + var lastModifyAt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + var directoryPath = Path.GetDirectoryName(path); + + if (!Directory.Exists(directoryPath)) + { + // 不存在则创建目录 + if (directoryPath != null) Directory.CreateDirectory(directoryPath); + } + + // 检查文件是否存在 + if (System.IO.File.Exists(path)) + { + // 读取现有JSON文件 + var json = await System.IO.File.ReadAllTextAsync(path); + // 反序列化JSON为动态对象 + dynamic existingWord = Newtonsoft.Json.JsonConvert.DeserializeObject(json) ?? new ExpandoObject();; + + // 使用内部的createAt更新createAt + createAt = existingWord.createAt; + } + + + // 创建新的配置对象 + var newWord = new WordFileModel + { + UserName = userName, + WordId = wordId, + Content = content.Content, + WordName = content.Name, + CreateAt = createAt, + LastModifyAt = lastModifyAt + }; + // 将新的配置对象序列化为JSON + var newJson = Newtonsoft.Json.JsonConvert.SerializeObject(newWord); + + // 覆盖写入新的JSON配置 + await System.IO.File.WriteAllTextAsync(path, newJson); + + // 返回成功响应 + return Ok("文件已经保存"); + } + + [HttpGet("GetWordList")] + public async Task GetWordList([FromQuery] string serverId) + { + var path = Path.Combine(AppContext.BaseDirectory, "markdowns", serverId); + var files = Directory.GetFiles(path); + var wordList = new List(); + foreach (var file in files) + { + var fileInfo = new FileInfo(file); + var json = await System.IO.File.ReadAllTextAsync(file); + var word = Newtonsoft.Json.JsonConvert.DeserializeObject(json); + //去除content + if (word == null) continue; + word.Content = null; + var fileSize = fileInfo.Length; + word.FileSize = fileSize.ToString(); + wordList.Add(word); + } + return Ok(wordList); + } + + [HttpGet("GetWordContent")] + public async Task GetWordContent([FromQuery] string serverId, [FromQuery] string wordId) + { + var path = Path.Combine(AppContext.BaseDirectory, "markdowns", serverId, wordId + ".json"); + var json = await System.IO.File.ReadAllTextAsync(path); + var word = Newtonsoft.Json.JsonConvert.DeserializeObject(json); + return Ok(word); + + } + [HttpGet("GetWordTemplates")] + public async Task GetWordTemplates() + { + var path = Path.Combine(AppContext.BaseDirectory, "markdowns", "templates"); + var files = Directory.GetFiles(path); + var templates = files.Select( x => new + { + name = Path.GetFileName(x).Replace(".md",""), + content= System.IO.File.ReadAllTextAsync(x).Result + }).ToList(); + return Ok(templates); } } @@ -276,3 +506,29 @@ public class ServerInfo public required string Name { get; init; } public required string Id { get; init; } } + +public class WordModel +{ + public required string Name { get; set; } + public required string Content { get; set; } +} + +public class WordFileModel +{ + public required string UserName { get; set; } + public required string WordId { get; set; } + public required string? Content { get; set; } + public string? FileSize { get; set; } + public required string CreateAt { get; set; } + public required string WordName { get; set;} + public required string LastModifyAt { get; set; } +} + +public class ServerUserInfo +{ + public required string Name { get; set; } + public required bool IsOnline { get; set; } + public required string? LastLoginTime { get; set; } + public required string? Address { get; set; } + public required string? Port { get; set; } +} diff --git a/LoongPanel-Asp/Helpers/DataHelper.cs b/LoongPanel-Asp/Helpers/DataHelper.cs index 2297d2a..0ad7783 100755 --- a/LoongPanel-Asp/Helpers/DataHelper.cs +++ b/LoongPanel-Asp/Helpers/DataHelper.cs @@ -1,6 +1,9 @@ -namespace LoongPanel_Asp.Helpers; +using LoongPanel_Asp.Hubs; +using Microsoft.AspNetCore.SignalR; -public class DataHelper(ApplicationDbContext dbContext) +namespace LoongPanel_Asp.Helpers; + +public class DataHelper(ApplicationDbContext dbContext,IHubContext context) { public async Task SaveData(ServerMonitoringData data) { @@ -27,11 +30,33 @@ public class DataHelper(ApplicationDbContext dbContext) await dbContext.SaveChangesAsync(); } - public static async Task CheckData(string serverId,string dataType,double value) + public async Task CheckData(string serverId,string valueType,string value,string valueName) { + var alertConfigs = JobConfigHelper.GetAlerts(); - var alert=alertConfigs[serverId][dataType]; - - + if (!alertConfigs.TryGetValue(serverId, out var serverAlert)) return; + serverAlert.Notify.TryGetValue(valueType, out var notifyValuePairs); + serverAlert.Warning.TryGetValue(valueType, out var warningValuePairs); + var matchingValues = warningValuePairs?.Where(pair => double.Parse(value) >= double.Parse(pair.Key)) + .SelectMany(pair => pair.Value).Distinct().ToList(); + + if (matchingValues?.Count > 0) + { + foreach (var item in matchingValues) + { + await context.Clients.Group(item).SendAsync("ReceiveWaring", value, valueName); + } + return; + } + + matchingValues = notifyValuePairs?.Where(pair => double.Parse(value) >= double.Parse(pair.Key)) + .SelectMany(pair => pair.Value).Distinct().ToList(); + if (matchingValues?.Count > 0) + { + foreach (var item in matchingValues) + { + await context.Clients.Group(item).SendAsync("ReceiveNotify", value, valueName); + } + } } } \ No newline at end of file diff --git a/LoongPanel-Asp/Helpers/JobConfigHelper.cs b/LoongPanel-Asp/Helpers/JobConfigHelper.cs index c195ed5..878c4ae 100755 --- a/LoongPanel-Asp/Helpers/JobConfigHelper.cs +++ b/LoongPanel-Asp/Helpers/JobConfigHelper.cs @@ -7,7 +7,7 @@ namespace LoongPanel_Asp.Helpers; public static class JobConfigHelper { private static List? _serverConfigs; - private static Dictionary>>? _alertsConfigs; + private static Dictionary? _alertsConfigs; public static IEnumerable ReadJobConfigurations() { @@ -71,53 +71,98 @@ public static class JobConfigHelper return _serverConfigs; } - public static Dictionary>> GetAlerts() + public static Dictionary GetAlerts() { if (_alertsConfigs != null) return _alertsConfigs; // 创建_alertsConfigs - _alertsConfigs = new Dictionary>>(); + var alertsConfigs = new Dictionary(); var parser = new FileIniDataParser(); var alertsFolderPath = Path.Combine(Environment.CurrentDirectory, "Configs", "Alerts"); - var defaultAlert = Path.Combine(Environment.CurrentDirectory, "Configs", "alert.ini"); // 检查目录是否存在,如果不存在则创建 if (!Directory.Exists(alertsFolderPath)) Directory.CreateDirectory(alertsFolderPath); - + // 获取目录下所有.ini文件的路径 var alertFiles = Directory.GetFiles(alertsFolderPath, "*.ini"); - foreach (var filePath in alertFiles) + var notifyUsersMap = new Dictionary>>>(); + var warningUsersMap = new Dictionary>>>(); + // 读取配置信息 + foreach (var alertFile in alertFiles) { - var name = Path.GetFileNameWithoutExtension(filePath); - var parts = name.Split('_'); - var serverId = parts[0] ; - var userId = parts[1]; - // 读取ini文件 - - var data = parser.ReadFile(filePath, Encoding.UTF8); - Console.WriteLine(data.ToString()); - // 获取所有section - foreach (var section in data.Sections) + var alertData = parser.ReadFile(alertFile, Encoding.UTF8); + var alertSections = alertData.Sections; + if (alertSections.Count == 0) continue; + //遍历每一个section + foreach (var alertSection in alertSections) { - // 解析每个section为AlertsModel - var type = section.SectionName; - var value = double.Parse(section.Keys["Value"]); - - // 添加到字典 - if (serverId != null && !(_alertsConfigs.ContainsKey(serverId))) + var serverId = alertSection.SectionName.Split("_")[1]; + var type = alertSection.SectionName.Split("_")[0]; + var notifyValue= alertSection.Keys["Notify"]; + var warningValue = alertSection.Keys["Warning"]; + var userId = Path.GetFileNameWithoutExtension(alertFile); + if (!notifyUsersMap.TryGetValue(serverId, out var notifyTypes)) { - _alertsConfigs[serverId] = new Dictionary>(); - } - if (serverId != null && !_alertsConfigs[serverId].ContainsKey(type)) - { - _alertsConfigs[serverId][type] = new Dictionary(); + notifyTypes = []; + notifyUsersMap.Add(serverId, notifyTypes); } - if (userId == null) continue; - if (serverId != null) _alertsConfigs[serverId][type][userId] = value; + if (!warningUsersMap.TryGetValue(serverId, out var warningTypes)) + { + warningTypes = []; + warningUsersMap.Add(serverId, warningTypes); + } + if (!notifyTypes.TryGetValue(type, out var notifyValues)) + { + notifyValues = []; + notifyTypes.Add(type, notifyValues); + } + + if (!warningTypes.TryGetValue(type, out var warningValues)) + { + warningValues = []; + warningTypes.Add(type, warningValues); + } + + if (!notifyValues.TryGetValue(notifyValue, out var notifyUsersList)) + { + notifyUsersList = []; + notifyValues.Add(notifyValue, notifyUsersList); + } + if (!warningValues.TryGetValue(warningValue, out var warningUsersList)) + { + warningUsersList = []; + warningValues.Add(warningValue, warningUsersList); + } + notifyUsersList.Add(userId); + warningUsersList.Add(userId); } } + //遍历 notifyUsersMap + foreach (var (serverId, notifyUsersList) in notifyUsersMap) + { + //获得key 和 value + if(!alertsConfigs.TryGetValue(serverId, out var alertsConfig)){ + //创建新的 + alertsConfig = new AlertConfiguration(); + alertsConfigs.Add(serverId, alertsConfig); + } + alertsConfig.Notify= notifyUsersList; + } - return _alertsConfigs; + foreach (var (serverId, emailUsersList) in warningUsersMap) + { + //获得key 和 value + if (!alertsConfigs.TryGetValue(serverId, out var alertsConfig)) + { + //创建新的 + alertsConfig = new AlertConfiguration(); + alertsConfigs.Add(serverId, alertsConfig); + } + alertsConfig.Warning = emailUsersList; + } + + _alertsConfigs =alertsConfigs; + return alertsConfigs; } } @@ -144,3 +189,10 @@ public class JobConfiguration //ValueName public string? ValueName { get; init; } } + +public class AlertConfiguration(Dictionary>>? notify=null, + Dictionary>>? warning=null) +{ + public Dictionary>> Notify { get; set; } = notify ?? []; + public Dictionary>> Warning { get; set; } = warning ?? []; +} diff --git a/LoongPanel-Asp/Hubs/SessionHub.cs b/LoongPanel-Asp/Hubs/SessionHub.cs index 68b4760..56fd3d0 100755 --- a/LoongPanel-Asp/Hubs/SessionHub.cs +++ b/LoongPanel-Asp/Hubs/SessionHub.cs @@ -11,11 +11,8 @@ public class SessionHub(UserManager userManager, ILiteDatabase public override async Task OnConnectedAsync() { var userId = Context.User!.Claims.First(x => x.Type == ClaimTypes.NameIdentifier).Value; - Console.WriteLine(userId); //获得登陆ip var ip = Context.GetHttpContext()!.Connection.RemoteIpAddress; - Console.WriteLine(ip); - Console.WriteLine(userId); await Groups.AddToGroupAsync(Context.ConnectionId, userId); // 查询获取用户对象 var user = await userManager.FindByIdAsync(userId); diff --git a/LoongPanel-Asp/Hubs/TerminalHub.cs b/LoongPanel-Asp/Hubs/TerminalHub.cs new file mode 100644 index 0000000..6391a7e --- /dev/null +++ b/LoongPanel-Asp/Hubs/TerminalHub.cs @@ -0,0 +1,36 @@ +using System.Security.Claims; +using LoongPanel_Asp.Servers; +using Microsoft.AspNetCore.SignalR; + +namespace LoongPanel_Asp.Hubs; + +public class TerminalHub(SshStreamService sshStreamService):Hub +{ + + public override async Task OnConnectedAsync() + { + var userId = Context.User!.Claims.First(x => x.Type == ClaimTypes.NameIdentifier).Value; + await Groups.AddToGroupAsync(Context.ConnectionId, userId); + } + //create a terminal + public Task CreateTerminal(string serverId) + { + var userId = Context.User!.Claims.First(x => x.Type == ClaimTypes.NameIdentifier).Value; + sshStreamService.Connect(userId, serverId); + return Task.CompletedTask; + } + //send a message to the terminal + public async Task SendMessage(string message) + { + var userId = Context.User!.Claims.First(x => x.Type == ClaimTypes.NameIdentifier).Value; + Console.WriteLine(message); + sshStreamService.Write(userId,message); + } + //断开 + public override Task OnDisconnectedAsync(Exception? exception) + { + var userId = Context.User!.Claims.First(x => x.Type == ClaimTypes.NameIdentifier).Value; + sshStreamService.Disconnect(userId); + return base.OnDisconnectedAsync(exception); + } +} \ No newline at end of file diff --git a/LoongPanel-Asp/Init.cs b/LoongPanel-Asp/Init.cs new file mode 100644 index 0000000..4127727 --- /dev/null +++ b/LoongPanel-Asp/Init.cs @@ -0,0 +1,62 @@ +using Microsoft.AspNetCore.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using System; +using System.Threading; +using System.Threading.Tasks; +using LoongPanel_Asp.Helpers; + +namespace LoongPanel_Asp +{ + public class Init : IHostedService + { + private readonly IServiceProvider _serviceProvider; + + public Init(IServiceProvider serviceProvider) + { + _serviceProvider = serviceProvider; + } + + public async Task StartAsync(CancellationToken cancellationToken) + { + using var scope = _serviceProvider.CreateScope(); + var userManager = scope.ServiceProvider.GetRequiredService>(); + var roleManager = scope.ServiceProvider.GetRequiredService>(); + // 检查管理员用户是否存在 + var adminUser = await userManager.FindByNameAsync("admin"); + if (adminUser == null) + { + adminUser = new ApplicationUser + { + Avatar = "https://api.multiavatar.com/admin.svg", + Posts = "管理员", + CreateDate = DateTime.UtcNow, + ModifiedDate = DateTime.UtcNow, + Email = "admin@admin.com", + UserName = "admin", + PhoneNumber = "999999999", + NickName = "默认管理员", + }; + + var result = await userManager.CreateAsync(adminUser, "Qwertyuiop123!@#"); + //分配管理员角色 + if (result.Succeeded) + await userManager.AddToRoleAsync(adminUser, "admin"); + if (result.Succeeded) + Console.WriteLine("管理员创建成功,账号:{0},密码:{1}", "admin", "Qwertyuiop123!@#"); + else + foreach (var error in result.Errors) + { + Console.WriteLine(error.Description); + } + } + } + + public Task StopAsync(CancellationToken cancellationToken) + { + // 这里可以执行一些应用程序停止时的清理操作 + return Task.CompletedTask; + } + } +} diff --git a/LoongPanel-Asp/Jobs/CpuJob.cs b/LoongPanel-Asp/Jobs/CpuJob.cs index 5ede169..53f3534 100755 --- a/LoongPanel-Asp/Jobs/CpuJob.cs +++ b/LoongPanel-Asp/Jobs/CpuJob.cs @@ -19,12 +19,12 @@ public class CpuTotalJob( public async Task Execute(IJobExecutionContext context) { var dataMap = context.JobDetail.JobDataMap; - var dataHelper = new DataHelper(dbContext); + var dataHelper = new DataHelper(dbContext,hubContext); var serverList = (List)dataMap["executor"]; var cpuDataListAll = new List(); + var sshClient = serviceProvider.GetService(); foreach (var server in serverList) { - var sshClient = serviceProvider.GetService(); var output = await sshClient?.ExecuteCommandAsync(server.Id, "sar", "-u", "3 1", "|", "grep", "Average")!; if (string.IsNullOrEmpty(output)) continue; @@ -50,9 +50,10 @@ public class CpuTotalJob( DataType = "CpuTotalUsage" }; cpuDataList.Add(totalUsage); - cpuDataList.ForEach(data => + cpuDataList.ForEach(async data => { - hubContext.Clients.All.SendAsync("ReceiveData", data.ServerId, data.DataType, data.Data); + await hubContext.Clients.All.SendAsync("ReceiveData", data.ServerId, data.DataType, data.Data); + await dataHelper.CheckData(server.Id, data.DataType??"", data.Data??"", data.DataName); }); cpuDataListAll.AddRange(cpuDataList); } @@ -75,12 +76,12 @@ public class CpuSpeedJob( public async Task Execute(IJobExecutionContext context) { var dataMap = context.JobDetail.JobDataMap; - var dataHelper = new DataHelper(dbContext); + var dataHelper = new DataHelper(dbContext,hubContext); var serverList = (List)dataMap["executor"]; var cpuDataListAll = new List(); + var sshClient = serviceProvider.GetService(); foreach (var server in serverList) { - var sshClient = serviceProvider.GetService(); var output = await sshClient?.ExecuteCommandAsync(server.Id, "cat", "/proc/cpuinfo", "|", "grep", "'cpu MHz'")!; if (string.IsNullOrEmpty(output)) continue; @@ -112,10 +113,10 @@ public class CpuSpeedJob( } cpuDataListAll.AddRange(cpuDataList); - cpuDataList.ForEach(data => + cpuDataList.ForEach(async data => { - hubContext.Clients.All.SendAsync("ReceiveData", data.ServerId, data.DataType, data.Data); - if (data is { Data: not null, DataType: not null }) _ = DataHelper.CheckData(server.Id, data.DataType, double.Parse(data.Data)); + await hubContext.Clients.All.SendAsync("ReceiveData", data.ServerId, data.DataType, data.Data); + await dataHelper.CheckData(server.Id, data.DataType ?? "", data.Data ?? "", data.DataName); }); } @@ -137,7 +138,7 @@ public class CpuSingleUsageJob( public async Task Execute(IJobExecutionContext context) { var dataMap = context.JobDetail.JobDataMap; - var dataHelper = new DataHelper(dbContext); + var dataHelper = new DataHelper(dbContext,hubContext); var serverList = (List)dataMap["executor"]; var cpuDataListAll = new List(); foreach (var server in serverList) @@ -161,9 +162,10 @@ public class CpuSingleUsageJob( cpuDataList.Add(singleUsage); } - cpuDataList.ForEach(data => + cpuDataList.ForEach(async data => { - hubContext.Clients.All.SendAsync("ReceiveData", data.ServerId, data.DataType, data.Data); + await hubContext.Clients.All.SendAsync("ReceiveData", data.ServerId, data.DataType, data.Data); + await dataHelper.CheckData(server.Id, data.DataType ?? "", data.Data ?? "", data.DataName); }); } diff --git a/LoongPanel-Asp/Jobs/DiskJob.cs b/LoongPanel-Asp/Jobs/DiskJob.cs index 38bba03..6d99585 100755 --- a/LoongPanel-Asp/Jobs/DiskJob.cs +++ b/LoongPanel-Asp/Jobs/DiskJob.cs @@ -17,7 +17,7 @@ public class DiskTotalJob( public async Task Execute(IJobExecutionContext context) { var dataMap = context.JobDetail.JobDataMap; - var dataHelper = new DataHelper(dbContext); + var dataHelper = new DataHelper(dbContext,hubContext); var serverList = (List)dataMap["executor"]; //获得cpu信息 var diskDataListAll = new List(); @@ -58,7 +58,7 @@ public class DiskUseJob( public async Task Execute(IJobExecutionContext context) { var dataMap = context.JobDetail.JobDataMap; - var dataHelper = new DataHelper(dbContext); + var dataHelper = new DataHelper(dbContext,hubContext); var serverList = (List)dataMap["executor"]; //获得cpu信息 var diskDataListAll = new List(); @@ -81,7 +81,7 @@ public class DiskUseJob( ServerId = server.Id, Data = disk[1], DataName = $"磁盘每秒传输数-{dev}" , - DataType = $"diskTps-{dev}" + DataType = $"DiskTps-{dev}" }; diskDataList.Add(diskTps); var diskReadKb = new ServerMonitoringData @@ -89,7 +89,7 @@ public class DiskUseJob( ServerId = server.Id, Data = disk[2], DataName = $"磁盘每秒读取数据量-{dev}" , - DataType = $"diskReadKB-{dev}" + DataType = $"DiskReadKB-{dev}" }; diskDataList.Add(diskReadKb); var diskWriteKb = new ServerMonitoringData @@ -97,7 +97,7 @@ public class DiskUseJob( ServerId = server.Id, Data = disk[3], DataName = $"磁盘每秒写入数据量-{dev}" , - DataType = $"diskWriteKB-{dev}" + DataType = $"DiskWriteKB-{dev}" }; diskDataList.Add(diskWriteKb); var diskAwait = new ServerMonitoringData @@ -105,7 +105,7 @@ public class DiskUseJob( ServerId = server.Id, Data = disk[7], DataName = $"磁盘平均等待时间-{dev}" , - DataType = $"diskAwait-{dev}" + DataType = $"DiskAwait-{dev}" }; diskDataList.Add(diskAwait); var diskUtil = new ServerMonitoringData @@ -113,7 +113,7 @@ public class DiskUseJob( ServerId = server.Id, Data = disk[8], DataName = $"磁盘利用率-{dev}" , - DataType = $"diskUtil-{dev}" + DataType = $"DiskUtil-{dev}" }; diskDataList.Add(diskUtil); diskDataList.ForEach(data => diff --git a/LoongPanel-Asp/Jobs/MemoryJob.cs b/LoongPanel-Asp/Jobs/MemoryJob.cs index 214bf8f..6d12fa7 100755 --- a/LoongPanel-Asp/Jobs/MemoryJob.cs +++ b/LoongPanel-Asp/Jobs/MemoryJob.cs @@ -18,7 +18,7 @@ public class MemoryTotalJob( public async Task Execute(IJobExecutionContext context) { var dataMap = context.JobDetail.JobDataMap; - var dataHelper = new DataHelper(dbContext); + var dataHelper = new DataHelper(dbContext,hubContext); // 从JobDataMap中获取参数 var serverList = (List)dataMap["executor"]; diff --git a/LoongPanel-Asp/Jobs/NetworkJob.cs b/LoongPanel-Asp/Jobs/NetworkJob.cs index 4e2c04a..65f5e11 100755 --- a/LoongPanel-Asp/Jobs/NetworkJob.cs +++ b/LoongPanel-Asp/Jobs/NetworkJob.cs @@ -18,7 +18,7 @@ public class NetworkTotalJob( public async Task Execute(IJobExecutionContext context) { var dataMap = context.JobDetail.JobDataMap; - var dataHelper = new DataHelper(dbContext); + var dataHelper = new DataHelper(dbContext,hubContext); var serverList = (List)dataMap["executor"]; var netWorkDataListAll = new List(); foreach (var server in serverList) diff --git a/LoongPanel-Asp/Jobs/ProcessJob.cs b/LoongPanel-Asp/Jobs/ProcessJob.cs index b70aefc..975a6dd 100644 --- a/LoongPanel-Asp/Jobs/ProcessJob.cs +++ b/LoongPanel-Asp/Jobs/ProcessJob.cs @@ -17,12 +17,12 @@ public class ProcessTotalJob( public async Task Execute(IJobExecutionContext context) { var dataMap = context.JobDetail.JobDataMap; - var dataHelper = new DataHelper(dbContext); + var dataHelper = new DataHelper(dbContext,hubContext); var serverList = (List)dataMap["executor"]; var processDataListAll = new List(); + var sshClient = serviceProvider.GetService(); foreach (var server in serverList) { - var sshClient = serviceProvider.GetService(); var output = await sshClient?.ExecuteCommandAsync(server.Id, "ps", "-e", "|", "wc", "-l")!; if (string.IsNullOrEmpty(output)) continue; var processDataList = new List(); @@ -70,12 +70,12 @@ public class PhrasePatternJob( public async Task Execute(IJobExecutionContext context) { var dataMap = context.JobDetail.JobDataMap; - var dataHelper = new DataHelper(dbContext); + var dataHelper = new DataHelper(dbContext,hubContext); var serverList = (List)dataMap["executor"]; var processDataListAll = new List(); + var sshClient = serviceProvider.GetService(); foreach (var server in serverList) { - var sshClient = serviceProvider.GetService(); var output = await sshClient?.ExecuteCommandAsync(server.Id, "lsof", "|", "wc", "-l")!; if (string.IsNullOrEmpty(output)) continue; var count = int.Parse(output); diff --git a/LoongPanel-Asp/Jobs/UserJob.cs b/LoongPanel-Asp/Jobs/UserJob.cs new file mode 100644 index 0000000..d461026 --- /dev/null +++ b/LoongPanel-Asp/Jobs/UserJob.cs @@ -0,0 +1,71 @@ +using LoongPanel_Asp.Helpers; +using LoongPanel_Asp.Hubs; +using LoongPanel_Asp.Models; +using LoongPanel_Asp.Servers; +using Microsoft.AspNetCore.SignalR; +using Quartz; + +namespace LoongPanel_Asp.Jobs; + +public class UserTotalJob(IHubContext hubContext, + IServiceProvider serviceProvider, + ApplicationDbContext dbContext): IJob +{ + private static int _count; + public async Task Execute(IJobExecutionContext context) + { + // 执行用户统计任务 + var dataMap = context.JobDetail.JobDataMap; + var dataHelper = new DataHelper(dbContext,hubContext); + var serverList = (List)dataMap["executor"]; + var userDataListAll = new List(); + var sshClient = serviceProvider.GetService(); + foreach (var server in serverList) + { + var output = await sshClient?.ExecuteCommandAsync(server.Id, "ps -o ruser=userForLongName -eo user,pcpu,pmem,comm --sort=-pcpu | awk 'NR>1 && $1 !~ /^systemd/ {user[$1]+=$2; mem[$1]+=$3; count[$1]++; total[$1]=$2+$3} END {for (u in user) print u, user[u], mem[u]/count[u], count[u]}' | sort -k1,1r -k2,2nr")!; + if (string.IsNullOrEmpty(output)) continue; + var lines = output.Split("\n",StringSplitOptions.RemoveEmptyEntries); + + foreach (var line in lines) + { + var d = line.Split(' ', StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()).ToList(); + var name = d[0]; + var cpu = d[1]; + var mem = d[2]; + var command=d[3]; + var data = new ServerMonitoringData + { + ServerId = server.Id, + Data = cpu, + DataName = $"CPU使用率-{name}", + DataType = $"CpuUsage-{name}" + }; + userDataListAll.Add(data); + data = new ServerMonitoringData + { + ServerId = server.Id, + Data = mem, + DataName = $"内存使用率-{name}", + DataType = $"MemoryUsage-{name}" + }; + userDataListAll.Add(data); + data = new ServerMonitoringData + { + ServerId = server.Id, + Data = command, + DataName = $"用户进程数-{name}", + DataType = $"UserProcesses-{name}" + }; + userDataListAll.Add(data); + } + } + userDataListAll.ForEach(data => + { + hubContext.Clients.All.SendAsync("ReceiveData", data.ServerId, data.DataType, data.Data); + }); + _count++; + if (_count <= 10) return; + _count = 0; + await dataHelper.SaveData(userDataListAll); + } +} \ No newline at end of file diff --git a/LoongPanel-Asp/LoongPanel-Asp.csproj b/LoongPanel-Asp/LoongPanel-Asp.csproj index bc2e4c0..8277ab7 100755 --- a/LoongPanel-Asp/LoongPanel-Asp.csproj +++ b/LoongPanel-Asp/LoongPanel-Asp.csproj @@ -18,6 +18,7 @@ + @@ -36,9 +37,12 @@ PreserveNewest + + PreserveNewest + - + diff --git a/LoongPanel-Asp/LoongPanel-Asp.csproj.user b/LoongPanel-Asp/LoongPanel-Asp.csproj.user index 9ff5820..45c6338 100755 --- a/LoongPanel-Asp/LoongPanel-Asp.csproj.user +++ b/LoongPanel-Asp/LoongPanel-Asp.csproj.user @@ -1,6 +1,10 @@  - https + http + C:\Users\niyyz\RiderProjects\LoongPanel-Asp\LoongPanel-Asp\Properties\PublishProfiles\registry.hub.docker.com_zwb.pubxml + + + ProjectDebugger \ No newline at end of file diff --git a/LoongPanel-Asp/Middlewares/ApiPermissionMiddleware.cs b/LoongPanel-Asp/Middlewares/ApiPermissionMiddleware.cs index b76c093..0e088dd 100755 --- a/LoongPanel-Asp/Middlewares/ApiPermissionMiddleware.cs +++ b/LoongPanel-Asp/Middlewares/ApiPermissionMiddleware.cs @@ -15,7 +15,7 @@ public class ApiPermissionMiddleware( { // 获取配置中定义的公开API列表 var publicApis = configuration["PublicApi"]?.Split(";", StringSplitOptions.RemoveEmptyEntries) ?? - new string[0]; + []; // 如果请求路径在公开API列表中,则直接调用下一个中间件 if (publicApis.Any(api => api == context.Request.Path.Value)) @@ -23,12 +23,17 @@ public class ApiPermissionMiddleware( await next(context); return; } - + + if (context.Request.Path.Value!.StartsWith("/public")) + { + await next(context); + return; + } // 验证Token var payload = context.User; - string[] hubKeywords = { "ServerHub", "MessageHub", "SessionHub", "TermHub" }; + string[] hubKeywords = { "ServerHub", "MessageHub", "SessionHub", "TerminalHub" }; //如果请求的地址是 (*Hub/*) if (hubKeywords.Any(keyword => context.Request.Path.Value!.Contains(keyword))) { diff --git a/LoongPanel-Asp/Middlewares/PermissionMiddleware.cs b/LoongPanel-Asp/Middlewares/PermissionMiddleware.cs index 2016908..6226f00 100755 --- a/LoongPanel-Asp/Middlewares/PermissionMiddleware.cs +++ b/LoongPanel-Asp/Middlewares/PermissionMiddleware.cs @@ -19,6 +19,12 @@ public class PermissionMiddleware( return; } Console.WriteLine(context.Request.Path.Value!); + //如果访问 /public/* + if (context.Request.Path.Value!.StartsWith("/public")) + { + await next(context); + return; + } // 获取请求头中的Authorization信息 var authorizationHeader = context.Request.Headers["Authorization"]; diff --git a/LoongPanel-Asp/Models/AccountModel.cs b/LoongPanel-Asp/Models/AccountModel.cs index 894f774..e4ee375 100755 --- a/LoongPanel-Asp/Models/AccountModel.cs +++ b/LoongPanel-Asp/Models/AccountModel.cs @@ -5,18 +5,15 @@ public class EmailModel public required string Email { get; set; } } -public class VerifyEmailNameModel : EmailModel -{ - public required string UserName { get; set; } -} public class RegisterModel : EmailModel { public required string UserName { get; set; } - public required string NickName { get; set; } - public required string Code { get; set; } + public required string FullName { get; set; } public required string Phone { get; set; } public required string Password { get; set; } + public required string Position { get; set; } + public required string Role { get; set; } } public class LoginModel diff --git a/LoongPanel-Asp/Program.cs b/LoongPanel-Asp/Program.cs index d96dc36..dab82a3 100755 --- a/LoongPanel-Asp/Program.cs +++ b/LoongPanel-Asp/Program.cs @@ -80,8 +80,8 @@ builder.Services.AddCors(options => policy => { //允许全部 - policy.WithOrigins("http://localhost:3001", "http://192.168.0.13:3001", "http://192.168.0.13:3002", - "http://192.168.0.13").AllowAnyHeader().AllowAnyMethod().AllowCredentials(); + policy.WithOrigins("http://localhost:3001", "http://192.168.0.13:3001", "https://192.168.0.13:3001", + "https://192.168.0.13:3000").AllowAnyHeader().AllowAnyMethod().AllowCredentials(); }); }); @@ -107,6 +107,13 @@ builder.Services.AddQuartzServer(options => }); builder.Services.AddScoped(); +builder.Services.AddSingleton(); + +builder.Services.AddHostedService(); + + + + var app = builder.Build(); @@ -119,11 +126,10 @@ if (app.Environment.IsDevelopment()) app.UseCors(myAllowSpecificOrigins); - +app.UseHttpsRedirection(); +app.UseStaticFiles(); app.UseMiddleware(); app.UseMiddleware(); - - app.UseHttpsRedirection(); app.UseAuthorization(); @@ -131,4 +137,5 @@ app.UseAuthorization(); app.MapControllers(); app.MapHub("/SessionHub"); +app.MapHub("/TerminalHub"); app.Run(); \ No newline at end of file diff --git a/LoongPanel-Asp/Servers/SSHService.cs b/LoongPanel-Asp/Servers/SSHService.cs index 2f0c4ca..dc5cf3b 100755 --- a/LoongPanel-Asp/Servers/SSHService.cs +++ b/LoongPanel-Asp/Servers/SSHService.cs @@ -54,8 +54,8 @@ public class SshService : IDisposable { // 确保在执行命令前连接到服务器 if (!sshClient.IsConnected) await sshClient.ConnectAsync(_cts.Token); - var commandString = string.Join(" ", "LANG=C", command, string.Join(" ", arguments)); + Console.WriteLine(commandString); using var commandResult = sshClient.RunCommand(commandString); output = commandResult.Result; if (commandResult.ExitStatus != 0) output = commandResult.Error; diff --git a/LoongPanel-Asp/Servers/SSHStreamService.cs b/LoongPanel-Asp/Servers/SSHStreamService.cs new file mode 100644 index 0000000..f856544 --- /dev/null +++ b/LoongPanel-Asp/Servers/SSHStreamService.cs @@ -0,0 +1,112 @@ +using Renci.SshNet; +using System; +using System.Collections.Concurrent; +using System.IO; +using LoongPanel_Asp.Helpers; +using LoongPanel_Asp.Hubs; +using Microsoft.AspNetCore.SignalR; +using ConnectionInfo = Renci.SshNet.ConnectionInfo; + +namespace LoongPanel_Asp.Servers; + +public class SshStreamService : IDisposable +{ + private readonly ConcurrentDictionary _sshStreams = new(); + private readonly IHubContext _hubContext; + private CancellationTokenSource _cancellationTokenSource; + private Task _readingTask; + + public SshStreamService(IHubContext hubContext) + { + _hubContext = hubContext; + _cancellationTokenSource = new CancellationTokenSource(); + _readingTask = Task.Run(() => StartReadingAsync(_cancellationTokenSource.Token)); + } + public void Connect(string userId, string serverId) + { + // 假设 JobConfigHelper.GetServers() 返回一个包含服务器配置的列表 + var serverConfig = JobConfigHelper.GetServers().Find(x => x.Id == serverId); + if (serverConfig == null) throw new InvalidOperationException("Server not found."); + //从_sshStreams查找是否存在 替换 + + var host = serverConfig.Address; + var port = serverConfig.Port; + var username = serverConfig.Username; + var password = serverConfig.Password; + + var connectionInfo = new ConnectionInfo(host, port, username, new PasswordAuthenticationMethod(username, password)); + var sshClient = new SshClient(connectionInfo); + sshClient.Connect(); + var shellStream = sshClient.CreateShellStream("xterm", 100, 40, 800, 600, 1024); + if (_sshStreams.TryGetValue(userId, out var existing)) + { + // 关闭旧的连接 + existing.Client.Disconnect(); + existing.Client.Dispose(); + existing.Stream.Close(); + existing.Stream.Dispose(); + } + + _sshStreams[userId]= (sshClient, shellStream); + } + + + public void Write(string userId, string data) + { + if (!_sshStreams.TryGetValue(userId, out var sshStreamInfo)) return; + var (_, shellStream) = sshStreamInfo; + shellStream?.Write(data); + } + + public void Disconnect(string userId) + { + if (_sshStreams.TryRemove(userId, out var sshStreamInfo)) + { + var (sshClient, shellStream) = sshStreamInfo; + shellStream?.Close(); + shellStream?.Dispose(); + sshClient.Disconnect(); + sshClient.Dispose(); + } + } + + public void Dispose() + { + _cancellationTokenSource.Cancel(); + try + { + _readingTask.Wait(); + } + catch (AggregateException ae) + { + ae.Handle(e => e is OperationCanceledException); + } + + foreach (var sshStreamInfo in _sshStreams.Values) + { + var (sshClient, shellStream) = sshStreamInfo; + shellStream?.Close(); + shellStream?.Dispose(); + sshClient.Disconnect(); + sshClient.Dispose(); + } + _sshStreams.Clear(); + } + + private async Task StartReadingAsync(CancellationToken cancellationToken) + { + while (!cancellationToken.IsCancellationRequested) + { + foreach (var (key, sshStreamInfo) in _sshStreams) + { + var (_, shellStream) = sshStreamInfo; + if (shellStream is not { CanRead: true, Length: > 0 }) continue; + var output = shellStream.Read(); + await _hubContext.Clients.Group(key).SendAsync("ReceiveMessage", output); + } + + // 等待一段时间再进行下一次检查 + await Task.Delay(10, cancellationToken); + } + } +} \ No newline at end of file diff --git a/LoongPanel-Asp/UserConfigs/Layouts/default.json b/LoongPanel-Asp/UserConfigs/Layouts/default.json index b02e958..5034510 100644 --- a/LoongPanel-Asp/UserConfigs/Layouts/default.json +++ b/LoongPanel-Asp/UserConfigs/Layouts/default.json @@ -1,58 +1,11 @@ { "md": [ - { - "type": "chart", - "chartRage": 6, - "serverValues": [ - { - "dataName": "CPU总使用率", - "dataType": "CpuTotalUsage" - }, - { - "dataName": "内存使用率", - "dataType": "MemoryUsage" - }, - { - "dataName": "磁盘总使用率", - "dataType": "DiskTotalUsage" - } - ], - "i": "069299c5-ceec-41cd-a1a8-b18ce0598317", - "x": 0, - "y": 0, - "h": 12, - "w": 10, - "selectChart": "line", - "cardConfig": { - "name": { - "label": "卡片名称", - "value": "系统信息卡片", - "type": "text" - }, - "description": { - "label": "卡片描述", - "value": "这是一张默认的卡片", - "type": "text" - }, - "foreground": { - "label": "卡片前景色", - "value": "ffffff", - "type": "color" - }, - "color": { - "label": "图表主色", - "value": "002EA6", - "type": "color" - } - }, - "moved": false - }, { "type": "card", "h": 16, - "w": 6, - "x": 4, - "y": 12, + "w": 3, + "x": 0, + "y": 15, "i": "68af2024-4a21-4351-b1ce-707aeeb3ea9c", "selectCard": "systemInfo", "moved": false @@ -60,9 +13,9 @@ { "type": "card", "h": 16, - "w": 4, - "x": 0, - "y": 12, + "w": 3, + "x": 3, + "y": 15, "i": "8104448e-6c47-455f-b635-43b3ac75d4df", "selectCard": "onlineUsers", "moved": false @@ -81,10 +34,10 @@ } ], "i": "6aa12623-fee2-48e3-86f1-88fcd538c4a8", - "x": 6, - "y": 44, + "x": 3, + "y": 47, "h": 16, - "w": 4, + "w": 3, "selectChart": "pie", "cardConfig": { "name": { @@ -129,9 +82,9 @@ ], "i": "17334b32-cede-441f-9bef-772d170f1c2a", "x": 0, - "y": 44, + "y": 47, "h": 16, - "w": 6, + "w": 3, "selectChart": "histogram", "cardConfig": { "name": { @@ -172,9 +125,9 @@ ], "i": "06e64544-dfb8-4a28-b777-96cb4fd70aec", "x": 0, - "y": 28, + "y": 31, "h": 16, - "w": 10, + "w": 9, "selectChart": "area", "cardConfig": { "name": { @@ -199,61 +152,61 @@ } }, "moved": false + }, + { + "type": "chart", + "chartRage": 6, + "serverValues": [ + { + "dataName": "CPU总使用率", + "dataType": "CpuTotalUsage" + }, + { + "dataName": "内存总使用率", + "dataType": "MemoryTotalUsage" + }, + { + "dataName": "网络接口总体使用率", + "dataType": "InterfaceTotalUtilizationPercentage" + } + ], + "i": "ae1f81ab-19dc-44ad-9120-fcdea694d5c4", + "x": 0, + "y": 0, + "h": 15, + "w": 6, + "selectChart": "line", + "cardConfig": { + "name": { + "label": "卡片名称", + "value": "默认卡片名称", + "type": "text" + }, + "description": { + "label": "卡片描述", + "value": "这是一张默认的卡片", + "type": "text" + }, + "foreground": { + "label": "卡片前景色", + "value": "ffffff", + "type": "color" + }, + "color": { + "label": "图表主色", + "value": "002EA6", + "type": "color" + } + }, + "moved": false } ], "lg": [ - { - "type": "chart", - "chartRage": 6, - "serverValues": [ - { - "dataName": "CPU总使用率", - "dataType": "CpuTotalUsage" - }, - { - "dataName": "内存使用率", - "dataType": "MemoryUsage" - }, - { - "dataName": "磁盘总使用率", - "dataType": "DiskTotalUsage" - } - ], - "i": "069299c5-ceec-41cd-a1a8-b18ce0598317", - "x": 0, - "y": 0, - "h": 13, - "w": 10, - "selectChart": "line", - "cardConfig": { - "name": { - "label": "卡片名称", - "value": "系统信息卡片", - "type": "text" - }, - "description": { - "label": "卡片描述", - "value": "这是一张默认的卡片", - "type": "text" - }, - "foreground": { - "label": "卡片前景色", - "value": "ffffff", - "type": "color" - }, - "color": { - "label": "图表主色", - "value": "002EA6", - "type": "color" - } - }, - "moved": false - }, { "type": "card", "h": 13, - "w": 2, - "x": 10, + "w": 3, + "x": 9, "y": 0, "i": "68af2024-4a21-4351-b1ce-707aeeb3ea9c", "selectCard": "systemInfo", @@ -321,8 +274,8 @@ "dataType": "DiskTotalUsage" }, { - "dataName": "内存使用率", - "dataType": "MemoryUsage" + "dataName": "内存总使用率", + "dataType": "MemoryTotalUsage" }, { "dataName": "CPU总使用率", @@ -401,9 +354,7 @@ } }, "moved": false - } - ], - "xl": [ + }, { "type": "chart", "chartRage": 6, @@ -413,24 +364,24 @@ "dataType": "CpuTotalUsage" }, { - "dataName": "内存使用率", - "dataType": "MemoryUsage" + "dataName": "内存总使用率", + "dataType": "MemoryTotalUsage" }, { - "dataName": "磁盘总使用率", - "dataType": "DiskTotalUsage" + "dataName": "网络接口总体使用率", + "dataType": "InterfaceTotalUtilizationPercentage" } ], - "i": "069299c5-ceec-41cd-a1a8-b18ce0598317", + "i": "ae1f81ab-19dc-44ad-9120-fcdea694d5c4", "x": 0, "y": 0, - "h": 12, + "h": 13, "w": 9, "selectChart": "line", "cardConfig": { "name": { "label": "卡片名称", - "value": "系统信息卡片", + "value": "默认卡片名称", "type": "text" }, "description": { @@ -450,7 +401,9 @@ } }, "moved": false - }, + } + ], + "xl": [ { "type": "card", "h": 15, @@ -603,9 +556,7 @@ } }, "moved": false - } - ], - "sm": [ + }, { "type": "chart", "chartRage": 6, @@ -615,24 +566,24 @@ "dataType": "CpuTotalUsage" }, { - "dataName": "内存使用率", - "dataType": "MemoryUsage" + "dataName": "内存总使用率", + "dataType": "MemoryTotalUsage" }, { - "dataName": "磁盘总使用率", - "dataType": "DiskTotalUsage" + "dataName": "网络接口总体使用率", + "dataType": "InterfaceTotalUtilizationPercentage" } ], - "i": "069299c5-ceec-41cd-a1a8-b18ce0598317", - "x": 0, - "y": 0, - "h": 12, - "w": 9, + "i": "ae1f81ab-19dc-44ad-9120-fcdea694d5c4", + "x": 10, + "y": 29, + "h": 5, + "w": 5, "selectChart": "line", "cardConfig": { "name": { "label": "卡片名称", - "value": "系统信息卡片", + "value": "默认卡片名称", "type": "text" }, "description": { @@ -652,13 +603,15 @@ } }, "moved": false - }, + } + ], + "sm": [ { "type": "card", "h": 16, "w": 3, "x": 0, - "y": 12, + "y": 15, "i": "68af2024-4a21-4351-b1ce-707aeeb3ea9c", "selectCard": "systemInfo", "moved": false @@ -668,7 +621,7 @@ "h": 16, "w": 3, "x": 3, - "y": 12, + "y": 15, "i": "8104448e-6c47-455f-b635-43b3ac75d4df", "selectCard": "onlineUsers", "moved": false @@ -688,7 +641,7 @@ ], "i": "6aa12623-fee2-48e3-86f1-88fcd538c4a8", "x": 3, - "y": 44, + "y": 47, "h": 16, "w": 3, "selectChart": "pie", @@ -735,7 +688,7 @@ ], "i": "17334b32-cede-441f-9bef-772d170f1c2a", "x": 0, - "y": 44, + "y": 47, "h": 16, "w": 3, "selectChart": "histogram", @@ -778,7 +731,7 @@ ], "i": "06e64544-dfb8-4a28-b777-96cb4fd70aec", "x": 0, - "y": 28, + "y": 31, "h": 16, "w": 9, "selectChart": "area", @@ -805,6 +758,53 @@ } }, "moved": false + }, + { + "type": "chart", + "chartRage": 6, + "serverValues": [ + { + "dataName": "CPU总使用率", + "dataType": "CpuTotalUsage" + }, + { + "dataName": "内存总使用率", + "dataType": "MemoryTotalUsage" + }, + { + "dataName": "网络接口总体使用率", + "dataType": "InterfaceTotalUtilizationPercentage" + } + ], + "i": "ae1f81ab-19dc-44ad-9120-fcdea694d5c4", + "x": 0, + "y": 0, + "h": 15, + "w": 6, + "selectChart": "line", + "cardConfig": { + "name": { + "label": "卡片名称", + "value": "默认卡片名称", + "type": "text" + }, + "description": { + "label": "卡片描述", + "value": "这是一张默认的卡片", + "type": "text" + }, + "foreground": { + "label": "卡片前景色", + "value": "ffffff", + "type": "color" + }, + "color": { + "label": "图表主色", + "value": "002EA6", + "type": "color" + } + }, + "moved": false } ], "xs": [ @@ -816,10 +816,6 @@ "dataName": "CPU总使用率", "dataType": "CpuTotalUsage" }, - { - "dataName": "内存使用率", - "dataType": "MemoryUsage" - }, { "dataName": "磁盘总使用率", "dataType": "DiskTotalUsage" @@ -827,8 +823,8 @@ ], "i": "069299c5-ceec-41cd-a1a8-b18ce0598317", "x": 0, - "y": 0, - "h": 12, + "y": 45, + "h": 13, "w": 9, "selectChart": "line", "cardConfig": { @@ -857,10 +853,10 @@ }, { "type": "card", - "h": 16, - "w": 2, - "x": 2, - "y": 12, + "h": 13, + "w": 4, + "x": 0, + "y": 32, "i": "68af2024-4a21-4351-b1ce-707aeeb3ea9c", "selectCard": "systemInfo", "moved": false @@ -868,9 +864,9 @@ { "type": "card", "h": 16, - "w": 2, + "w": 4, "x": 0, - "y": 12, + "y": 16, "i": "8104448e-6c47-455f-b635-43b3ac75d4df", "selectCard": "onlineUsers", "moved": false @@ -889,8 +885,8 @@ } ], "i": "6aa12623-fee2-48e3-86f1-88fcd538c4a8", - "x": 3, - "y": 59, + "x": 0, + "y": 0, "h": 16, "w": 4, "selectChart": "pie", @@ -927,8 +923,8 @@ "dataType": "DiskTotalUsage" }, { - "dataName": "内存使用率", - "dataType": "MemoryUsage" + "dataName": "内存总使用率", + "dataType": "MemoryTotalUsage" }, { "dataName": "CPU总使用率", @@ -937,9 +933,9 @@ ], "i": "17334b32-cede-441f-9bef-772d170f1c2a", "x": 0, - "y": 44, - "h": 15, - "w": 4, + "y": 74, + "h": 16, + "w": 9, "selectChart": "histogram", "cardConfig": { "name": { @@ -980,7 +976,7 @@ ], "i": "06e64544-dfb8-4a28-b777-96cb4fd70aec", "x": 0, - "y": 28, + "y": 58, "h": 16, "w": 9, "selectChart": "area", diff --git a/LoongPanel-Asp/appsettings.json b/LoongPanel-Asp/appsettings.json index 21edd5a..4d2b49a 100755 --- a/LoongPanel-Asp/appsettings.json +++ b/LoongPanel-Asp/appsettings.json @@ -2,7 +2,8 @@ "Logging": { "LogLevel": { "Default": "Information", - "Microsoft.AspNetCore": "Warning" + "Microsoft.AspNetCore": "Warning", + "Microsoft.EntityFrameworkCore": "None" } }, "AllowedHosts": "*", @@ -19,5 +20,17 @@ "Secret": "p4Qzf/+GPP/XNLalZGCzwlelOl6skiFZscj6iZ6rZZE=", "Issuer": "LoongPanel", "Audience": "LoongPanel", - "PubLicApi": "/Api/Account/SendVerificationCode;/Api/Account/Register;/Api/Account/Login;/Api/Account/VerifyEmailName;" + "PubLicApi": "/Api/Account/Login", + "Kestrel": { + "Endpoints": { + "MyHttpsEndpoint": { + "Url": "https://192.168.0.13:7233", + "ClientCertificateMode": "AllowCertificate", + "Certificate": { + "Path": "./my.pfx", + "Password": "z1377952468zz" + } + } + } + } } diff --git a/LoongPanel-Asp/markdowns/templates/巡检模板1.md b/LoongPanel-Asp/markdowns/templates/巡检模板1.md new file mode 100644 index 0000000..990661d --- /dev/null +++ b/LoongPanel-Asp/markdowns/templates/巡检模板1.md @@ -0,0 +1,31 @@ +# 巡检记录 + +## 第一部分:基本信息 + +- **巡检日期**:2023 年 11 月 8 日 +- **巡检人员**:张三 +- **巡检部门**:设备维护部 + +## 第二部分:巡检项目 + +| 序号 | 巡检项目名称 | 巡检要点 | 巡检内容 | +| ---- | ------------ | -------------------------------------------------- | -------------------------------------------------------------- | +| 1 | 设备运行状况 | 检查设备运行是否平稳,有无异常振动或噪音。 | 详细记录设备运行参数,比较历史数据,分析是否存在异常。 | +| 2 | 安全防护措施 | 检查安全防护设施是否完好,如安全栅栏、警示标志等。 | 确认所有安全设施无损坏,位置正确,且工作人员了解如何正确使用。 | +| 3 | 环境卫生状况 | 检查工作区域是否清洁,有无垃圾或障碍物。 | 清理工作区域,确保无杂物,保持环境整洁。 | +|...|.....|....|...| + +## 第三部分:检查记录 + +| 序号 | 检查项目 | 检查结果 | 异常说明 | 处理措施 | 反馈意见 | +| ---- | -------- | -------- | ---------------- | ------------------------------ | ---------------------- | +| 1 | 外壳 | 正常 | 无 | 无 | 无 | +| 2 | 电源 | 异常 | 设备有轻微振动。 | 已联系维修人员,计划明日检修。 | 建议增加设备维护频率。 | +| 3 | 主机 | 正常 | 无 | 无 | 无 | +|...|.....|....|...|...|...| + +## 第四部分:巡检总结 + +- **巡检总体评价**:本次巡检总体情况良好,除设备 2 存在轻微振动外,其他各项指标均正常。 +- **重点问题处理**:设备 2 的振动问题已安排维修人员进行检修,预计明日完成。 +- **后续工作建议**:建议加强设备日常维护,特别是对老旧设备进行更频繁的检查,以防止潜在的安全隐患。 \ No newline at end of file diff --git a/LoongPanel-Asp/my.pfx b/LoongPanel-Asp/my.pfx new file mode 100644 index 0000000000000000000000000000000000000000..344a793734ca4de23c072d6b3bc09bf72d878ef7 GIT binary patch literal 2691 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 literal 0 HcmV?d00001 diff --git a/web/.env b/web/.env index e468ea0..631bf83 100755 --- a/web/.env +++ b/web/.env @@ -1 +1 @@ -API_SERVER="http://192.168.0.13:5253" \ No newline at end of file +API_SERVER="https://192.168.0.13:7233" \ No newline at end of file diff --git a/web/app.vue b/web/app.vue index b1b48bf..50b543d 100755 --- a/web/app.vue +++ b/web/app.vue @@ -15,4 +15,5 @@ :root { --primary-color: $primary-color } + diff --git a/web/base.scss b/web/base.scss index 48074fd..b68873a 100755 --- a/web/base.scss +++ b/web/base.scss @@ -19,6 +19,8 @@ $light-unfocused-color: $unfocused-color; $dark-text-color: #D3D3D3; $dark-unfocused-color: $unfocused-color; +$border:1px solid rgba(51, 51, 51, 0.17); + $gap: 8px; $padding: 16px; $radius: 8px; diff --git a/web/bun.lockb b/web/bun.lockb new file mode 100644 index 0000000000000000000000000000000000000000..8168b6e0cd1298da320ed4b51050557645b1f71b GIT binary patch literal 509790 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Ⓢ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 literal 0 HcmV?d00001 diff --git a/web/components/AddCard.vue b/web/components/AddCard.vue index bfd3d87..69c5b07 100644 --- a/web/components/AddCard.vue +++ b/web/components/AddCard.vue @@ -1,6 +1,6 @@