DescribeServerUseCase.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using RackPeek.Domain.Resources.Hardware.Models;
  2. namespace RackPeek.Domain.Resources.Hardware.Crud;
  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)
  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. Name: server.Name,
  28. CpuSummary: cpuSummary,
  29. TotalCores: server.Cpus?.Sum(c => c.Cores) ?? 0,
  30. TotalThreads: server.Cpus?.Sum(c => c.Threads) ?? 0,
  31. RamGb: server.Ram?.Size ?? 0,
  32. TotalStorageGb: server.Drives?.Sum(d => d.Size) ?? 0,
  33. NicPorts: server.Nics?.Sum(n => n.Ports) ?? 0,
  34. Ipmi: server.Ipmi ?? false
  35. );
  36. }
  37. }