github.com/netdata/go.d.plugin@v0.58.1/modules/windows/collect.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package windows 4 5 import ( 6 "github.com/netdata/go.d.plugin/pkg/prometheus" 7 ) 8 9 const precision = 1000 10 11 const ( 12 collectorAD = "ad" 13 collectorADCS = "adcs" 14 collectorADFS = "adfs" 15 collectorCPU = "cpu" 16 collectorMemory = "memory" 17 collectorNet = "net" 18 collectorLogicalDisk = "logical_disk" 19 collectorOS = "os" 20 collectorSystem = "system" 21 collectorLogon = "logon" 22 collectorThermalZone = "thermalzone" 23 collectorTCP = "tcp" 24 collectorIIS = "iis" 25 collectorMSSQL = "mssql" 26 collectorProcess = "process" 27 collectorService = "service" 28 collectorNetFrameworkCLRExceptions = "netframework_clrexceptions" 29 collectorNetFrameworkCLRInterop = "netframework_clrinterop" 30 collectorNetFrameworkCLRJIT = "netframework_clrjit" 31 collectorNetFrameworkCLRLoading = "netframework_clrloading" 32 collectorNetFrameworkCLRLocksAndThreads = "netframework_clrlocksandthreads" 33 collectorNetFrameworkCLRMemory = "netframework_clrmemory" 34 collectorNetFrameworkCLRRemoting = "netframework_clrremoting" 35 collectorNetFrameworkCLRSecurity = "netframework_clrsecurity" 36 collectorExchange = "exchange" 37 collectorHyperv = "hyperv" 38 ) 39 40 func (w *Windows) collect() (map[string]int64, error) { 41 pms, err := w.prom.ScrapeSeries() 42 if err != nil { 43 return nil, err 44 } 45 46 mx := make(map[string]int64) 47 w.collectMetrics(mx, pms) 48 49 if hasKey(mx, "os_visible_memory_bytes", "memory_available_bytes") { 50 mx["memory_used_bytes"] = 0 + 51 mx["os_visible_memory_bytes"] - 52 mx["memory_available_bytes"] 53 } 54 if hasKey(mx, "os_paging_limit_bytes", "os_paging_free_bytes") { 55 mx["os_paging_used_bytes"] = 0 + 56 mx["os_paging_limit_bytes"] - 57 mx["os_paging_free_bytes"] 58 } 59 if hasKey(mx, "os_visible_memory_bytes", "os_physical_memory_free_bytes") { 60 mx["os_visible_memory_used_bytes"] = 0 + 61 mx["os_visible_memory_bytes"] - 62 mx["os_physical_memory_free_bytes"] 63 } 64 if hasKey(mx, "memory_commit_limit", "memory_committed_bytes") { 65 mx["memory_not_committed_bytes"] = 0 + 66 mx["memory_commit_limit"] - 67 mx["memory_committed_bytes"] 68 } 69 if hasKey(mx, "memory_standby_cache_reserve_bytes", "memory_standby_cache_normal_priority_bytes", "memory_standby_cache_core_bytes") { 70 mx["memory_standby_cache_total"] = 0 + 71 mx["memory_standby_cache_reserve_bytes"] + 72 mx["memory_standby_cache_normal_priority_bytes"] + 73 mx["memory_standby_cache_core_bytes"] 74 } 75 if hasKey(mx, "memory_standby_cache_total", "memory_modified_page_list_bytes") { 76 mx["memory_cache_total"] = 0 + 77 mx["memory_standby_cache_total"] + 78 mx["memory_modified_page_list_bytes"] 79 } 80 81 return mx, nil 82 } 83 84 func (w *Windows) collectMetrics(mx map[string]int64, pms prometheus.Series) { 85 w.collectCollector(mx, pms) 86 for _, pm := range pms.FindByName(metricCollectorSuccess) { 87 if pm.Value == 0 { 88 continue 89 } 90 91 switch pm.Labels.Get("collector") { 92 case collectorCPU: 93 w.collectCPU(mx, pms) 94 case collectorMemory: 95 w.collectMemory(mx, pms) 96 case collectorNet: 97 w.collectNet(mx, pms) 98 case collectorLogicalDisk: 99 w.collectLogicalDisk(mx, pms) 100 case collectorOS: 101 w.collectOS(mx, pms) 102 case collectorSystem: 103 w.collectSystem(mx, pms) 104 case collectorLogon: 105 w.collectLogon(mx, pms) 106 case collectorThermalZone: 107 w.collectThermalzone(mx, pms) 108 case collectorTCP: 109 w.collectTCP(mx, pms) 110 case collectorProcess: 111 w.collectProcess(mx, pms) 112 case collectorService: 113 w.collectService(mx, pms) 114 case collectorIIS: 115 w.collectIIS(mx, pms) 116 case collectorMSSQL: 117 w.collectMSSQL(mx, pms) 118 case collectorAD: 119 w.collectAD(mx, pms) 120 case collectorADCS: 121 w.collectADCS(mx, pms) 122 case collectorADFS: 123 w.collectADFS(mx, pms) 124 case collectorNetFrameworkCLRExceptions: 125 w.collectNetFrameworkCLRExceptions(mx, pms) 126 case collectorNetFrameworkCLRInterop: 127 w.collectNetFrameworkCLRInterop(mx, pms) 128 case collectorNetFrameworkCLRJIT: 129 w.collectNetFrameworkCLRJIT(mx, pms) 130 case collectorNetFrameworkCLRLoading: 131 w.collectNetFrameworkCLRLoading(mx, pms) 132 case collectorNetFrameworkCLRLocksAndThreads: 133 w.collectNetFrameworkCLRLocksAndThreads(mx, pms) 134 case collectorNetFrameworkCLRMemory: 135 w.collectNetFrameworkCLRMemory(mx, pms) 136 case collectorNetFrameworkCLRRemoting: 137 w.collectNetFrameworkCLRRemoting(mx, pms) 138 case collectorNetFrameworkCLRSecurity: 139 w.collectNetFrameworkCLRSecurity(mx, pms) 140 case collectorExchange: 141 w.collectExchange(mx, pms) 142 case collectorHyperv: 143 w.collectHyperv(mx, pms) 144 } 145 } 146 } 147 148 func hasKey(mx map[string]int64, key string, keys ...string) bool { 149 _, ok := mx[key] 150 switch len(keys) { 151 case 0: 152 return ok 153 default: 154 return ok && hasKey(mx, keys[0], keys[1:]...) 155 } 156 } 157 158 func boolToInt(v bool) int64 { 159 if v { 160 return 1 161 } 162 return 0 163 }