func initializeNvml()

in components/otelopscol/receiver/nvmlreceiver/client.go [109:144]


func initializeNvml(logger *zap.Logger) (nvmlCleanup func() error, err error) {
	nvmlCleanup = nil

	defer func() {
		// applicable to tagged releases of github.com/NVIDIA/go-nvml <= v0.11.6-0
		if perr := recover(); perr != nil {
			err = fmt.Errorf("%v", perr)
		}
	}()

	ret := nvmlInit()
	if ret != nvml.SUCCESS {
		if ret == nvml.ERROR_LIBRARY_NOT_FOUND {
			err = fmt.Errorf("libnvidia-ml.so not found")
		} else {
			err = fmt.Errorf("'%v'", nvml.ErrorString(ret))
		}
		return
	}
	logger.Sugar().Infof("Successfully initialized Nvidia Management Library")
	printNvmlAndDriverVersion(logger)

	nvmlCleanup = func() error {
		ret := nvml.Shutdown()
		if ret != nvml.SUCCESS {
			msg := fmt.Sprintf("Unable to shutdown Nvidia Management library on '%v'", nvml.ErrorString(ret))
			logger.Sugar().Warnf(msg)
			return fmt.Errorf("%s", msg)
		}

		return nil
	}

	err = nil
	return
}