From d3559bdb808d055057f9229299e63404a9ebf113 Mon Sep 17 00:00:00 2001 From: Gilles Depeyrot Date: Sun, 7 Feb 2021 18:03:08 +0100 Subject: [PATCH] cache because it is a 1sec delay, which is painful for the poller --- snmp/osupdate | 127 ++++++++++++++++++++++++++++---------------------- 1 file changed, 72 insertions(+), 55 deletions(-) diff --git a/snmp/osupdate b/snmp/osupdate index 6e6f8f533..c2fa66e9d 100755 --- a/snmp/osupdate +++ b/snmp/osupdate @@ -32,62 +32,79 @@ CMD_APK=' version' ################################################################ # Don't change anything unless you know what are you doing # ################################################################ -if command -v zypper &>/dev/null ; then - # OpenSUSE - UPDATES=`$BIN_ZYPPER $CMD_ZYPPER | $BIN_WC $CMD_WC` - if [ $UPDATES -ge 2 ]; then - echo $(($UPDATES-2)); +function check-update() { + if command -v zypper &>/dev/null ; then + # OpenSUSE + UPDATES=`$BIN_ZYPPER $CMD_ZYPPER | $BIN_WC $CMD_WC` + if [ $UPDATES -ge 2 ]; then + echo $(($UPDATES-2)); + else + echo "0"; + fi + elif command -v dnf &>/dev/null ; then + # Fedora + UPDATES=`$BIN_DNF $CMD_DNF | $BIN_WC $CMD_WC` + if [ $UPDATES -ge 1 ]; then + echo $(($UPDATES-1)); + else + echo "0"; + fi + elif command -v pacman &>/dev/null ; then + # Arch + UPDATES=`$BIN_PACMAN $CMD_PACMAN | $BIN_WC $CMD_WC` + if [ $UPDATES -ge 1 ]; then + echo $(($UPDATES-1)); + else + echo "0"; + fi + elif command -v yum &>/dev/null ; then + # CentOS / Redhat + UPDATES=`$BIN_YUM $CMD_YUM 2> /dev/null | $BIN_WC $CMD_WC` + if [ $UPDATES -ge 1 ]; then + echo $(($UPDATES-1)); + else + echo "0"; + fi + elif command -v apt-get &>/dev/null ; then + # Debian / Devuan / Ubuntu + UPDATES=`$BIN_APT $CMD_APT | $BIN_GREP $CMD_GREP 'Inst'` + if [ $UPDATES -ge 1 ]; then + echo $UPDATES; + else + echo "0"; + fi + elif command -v pkg &>/dev/null ; then + # FreeBSD + UPDATES=`$BIN_PKG $CMD_PKG | $BIN_WC $CMD_WC` + if [ $UPDATES -ge 1 ]; then + echo $UPDATES; + else + echo "0"; + fi + elif command -v apk &>/dev/null ; then + # Alpine + UPDATES=`$BIN_APK $CMD_APK | $BIN_WC $CMD_WC` + if [ $UPDATES -ge 2 ]; then + echo $(($UPDATES-1)); + else + echo "0"; + fi else echo "0"; fi -elif command -v dnf &>/dev/null ; then - # Fedora - UPDATES=`$BIN_DNF $CMD_DNF | $BIN_WC $CMD_WC` - if [ $UPDATES -ge 1 ]; then - echo $(($UPDATES-1)); - else - echo "0"; - fi -elif command -v pacman &>/dev/null ; then - # Arch - UPDATES=`$BIN_PACMAN $CMD_PACMAN | $BIN_WC $CMD_WC` - if [ $UPDATES -ge 1 ]; then - echo $(($UPDATES-1)); - else - echo "0"; - fi -elif command -v yum &>/dev/null ; then - # CentOS / Redhat - UPDATES=`$BIN_YUM $CMD_YUM | $BIN_WC $CMD_WC` - if [ $UPDATES -ge 1 ]; then - echo $(($UPDATES-1)); - else - echo "0"; - fi -elif command -v apt-get &>/dev/null ; then - # Debian / Devuan / Ubuntu - UPDATES=`$BIN_APT $CMD_APT | $BIN_GREP $CMD_GREP 'Inst'` - if [ $UPDATES -ge 1 ]; then - echo $UPDATES; - else - echo "0"; - fi -elif command -v pkg &>/dev/null ; then - # FreeBSD - UPDATES=`$BIN_PKG $CMD_PKG | $BIN_WC $CMD_WC` - if [ $UPDATES -ge 1 ]; then - echo $UPDATES; - else - echo "0"; - fi -elif command -v apk &>/dev/null ; then - # Alpine - UPDATES=`$BIN_APK $CMD_APK | $BIN_WC $CMD_WC` - if [ $UPDATES -ge 2 ]; then - echo $(($UPDATES-1)); - else - echo "0"; - fi -else - echo "0"; +} + +# Cache the file for 30 minutes +# We cache because it is a 1sec delay, which is painful for the poller +DATE=$(date +%s) +FILE=/var/cache/librenms/agent-local-osupdate + +if [ ! -e $FILE ]; then + check-update > $FILE +fi +FILEMTIME=$(stat -c %Y $FILE) +FILEAGE=$(($DATE-$FILEMTIME)) +if [ $FILEAGE -gt 1800 ]; then + check-update > $FILE fi +cat $FILE