using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using MiGu.Server.Launcher; namespace MiGu.Server.Controllers; [ApiController] [Route("api/health")] public class HealthController : ControllerBase { private static readonly DateTimeOffset StartTime = DateTimeOffset.UtcNow; private readonly SimpleLiteLauncher _launcher; public HealthController(SimpleLiteLauncher launcher) => _launcher = launcher; /// 匿名存活探针:仅返回进程级状态,不暴露端口拓扑等部署细节。 [HttpGet] public IActionResult Get() { return Ok(new { status = "ok", startTime = StartTime, uptimeSec = (long)(DateTimeOffset.UtcNow - StartTime).TotalSeconds }); } /// /// SimpleLite 拉起配置诊断:查看当前 ExecutablePath、解析结果、端口是否已有服务。 /// 配置位置:MiGu.Server/appsettings.jsonSimpleLite 节点。 /// 含服务器本地路径等敏感信息,要求登录。 /// [HttpGet("simplelite")] [Authorize] public IActionResult GetSimpleLiteDiagnostics() => Ok(_launcher.GetDiagnostics()); /// 关闭本机全部 SimpleLite 进程。仅 Platform 管理端可调。 [HttpPost("simplelite/stop")] [Authorize(Policy = "PlatformScope")] public IActionResult StopSimpleLite() { var killed = _launcher.StopAll(); var diag = _launcher.GetDiagnostics(); return Ok(new { killed, diagnostics = diag }); } /// 关闭并重新拉起 SimpleLite(不同步 DLL)。仅 Platform 管理端可调。 [HttpPost("simplelite/restart")] [Authorize(Policy = "PlatformScope")] public IActionResult RestartSimpleLite([FromQuery] string launchMode = "webonly") { var result = _launcher.Restart(launchMode); var diag = _launcher.GetDiagnostics(); return Ok(new { restart = result, diagnostics = diag }); } /// /// 关闭 SimpleLite、同步最新 DLL、重新拉起。用于「前往站点」API 缺失时一键更新。 /// 会终止本机全部 SimpleLite 进程并重启,仅 Platform 管理端可调。 /// [HttpPost("simplelite/restart-for-update")] [Authorize(Policy = "PlatformScope")] public IActionResult RestartSimpleLiteForUpdate([FromQuery] string launchMode = "webonly") { var result = _launcher.RestartForUpdate(launchMode); var diag = _launcher.GetDiagnostics(); return Ok(new { restart = result, diagnostics = diag }); } }