/// <summary> /// Returns volumes based on a given name or index. /// </summary> /// <param name="nameOrIndex">Name or index of the volume to return.</param> /// <returns>Either all volumes or a volume based on the given option</returns> public List <Volume> GetVolumesForOption(string nameOrIndex = "all") { List <Volume> result = new List <Volume>(); if (nameOrIndex == Constants.AllVolumes) { result = Volumes; } else { Volume volume = null; if (int.TryParse(nameOrIndex, out int index) == true) { volume = Volumes.Find(v => v.Index == index); if (volume != null) { result.Add(volume); } } else { volume = Volumes.Find(v => v.Name == nameOrIndex); if (volume != null) { result.Add(volume); } } } return(result); }
private async Task PollVolumePerformanceUtilizationAsync() { const string query = @" SELECT Name, Timestamp_Sys100NS, DiskReadBytesPersec, DiskWriteBytesPersec FROM Win32_PerfRawData_PerfDisk_LogicalDisk"; var queryTime = DateTime.UtcNow.ToEpochTime(); var combinedUtil = new Volume.VolumePerformanceUtilization { DateEpoch = queryTime, ReadAvgBps = 0, WriteAvgBps = 0 }; using (var q = Wmi.Query(Endpoint, query)) { foreach (var data in await q.GetDynamicResultAsync().ConfigureAwait(false)) { var perfData = new PerfRawData(this, data); var name = perfData.Identifier; var iface = Volumes.Find(i => name == GetCounterName(i.Name)); if (iface == null) { continue; } iface.ReadBps = (float)perfData.GetCalculatedValue("DiskReadBytesPersec", 10000000); iface.WriteBps = (float)perfData.GetCalculatedValue("DiskWriteBytesPersec", 10000000); var util = new Volume.VolumePerformanceUtilization { DateEpoch = queryTime, ReadAvgBps = iface.ReadBps, WriteAvgBps = iface.WriteBps }; var netData = VolumePerformanceHistory.GetOrAdd(iface.Name, k => new List <Volume.VolumePerformanceUtilization>(1024)); UpdateHistoryStorage(netData, util); //if (PrimaryInterfaces.Contains(iface)) { combinedUtil.ReadAvgBps += util.ReadAvgBps; combinedUtil.WriteAvgBps += util.WriteAvgBps; } } } UpdateHistoryStorage(CombinedVolumePerformanceHistory, combinedUtil); }
internal List <Volume.VolumePerformanceUtilization> GetVolumePerformanceUtilizationHistory(Volume iface) { if (iface != null && Volumes.Find(x => x == iface) != null && VolumePerformanceHistory.ContainsKey(iface.Name)) { return(VolumePerformanceHistory[iface.Name]); } else { return(new List <Volume.VolumePerformanceUtilization>(0)); } }
private async Task GetAllVolumesAsync() { const string query = @" SELECT Caption, DeviceID, Description, FreeSpace, Name, Size, VolumeSerialNumber FROM Win32_LogicalDisk WHERE DriveType = 3"; //fixed disks using (var q = Wmi.Query(Endpoint, query)) { foreach (var disk in await q.GetDynamicResultAsync().ConfigureAwait(false)) { var id = $"{disk.DeviceID}"; var v = Volumes.Find(x => x.Id == id) ?? new Volume(); v.Id = $"{disk.DeviceID}"; v.Available = disk.FreeSpace; v.Caption = disk.VolumeSerialNumber; v.Description = disk.Name + " - " + disk.Description; v.Name = disk.Name; v.NodeId = Id; v.Size = disk.Size; v.Type = "Fixed Disk"; v.Status = NodeStatus.Active; v.Used = v.Size - v.Available; if (v.Size > 0) { v.PercentUsed = 100 * v.Used / v.Size; } if (v.Node == null) { v.Node = this; Volumes.Add(v); } } } }