]> granicus.if.org Git - sysstat/blobdiff - sa2.in
Merge branch 'scop-grep-E'
[sysstat] / sa2.in
diff --git a/sa2.in b/sa2.in
index 9f5fa5ab8f4f2cf1db33d8fdbf74cc4e50b642e3..92bce8d92ca8e9f5c7035399b1c72c2a82448f21 100644 (file)
--- a/sa2.in
+++ b/sa2.in
@@ -1,64 +1,79 @@
 #!/bin/sh
 # @SA_LIB_DIR@/sa2
-# (C) 1999-2012 Sebastien Godard (sysstat <at> orange.fr)
+# (C) 1999-2021 Sebastien Godard (sysstat <at> orange.fr)
 #
 #@(#) @PACKAGE_NAME@-@PACKAGE_VERSION@
 #@(#) sa2: Write a daily report
 #
 S_TIME_FORMAT=ISO ; export S_TIME_FORMAT
-umask 0022
 prefix=@prefix@
 exec_prefix=@exec_prefix@
-# Add a trailing slash so that 'find' can go through this directory if it's a symlink
-DDIR=@SA_DIR@/
+SA_DIR=@SA_DIR@
 SYSCONFIG_DIR=@SYSCONFIG_DIR@
-YESTERDAY=@YESTERDAY@
-DATE=`date ${YESTERDAY} +%d`
-CURRENTFILE=sa${DATE}
-CURRENTRPT=sar${DATE}
+SYSCONFIG_FILE=@SYSCONFIG_FILE@
 HISTORY=@HISTORY@
 COMPRESSAFTER=@COMPRESSAFTER@
 ZIP="@ZIP@"
-[ -r ${SYSCONFIG_DIR}/sysstat ] && . ${SYSCONFIG_DIR}/sysstat
+UMASK=0022
+ENDIR=@SAR_DIR@
+DELAY_RANGE=@DELAY_RANGE@
+
+# Read configuration file, overriding variables set above
+[ -r ${SYSCONFIG_DIR}/${SYSCONFIG_FILE} ] && . ${SYSCONFIG_DIR}/${SYSCONFIG_FILE}
+
+umask ${UMASK}
+
+# Wait for a random delay if requested
+if [ ${DELAY_RANGE} -gt 0 ]
+then
+       RANDOM=$$
+       DELAY=$((${RANDOM}%${DELAY_RANGE}))
+       sleep ${DELAY}
+fi
+
+[ -d ${SA_DIR} ] || SA_DIR=@SA_DIR@
+
+# if YESTERDAY=no then today's summary is generated
+if [ x$YESTERDAY = xno ]
+then
+       DATE_OPTS=
+else
+       DATE_OPTS="--date=yesterday"
+fi
+
 if [ ${HISTORY} -gt 28 ]
 then
-       CURRENTDIR=`date ${YESTERDAY} +%Y%m`
-       cd ${DDIR} || exit 1
-       [ -d ${CURRENTDIR} ] || mkdir -p ${CURRENTDIR}
-       # Check if ${CURRENTFILE} is the correct file created at ${DATE}
-       # Note: using `-ge' instead of `=' since the file could have
-       # the next day time stamp because of the file rotating feature of sadc
-       [ -f ${CURRENTFILE} ] &&
-               [ "`date +%Y%m%d -r ${CURRENTFILE}`" -ge "${CURRENTDIR}${DATE}" ] || exit 0
-       # If the file is a regular file, then move it to ${CURRENTDIR}
-       [ ! -L ${CURRENTFILE} ] &&
-               mv -f ${CURRENTFILE} ${CURRENTDIR}/${CURRENTFILE} &&
-                       ln -s ${CURRENTDIR}/${CURRENTFILE} ${CURRENTFILE}
-       touch ${CURRENTDIR}/${CURRENTRPT}
-       # Remove the "compatibility" link and recreate it to point to
-       # the (new) current file
-       rm -f ${CURRENTRPT}
-       ln -s ${CURRENTDIR}/${CURRENTRPT} ${CURRENTRPT}
-       CURRENTDIR=${DDIR}/${CURRENTDIR}
+       DATE=`date ${DATE_OPTS} +%Y%m%d`
 else
-       CURRENTDIR=${DDIR}
+       DATE=`date ${DATE_OPTS} +%d`
 fi
-RPT=${CURRENTDIR}/${CURRENTRPT}
-ENDIR=@bindir@
-DFILE=${CURRENTDIR}/${CURRENTFILE}
-[ -f "$DFILE" ] || exit 0
+CURRENTFILE=sa${DATE}
+CURRENTRPT=sar${DATE}
+
+RPT=${SA_DIR}/${CURRENTRPT}
+DFILE=${SA_DIR}/${CURRENTFILE}
+if [ -z "${ENDIR}" ];
+then
+       ENDIR=@bindir@
+fi
+
+[ -f "${DFILE}" ] || exit 0
 cd ${ENDIR}
-[ -L ${RPT} ] && rm -f ${RPT}
-${ENDIR}/sar $* -f ${DFILE} > ${RPT}
-find ${DDIR} \( -name 'sar??' -o -name 'sa??' -o -name 'sar??.gz' -o -name 'sa??.gz' -o -name 'sar??.bz2' -o -name 'sa??.bz2' \) \
-       -mtime +"${HISTORY}" -exec rm -f {} \;
-find ${DDIR} \( -name 'sar??' -o -name 'sa??' \) -type f -mtime +"${COMPRESSAFTER}" \
-       -exec ${ZIP} {} \; > /dev/null 2>&1
-# Remove broken links
-for f in `find ${DDIR} \( -name 'sar??' -o -name 'sa??' \) -type l`; do
-       [ -e $f ] || rm -f $f
-done
-cd ${DDIR}
-rmdir [0-9]????? > /dev/null 2>&1
-exit 0
+if [ x${REPORTS} != xfalse ]
+then
+       ${ENDIR}/sar $* -f ${DFILE} > ${RPT}
+fi
+
+SAFILES_REGEX='/sar?[0-9]{2,8}(\.(Z|gz|bz2|xz|lz|lzo))?$'
+
+find "${SA_DIR}" -type f -mtime +${HISTORY} \
+       | grep -E "${SAFILES_REGEX}" \
+       | xargs   rm -f
 
+UNCOMPRESSED_SAFILES_REGEX='/sar?[0-9]{2,8}$'
+
+find "${SA_DIR}" -type f -mtime +${COMPRESSAFTER} \
+       | grep -E "${UNCOMPRESSED_SAFILES_REGEX}" \
+       | xargs -r "${ZIP}" > /dev/null
+
+exit 0