Pārlūkot izejas kodu

Improved webui list view ordering

Tim Jones 2 mēneši atpakaļ
vecāks
revīzija
89947fb086

BIN
RackPeek.Web/.DS_Store


+ 0 - 0
RackPeek.Web/Components/Pages/HardwareDetailsPage.razor → RackPeek.Web/Components/Hardware/HardwareDetailsPage.razor


+ 3 - 2
RackPeek.Web/Components/Pages/HardwareTreePage.razor → RackPeek.Web/Components/Hardware/HardwareTreePage.razor

@@ -34,7 +34,8 @@
     else
     {
         @foreach (var group in _tree
-                          .OrderBy(h => h.Kind)
+                          .OrderByDescending(h => h.Systems.Count)
+                          .ThenBy(h => h.Kind)
                           .ThenBy(h => h.HardwareName)
                           .GroupBy(h => h.Kind))
         {
@@ -69,7 +70,7 @@
                             @if (hardware.Systems.Any())
                             {
                                 <ul class="ml-4 mt-2 border-l border-zinc-800 pl-4 space-y-2">
-                                    @foreach (var system in hardware.Systems.OrderBy(s => s.SystemName))
+                                    @foreach (var system in hardware.Systems.OrderByDescending(s => s.Services.Count).ThenBy(s => s.SystemName))
                                     {
                                         <li>
                                             <!-- System -->

+ 7 - 4
RackPeek.Web/Components/Services/ServicesListComponent.razor

@@ -20,11 +20,14 @@
     else
     {
         <div class="space-y-4">
-            @foreach (var svc in _services.OrderBy(s => s.Name))
+            @foreach (var group in _services.OrderBy(s => s.Name).GroupBy(s => s.RunsOn).OrderByDescending(g => g.Count()))
             {
-                <NavLink href="@($"/resources/services/{svc.Name}")" class="block">
-                    <ServiceCardComponent TService="Service" Service="svc" OnSave="UpdateService"/>
-                </NavLink>
+                foreach (var svc in group)
+                {
+                    <NavLink href="@($"/resources/services/{svc.Name}")" class="block">
+                        <ServiceCardComponent TService="Service" Service="svc" OnSave="UpdateService"/>
+                    </NavLink>
+                }
             }
         </div>
     }

+ 8 - 4
RackPeek.Web/Components/Systems/SystemsListComponent.razor

@@ -19,11 +19,15 @@
     else
     {
         <div class="space-y-4">
-            @foreach (var system in _systems.OrderBy(s => s.Name))
+            @foreach (var group in _systems.OrderBy(s => s.Name).GroupBy(s => s.RunsOn).OrderByDescending(g => g.Count()))
             {
-                <NavLink href="@($"/resources/systems/{system.Name}")" class="block">
-                    <SystemCardComponent System="system" OnSave="UpdateSystem"/>
-                </NavLink>
+                foreach (var systemResource in group)
+                {
+                    <NavLink href="@($"/resources/systems/{systemResource.Name}")" class="block">
+                        <SystemCardComponent System="systemResource" OnSave="UpdateSystem"/>
+                    </NavLink>
+                }
+      
             }
         </div>
     }

+ 636 - 0
RackPeek.Web/config copy/Services.yaml

@@ -0,0 +1,636 @@
+resources:
+- kind: Service
+  network:
+    ip: 192.168.0.10
+    port: 8096
+    protocol: TCP
+    url: http://jellyfin.lan:8096
+  runsOn: docker-host
+  name: jellyfin
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.0.11
+    port: 32400
+    protocol: TCP
+    url: http://plex.lan:32400
+  runsOn: proxmox-host
+  name: plex
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.1.20
+    port: 8123
+    protocol: TCP
+    url: http://ha.lan:8123
+  runsOn: k8s-node-1
+  name: home-assistant
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.1.2
+    port: 53
+    protocol: UDP
+    url: http://pihole.lan/admin
+  runsOn: baremetal-rpi4
+  name: pihole
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.1.5
+    port: 8443
+    protocol: TCP
+    url: https://unifi.lan:8443
+  runsOn: vm-cluster-1
+  name: unifi-controller
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.0.15
+    port: 8384
+    protocol: TCP
+    url: http://sync.internal:8384
+  runsOn: docker-host
+  name: syncthing
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.0.20
+    port: 3000
+    protocol: TCP
+    url: http://grafana.internal:3000
+  runsOn: monitoring-node
+  name: grafana
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.0.21
+    port: 9090
+    protocol: TCP
+    url: http://prometheus.internal:9090
+  runsOn: monitoring-node
+  name: prometheus
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.0.22
+    port: 3100
+    protocol: TCP
+    url: http://loki.internal:3100
+  runsOn: monitoring-node
+  name: loki
+  tags: 
+- kind: Service
+  network:
+    ip: 172.16.0.10
+    port: 9000
+    protocol: TCP
+    url: http://minio.storage:9000
+  runsOn: storage-node-1
+  name: minio
+  tags: 
+- kind: Service
+  network:
+    ip: 172.16.0.11
+    port: 443
+    protocol: TCP
+    url: https://nextcloud.storage
+  runsOn: storage-node-2
+  name: nextcloud
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.0.30
+    port: 8081
+    protocol: TCP
+    url: http://vault.lan:8081
+  runsOn: docker-host
+  name: vaultwarden
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.0.2
+    port: 80
+    protocol: TCP
+    url: http://traefik.lan
+  runsOn: k8s-node-1
+  name: traefik
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.0.3
+    port: 443
+    protocol: TCP
+    url: https://proxy.lan
+  runsOn: docker-host
+  name: nginx-reverse-proxy
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.0.40
+    port: 8080
+    protocol: TCP
+    url: http://torrent.lan:8080
+  runsOn: proxmox-host
+  name: qbittorrent
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.0.41
+    port: 7878
+    protocol: TCP
+    url: http://radarr.lan:7878
+  runsOn: docker-host
+  name: radarr
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.0.43
+    port: 9696
+    protocol: TCP
+    url: http://prowlarr.lan:9696
+  runsOn: docker-host
+  name: prowlarr
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.0.43
+    port: 9696
+    protocol: TCP
+    url: http://prowlarr.lan:9696
+  runsOn: docker-host
+  name: prowlarr
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.0.44
+    port: 8085
+    protocol: TCP
+    url: http://sabnzbd.lan:8085
+  runsOn: docker-host
+  name: sabnzbd
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.1.31
+    port: 1883
+    protocol: TCP
+    url: mqtt://mqtt.lan:1883
+  runsOn: docker-host
+  name: mosquitto-mqtt
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.1.32
+    port: 8080
+    protocol: TCP
+    url: http://z2m.lan:8080
+  runsOn: docker-host
+  name: zigbee2mqtt
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.1.10
+    port: 5432
+    protocol: TCP
+    url: postgres://db.internal:5432
+  runsOn: db-node-1
+  name: postgres-main
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.1.11
+    port: 3306
+    protocol: TCP
+    url: mysql://mariadb.internal:3306
+  runsOn: db-node-2
+  name: mariadb
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.1.12
+    port: 6379
+    protocol: TCP
+    url: redis://redis.internal:6379
+  runsOn: cache-node
+  name: redis-cache
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.2.10
+    port: 9200
+    protocol: TCP
+    url: http://es.internal:9200
+  runsOn: search-node
+  name: elasticsearch
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.2.11
+    port: 5601
+    protocol: TCP
+    url: http://kibana.internal:5601
+  runsOn: search-node
+  name: kibana
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.0.50
+    port: 3001
+    protocol: TCP
+    url: http://uptime.lan:3001
+  runsOn: docker-host
+  name: uptime-kuma
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.1.100
+    port: 51820
+    protocol: UDP
+    url: wg://vpn.lan
+  runsOn: baremetal-rpi4
+  name: wireguard-vpn
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.1.101
+    port: 1194
+    protocol: UDP
+    url: ovpn://openvpn.lan
+  runsOn: vm-cluster-2
+  name: openvpn
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.3.10
+    port: 443
+    protocol: TCP
+    url: https://gitlab.internal
+  runsOn: dev-node-1
+  name: gitlab
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.3.11
+    port: 3000
+    protocol: TCP
+    url: http://gitea.internal:3000
+  runsOn: dev-node-2
+  name: gitea
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.3.12
+    port: 8080
+    protocol: TCP
+    url: http://drone.internal:8080
+  runsOn: dev-node-2
+  name: drone-ci
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.3.13
+    port: 5000
+    protocol: TCP
+    url: http://harbor.internal:5000
+  runsOn: dev-node-3
+  name: harbor-registry
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.4.1
+    port: 6443
+    protocol: TCP
+    url: https://k8s-api.internal:6443
+  runsOn: k8s-control-plane
+  name: kubernetes-api
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.4.20
+    port: 9500
+    protocol: TCP
+    url: http://longhorn.internal:9500
+  runsOn: k8s-node-3
+  name: longhorn-ui
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.4.21
+    port: 8443
+    protocol: TCP
+    url: https://ceph.internal:8443
+  runsOn: k8s-node-3
+  name: rook-ceph-dashboard
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.0.60
+    port: 445
+    protocol: TCP
+    url: smb://fileserver.lan
+  runsOn: storage-node-1
+  name: samba-fileserver
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.0.61
+    port: 2049
+    protocol: TCP
+    url: nfs://nfs.lan
+  runsOn: dell-c6400-node01
+  name: nfs-server
+  tags: 
+- kind: Service
+  network:
+    ip: 172.16.1.10
+    port: 3260
+    protocol: TCP
+    url: iscsi://iscsi.storage
+  runsOn: storage-node-3
+  name: iscsi-target
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.0.70
+    port: 8083
+    protocol: TCP
+    url: http://books.lan:8083
+  runsOn: docker-host
+  name: calibre-web
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.0.71
+    port: 8000
+    protocol: TCP
+    url: http://docs.lan:8000
+  runsOn: dell-c6400-node01
+  name: paperless-ngx
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.5.10
+    port: 389
+    protocol: TCP
+    url: ldap://ldap.internal:389
+  runsOn: dell-c6400-node01
+  name: openldap
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.5.10
+    port: 389
+    protocol: TCP
+    url: ldap://ldap.internal:389
+  runsOn: dell-c6400-node01
+  name: openldap
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.1.50
+    port: 123
+    protocol: UDP
+    url: ntp://ntp.lan
+  runsOn: baremetal-rpi3
+  name: ntp-server
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.6.10
+    port: 514
+    protocol: UDP
+    url: syslog://syslog.internal
+  runsOn: monitoring-node
+  name: syslog-server
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.1.1
+    port: 67
+    protocol: UDP
+    url: dhcp://dhcp.lan
+  runsOn: router-appliance
+  name: dhcp-server
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.7.10
+    port: 53
+    protocol: UDP
+    url: dns://dns.internal
+  runsOn: infra-node
+  name: bind-dns
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.7.11
+    port: 8200
+    protocol: TCP
+    url: http://vault.internal:8200
+  runsOn: infra-node
+  name: vault
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.7.12
+    port: 8500
+    protocol: TCP
+    url: http://consul.internal:8500
+  runsOn: infra-node
+  name: consul
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.7.13
+    port: 4646
+    protocol: TCP
+    url: http://nomad.internal:4646
+  runsOn: infra-node
+  name: nomad
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.1.40
+    port: 8080
+    protocol: TCP
+    url: http://openhab.lan:8080
+  runsOn: k8s-node-2
+  name: openhab
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.1.41
+    port: 4000
+    protocol: TCP
+    url: http://mqtt-explorer.lan:4000
+  runsOn: docker-host
+  name: mqtt-explorer
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.8.10
+    port: 8086
+    protocol: TCP
+    url: http://influx.internal:8086
+  runsOn: monitoring-node
+  name: influxdb
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.8.11
+    port: 8125
+    protocol: UDP
+    url: statsd://telegraf.internal
+  runsOn: monitoring-node
+  name: telegraf
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.0.80
+    port: 8080
+    protocol: TCP
+    url: http://speedtest.lan:8080
+  runsOn: docker-host
+  name: speedtest-tracker
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.0.81
+    port: 4533
+    protocol: TCP
+    url: http://music.lan:4533
+  runsOn: docker-host
+  name: navidrome
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.0.82
+    port: 2342
+    protocol: TCP
+    url: http://photos.lan:2342
+  runsOn: docker-host
+  name: photoprism
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.9.10
+    port: 53
+    protocol: UDP
+    url: dns://dnsdist.internal
+  runsOn: infra-node
+  name: dnsdist
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.9.11
+    port: 8081
+    protocol: TCP
+    url: http://pdns.internal:8081
+  runsOn: infra-node
+  name: powerdns
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.10.10
+    port: 8080
+    protocol: TCP
+    url: http://openproject.internal:8080
+  runsOn: dev-node-3
+  name: openproject
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.10.11
+    port: 8065
+    protocol: TCP
+    url: http://chat.internal:8065
+  runsOn: dev-node-3
+  name: mattermost
+  tags: 
+- kind: Service
+  network:
+    ip: 10.0.10.12
+    port: 3000
+    protocol: TCP
+    url: http://rocket.internal:3000
+  runsOn: dev-node-3
+  name: rocket-chat
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.0.4
+    port: 80801
+    protocol: TCP
+    url: http://immich.lan:8080
+  runsOn: proxmox-host
+  name: immich
+  tags: 
+- kind: Service
+  network:
+    ip: 192.168.1.3
+    port: 3002
+    protocol: TCP
+    url: http://adguard.lan:3002
+  runsOn: docker-host
+  name: adguard-home
+  tags: 
+- kind: Server
+  cpus: 
+  ram: 
+  drives: 
+  nics: 
+  gpus: 
+  ipmi: 
+  name: test
+  tags: 
+- kind: Server
+  cpus: 
+  ram: 
+  drives: 
+  nics: 
+  gpus: 
+  ipmi: 
+  name: mr-server
+  tags: 
+- kind: Server
+  cpus: 
+  ram: 
+  drives: 
+  nics: 
+  gpus: 
+  ipmi: 
+  name: new server
+  tags: 
+- kind: Server
+  cpus: 
+  ram: 
+  drives: 
+  nics: 
+  gpus: 
+  ipmi: 
+  name: new server
+  tags: 
+- kind: System
+  type: 
+  os: 
+  cores: 
+  ram: 
+  drives: 
+  runsOn: 
+  name: new-system
+  tags: 
+- kind: System
+  type: 
+  os: 
+  cores: 
+  ram: 
+  drives: 
+  runsOn: 
+  name: new-system
+  tags: 
+- kind: Service
+  network: 
+  runsOn: 
+  name: new-service
+  tags: 

+ 208 - 0
RackPeek.Web/config copy/Systems.yaml

@@ -0,0 +1,208 @@
+resources:
+- kind: System
+  type: KubernetesNode
+  os: ubuntu
+  cores: 8
+  ram: 32
+  drives: 
+  runsOn: dell-c6400-node01
+  name: k8s-node-1
+  tags: 
+- kind: System
+  type: KubernetesNode
+  os: ubuntu
+  cores: 8
+  ram: 32
+  drives: 
+  runsOn: dell-c6400-node01
+  name: k8s-node-2
+  tags: 
+- kind: System
+  type: KubernetesNode
+  os: ubuntu
+  cores: 8
+  ram: 32
+  drives: 
+  runsOn: dell-c6400-node01
+  name: k8s-node-3
+  tags: 
+- kind: System
+  type: KubernetesControlPlane
+  os: ubuntu
+  cores: 4
+  ram: 16
+  drives: 
+  runsOn: dell-c6400-node01
+  name: k8s-control-plane
+  tags: 
+- kind: System
+  type: Monitoring
+  os: ubuntu
+  cores: 8
+  ram: 32
+  drives: 
+  runsOn: dell-c6400-node01
+  name: monitoring-node
+  tags: 
+- kind: System
+  type: Storage
+  os: truenas
+  cores: 8
+  ram: 64
+  drives: 
+  runsOn: dell-c6400-node01
+  name: storage-node-1
+  tags: 
+- kind: System
+  type: Storage
+  os: truenas
+  cores: 8
+  ram: 64
+  drives: 
+  runsOn: dell-c6400-node01
+  name: storage-node-2
+  tags: 
+- kind: System
+  type: Storage
+  os: truenas
+  cores: 8
+  ram: 64
+  drives: 
+  runsOn: dell-c6400-node01
+  name: storage-node-3
+  tags: 
+- kind: System
+  type: Database
+  os: ubuntu
+  cores: 8
+  ram: 32
+  drives: 
+  runsOn: dell-c6400-node01
+  name: db-node-1
+  tags: 
+- kind: System
+  type: Database
+  os: ubuntu
+  cores: 8
+  ram: 32
+  drives: 
+  runsOn: dell-c6400-node01
+  name: db-node-2
+  tags: 
+- kind: System
+  type: Cache
+  os: ubuntu
+  cores: 4
+  ram: 16
+  drives: 
+  runsOn: dell-c6400-node01
+  name: cache-node
+  tags: 
+- kind: System
+  type: Search
+  os: ubuntu
+  cores: 8
+  ram: 32
+  drives: 
+  runsOn: dell-c6400-node01
+  name: search-node
+  tags: 
+- kind: System
+  type: Development
+  os: ubuntu
+  cores: 4
+  ram: 16
+  drives: 
+  runsOn: dell-c6400-node01
+  name: dev-node-1
+  tags: 
+- kind: System
+  type: Development
+  os: ubuntu
+  cores: 4
+  ram: 16
+  drives: 
+  runsOn: dell-c6400-node01
+  name: dev-node-2
+  tags: 
+- kind: System
+  type: Development
+  os: ubuntu
+  cores: 6
+  ram: 24
+  drives: 
+  runsOn: dell-c6400-node01
+  name: dev-node-3
+  tags: 
+- kind: System
+  type: VirtualMachineCluster
+  os: proxmox
+  cores: 12
+  ram: 48
+  drives: 
+  runsOn: dell-c6400-node01
+  name: vm-cluster-1
+  tags: 
+- kind: System
+  type: BareMetal
+  os: raspbian
+  cores: 4
+  ram: 8
+  drives: 
+  runsOn: rack-edge
+  name: baremetal-rpi4
+  tags: 
+- kind: System
+  type: BareMetal
+  os: raspbian
+  cores: 4
+  ram: 4
+  drives: 
+  runsOn: rack-edge
+  name: baremetal-rpi3
+  tags: 
+- kind: System
+  type: Infrastructure
+  os: ubuntu
+  cores: 4
+  ram: 16
+  drives: 
+  runsOn: dell-c6400-node01
+  name: infra-node
+  tags: 
+- kind: System
+  type: NetworkAppliance
+  os: openwrt
+  cores: 2
+  ram: 2
+  drives: 
+  runsOn: network-rack
+  name: router-appliance
+  tags: 
+- kind: System
+  type: Hypervisor
+  os: proxmox
+  cores: 16
+  ram: 61
+  drives: 
+  runsOn: dell-c6400-node01
+  name: proxmox-host
+  tags: 
+- kind: System
+  type: ContainerHost
+  os: ubuntu
+  cores: 12
+  ram: 26
+  drives: 
+  runsOn: dell-c6400-node01
+  name: docker-host
+  tags: 
+- kind: System
+  type: VirtualMachineCluster
+  os: proxmox
+  cores: 13
+  ram: 44
+  drives: 
+  runsOn: dell-c6400-node01
+  name: vm-cluster-2
+  tags: 

+ 0 - 0
RackPeek.Web/config/accesspoints.yaml → RackPeek.Web/config copy/accesspoints.yaml


+ 0 - 0
RackPeek.Web/config/desktops.yaml → RackPeek.Web/config copy/desktops.yaml


+ 0 - 0
RackPeek.Web/config/firewalls.yaml → RackPeek.Web/config copy/firewalls.yaml


+ 0 - 0
RackPeek.Web/config/laptops.yaml → RackPeek.Web/config copy/laptops.yaml


+ 0 - 0
RackPeek.Web/config/routers.yaml → RackPeek.Web/config copy/routers.yaml


+ 0 - 0
RackPeek.Web/config/servers.yaml → RackPeek.Web/config copy/servers.yaml


+ 0 - 0
RackPeek.Web/config/switches.yaml → RackPeek.Web/config copy/switches.yaml


+ 0 - 0
RackPeek.Web/config/ups.yaml → RackPeek.Web/config copy/ups.yaml


+ 152 - 635
RackPeek.Web/config/Services.yaml

@@ -1,636 +1,153 @@
 resources:
-- kind: Service
-  network:
-    ip: 192.168.0.10
-    port: 8096
-    protocol: TCP
-    url: http://jellyfin.lan:8096
-  runsOn: docker-host
-  name: jellyfin
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.0.11
-    port: 32400
-    protocol: TCP
-    url: http://plex.lan:32400
-  runsOn: proxmox-host
-  name: plex
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.1.20
-    port: 8123
-    protocol: TCP
-    url: http://ha.lan:8123
-  runsOn: k8s-node-1
-  name: home-assistant
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.1.2
-    port: 53
-    protocol: UDP
-    url: http://pihole.lan/admin
-  runsOn: baremetal-rpi4
-  name: pihole
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.1.5
-    port: 8443
-    protocol: TCP
-    url: https://unifi.lan:8443
-  runsOn: vm-cluster-1
-  name: unifi-controller
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.0.15
-    port: 8384
-    protocol: TCP
-    url: http://sync.internal:8384
-  runsOn: docker-host
-  name: syncthing
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.0.20
-    port: 3000
-    protocol: TCP
-    url: http://grafana.internal:3000
-  runsOn: monitoring-node
-  name: grafana
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.0.21
-    port: 9090
-    protocol: TCP
-    url: http://prometheus.internal:9090
-  runsOn: monitoring-node
-  name: prometheus
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.0.22
-    port: 3100
-    protocol: TCP
-    url: http://loki.internal:3100
-  runsOn: monitoring-node
-  name: loki
-  tags: 
-- kind: Service
-  network:
-    ip: 172.16.0.10
-    port: 9000
-    protocol: TCP
-    url: http://minio.storage:9000
-  runsOn: storage-node-1
-  name: minio
-  tags: 
-- kind: Service
-  network:
-    ip: 172.16.0.11
-    port: 443
-    protocol: TCP
-    url: https://nextcloud.storage
-  runsOn: storage-node-2
-  name: nextcloud
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.0.30
-    port: 8081
-    protocol: TCP
-    url: http://vault.lan:8081
-  runsOn: docker-host
-  name: vaultwarden
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.0.2
-    port: 80
-    protocol: TCP
-    url: http://traefik.lan
-  runsOn: k8s-node-1
-  name: traefik
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.0.3
-    port: 443
-    protocol: TCP
-    url: https://proxy.lan
-  runsOn: docker-host
-  name: nginx-reverse-proxy
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.0.40
-    port: 8080
-    protocol: TCP
-    url: http://torrent.lan:8080
-  runsOn: proxmox-host
-  name: qbittorrent
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.0.41
-    port: 7878
-    protocol: TCP
-    url: http://radarr.lan:7878
-  runsOn: docker-host
-  name: radarr
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.0.43
-    port: 9696
-    protocol: TCP
-    url: http://prowlarr.lan:9696
-  runsOn: docker-host
-  name: prowlarr
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.0.43
-    port: 9696
-    protocol: TCP
-    url: http://prowlarr.lan:9696
-  runsOn: docker-host
-  name: prowlarr
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.0.44
-    port: 8085
-    protocol: TCP
-    url: http://sabnzbd.lan:8085
-  runsOn: docker-host
-  name: sabnzbd
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.1.31
-    port: 1883
-    protocol: TCP
-    url: mqtt://mqtt.lan:1883
-  runsOn: docker-host
-  name: mosquitto-mqtt
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.1.32
-    port: 8080
-    protocol: TCP
-    url: http://z2m.lan:8080
-  runsOn: docker-host
-  name: zigbee2mqtt
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.1.10
-    port: 5432
-    protocol: TCP
-    url: postgres://db.internal:5432
-  runsOn: db-node-1
-  name: postgres-main
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.1.11
-    port: 3306
-    protocol: TCP
-    url: mysql://mariadb.internal:3306
-  runsOn: db-node-2
-  name: mariadb
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.1.12
-    port: 6379
-    protocol: TCP
-    url: redis://redis.internal:6379
-  runsOn: cache-node
-  name: redis-cache
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.2.10
-    port: 9200
-    protocol: TCP
-    url: http://es.internal:9200
-  runsOn: search-node
-  name: elasticsearch
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.2.11
-    port: 5601
-    protocol: TCP
-    url: http://kibana.internal:5601
-  runsOn: search-node
-  name: kibana
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.0.50
-    port: 3001
-    protocol: TCP
-    url: http://uptime.lan:3001
-  runsOn: docker-host
-  name: uptime-kuma
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.1.100
-    port: 51820
-    protocol: UDP
-    url: wg://vpn.lan
-  runsOn: baremetal-rpi4
-  name: wireguard-vpn
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.1.101
-    port: 1194
-    protocol: UDP
-    url: ovpn://openvpn.lan
-  runsOn: vm-cluster-2
-  name: openvpn
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.3.10
-    port: 443
-    protocol: TCP
-    url: https://gitlab.internal
-  runsOn: dev-node-1
-  name: gitlab
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.3.11
-    port: 3000
-    protocol: TCP
-    url: http://gitea.internal:3000
-  runsOn: dev-node-2
-  name: gitea
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.3.12
-    port: 8080
-    protocol: TCP
-    url: http://drone.internal:8080
-  runsOn: dev-node-2
-  name: drone-ci
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.3.13
-    port: 5000
-    protocol: TCP
-    url: http://harbor.internal:5000
-  runsOn: dev-node-3
-  name: harbor-registry
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.4.1
-    port: 6443
-    protocol: TCP
-    url: https://k8s-api.internal:6443
-  runsOn: k8s-control-plane
-  name: kubernetes-api
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.4.20
-    port: 9500
-    protocol: TCP
-    url: http://longhorn.internal:9500
-  runsOn: k8s-node-3
-  name: longhorn-ui
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.4.21
-    port: 8443
-    protocol: TCP
-    url: https://ceph.internal:8443
-  runsOn: k8s-node-3
-  name: rook-ceph-dashboard
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.0.60
-    port: 445
-    protocol: TCP
-    url: smb://fileserver.lan
-  runsOn: storage-node-1
-  name: samba-fileserver
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.0.61
-    port: 2049
-    protocol: TCP
-    url: nfs://nfs.lan
-  runsOn: dell-c6400-node01
-  name: nfs-server
-  tags: 
-- kind: Service
-  network:
-    ip: 172.16.1.10
-    port: 3260
-    protocol: TCP
-    url: iscsi://iscsi.storage
-  runsOn: storage-node-3
-  name: iscsi-target
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.0.70
-    port: 8083
-    protocol: TCP
-    url: http://books.lan:8083
-  runsOn: docker-host
-  name: calibre-web
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.0.71
-    port: 8000
-    protocol: TCP
-    url: http://docs.lan:8000
-  runsOn: dell-c6400-node01
-  name: paperless-ngx
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.5.10
-    port: 389
-    protocol: TCP
-    url: ldap://ldap.internal:389
-  runsOn: dell-c6400-node01
-  name: openldap
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.5.10
-    port: 389
-    protocol: TCP
-    url: ldap://ldap.internal:389
-  runsOn: dell-c6400-node01
-  name: openldap
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.1.50
-    port: 123
-    protocol: UDP
-    url: ntp://ntp.lan
-  runsOn: baremetal-rpi3
-  name: ntp-server
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.6.10
-    port: 514
-    protocol: UDP
-    url: syslog://syslog.internal
-  runsOn: monitoring-node
-  name: syslog-server
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.1.1
-    port: 67
-    protocol: UDP
-    url: dhcp://dhcp.lan
-  runsOn: router-appliance
-  name: dhcp-server
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.7.10
-    port: 53
-    protocol: UDP
-    url: dns://dns.internal
-  runsOn: infra-node
-  name: bind-dns
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.7.11
-    port: 8200
-    protocol: TCP
-    url: http://vault.internal:8200
-  runsOn: infra-node
-  name: vault
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.7.12
-    port: 8500
-    protocol: TCP
-    url: http://consul.internal:8500
-  runsOn: infra-node
-  name: consul
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.7.13
-    port: 4646
-    protocol: TCP
-    url: http://nomad.internal:4646
-  runsOn: infra-node
-  name: nomad
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.1.40
-    port: 8080
-    protocol: TCP
-    url: http://openhab.lan:8080
-  runsOn: k8s-node-2
-  name: openhab
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.1.41
-    port: 4000
-    protocol: TCP
-    url: http://mqtt-explorer.lan:4000
-  runsOn: docker-host
-  name: mqtt-explorer
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.8.10
-    port: 8086
-    protocol: TCP
-    url: http://influx.internal:8086
-  runsOn: monitoring-node
-  name: influxdb
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.8.11
-    port: 8125
-    protocol: UDP
-    url: statsd://telegraf.internal
-  runsOn: monitoring-node
-  name: telegraf
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.0.80
-    port: 8080
-    protocol: TCP
-    url: http://speedtest.lan:8080
-  runsOn: docker-host
-  name: speedtest-tracker
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.0.81
-    port: 4533
-    protocol: TCP
-    url: http://music.lan:4533
-  runsOn: docker-host
-  name: navidrome
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.0.82
-    port: 2342
-    protocol: TCP
-    url: http://photos.lan:2342
-  runsOn: docker-host
-  name: photoprism
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.9.10
-    port: 53
-    protocol: UDP
-    url: dns://dnsdist.internal
-  runsOn: infra-node
-  name: dnsdist
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.9.11
-    port: 8081
-    protocol: TCP
-    url: http://pdns.internal:8081
-  runsOn: infra-node
-  name: powerdns
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.10.10
-    port: 8080
-    protocol: TCP
-    url: http://openproject.internal:8080
-  runsOn: dev-node-3
-  name: openproject
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.10.11
-    port: 8065
-    protocol: TCP
-    url: http://chat.internal:8065
-  runsOn: dev-node-3
-  name: mattermost
-  tags: 
-- kind: Service
-  network:
-    ip: 10.0.10.12
-    port: 3000
-    protocol: TCP
-    url: http://rocket.internal:3000
-  runsOn: dev-node-3
-  name: rocket-chat
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.0.4
-    port: 80801
-    protocol: TCP
-    url: http://immich.lan:8080
-  runsOn: proxmox-host
-  name: immich
-  tags: 
-- kind: Service
-  network:
-    ip: 192.168.1.3
-    port: 3002
-    protocol: TCP
-    url: http://adguard.lan:3002
-  runsOn: docker-host
-  name: adguard-home
-  tags: 
-- kind: Server
-  cpus: 
-  ram: 
-  drives: 
-  nics: 
-  gpus: 
-  ipmi: 
-  name: test
-  tags: 
-- kind: Server
-  cpus: 
-  ram: 
-  drives: 
-  nics: 
-  gpus: 
-  ipmi: 
-  name: mr-server
-  tags: 
-- kind: Server
-  cpus: 
-  ram: 
-  drives: 
-  nics: 
-  gpus: 
-  ipmi: 
-  name: new server
-  tags: 
-- kind: Server
-  cpus: 
-  ram: 
-  drives: 
-  nics: 
-  gpus: 
-  ipmi: 
-  name: new server
-  tags: 
-- kind: System
-  type: 
-  os: 
-  cores: 
-  ram: 
-  drives: 
-  runsOn: 
-  name: new-system
-  tags: 
-- kind: System
-  type: 
-  os: 
-  cores: 
-  ram: 
-  drives: 
-  runsOn: 
-  name: new-system
-  tags: 
-- kind: Service
-  network: 
-  runsOn: 
-  name: new-service
-  tags: 
+  # --------------------------------------------------
+  # Smart Home
+  # --------------------------------------------------
+  - kind: Service
+    name: home-assistant
+    network:
+      ip: 192.168.0.10
+      port: 8123
+      protocol: TCP
+      url: http://homeassistant.lan:8123
+    runsOn: vm-home-assistant
+
+  # --------------------------------------------------
+  # Media & Photos
+  # --------------------------------------------------
+  - kind: Service
+    name: plex
+    network:
+      ip: 192.168.0.20
+      port: 32400
+      protocol: TCP
+      url: http://plex.lan:32400
+    runsOn: vm-media-server
+
+  - kind: Service
+    name: jellyfin
+    network:
+      ip: 192.168.0.21
+      port: 8096
+      protocol: TCP
+      url: http://jellyfin.lan:8096
+    runsOn: vm-media-server
+
+  - kind: Service
+    name: immich
+    network:
+      ip: 192.168.0.22
+      port: 8080
+      protocol: TCP
+      url: http://immich.lan:8080
+    runsOn: vm-media-server
+
+  # --------------------------------------------------
+  # Storage & Backup
+  # --------------------------------------------------
+  - kind: Service
+    name: truenas-webui
+    network:
+      ip: 192.168.0.30
+      port: 443
+      protocol: TCP
+      url: https://truenas.lan
+    runsOn: truenas-core-os
+
+  - kind: Service
+    name: minio
+    network:
+      ip: 192.168.0.31
+      port: 9000
+      protocol: TCP
+      url: http://minio.lan:9000
+    runsOn: vm-media-server
+
+  # --------------------------------------------------
+  # Monitoring & Ops
+  # --------------------------------------------------
+  - kind: Service
+    name: prometheus
+    network:
+      ip: 192.168.0.40
+      port: 9090
+      protocol: TCP
+      url: http://prometheus.lan:9090
+    runsOn: vm-monitoring
+
+  - kind: Service
+    name: grafana
+    network:
+      ip: 192.168.0.41
+      port: 3000
+      protocol: TCP
+      url: http://grafana.lan:3000
+    runsOn: vm-monitoring
+
+  - kind: Service
+    name: alertmanager
+    network:
+      ip: 192.168.0.42
+      port: 9093
+      protocol: TCP
+      url: http://alertmanager.lan:9093
+    runsOn: vm-monitoring
+
+  # --------------------------------------------------
+  # Dev & Internal Tools
+  # --------------------------------------------------
+  - kind: Service
+    name: gitea
+    network:
+      ip: 192.168.0.50
+      port: 3001
+      protocol: TCP
+      url: http://git.lan:3001
+    runsOn: vm-monitoring
+
+  - kind: Service
+    name: docker-registry
+    network:
+      ip: 192.168.0.51
+      port: 5000
+      protocol: TCP
+      url: http://registry.lan:5000
+    runsOn: vm-monitoring
+
+  - kind: Service
+    name: portainer
+    network:
+      ip: 192.168.0.52
+      port: 9000
+      protocol: TCP
+      url: http://portainer.lan:9000
+    runsOn: vm-monitoring
+
+  # --------------------------------------------------
+  # Network Services
+  # --------------------------------------------------
+  - kind: Service
+    name: pihole
+    network:
+      ip: 192.168.0.53
+      port: 80
+      protocol: TCP
+      url: http://pihole.lan
+    runsOn: vm-monitoring
+
+  - kind: Service
+    name: firewall-webui
+    network:
+      ip: 192.168.0.1
+      port: 443
+      protocol: TCP
+      url: https://firewall.lan
+    runsOn: firewall-os
+
+  - kind: Service
+    name: router-webui
+    network:
+      ip: 192.168.0.254
+      port: 443
+      protocol: TCP
+      url: https://router.lan
+    runsOn: router-os

+ 153 - 207
RackPeek.Web/config/Systems.yaml

@@ -1,208 +1,154 @@
 resources:
-- kind: System
-  type: KubernetesNode
-  os: ubuntu
-  cores: 8
-  ram: 32
-  drives: 
-  runsOn: dell-c6400-node01
-  name: k8s-node-1
-  tags: 
-- kind: System
-  type: KubernetesNode
-  os: ubuntu
-  cores: 8
-  ram: 32
-  drives: 
-  runsOn: dell-c6400-node01
-  name: k8s-node-2
-  tags: 
-- kind: System
-  type: KubernetesNode
-  os: ubuntu
-  cores: 8
-  ram: 32
-  drives: 
-  runsOn: dell-c6400-node01
-  name: k8s-node-3
-  tags: 
-- kind: System
-  type: KubernetesControlPlane
-  os: ubuntu
-  cores: 4
-  ram: 16
-  drives: 
-  runsOn: dell-c6400-node01
-  name: k8s-control-plane
-  tags: 
-- kind: System
-  type: Monitoring
-  os: ubuntu
-  cores: 8
-  ram: 32
-  drives: 
-  runsOn: dell-c6400-node01
-  name: monitoring-node
-  tags: 
-- kind: System
-  type: Storage
-  os: truenas
-  cores: 8
-  ram: 64
-  drives: 
-  runsOn: dell-c6400-node01
-  name: storage-node-1
-  tags: 
-- kind: System
-  type: Storage
-  os: truenas
-  cores: 8
-  ram: 64
-  drives: 
-  runsOn: dell-c6400-node01
-  name: storage-node-2
-  tags: 
-- kind: System
-  type: Storage
-  os: truenas
-  cores: 8
-  ram: 64
-  drives: 
-  runsOn: dell-c6400-node01
-  name: storage-node-3
-  tags: 
-- kind: System
-  type: Database
-  os: ubuntu
-  cores: 8
-  ram: 32
-  drives: 
-  runsOn: dell-c6400-node01
-  name: db-node-1
-  tags: 
-- kind: System
-  type: Database
-  os: ubuntu
-  cores: 8
-  ram: 32
-  drives: 
-  runsOn: dell-c6400-node01
-  name: db-node-2
-  tags: 
-- kind: System
-  type: Cache
-  os: ubuntu
-  cores: 4
-  ram: 16
-  drives: 
-  runsOn: dell-c6400-node01
-  name: cache-node
-  tags: 
-- kind: System
-  type: Search
-  os: ubuntu
-  cores: 8
-  ram: 32
-  drives: 
-  runsOn: dell-c6400-node01
-  name: search-node
-  tags: 
-- kind: System
-  type: Development
-  os: ubuntu
-  cores: 4
-  ram: 16
-  drives: 
-  runsOn: dell-c6400-node01
-  name: dev-node-1
-  tags: 
-- kind: System
-  type: Development
-  os: ubuntu
-  cores: 4
-  ram: 16
-  drives: 
-  runsOn: dell-c6400-node01
-  name: dev-node-2
-  tags: 
-- kind: System
-  type: Development
-  os: ubuntu
-  cores: 6
-  ram: 24
-  drives: 
-  runsOn: dell-c6400-node01
-  name: dev-node-3
-  tags: 
-- kind: System
-  type: VirtualMachineCluster
-  os: proxmox
-  cores: 12
-  ram: 48
-  drives: 
-  runsOn: dell-c6400-node01
-  name: vm-cluster-1
-  tags: 
-- kind: System
-  type: BareMetal
-  os: raspbian
-  cores: 4
-  ram: 8
-  drives: 
-  runsOn: rack-edge
-  name: baremetal-rpi4
-  tags: 
-- kind: System
-  type: BareMetal
-  os: raspbian
-  cores: 4
-  ram: 4
-  drives: 
-  runsOn: rack-edge
-  name: baremetal-rpi3
-  tags: 
-- kind: System
-  type: Infrastructure
-  os: ubuntu
-  cores: 4
-  ram: 16
-  drives: 
-  runsOn: dell-c6400-node01
-  name: infra-node
-  tags: 
-- kind: System
-  type: NetworkAppliance
-  os: openwrt
-  cores: 2
-  ram: 2
-  drives: 
-  runsOn: network-rack
-  name: router-appliance
-  tags: 
-- kind: System
-  type: Hypervisor
-  os: proxmox
-  cores: 16
-  ram: 61
-  drives: 
-  runsOn: dell-c6400-node01
-  name: proxmox-host
-  tags: 
-- kind: System
-  type: ContainerHost
-  os: ubuntu
-  cores: 12
-  ram: 26
-  drives: 
-  runsOn: dell-c6400-node01
-  name: docker-host
-  tags: 
-- kind: System
-  type: VirtualMachineCluster
-  os: proxmox
-  cores: 13
-  ram: 44
-  drives: 
-  runsOn: dell-c6400-node01
-  name: vm-cluster-2
-  tags: 
+  # --------------------------------------------------
+  # Hypervisors (Bare Metal)
+  # --------------------------------------------------
+  - kind: System
+    type: Hypervisor
+    name: proxmox-cluster-node01
+    os: proxmox
+    cores: 16
+    ram: 128gb
+    drives:
+      - size: 1tb
+      - size: 1tb
+    runsOn: proxmox-node01
+
+  - kind: System
+    type: Hypervisor
+    name: proxmox-cluster-node02
+    os: proxmox
+    cores: 10
+    ram: 96gb
+    drives:
+      - size: 1tb
+      - size: 4tb
+    runsOn: proxmox-node02
+
+  # --------------------------------------------------
+  # Storage OS (Bare Metal)
+  # --------------------------------------------------
+  - kind: System
+    type: Baremetal
+    name: truenas-core-os
+    os: truenas
+    cores: 6
+    ram: 64gb
+    drives:
+      - size: 8tb
+      - size: 8tb
+      - size: 8tb
+      - size: 8tb
+    runsOn: truenas-storage
+
+  # --------------------------------------------------
+  # IPMI / BMC Management
+  # --------------------------------------------------
+  - kind: System
+    type: Baremetal
+    name: ipmi-proxmox-node01
+    os: idrac
+    cores: 1
+    ram: 1gb
+    runsOn: proxmox-node01
+
+  - kind: System
+    type: Baremetal
+    name: ipmi-proxmox-node02
+    os: ipmi
+    cores: 1
+    ram: 1gb
+    runsOn: proxmox-node02
+
+  - kind: System
+    type: Baremetal
+    name: ipmi-truenas-storage
+    os: ipmi
+    cores: 1
+    ram: 1gb
+    runsOn: truenas-storage
+
+  # --------------------------------------------------
+  # Core Network Systems
+  # --------------------------------------------------
+  - kind: System
+    type: Baremetal
+    name: firewall-os
+    os: pfsense
+    cores: 4
+    ram: 8gb
+    drives:
+      - size: 32gb
+    runsOn: pfsense-fw
+
+  - kind: System
+    type: Baremetal
+    name: router-os
+    os: edgeos
+    cores: 4
+    ram: 4gb
+    drives:
+      - size: 4gb
+    runsOn: core-router
+
+  - kind: System
+    type: Baremetal
+    name: unifi-core-switch-os
+    os: unifi-os
+    cores: 2
+    ram: 2gb
+    drives:
+      - size: 8gb
+    runsOn: core-switch
+
+  - kind: System
+    type: Baremetal
+    name: unifi-access-switch-os
+    os: unifi-os
+    cores: 2
+    ram: 2gb
+    drives:
+      - size: 8gb
+    runsOn: access-switch
+
+  - kind: System
+    type: Baremetal
+    name: unifi-lounge-ap-os
+    os: unifi-firmware
+    cores: 2
+    ram: 1gb
+    drives:
+      - size: 4gb
+    runsOn: lounge-ap
+
+  # --------------------------------------------------
+  # Virtual Machines
+  # --------------------------------------------------
+  - kind: System
+    type: VM
+    name: vm-home-assistant
+    os: hassos
+    cores: 2
+    ram: 4gb
+    drives:
+      - size: 64gb
+    runsOn: proxmox-node01
+
+  - kind: System
+    type: VM
+    name: vm-media-server
+    os: ubuntu-22.04
+    cores: 4
+    ram: 8gb
+    drives:
+      - size: 500gb
+    runsOn: proxmox-node02
+
+  - kind: System
+    type: VM
+    name: vm-monitoring
+    os: debian-12
+    cores: 2
+    ram: 4gb
+    drives:
+      - size: 64gb
+    runsOn: proxmox-node01

+ 208 - 0
RackPeek.Web/config/hardware.yaml

@@ -0,0 +1,208 @@
+resources:
+  # ------------------------
+  # Servers
+  # ------------------------
+  - kind: Server
+    name: proxmox-node01
+    cpus:
+      - model: AMD EPYC 7302P
+        cores: 16
+        threads: 32
+    ram:
+      size: 128gb
+      mts: 3200
+    drives:
+      - type: ssd
+        size: 1tb
+      - type: ssd
+        size: 1tb
+    nics:
+      - type: rj45
+        speed: 1gb
+        ports: 2
+      - type: sfp+
+        speed: 10gb
+        ports: 2
+    ipmi: true
+
+  - kind: Server
+    name: proxmox-node02
+    cpus:
+      - model: Intel Xeon Silver 4210
+        cores: 10
+        threads: 20
+    ram:
+      size: 96gb
+      mts: 2666
+    drives:
+      - type: ssd
+        size: 1tb
+      - type: hdd
+        size: 4tb
+    nics:
+      - type: rj45
+        speed: 1gb
+        ports: 2
+      - type: sfp+
+        speed: 10gb
+        ports: 1
+    ipmi: true
+
+  - kind: Server
+    name: truenas-storage
+    cpus:
+      - model: Intel Xeon E-2236
+        cores: 6
+        threads: 12
+    ram:
+      size: 64gb
+      mts: 2666
+    drives:
+      - type: hdd
+        size: 8tb
+      - type: hdd
+        size: 8tb
+      - type: hdd
+        size: 8tb
+      - type: hdd
+        size: 8tb
+    nics:
+      - type: rj45
+        speed: 1gb
+        ports: 1
+      - type: sfp+
+        speed: 10gb
+        ports: 1
+    ipmi: true
+
+  # ------------------------
+  # Network
+  # ------------------------
+  - kind: Firewall
+    name: pfsense-fw
+    model: Netgate-6100
+    ports:
+      - type: rj45
+        speed: 1gb
+        count: 4
+      - type: sfp+
+        speed: 10gb
+        count: 2
+    managed: true
+    poe: false
+
+  - kind: Router
+    name: core-router
+    model: Ubiquiti-ER-4
+    ports:
+      - type: rj45
+        speed: 1gb
+        count: 4
+      - type: sfp
+        speed: 10gb
+        count: 1
+    managed: true
+    poe: false
+
+  - kind: Switch
+    name: core-switch
+    model: UniFi-USW-Enterprise-24
+    ports:
+      - type: rj45
+        speed: 1gb
+        count: 12
+      - type: rj45
+        speed: 2.5gb
+        count: 8
+      - type: sfp+
+        speed: 10gb
+        count: 4
+    managed: true
+    poe: true
+
+  - kind: Switch
+    name: access-switch
+    model: UniFi-USW-16-PoE
+    ports:
+      - type: rj45
+        speed: 1gb
+        count: 16
+      - type: sfp
+        speed: 1gb
+        count: 2
+    managed: true
+    poe: true
+
+  - kind: AccessPoint
+    name: lounge-ap
+    model: UniFi-U6-Pro
+    speed: 2.5gb
+
+  # ------------------------
+  # Power
+  # ------------------------
+  - kind: Ups
+    name: rack-ups
+    model: APC-SmartUPS-2200
+    va: 2200
+
+  # ------------------------
+  # Desktops
+  # ------------------------
+  - kind: Desktop
+    name: workstation-linux
+    cpus:
+      - model: AMD Ryzen 9 5900X
+        cores: 12
+        threads: 24
+    ram:
+      size: 64gb
+      mts: 3600
+    drives:
+      - type: ssd
+        size: 1tb
+      - type: ssd
+        size: 2tb
+    nics:
+      - type: rj45
+        speed: 1gb
+        ports: 1
+    gpus:
+      - model: NVIDIA RTX 3080
+        vram: 10gb
+
+  - kind: Desktop
+    name: gaming-pc
+    cpus:
+      - model: Intel Core i7-12700K
+        cores: 12
+        threads: 20
+    ram:
+      size: 32gb
+      mts: 3200
+    drives:
+      - type: ssd
+        size: 1tb
+    nics:
+      - type: rj45
+        speed: 1gb
+        ports: 1
+    gpus:
+      - model: NVIDIA RTX 3070
+        vram: 8gb
+
+  # ------------------------
+  # Laptop
+  # ------------------------
+  - kind: Laptop
+    name: dev-laptop
+    cpus:
+      - model: Intel Core i7-1260P
+        cores: 12
+        threads: 16
+    ram:
+      size: 32gb
+      mts: 5200
+    drives:
+      - type: ssd
+        size: 1tb