install-all: install-server install-client
install-server:
- install -d -o nagios -g nagios -m 750 \
- /var/lib/nagios3/collect
+ install -d -o nagios -g nagios -m 750 /var/lib/nagios3/collect
[ -r /etc/nagios3/system.cfg ] || \
install -D -o nagios -g root -m 640 -p \
server/etc/system.cfg /etc/nagios3/system.cfg
server/web/nagcollect.php /var/www/nagcollect.php
install-client:
- install -d -o 0 -g 0 -m 755 \
- /usr/local/sbin
+ install -d -o 0 -g 0 -m 755 /usr/local/sbin
install -c -o 0 -g 0 -m 755 -p \
client/bin/nagcollect /usr/local/sbin/nagcollect
+ install -d -o 0 -g 0 -m 755 /usr/local/etc
+ [ -r /usr/local/etc/nagcollect.conf ] || \
+ install -o 0 -g 0 -m 600 -p \
+ client/etc/nagcollect.conf /usr/local/etc/nagcollect.conf
+ install -d -o 0 -g 0 -m 755 /usr/local/lib/nagcollect
+ (cd client/lib; find . -name '*.tst' | \
+ while read x; do \
+ install -d -o 0 -g 0 -m 755 `dirname "/usr/local/lib/nagcollect/$$x"`; \
+ install -o 0 -g 0 -m 644 "$$x" "/usr/local/lib/nagcollect/$$x"; \
+ done \
+ )
-.PHONY: all install-server install-client
+nagcollecttestscripts:
+ tar -czvf nagcollecttestscripts.tgz -C client/lib .
+
+.PHONY: all install install-all install-server install-client \
+ nagcollecttestscripts
# -eof-
# Copyright (c)2009 Alexander Barton, alex@barton.de
#
-if [ "$1" = "--help" -o "$1" = "-h" -o $# -lt 5 -o $# -gt 6 ]; then
- echo "Usage: $0 <server-url> <key> <host> <status> <service> [<text>]"
+NAME=`basename "$0"`
+MAXTIME=300
+
+function Msg()
+{
+ echo $*
+}
+
+function Error()
+{
+ logger -t "$NAME" "$*"
+ echo $*
exit 1
+}
+
+function refreshTestScripts()
+{
+ tmp=`mktemp /tmp/nagcollect.XXXXXX`
+ Msg "Downloading scripts from ${SERVER_URL} ..."
+ curl --insecure --fail --output "$tmp" --silent --max-time $MAXTIME \
+ "${SERVER_URL}/nagcollecttestscripts.tgz" ; r=$?
+ if [ $r -eq 0 ]; then
+ # Update local test scripts
+ Msg "Extracting scripts ..."
+ mkdir -p /usr/local/lib/nagcollect
+ tar xzf "$tmp" -C /usr/local/lib/nagcollect ; r=$?
+ fi
+ rm -f "$tmp"
+ return $r
+}
+
+function submitService()
+{
+ curl --insecure --fail --output /dev/null --silent --max-time $MAXTIME \
+ --data-urlencode "key=$CLIENT_KEY" \
+ --data-urlencode "host=$CLIENT_ID" \
+ --data-urlencode "service=$1" \
+ --data-urlencode "status=$2" \
+ --data-urlencode "text=$3" \
+ "${SERVER_URL}/nagcollect.php" ; r=$?
+ return $r
+}
+
+[ -r "/usr/local/etc/nagcollect.conf" ] && . /usr/local/etc/nagcollect.conf
+[ -r "/etc/nagcollect.conf" ] && . /etc/nagcollect.conf
+
+[ -n "$SERVER_URL" -a -n "$CLIENT_KEY" -a -n "$CLIENT_ID" ] || \
+ Error "Configuration invalid, check SERVER_URL, CLIENT_KEY and CLIENT_ID variables!"
+
+if [ "$AUTOUPDATE" = 1 ]; then
+ Msg "Updating local test scripts:"
+ refreshTestScripts || \
+ Error "Failed to refresh test scripts from \"$SERVER_URL\" ($?)!"
fi
-curl --insecure --include \
- --data-urlencode "key=$2" \
- --data-urlencode "host=$3" \
- --data-urlencode "status=$4" \
- --data-urlencode "service=$5" \
- --data-urlencode "text=$6" \
- "$1"
+Msg "Running test scripts:"
+
+ls -1 \
+ /usr/local/lib/nagcollect/*.tst \
+ /usr/local/lib/nagcollect/`uname`/*.tst \
+ 2>/dev/null | while read tst; do
+ [ -r "$tst" ] || continue
+ SERVICE=""; STATUS=""; TEXT=""
+ Msg "Checking \"$tst\" ..."
+ . "$tst"
+ [ -n "$SERVICE" -a -n "$STATUS" ] || continue
+ submitService "$SERVICE" "$STATUS" "$TEXT"
+ Msg "RESULT: $SERVICE=$STATUS \"$TEXT\" ($?)"
+done
# -eof-
--- /dev/null
+# NagCollect -- Nagios Data Collector for Passive Checks
+# Copyright (c)2009 Alexander Barton, alex@barton.de
+
+SERVICE="Sys-Load_p"
+
+uptime=`LC_ALL=C uptime`
+load=${uptime##*:}
+
+load01=`echo $load | cut -d' ' -f1 | cut -d'.' -f1`
+load05=`echo $load | cut -d' ' -f2 | cut -d'.' -f1`
+load15=`echo $load | cut -d' ' -f3 | cut -d'.' -f1`
+
+if [ $load01 -ge 8 -o $load05 -ge 6 -o $load15 -ge 3 ]; then
+ STATUS=2
+ TEXT="ERROR - Load average: $load"
+elif [ $load01 -ge 4 -o $load05 -ge 3 -o $load15 -ge 1 ]; then
+ STATUS=1
+ TEXT="WARNING - Load average: $load"
+else
+ STATUS=0
+ TEXT="OK - Load average: $load"
+fi
\ No newline at end of file