UpsReportCommand.cs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  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 UpsReportCommand(
  7. IServiceProvider serviceProvider
  8. ) : AsyncCommand {
  9. public override async Task<int> ExecuteAsync(CommandContext context, CancellationToken cancellationToken) {
  10. using IServiceScope scope = serviceProvider.CreateScope();
  11. UpsHardwareReportUseCase useCase = scope.ServiceProvider.GetRequiredService<UpsHardwareReportUseCase>();
  12. UpsHardwareReport report = await useCase.ExecuteAsync();
  13. if (report.UpsUnits.Count == 0) {
  14. AnsiConsole.MarkupLine("[yellow]No UPS units found.[/]");
  15. return 0;
  16. }
  17. Table table = new Table()
  18. .Border(TableBorder.Rounded)
  19. .AddColumn("Name")
  20. .AddColumn("Model")
  21. .AddColumn("VA");
  22. foreach (UpsHardwareRow u in report.UpsUnits)
  23. table.AddRow(
  24. u.Name,
  25. u.Model,
  26. u.Va.ToString()
  27. );
  28. AnsiConsole.Write(table);
  29. return 0;
  30. }
  31. }