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  }