using Flyshot.ControllerClientCompat; using Microsoft.AspNetCore.Mvc; namespace Flyshot.Server.Host.Controllers; /// /// 提供控制器状态快照 API,状态监控页面由 wwwroot 静态资源承载。 /// [ApiController] [Tags("基础与状态")] public sealed class StatusController : ControllerBase { private readonly IControllerClientCompatService _compatService; /// /// 初始化状态监控控制器。 /// /// ControllerClient 兼容层服务。 public StatusController(IControllerClientCompatService compatService) { _compatService = compatService ?? throw new ArgumentNullException(nameof(compatService)); } /// /// 提供短路由 `/status`,跳转到静态状态页。 /// /// 重定向到 /status.html。 [HttpGet("/status")] public IActionResult StatusPage() { return Redirect("/status.html"); } /// /// 提供短路由 `/debug`,跳转到静态调试页。 /// /// 重定向到 /debug.html。 [HttpGet("/debug")] public IActionResult DebugPage() { return Redirect("/debug.html"); } /// /// 返回当前 ControllerClient 兼容层与控制器运行时状态快照。 /// /// 面向状态页和外部诊断的 JSON 快照。 [HttpGet("/api/status/snapshot")] public IActionResult GetSnapshot() { var snapshot = _compatService.GetControllerSnapshot(); var metadata = _compatService.GetStatusSnapshotMetadata(); return Ok(new { Status = "ok", Service = "flyshot-server-host", ServerVersion = metadata.ServerVersion, ClientVersion = metadata.ClientVersion, IsSetup = metadata.IsSetup, RobotName = metadata.RobotName, DegreesOfFreedom = metadata.DegreesOfFreedom, UploadedTrajectories = metadata.UploadedTrajectories, OperatingMode = metadata.OperatingMode, InitializationStage = metadata.InitializationStage, ModelLoaded = metadata.IsSetup, RobotIp = metadata.RobotIp, LastConnectionError = metadata.LastConnectionError, LastConnectionErrorAt = metadata.LastConnectionErrorAt, LastInitializationAttemptAt = metadata.LastInitializationAttemptAt, CanPlanOffline = metadata.CanPlanOffline, CanExecuteRealMotion = metadata.CanExecuteRealMotion, Snapshot = snapshot }); } }