UpsDescribeCommand.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. using Microsoft.Extensions.DependencyInjection;
  2. using RackPeek.Domain.Resources.UpsUnits;
  3. using Spectre.Console;
  4. using Spectre.Console.Cli;
  5. namespace Shared.Rcl.Commands.Ups;
  6. public class UpsDescribeCommand(IServiceProvider provider)
  7. : AsyncCommand<UpsNameSettings> {
  8. public override async Task<int> ExecuteAsync(
  9. CommandContext context,
  10. UpsNameSettings settings,
  11. CancellationToken cancellationToken) {
  12. using IServiceScope scope = provider.CreateScope();
  13. DescribeUpsUseCase useCase = scope.ServiceProvider.GetRequiredService<DescribeUpsUseCase>();
  14. UpsDescription ups = await useCase.ExecuteAsync(settings.Name);
  15. Grid grid = new Grid()
  16. .AddColumn()
  17. .AddColumn();
  18. grid.AddRow("Name:", ups.Name);
  19. grid.AddRow("Model:", ups.Model ?? "Unknown");
  20. grid.AddRow("VA:", ups.Va?.ToString() ?? "Unknown");
  21. if (ups.Labels.Count > 0)
  22. grid.AddRow("Labels:", string.Join(", ", ups.Labels.Select(kvp => $"{kvp.Key}: {kvp.Value}")));
  23. AnsiConsole.Write(new Panel(grid).Header("UPS").Border(BoxBorder.Rounded));
  24. return 0;
  25. }
  26. }