Files
FlyShotHost/src/Flyshot.Server.Host/Controllers/StatusController.cs
yunxiao.zhu 5193f537b0 ✨ feat(planning): 添加离线飞拍规划能力
* 固化离线飞拍轨迹加载、保存和规划结果。

* 真机初始化失败时保留模型加载后的离线规划能力。

* 更新状态接口、调试页和回归测试覆盖。
2026-06-24 11:40:07 +08:00

77 lines
2.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Flyshot.ControllerClientCompat;
using Microsoft.AspNetCore.Mvc;
namespace Flyshot.Server.Host.Controllers;
/// <summary>
/// 提供控制器状态快照 API,状态监控页面由 wwwroot 静态资源承载。
/// </summary>
[ApiController]
[Tags("基础与状态")]
public sealed class StatusController : ControllerBase
{
private readonly IControllerClientCompatService _compatService;
/// <summary>
/// 初始化状态监控控制器。
/// </summary>
/// <param name="compatService">ControllerClient 兼容层服务。</param>
public StatusController(IControllerClientCompatService compatService)
{
_compatService = compatService ?? throw new ArgumentNullException(nameof(compatService));
}
/// <summary>
/// 提供短路由 `/status`,跳转到静态状态页。
/// </summary>
/// <returns>重定向到 <c>/status.html</c>。</returns>
[HttpGet("/status")]
public IActionResult StatusPage()
{
return Redirect("/status.html");
}
/// <summary>
/// 提供短路由 `/debug`,跳转到静态调试页。
/// </summary>
/// <returns>重定向到 <c>/debug.html</c>。</returns>
[HttpGet("/debug")]
public IActionResult DebugPage()
{
return Redirect("/debug.html");
}
/// <summary>
/// 返回当前 ControllerClient 兼容层与控制器运行时状态快照。
/// </summary>
/// <returns>面向状态页和外部诊断的 JSON 快照。</returns>
[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
});
}
}