ServerDescribeCommand.cs 1.6 KB

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