#!/bin/bash



gpu_temp=0
gpu_color="clear"

if ! test -x /usr/bin/nvidia-smi ; then

  $XYMON $XYMSRV "status $MACHINE.gputemp $gpu_color `date`
  Couldn't find nvidia-smi

  GPUTEMP : $gpu_temp

  "
  exit 0
fi

# Use NVidia SMI to determine the model
#gpu_model=`nvidia-smi -L`
# Use lspci to determine the model
gpu_model=`lspci | grep -i vga | grep -vi non-vga| sort -r | head -n 1 | cut -d: -f3`

if test -z "$gpu_model" ; then
  $XYMON $XYMSRV "status $MACHINE.gputemp $gpu_color `date`
  Couldn't find nVidia card

  GPUTEMP : $gpu_temp

  "
  exit 0
fi

# Determine GPU maximum temperature based on GPU model
if test $(echo $gpu_model | grep -c -i 'GeForce 210') -eq 1 ; then
  # GT 210 maximum GPU temperature is 105 C
  max_temp=105
elif test $(echo $gpu_model | grep -c -i 'GeForce 220') -eq 1 ; then
  # GT 220 maximum GPU temperature is 105 C
  max_temp=105
elif test $(echo $gpu_model | grep -c -i 'GeForce 240') -eq 1 ; then
  # GT 240 maximum GPU temperature is 105 C
  max_temp=105
elif test $(echo $gpu_model | grep -c -i 'GeForce 430') -eq 1 ; then
  # GT 430 maximum GPU temperature is  98 C
  max_temp=98
elif test $(echo $gpu_model | grep -c -i 'GeForce GTS 450') -eq 1 ; then
  # GTS 450 maximum GPU temperature is  100 C
  max_temp=100
elif test $(echo $gpu_model | grep -c -i 'GeForce GT 520') -eq 1 ; then
  # GT 520 maximum GPU temperature is  102 C
  max_temp=102
elif test $(echo $gpu_model | grep -c -i 'GeForce GT 710') -eq 1 ; then
  # GT 710 maximum GPU temperature is  95 C
  max_temp=95
else
  # Assume 100 is the maximum
  max_temp=100
fi
crit_temp=`expr $max_temp - 5`
warn_temp=`expr $crit_temp - 10`

if test -x /usr/bin/nvidia-smi ; then
  temp=`nvidia-smi -q -g 0 -d TEMPERATURE | grep -Ei 'GPU Current Temp[[:space:]]+:[[:space:]]+[[:digit:]]+ C'`
  gpu_temp=`echo $temp | sed -e 's/[^0-9]*//g'`
  #echo "GPUTEMP:$gpu_temp" > /tmp/gputemp.txt
  if test -n "$gpu_temp" ; then
    # Have some type of number
    if test $gpu_temp -lt $warn_temp ; then
      gpu_color=green
    elif test $gpu_temp -lt $crit_temp ; then
      gpu_color=yellow
    else
      gpu_color=red
    fi
    #echo gputemp $gpu_temp $gpu_color
    #echo $XYMON $XYMSRV "status $MACHINE.gputemp $gpu_color `date`
    #`cat /tmp/gputemp.txt`
    #"
    $XYMON $XYMSRV "status $MACHINE.gputemp $gpu_color `date`
    GPU Model -$gpu_model
    GPU Max Temp (C) - $max_temp

    GPUTEMP : $gpu_temp
    "
  fi
fi

exit 0
