ServerDescribeCommand.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using Microsoft.Extensions.DependencyInjection;
  2. using RackPeek.Domain.Resources.Hardware.Servers;
  3. using Spectre.Console;
  4. using Spectre.Console.Cli;
  5. namespace RackPeek.Commands.Servers;
  6. public class ServerDescribeCommand(
  7. IServiceProvider serviceProvider
  8. ) : AsyncCommand<ServerNameSettings>
  9. {
  10. public override async Task<int> ExecuteAsync(
  11. CommandContext context,
  12. ServerNameSettings settings,
  13. CancellationToken cancellationToken)
  14. {
  15. using var scope = serviceProvider.CreateScope();
  16. var useCase = scope.ServiceProvider.GetRequiredService<GetServerUseCase>();
  17. var server = await useCase.ExecuteAsync(settings.Name);
  18. var grid = new Grid()
  19. .AddColumn()
  20. .AddColumn();
  21. grid.AddRow("Name", server.Name);
  22. grid.AddRow("IPMI", server.Ipmi == true ? "yes" : "no");
  23. grid.AddRow("RAM", $"{server.Ram?.Size ?? 0} GB");
  24. if (server.Cpus != null)
  25. foreach (var cpu in server.Cpus)
  26. grid.AddRow("CPU", $"{cpu.Model} ({cpu.Cores}/{cpu.Threads})");
  27. AnsiConsole.Write(
  28. new Panel(grid)
  29. .Header("Server")
  30. .Border(BoxBorder.Rounded));
  31. return 0;
  32. }
  33. }