if which nvidia-smi >/dev/null; then echo '<<>>' nvidia-smi -q -x > /tmp/.check_mk_nvidia_smi cards=$(xml_grep --text_only 'nvidia_smi_log/attached_gpus' /tmp/.check_mk_nvidia_smi | tr -d ' ') IFS=$'\n' names=($(xml_grep --text_only 'nvidia_smi_log/gpu/product_name' /tmp/.check_mk_nvidia_smi | tr -d ' ')) IFS=$'\n' fan_speed=($(xml_grep --text_only 'nvidia_smi_log/gpu/fan_speed' /tmp/.check_mk_nvidia_smi | tr -d ' ')) IFS=$'\n' gpu_utilization=($(xml_grep --text_only 'nvidia_smi_log/gpu/utilization/gpu_util' /tmp/.check_mk_nvidia_smi | tr -d ' ')) IFS=$'\n' mem_utilization=($(xml_grep --text_only 'nvidia_smi_log/gpu/utilization/memory_util' /tmp/.check_mk_nvidia_smi | tr -d ' ')) IFS=$'\n' ecc_errors_1=($(xml_grep --text_only 'nvidia_smi_log/gpu/ecc_errors/aggregate/single_bit/total' /tmp/.check_mk_nvidia_smi | tr -d ' ')) IFS=$'\n' ecc_errors_2=($(xml_grep --text_only 'nvidia_smi_log/gpu/ecc_errors/aggregate/double_bit/total' /tmp/.check_mk_nvidia_smi | tr -d ' ')) IFS=$'\n' temperature=($(xml_grep --text_only 'nvidia_smi_log/gpu/temperature/gpu_temp' /tmp/.check_mk_nvidia_smi | tr -d ' ')) IFS=$'\n' power_draw=($(xml_grep --text_only 'nvidia_smi_log/gpu/power_readings/power_draw' /tmp/.check_mk_nvidia_smi | tr -d ' ')) IFS=$'\n' power_limit=($(xml_grep --text_only 'nvidia_smi_log/gpu/power_readings/power_limit' /tmp/.check_mk_nvidia_smi | tr -d ' ')) for i in $(seq 1 $cards) ; do index=$(($i - 1)) fan_speed[$index]=${fan_speed[$index]/\%/} gpu_utilization[$index]=${gpu_utilization[$index]/\%/} mem_utilization[$index]=${mem_utilization[$index]/\%/} temperature[$index]=${temperature[$index]/C/} power_draw[$index]=${power_draw[$index]/W/} power_limit[$index]=${power_limit[$index]/W/} echo "$index ${names[$index]} ${fan_speed[$index]} ${gpu_utilization[$index]} ${mem_utilization[$index]} ${ecc_errors_1[$index]} ${ecc_errors_2[$index]} ${temperature[$index]} ${power_draw[$index]} ${power_limit[$index]}" done fi