DescribeServerUseCase.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. namespace RackPeek.Domain.Resources.Hardware.Server;
  2. public record ServerDescription(
  3. string Name,
  4. string CpuSummary,
  5. int TotalCores,
  6. int TotalThreads,
  7. int RamGb,
  8. int TotalStorageGb,
  9. int NicPorts,
  10. bool Ipmi
  11. );
  12. public class DescribeServerUseCase(IHardwareRepository repository)
  13. {
  14. public async Task<ServerDescription?> ExecuteAsync(string name)
  15. {
  16. var server = await repository.GetByNameAsync(name) as Models.Server;
  17. if (server == null)
  18. return null;
  19. var cpuSummary = server.Cpus == null
  20. ? "Unknown"
  21. : string.Join(", ",
  22. server.Cpus
  23. .GroupBy(c => c.Model)
  24. .Select(g => $"{g.Count()}× {g.Key}"));
  25. return new ServerDescription(
  26. server.Name,
  27. cpuSummary,
  28. server.Cpus?.Sum(c => c.Cores) ?? 0,
  29. server.Cpus?.Sum(c => c.Threads) ?? 0,
  30. server.Ram?.Size ?? 0,
  31. server.Drives?.Sum(d => d.Size) ?? 0,
  32. server.Nics?.Sum(n => n.Ports) ?? 0,
  33. server.Ipmi ?? false
  34. );
  35. }
  36. }