Przeglądaj źródła

Deserialization test + adding GPU to report

James 2 miesięcy temu
rodzic
commit
12046213cd

+ 0 - 1
.idea/.idea.RackPeek/.idea/.name

@@ -1 +0,0 @@
-RackPeek

+ 20 - 0
RackPeek.Domain/Resources/Hardware/Reports/ServerHardwareReport.cs

@@ -17,7 +17,11 @@ public record ServerHardwareRow(
     int HddStorageGb,
     int TotalNicPorts,
     int MaxNicSpeedGb,
+    int GpuCount,
+    int TotalGpuVramGb,
+    string GpuSummary,
     bool Ipmi
+    
 );
 
 public class ServerHardwareReportUseCase(IHardwareRepository repository)
@@ -51,6 +55,19 @@ public class ServerHardwareReportUseCase(IHardwareRepository repository)
 
             var totalNicPorts = server.Nics?.Sum(n => n.Ports) ?? 0;
             var maxNicSpeed = server.Nics?.Max(n => n.Speed) ?? 0;
+            
+            var gpuCount = server.Gpus?.Count ?? 0;
+
+            var totalGpuVram = server.Gpus?
+                .Sum(g => g.Vram) ?? 0;
+
+            var gpuSummary = server.Gpus == null || server.Gpus.Count == 0
+                ? "None"
+                : string.Join(", ",
+                    server.Gpus
+                        .GroupBy(g => g.Model)
+                        .Select(g => $"{g.Count()}× {g.Key}"));
+
 
             return new ServerHardwareRow(
                 Name: server.Name,
@@ -63,6 +80,9 @@ public class ServerHardwareReportUseCase(IHardwareRepository repository)
                 HddStorageGb: hddStorage,
                 TotalNicPorts: totalNicPorts,
                 MaxNicSpeedGb: maxNicSpeed,
+                GpuCount: gpuCount,
+                TotalGpuVramGb: totalGpuVram,
+                GpuSummary: gpuSummary,
                 Ipmi: server.Ipmi ?? false
             );
         }).ToList();

+ 10 - 6
RackPeek/Commands/ServerReportCommand.cs

@@ -29,17 +29,21 @@ public class ServerReportCommand(ILogger<ServerReportCommand> logger, IServicePr
             .AddColumn("RAM")
             .AddColumn("Storage")
             .AddColumn("NICs")
+            .AddColumn("GPUs")
             .AddColumn("IPMI");
 
         foreach (var s in report.Servers)
         {
             table.AddRow(
-                s.Name,
-                s.CpuSummary,
-                $"{s.TotalCores}/{s.TotalThreads}",
-                $"{s.RamGb} GB",
-                $"{s.TotalStorageGb} GB (SSD {s.SsdStorageGb} / HDD {s.HddStorageGb})",
-                $"{s.TotalNicPorts}×{s.MaxNicSpeedGb}G",
+                    s.Name,
+                    s.CpuSummary,
+                    $"{s.TotalCores}/{s.TotalThreads}",
+                    $"{s.RamGb} GB",
+                    $"{s.TotalStorageGb} GB (SSD {s.SsdStorageGb} / HDD {s.HddStorageGb})",
+                    $"{s.TotalNicPorts}×{s.MaxNicSpeedGb}G",
+                    s.GpuCount == 0
+                        ? "[grey]none[/]"
+                        : $"{s.GpuSummary} ({s.TotalGpuVramGb} GB VRAM)",
                 s.Ipmi ? "[green]yes[/]" : "[red]no[/]"
             );
         }

+ 252 - 0
RackPeek/servers.yaml

@@ -43,6 +43,50 @@ resources:
         ports: 2
     ipmi: true
 
+  - kind: Server
+    name: dell-c6400-node03
+    cpus:
+      - model: Intel(R) Xeon(R) Silver 4110
+        cores: 8
+        threads: 16
+    ram:
+      size: 64gb
+      mts: 2400
+    drives:
+      - type: ssd
+        size: 480gb
+      - type: ssd
+        size: 480gb
+    nics:
+      - type: rj45
+        speed: 1gb
+        ports: 2
+      - type: sfp+
+        speed: 10gb
+        ports: 2
+    ipmi: true
+
+  - kind: Server
+    name: dell-c6400-node04
+    cpus:
+      - model: Intel(R) Xeon(R) Silver 4110
+        cores: 8
+        threads: 16
+    ram:
+      size: 128gb
+      mts: 2400
+    drives:
+      - type: ssd
+        size: 960gb
+    nics:
+      - type: rj45
+        speed: 1gb
+        ports: 2
+      - type: sfp+
+        speed: 10gb
+        ports: 2
+    ipmi: true
+
   - kind: Server
     name: truenas-storage01
     cpus:
@@ -125,4 +169,212 @@ resources:
         speed: 1gb
         ports: 1
     ipmi: true
+  
+  - kind: Server
+    name: truenas-backup01
+    cpus:
+      - model: Intel(R) Xeon(R) E5-2630 v4
+        cores: 10
+        threads: 20
+    ram:
+      size: 64gb
+      mts: 2133
+    drives:
+      - type: hdd
+        size: 6tb
+      - type: hdd
+        size: 6tb
+      - type: hdd
+        size: 6tb
+      - type: hdd
+        size: 6tb
+      - type: ssd
+        size: 240gb
+    nics:
+      - type: rj45
+        speed: 1gb
+        ports: 2
+      - type: sfp+
+        speed: 10gb
+        ports: 1
+    ipmi: true
+
+  - kind: Server
+    name: compute-gpu01
+    cpus:
+      - model: Intel(R) Xeon(R) Silver 4214
+        cores: 12
+        threads: 24
+    ram:
+      size: 128gb
+      mts: 2666
+    drives:
+      - type: ssd
+        size: 1tb
+    gpus:
+      - model: NVIDIA Tesla P40
+        vram: 24gb
+      - model: NVIDIA Tesla P40
+        vram: 24gb  
+      - model: NVIDIA Tesla P4
+        vram: 8Gb  
+    nics:
+      - type: sfp+
+        speed: 10gb
+        ports: 2
+    ipmi: true
+
+  - kind: Server
+    name: proxmox-lab01
+    cpus:
+      - model: Intel(R) Xeon(R) E3-1240 v5
+        cores: 4
+        threads: 8
+    ram:
+      size: 32gb
+      mts: 2133
+    drives:
+      - type: ssd
+        size: 512gb
+    nics:
+      - type: rj45
+        speed: 1gb
+        ports: 2
+    ipmi: true
+
+  - kind: Server
+    name: k8s-control01
+    cpus:
+      - model: Intel(R) Xeon(R) E-2224
+        cores: 4
+        threads: 4
+    ram:
+      size: 16gb
+      mts: 2666
+    drives:
+      - type: ssd
+        size: 256gb
+    nics:
+      - type: rj45
+        speed: 1gb
+        ports: 2
+    ipmi: true
+
+  - kind: Server
+    name: k8s-control02
+    cpus:
+      - model: Intel(R) Xeon(R) E-2224
+        cores: 4
+        threads: 4
+    ram:
+      size: 16gb
+      mts: 2666
+    drives:
+      - type: ssd
+        size: 256gb
+    nics:
+      - type: rj45
+        speed: 1gb
+        ports: 2
+    ipmi: true
+
+  - kind: Server
+    name: elk-logging01
+    cpus:
+      - model: Intel(R) Xeon(R) Silver 4108
+        cores: 8
+        threads: 16
+    ram:
+      size: 64gb
+      mts: 2400
+    drives:
+      - type: ssd
+        size: 1tb
+      - type: ssd
+        size: 1tb
+    nics:
+      - type: sfp+
+        speed: 10gb
+        ports: 1
+    ipmi: true
+
+  - kind: Server
+    name: edge-node01
+    cpus:
+      - model: Intel(R) Core(TM) i3-8100
+        cores: 4
+        threads: 4
+    ram:
+      size: 16gb
+      mts: 2400
+    drives:
+      - type: ssd
+        size: 256gb
+    nics:
+      - type: rj45
+        speed: 1gb
+        ports: 2
+    ipmi: false
+
+  - kind: Server
+    name: backup-proxmox01
+    cpus:
+      - model: Intel(R) Xeon(R) E5-1650 v3
+        cores: 6
+        threads: 12
+    ram:
+      size: 64gb
+      mts: 2133
+    drives:
+      - type: ssd
+        size: 480gb
+      - type: hdd
+        size: 4tb
+    nics:
+      - type: rj45
+        speed: 1gb
+        ports: 4
+    ipmi: true
+
+  - kind: Server
+    name: lab-general01
+    cpus:
+      - model: Intel(R) Core(TM) i7-8700
+        cores: 6
+        threads: 12
+    ram:
+      size: 32gb
+      mts: 2666
+    drives:
+      - type: ssd
+        size: 512gb
+    nics:
+      - type: rj45
+        speed: 1gb
+        ports: 1
+    ipmi: false
+
+  - kind: Server
+    name: dell-r730-archive01
+    cpus:
+      - model: Intel(R) Xeon(R) E5-2650 v3
+        cores: 10
+        threads: 20
+    ram:
+      size: 128gb
+      mts: 2133
+    drives:
+      - type: hdd
+        size: 4tb
+      - type: hdd
+        size: 4tb
+      - type: hdd
+        size: 4tb
+      - type: hdd
+        size: 4tb
+    nics:
+      - type: sfp+
+        speed: 10gb
+        ports: 2
+    ipmi: true
 

+ 9 - 0
Tests/Yaml/HardwareDeserializationTests.cs

@@ -60,6 +60,9 @@ resources:
           size: 2Tb
         - type: ssd
           size: 256gb
+    gpus:
+        - model: NVIDIA Tesla T4
+          vram: 16gb
     nics:
         - type: rj45
           speed: 1gb
@@ -101,6 +104,12 @@ resources:
         var ssd = server.Drives[1];
         Assert.Equal("ssd", ssd.Type);
         Assert.Equal(256, ssd.Size);
+        
+        //GPUs
+        Assert.NotNull(server.Gpus);
+        var gpu = server.Gpus[0];
+        Assert.Equal("NVIDIA Tesla T4", gpu.Model);
+        Assert.Equal(16, gpu.Vram);
 
         // ipmi
         Assert.True(server.Ipmi);