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  }