using Fengling.AuthService.Data; using Fengling.AuthService.Models; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace Fengling.AuthService.Controllers; [ApiController] [Route("api/[controller]")] [Authorize] public class StatsController : ControllerBase { private readonly ApplicationDbContext _context; private readonly ILogger _logger; public StatsController( ApplicationDbContext context, ILogger logger) { _context = context; _logger = logger; } [HttpGet("dashboard")] public async Task> GetDashboardStats() { var today = DateTime.UtcNow.Date; var tomorrow = today.AddDays(1); var userCount = await _context.Users.CountAsync(u => !u.IsDeleted); var tenantCount = await _context.Tenants.CountAsync(t => !t.IsDeleted); var oauthClientCount = await _context.OAuthApplications.CountAsync(); var todayAccessCount = await _context.AccessLogs .CountAsync(l => l.CreatedAt >= today && l.CreatedAt < tomorrow); return Ok(new { userCount, tenantCount, oauthClientCount, todayAccessCount, }); } [HttpGet("system")] public ActionResult GetSystemStats() { var uptime = TimeSpan.FromMilliseconds(Environment.TickCount64); var process = System.Diagnostics.Process.GetCurrentProcess(); return Ok(new { uptime = $"{uptime.Days}天 {uptime.Hours}小时 {uptime.Minutes}分钟", memoryUsed = process.WorkingSet64 / 1024 / 1024, cpuTime = process.TotalProcessorTime, machineName = Environment.MachineName, osVersion = Environment.OSVersion.ToString(), processorCount = Environment.ProcessorCount, }); } }