github.com/netdata/go.d.plugin@v0.58.1/modules/windows/collect_logical_disk.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package windows 4 5 import ( 6 "strings" 7 8 "github.com/netdata/go.d.plugin/pkg/prometheus" 9 ) 10 11 const ( 12 metricLDReadBytesTotal = "windows_logical_disk_read_bytes_total" 13 metricLDWriteBytesTotal = "windows_logical_disk_write_bytes_total" 14 metricLDReadsTotal = "windows_logical_disk_reads_total" 15 metricLDWritesTotal = "windows_logical_disk_writes_total" 16 metricLDSizeBytes = "windows_logical_disk_size_bytes" 17 metricLDFreeBytes = "windows_logical_disk_free_bytes" 18 metricLDReadLatencyTotal = "windows_logical_disk_read_latency_seconds_total" 19 metricLDWriteLatencyTotal = "windows_logical_disk_write_latency_seconds_total" 20 ) 21 22 func (w *Windows) collectLogicalDisk(mx map[string]int64, pms prometheus.Series) { 23 seen := make(map[string]bool) 24 px := "logical_disk_" 25 for _, pm := range pms.FindByName(metricLDReadBytesTotal) { 26 vol := pm.Labels.Get("volume") 27 if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") { 28 seen[vol] = true 29 mx[px+vol+"_read_bytes_total"] = int64(pm.Value) 30 } 31 } 32 for _, pm := range pms.FindByName(metricLDWriteBytesTotal) { 33 vol := pm.Labels.Get("volume") 34 if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") { 35 seen[vol] = true 36 mx[px+vol+"_write_bytes_total"] = int64(pm.Value) 37 } 38 } 39 for _, pm := range pms.FindByName(metricLDReadsTotal) { 40 vol := pm.Labels.Get("volume") 41 if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") { 42 seen[vol] = true 43 mx[px+vol+"_reads_total"] = int64(pm.Value) 44 } 45 } 46 for _, pm := range pms.FindByName(metricLDWritesTotal) { 47 vol := pm.Labels.Get("volume") 48 if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") { 49 seen[vol] = true 50 mx[px+vol+"_writes_total"] = int64(pm.Value) 51 } 52 } 53 for _, pm := range pms.FindByName(metricLDSizeBytes) { 54 vol := pm.Labels.Get("volume") 55 if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") { 56 seen[vol] = true 57 mx[px+vol+"_total_space"] = int64(pm.Value) 58 } 59 } 60 for _, pm := range pms.FindByName(metricLDFreeBytes) { 61 vol := pm.Labels.Get("volume") 62 if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") { 63 seen[vol] = true 64 mx[px+vol+"_free_space"] = int64(pm.Value) 65 } 66 } 67 for _, pm := range pms.FindByName(metricLDReadLatencyTotal) { 68 vol := pm.Labels.Get("volume") 69 if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") { 70 seen[vol] = true 71 mx[px+vol+"_read_latency"] = int64(pm.Value * precision) 72 } 73 } 74 for _, pm := range pms.FindByName(metricLDWriteLatencyTotal) { 75 vol := pm.Labels.Get("volume") 76 if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") { 77 seen[vol] = true 78 mx[px+vol+"_write_latency"] = int64(pm.Value * precision) 79 } 80 } 81 82 for disk := range seen { 83 if !w.cache.volumes[disk] { 84 w.cache.volumes[disk] = true 85 w.addDiskCharts(disk) 86 } 87 mx[px+disk+"_used_space"] = mx[px+disk+"_total_space"] - mx[px+disk+"_free_space"] 88 } 89 for disk := range w.cache.volumes { 90 if !seen[disk] { 91 delete(w.cache.volumes, disk) 92 w.removeDiskCharts(disk) 93 } 94 } 95 }