35 lines
974 B
Bash
35 lines
974 B
Bash
#!/bin/bash
|
|
# Ansible managed
|
|
|
|
set -euo pipefail
|
|
|
|
TMPDIR=/dev/shm
|
|
SOCKET=/run/haproxy/monitoring.sock
|
|
TMPFILE=$TMPDIR/haproxy_info.tmp
|
|
CACHEFILE=$TMPDIR/haproxy_info.txt
|
|
CACHE_EXPIRATION_TIME_SECONDS=60
|
|
METRIC=$1
|
|
|
|
refresh_cache_file () {
|
|
echo "show info" | socat /run/haproxy/monitoring.sock stdio > $TMPFILE
|
|
# rsync is atomic
|
|
rsync -t $TMPFILE $CACHEFILE
|
|
}
|
|
|
|
# if either the tmpfile or the cachefile is not here, do the refresh
|
|
if ! [ -f $TMPFILE ] || ! [ -f $CACHEFILE ]; then
|
|
refresh_cache_file
|
|
fi
|
|
|
|
# if the cache file is too old, do the refresh
|
|
CACHEFILE_TIMESTAMP=$(stat -c %Y $CACHEFILE)
|
|
if [ ${CACHEFILE_TIMESTAMP} -lt $(date -d "60 second ago" "+%s") ]; then
|
|
refresh_cache_file
|
|
fi
|
|
|
|
# we need a special case for "Unstoppable Jobs" because that's the only metric with a space in its name
|
|
if [ $METRIC == "UnstoppableJobs" ]; then
|
|
egrep "^Unstoppable Jobs: " $CACHEFILE | sed "s/^Unstoppable Jobs: //"
|
|
else
|
|
egrep "^$METRIC: " $CACHEFILE | sed "s/^$METRIC: //"
|
|
fi
|