EDDN/contrib/eddn-logs-archive
Athanasius 53e099a9f4 contrib/eddn-logs-archive: Make non-verbose
This script has been proven for months, quieten it for potentially no
crontab output unless there's a problem.
2022-08-31 07:30:57 +00:00

118 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
# Add ' -x' above to debug
#
###########################################################################
# Configuration
###########################################################################
# Maximum age, in days, of log files to keep
MAX_LOGFILE_AGE=28
# Minimum size of live log before rotating, see find(1) -size for format
MIN_ROTATE_SIZE="100M"
###########################################################################
###########################################################################
# Helper functions
###########################################################################
##################################################
# Print program usage information.
##################################################
usage() {
echo "Usage: $(basename $1) ( live | beta | dev ) [ --quiet ]" >&2
}
##################################################
##################################################
# Output depending on 'quiet' flag
##################################################
log() {
if [ -z "${QUIET}" ];
then
echo $@
fi
}
##################################################
###########################################################################
###########################################################################
# Check command line arguments
###########################################################################
EXIT_ARG_NO_ENV=1
EXIT_BAD_ARG=2
EXIT_NO_LOGS_DIR=3
EXIT_NO_CD_LOGS_DIR=4
EXIT_FAILED_COPY=5
EDDN_ENV="$1"
if [ -z "${EDDN_ENV}" ];
then
usage $0
exit ${EXIT_ARG_NO_ENV}
fi
if [ ! -z "${2}" ];
then
if [ "${2}" == "--quiet" ];
then
QUIET="1"
else
usage
exit ${EXIT_BAD_ARG}
fi
fi
###########################################################################
###########################################################################
# Perform rotation
###########################################################################
LOGS_DIR="${HOME}/${EDDN_ENV}/logs"
if [ ! -d "${LOGS_DIR}" ];
then
echo "$(dirname): Logs directory doesn't exist: ${LOGS_DIR}" >&2
exit ${EXIT_NO_LOGS_DIR}
fi
cd ${LOGS_DIR} || exit ${EXIT_NO_CD_LOGS_DIR}
for service in gateway monitor relay ;
do
log "Service: ${service}"
log " Expiring old logs..."
find . -name "${service}.log.*.gz" -a -atime +${MAX_LOGFILE_AGE} -exec rm -f {} \;
log " DONE"
log " Checking if current logfile needs archiving..."
if [ ! -z "$(find . -name ${service}.log -a -size +${MIN_ROTATE_SIZE})" ];
then
log " Archiving ${service}.log ..."
# We have no means to tell the service to close and re-open output, it's
# to stdout/err anyway. So we copy it.
TIMESTAMP="$(date --iso-8601=seconds)"
ARCHIVED_NAME="${service}.log.${TIMESTAMP}"
cp ${service}.log "${ARCHIVED_NAME}"
if [ $? -ne 0 ];
then
echo " FAILED copying live log file to new archive!!!" >&2
echo " Exiting from any further processing." >&2
exit ${EXIT_FAILED_COPY}
fi
# Truncate the live file.
:> ${service}.log
if [ "${service}" == "gateway" ];
then
# Produce a report of interesting errors
${HOME}/.local/bin/eddn-report-log-errors "${ARCHIVED_NAME}" > "${HOME}/reports/eddn-errors/by-log-rotation/eddn-errors-${TIMESTAMP}.txt"
fi
# Now compress the newly archived log
gzip -9 "${ARCHIVED_NAME}"
log " DONE"
else
log " No"
fi
done
###########################################################################
# vim: tabstop=2 shiftwidth=2 expandtab wrapmargin=0 textwidth=0