4
0

DescribeServerUseCase.cs 1.2 KB

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