SystemDescribeCommand.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using Microsoft.Extensions.DependencyInjection;
  2. using RackPeek.Domain.Resources.SystemResources.UseCases;
  3. using Shared.Rcl.Commands;
  4. using Spectre.Console;
  5. using Spectre.Console.Cli;
  6. namespace Shared.Rcl.Commands.Systems;
  7. public class SystemDescribeCommand(
  8. IServiceProvider serviceProvider
  9. ) : AsyncCommand<SystemNameSettings> {
  10. public override async Task<int> ExecuteAsync(
  11. CommandContext context,
  12. SystemNameSettings settings,
  13. CancellationToken cancellationToken) {
  14. using IServiceScope scope = serviceProvider.CreateScope();
  15. DescribeSystemUseCase useCase = scope.ServiceProvider.GetRequiredService<DescribeSystemUseCase>();
  16. SystemDescription system = await useCase.ExecuteAsync(settings.Name);
  17. Grid grid = new Grid()
  18. .AddColumn(new GridColumn().NoWrap())
  19. .AddColumn(new GridColumn().NoWrap());
  20. grid.AddRow("Name:", system.Name.EscapeMarkup());
  21. grid.AddRow("Type:", (system.Type ?? "Unknown").EscapeMarkup());
  22. grid.AddRow("OS:", (system.Os ?? "Unknown").EscapeMarkup());
  23. grid.AddRow("Cores:", system.Cores.ToString());
  24. grid.AddRow("RAM (GB):", system.RamGb.ToString());
  25. grid.AddRow("Total Storage (GB):", system.TotalStorageGb.ToString());
  26. grid.AddRow("Runs On:", (string.Join(", ", system.RunsOn) ?? "Unknown").EscapeMarkup());
  27. if (system.Labels.Count > 0)
  28. grid.AddRow("Labels:", string.Join(", ", system.Labels.Select(kvp => $"{kvp.Key.EscapeMarkup()}: {kvp.Value.EscapeMarkup()}")));
  29. AnsiConsole.Write(
  30. new Panel(grid)
  31. .Header("System")
  32. .Border(BoxBorder.Rounded));
  33. return 0;
  34. }
  35. }