using System.Text.Json.Serialization; namespace LibSystemdCli.Models; public class SystemdServiceData { [JsonPropertyName("data")] public Dictionary SingleData { get; set; } = new(); [JsonPropertyName("multiData")] public Dictionary> MultiData { get; set; } = new(); public bool IsRunning => Status is "active" or "reloading" or "deactating" or "activating"; public string Status => GetSingleData("ActiveState") ?? "unknown"; public long MemoryCurrent { get { if (long.TryParse(GetSingleData("MemoryCurrent") ?? "0", out long mem)) return mem; return 0; } } public long MemoryPeak { get { if (long.TryParse(GetSingleData("MemoryPeak") ?? "0", out long mem)) return mem; return 0; } } public void AddData(string key, string value) { if (MultiData.ContainsKey(key)) { MultiData[key].Add(value); } else if (SingleData.ContainsKey(key)) { MultiData[key] = [SingleData[key], value]; SingleData.Remove(key); } else { SingleData[key] = value; } } public List? GetData(string key) { if (MultiData.TryGetValue(key, out var data)) { return data; } if (SingleData.TryGetValue(key, out var value)) { return new List { value }; } return null; } public string? GetSingleData(string key) { if (SingleData.TryGetValue(key, out var value)) { return value; } return null; } public void SetOldData(SystemdServiceData oldData) { var now = DateTime.Now; var cpuDiff = CpuUsageNs - oldData.CpuUsageNs; var timeDiff = now - oldData.Timestamp; CpuUsagePercent = cpuDiff / timeDiff.TotalMilliseconds / 1_000_000d; } public DateTime Timestamp { get; set; } = DateTime.Now; public long CpuUsageNs => long.Parse(GetSingleData("CPUUsageNSec") ?? "0"); public double CpuUsagePercent { get; set; } }