HardwareRepository.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using RackPeek.Domain.Resources.Hardware;
  2. namespace RackPeek.Domain.Persistence;
  3. public class YamlHardwareRepository(IResourceCollection resources) : IHardwareRepository
  4. {
  5. public Task<int> GetCountAsync()
  6. {
  7. return Task.FromResult(resources.HardwareResources.Count);
  8. }
  9. public Task<Dictionary<string, int>> GetKindCountAsync()
  10. {
  11. return Task.FromResult(resources.HardwareResources
  12. .GroupBy(h => h.Kind)
  13. .ToDictionary(k => k.Key, v => v.Count()));
  14. }
  15. public Task<List<HardwareTree>> GetTreeAsync()
  16. {
  17. var hardwareTree = new List<HardwareTree>();
  18. // List<string> systemGroups = resources.SystemResources.ToList<string>();
  19. // .Where(s => s.RunsOn != null)
  20. // .ToList();
  21. var systemGroups = resources.SystemResources
  22. // .Where(s => !string.IsNullOrWhiteSpace(s.RunsOn))
  23. // .Where(s => s.RunsOn != null)
  24. // TODO: Get rid of 'First'
  25. .GroupBy(s => s.RunsOn.First().Trim(), StringComparer.OrdinalIgnoreCase)
  26. .ToDictionary(g => g.Key, g => g.ToList(), StringComparer.OrdinalIgnoreCase);
  27. var serviceGroups = resources.ServiceResources
  28. // .Where(s => !string.IsNullOrWhiteSpace(s.RunsOn))
  29. // TODO: Get rid of 'First'
  30. .GroupBy(s => s.RunsOn.First().Trim(), StringComparer.OrdinalIgnoreCase)
  31. .ToDictionary(g => g.Key, g => g.ToList(), StringComparer.OrdinalIgnoreCase);
  32. foreach (var hardware in resources.HardwareResources)
  33. {
  34. var systems = new List<SystemTree>();
  35. var hardwareKey = hardware.Name.Trim();
  36. if (systemGroups.TryGetValue(hardwareKey, out var systemResources))
  37. foreach (var system in systemResources)
  38. {
  39. var services = new List<string>();
  40. var systemKey = system.Name.Trim();
  41. if (serviceGroups.TryGetValue(systemKey, out var serviceResources))
  42. services.AddRange(serviceResources.Select(s => s.Name));
  43. systems.Add(new SystemTree
  44. {
  45. SystemName = system.Name,
  46. Services = services
  47. });
  48. }
  49. hardwareTree.Add(new HardwareTree
  50. {
  51. Kind = hardware.Kind,
  52. HardwareName = hardware.Name,
  53. Systems = systems
  54. });
  55. }
  56. return Task.FromResult(hardwareTree);
  57. }
  58. }