github.com/netdata/go.d.plugin@v0.58.1/modules/nvidia_smi/collect.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package nvidia_smi 4 5 import ( 6 "errors" 7 "strconv" 8 "strings" 9 ) 10 11 func (nv *NvidiaSMI) collect() (map[string]int64, error) { 12 if nv.exec == nil { 13 return nil, errors.New("nvidia-smi exec is not initialized") 14 } 15 16 mx := make(map[string]int64) 17 18 if err := nv.collectGPUInfo(mx); err != nil { 19 return nil, err 20 } 21 22 return mx, nil 23 } 24 25 func (nv *NvidiaSMI) collectGPUInfo(mx map[string]int64) error { 26 if nv.UseCSVFormat { 27 return nv.collectGPUInfoCSV(mx) 28 } 29 return nv.collectGPUInfoXML(mx) 30 } 31 32 func addMetric(mx map[string]int64, key, value string, mul int) { 33 if !isValidValue(value) { 34 return 35 } 36 37 value = removeUnits(value) 38 39 v, err := strconv.ParseFloat(value, 64) 40 if err != nil { 41 return 42 } 43 44 if mul > 0 { 45 v *= float64(mul) 46 } 47 48 mx[key] = int64(v) 49 } 50 51 func isValidValue(v string) bool { 52 return v != "" && v != "N/A" && v != "[N/A]" 53 } 54 55 func parseFloat(s string) float64 { 56 v, _ := strconv.ParseFloat(removeUnits(s), 64) 57 return v 58 } 59 60 func removeUnits(s string) string { 61 if i := strings.IndexByte(s, ' '); i != -1 { 62 s = s[:i] 63 } 64 return s 65 } 66 67 func boolToInt(v bool) int64 { 68 if v { 69 return 1 70 } 71 return 0 72 }