using System; using System.Text.Json.Serialization; using Newtonsoft.Json; namespace PSProxmoxVE.Core.Models.Nodes; /// /// Represents a Proxmox VE cluster node as returned by the /nodes endpoint. /// public class PveNode { /// /// The name of the node. /// [JsonPropertyName("node")] [JsonProperty("node")] public string Name { get; set; } = string.Empty; /// /// The current status of the node (e.g., "online" or "offline"). /// [JsonPropertyName("status")] [JsonProperty("status")] public string Status { get; set; } = string.Empty; /// /// The total number of CPU cores available on the node. /// [JsonPropertyName("maxcpu")] [JsonProperty("maxcpu")] public int? CpuCount { get; set; } /// /// Total memory in bytes available on the node. /// [JsonPropertyName("maxmem")] [JsonProperty("maxmem")] public long? MemoryTotal { get; set; } /// /// Memory currently in use on the node, in bytes. /// [JsonPropertyName("mem")] [JsonProperty("mem")] public long? MemoryUsed { get; set; } /// /// Node uptime in seconds. /// [JsonPropertyName("uptime")] [JsonProperty("uptime")] public long? Uptime { get; set; } /// /// The version of Proxmox VE running on the node. /// [JsonPropertyName("pveversion")] [JsonProperty("pveversion")] public string? PveVersion { get; set; } /// /// The Linux kernel version running on the node. /// [JsonPropertyName("kversion")] [JsonProperty("kversion")] public string? KernelVersion { get; set; } /// /// The 1-minute, 5-minute, and 15-minute load averages for the node. /// [JsonPropertyName("loadavg")] [JsonProperty("loadavg")] public double[]? LoadAverage { get; set; } /// public override string ToString() { var memUsedMb = MemoryUsed.HasValue ? $"{MemoryUsed.Value / 1024 / 1024} MB" : "N/A"; var memTotalMb = MemoryTotal.HasValue ? $"{MemoryTotal.Value / 1024 / 1024} MB" : "N/A"; var uptimeStr = Uptime.HasValue ? TimeSpan.FromSeconds(Uptime.Value).ToString(@"d\.hh\:mm\:ss") : "N/A"; return $"Node: {Name} | Status: {Status} | CPUs: {CpuCount?.ToString() ?? "N/A"} | " + $"Mem: {memUsedMb}/{memTotalMb} | Uptime: {uptimeStr} | PVE: {PveVersion ?? "N/A"}"; } }