Add -T option to use formatting suitable for Telegram messages.
This commit is contained in:
parent
01af0ca438
commit
cc291b2ea4
140
bare.sh
140
bare.sh
|
@ -25,6 +25,7 @@ DATE=/bin/date
|
||||||
DOALL=0
|
DOALL=0
|
||||||
REPO_LIST=""
|
REPO_LIST=""
|
||||||
TESTMODE=0
|
TESTMODE=0
|
||||||
|
TELEGRAM=0
|
||||||
VERBOSE=0
|
VERBOSE=0
|
||||||
|
|
||||||
function cecho() {
|
function cecho() {
|
||||||
|
@ -61,7 +62,11 @@ function log() {
|
||||||
else
|
else
|
||||||
col="$CYAN"
|
col="$CYAN"
|
||||||
fi
|
fi
|
||||||
|
if [[ $TELEGRAM -eq 1 ]]; then
|
||||||
|
echo -e "__${now}__ **<${mode}>** \`$*\`" >>${LOG}
|
||||||
|
else
|
||||||
echo -e "$CYAN${now} <${mode}> $col$*$PLAIN" >>${LOG}
|
echo -e "$CYAN${now} <${mode}> $col$*$PLAIN" >>${LOG}
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function updatestats() {
|
function updatestats() {
|
||||||
|
@ -136,6 +141,7 @@ function usage() {
|
||||||
echo " -x num Use 'num' simultaneous connections (default: 20)"
|
echo " -x num Use 'num' simultaneous connections (default: 20)"
|
||||||
echo " -c Cron mode - log to ${LOGFILE}"
|
echo " -c Cron mode - log to ${LOGFILE}"
|
||||||
echo " -t Test mode - dump what would be done then exit."
|
echo " -t Test mode - dump what would be done then exit."
|
||||||
|
echo " -T Telegram fornatting mode"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Valid commands are:"
|
echo "Valid commands are:"
|
||||||
echo " $VALIDCOMMANDS"
|
echo " $VALIDCOMMANDS"
|
||||||
|
@ -452,8 +458,25 @@ function is_mounted() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function check_repomount_needed() {
|
||||||
|
local path
|
||||||
|
path=`gettagval "$f" premount`
|
||||||
|
if [[ $? -eq 0 ]]; then
|
||||||
|
grep -q $path /etc/fstab
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
log "Error: repo '$REPO' has premount tag but $path not in fstab."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
MOUNTREPO=1
|
||||||
|
else
|
||||||
|
MOUNTREPO=0
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
# Handle args
|
# Handle args
|
||||||
ARGS="acd:hs:tvx:"
|
ARGS="acd:hs:tTvx:"
|
||||||
|
|
||||||
while getopts "$ARGS" i; do
|
while getopts "$ARGS" i; do
|
||||||
case "$i" in
|
case "$i" in
|
||||||
|
@ -480,6 +503,9 @@ while getopts "$ARGS" i; do
|
||||||
t)
|
t)
|
||||||
TESTMODE=1
|
TESTMODE=1
|
||||||
;;
|
;;
|
||||||
|
T)
|
||||||
|
TELEGRAM=1
|
||||||
|
;;
|
||||||
v)
|
v)
|
||||||
VERBOSE=1
|
VERBOSE=1
|
||||||
;;
|
;;
|
||||||
|
@ -696,18 +722,8 @@ for f in $REPO_LIST; do
|
||||||
USENFS=0
|
USENFS=0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
path=`gettagval "$f" premount`
|
check_repomount_needed "$f" # sets $MOUNTREPO
|
||||||
if [[ $? -eq 0 ]]; then
|
[[ $? -ne 0 ]] && continue
|
||||||
grep -q $path /etc/fstab
|
|
||||||
if [[ $? -ne 0 ]]; then
|
|
||||||
log "Error: repo '$REPO' has premount tag but $path not in fstab."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
MOUNTREPO=1
|
|
||||||
else
|
|
||||||
MOUNTREPO=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
checktag "$f" localmount
|
checktag "$f" localmount
|
||||||
if [[ $? -eq 0 ]]; then
|
if [[ $? -eq 0 ]]; then
|
||||||
|
@ -747,6 +763,7 @@ for f in $REPO_LIST; do
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
if [[ -z $GOODREPOS ]]; then
|
if [[ -z $GOODREPOS ]]; then
|
||||||
GOODREPOS="$f"
|
GOODREPOS="$f"
|
||||||
else
|
else
|
||||||
|
@ -816,23 +833,6 @@ for f in $REPO_LIST; do
|
||||||
else
|
else
|
||||||
USINGDEFAULT=1
|
USINGDEFAULT=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $MOUNTREPO -eq 1 ]]; then
|
|
||||||
path=`gettagval "$f" premount`
|
|
||||||
[[ $VERBOSE -eq 1 ]] && log "debug: doing repo premount at $path via fstab"
|
|
||||||
if is_mounted $path; then
|
|
||||||
log "Pre-mount of '$path': already mounted"
|
|
||||||
else
|
|
||||||
mount $path
|
|
||||||
if [[ $? -eq 0 ]]; then
|
|
||||||
log "Pre-mount of '$path': success"
|
|
||||||
else
|
|
||||||
log "Pre-mount of '$path': FAILED"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $CMD == "go" ]]; then
|
if [[ $CMD == "go" ]]; then
|
||||||
NEEDMOUNT=1
|
NEEDMOUNT=1
|
||||||
elif [[ $CMD == "get" ]]; then
|
elif [[ $CMD == "get" ]]; then
|
||||||
|
@ -843,6 +843,22 @@ for f in $REPO_LIST; do
|
||||||
NEEDMOUNT=0
|
NEEDMOUNT=0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
check_repomount_needed "$f" # sets $MOUNTREPO
|
||||||
|
if [[ $MOUNTREPO -eq 1 ]]; then
|
||||||
|
path=`gettagval "$f" premount`
|
||||||
|
[[ $VERBOSE -eq 1 ]] && log "debug: doing repo premount at $path via fstab"
|
||||||
|
if is_mounted $path; then
|
||||||
|
[[ ! $CMD == "check" ]] && log "Pre-mount of '$path': already mounted"
|
||||||
|
else
|
||||||
|
mount $path
|
||||||
|
if [[ $? -eq 0 ]]; then
|
||||||
|
[[ ! $CMD == "check" ]] && log "Pre-mount of '$path': success"
|
||||||
|
else
|
||||||
|
[[ ! $CMD == "check" ]] && log "Pre-mount of '$path': FAILED"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
mode=`getmode "$f"`
|
mode=`getmode "$f"`
|
||||||
|
|
||||||
|
@ -968,20 +984,36 @@ for f in $REPO_LIST; do
|
||||||
oneday=$( echo "24 * 60 * 60" | bc)
|
oneday=$( echo "24 * 60 * 60" | bc)
|
||||||
if [[ $code -eq 0 ]]; then
|
if [[ $code -eq 0 ]]; then
|
||||||
if [[ $age -le $oneday ]]; then
|
if [[ $age -le $oneday ]]; then
|
||||||
cecho "$GREEN" "OK: Last backup for '$REPO' succeeded on $humanstamp."
|
if [[ $TELEGRAM -eq 1 ]]; then
|
||||||
|
echo "**OK**: Last backup for __${REPO}__ succeeded on $humanstamp."
|
||||||
|
else
|
||||||
|
cecho "$GREEN" "OK: Last backup for __${REPO}__ succeeded on $humanstamp."
|
||||||
|
fi
|
||||||
rv=0
|
rv=0
|
||||||
else
|
else
|
||||||
cecho "$RED" "CRITICAL: Last backup for '$REPO' succeeded on $humanstamp (age $age not in last 24 hours)."
|
if [[ $TELEGRAM -eq 1 ]]; then
|
||||||
|
echo "**CRITICAL**: Last backup for __${REPO}__ succeeded on $humanstamp (age $age not in last 24 hours)."
|
||||||
|
else
|
||||||
|
cecho "$RED" "CRITICAL: Last backup for __${REPO}__ succeeded on $humanstamp (age $age not in last 24 hours)."
|
||||||
|
fi
|
||||||
errcount=$(( $errcount + 1))
|
errcount=$(( $errcount + 1))
|
||||||
rv=2
|
rv=2
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
cecho "$RED" "CRITICAL: Last backup for '$REPO' failed on $humanstamp."
|
if [[ $TELEGRAM -eq 1 ]]; then
|
||||||
|
echo "**CRITICAL**: Last backup for __${REPO}__ failed on $humanstamp."
|
||||||
|
else
|
||||||
|
cecho "$RED" "CRITICAL: Last backup for __${REPO}__ failed on $humanstamp."
|
||||||
|
fi
|
||||||
rv=2
|
rv=2
|
||||||
errcount=$(( $errcount + 1))
|
errcount=$(( $errcount + 1))
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
if [[ $TELEGRAM -eq 1 ]]; then
|
||||||
|
echo "**WARNING**: No history found for repo '$REPO'"
|
||||||
else
|
else
|
||||||
cecho "$YELLOW" "WARNING: No history found for repo '$REPO'"
|
cecho "$YELLOW" "WARNING: No history found for repo '$REPO'"
|
||||||
|
fi
|
||||||
rv=1
|
rv=1
|
||||||
warncount=$(( $warncount + 1))
|
warncount=$(( $warncount + 1))
|
||||||
fi
|
fi
|
||||||
|
@ -1349,36 +1381,42 @@ for f in $REPO_LIST; do
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! $CMD == "check" ]]; then
|
|
||||||
# Record result
|
|
||||||
updatestats $f $CMD $rv
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $MOUNTREPO -eq 1 ]]; then
|
|
||||||
path=`gettagval "$f" premount`
|
|
||||||
umount $path
|
|
||||||
if [[ $? -eq 0 ]]; then
|
|
||||||
log "Un-mount of '$path': success"
|
|
||||||
else
|
|
||||||
log "Un-mount of '$path': FAILED"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [[ $rv -eq 0 ]]; then
|
|
||||||
if [[ $NEEDMOUNT -eq 1 ]]; then
|
if [[ $NEEDMOUNT -eq 1 ]]; then
|
||||||
do_umount
|
do_umount
|
||||||
fi
|
fi
|
||||||
elif [[ ! $CMD == "check" ]]; then
|
|
||||||
|
|
||||||
|
if [[ ! $CMD == "check" ]]; then
|
||||||
|
# Record result
|
||||||
|
updatestats $f $CMD $rv
|
||||||
|
|
||||||
|
# did our command succeed?
|
||||||
|
if [[ $rv -ne 0 ]]; then
|
||||||
log "Error: '$CMD' on repo '$REPO' failed"
|
log "Error: '$CMD' on repo '$REPO' failed"
|
||||||
if [[ ! -z $errtext ]]; then
|
if [[ ! -z $errtext ]]; then
|
||||||
log "$errtext"
|
log "$errtext"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! $CMD == "check" ]]; then
|
|
||||||
log "Finished '$CMD' on repo '$REPO'"
|
log "Finished '$CMD' on repo '$REPO'"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Clean up
|
||||||
|
for f in $REPO_LIST; do
|
||||||
|
check_repomount_needed "$f" # sets $MOUNTREPO
|
||||||
|
if [[ $MOUNTREPO -eq 1 ]]; then
|
||||||
|
path=`gettagval "$f" premount`
|
||||||
|
if is_mounted $path; then
|
||||||
|
umount $path
|
||||||
|
if [[ $? -eq 0 ]]; then
|
||||||
|
[[ ! $CMD == "check" ]] && log "Un-mount of '$path': success"
|
||||||
|
else
|
||||||
|
[[ ! $CMD == "check" ]] && log "Un-mount of '$path': FAILED"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
if [[ $CMD == "check" ]]; then
|
if [[ $CMD == "check" ]]; then
|
||||||
if [[ $errcount -ge 1 ]]; then
|
if [[ $errcount -ge 1 ]]; then
|
||||||
rv=2
|
rv=2
|
||||||
|
|
Loading…
Reference in New Issue