Fix for unsorted HC_LOG in comm

This commit is contained in:
Patrick Van der Veken 2017-12-26 14:47:45 +01:00
parent 1c3d9fd77f
commit 6f08fe04f6

View File

@ -38,10 +38,11 @@ typeset YEAR_MONTH=""
typeset LOG_COUNT=0
typeset ARCHIVE_RC=0
typeset SAVE_HC_LOG="${HC_LOG}.$$"
typeset TMP_FILE="${TMP_DIR}/.$0.tmp.archive.$$"
typeset TMP1_FILE="${TMP_DIR}/.$0.tmp1.archive.$$"
typeset TMP2_FILE="${TMP_DIR}/.$0.tmp2.archive.$$"
# set local trap for cleanup
trap "rm -f ${TMP_FILE} ${SAVE_LOG_FILE} >/dev/null 2>&1; return 1" 1 2 3 15
trap "rm -f ${TMP1_FILE} ${TMP2_FILE} ${SAVE_LOG_FILE} >/dev/null 2>&1; return 1" 1 2 3 15
# isolate messages from HC, find unique %Y-%m combinations
grep ".*${SEP}${HC_NAME}${SEP}" ${HC_LOG} 2>/dev/null |\
@ -49,22 +50,25 @@ grep ".*${SEP}${HC_NAME}${SEP}" ${HC_LOG} 2>/dev/null |\
while read YEAR_MONTH
do
# find all messages for that YEAR-MONTH combination
grep "${YEAR_MONTH}.*${SEP}${HC_NAME}${SEP}" ${HC_LOG} >${TMP_FILE}
LOG_COUNT=$(wc -l ${TMP_FILE} | cut -f1 -d' ')
grep "${YEAR_MONTH}.*${SEP}${HC_NAME}${SEP}" ${HC_LOG} >${TMP1_FILE}
LOG_COUNT=$(wc -l ${TMP1_FILE} | cut -f1 -d' ')
log "# of new entries to archive: ${LOG_COUNT}"
# combine existing archived messages and resort
ARCHIVE_FILE="${ARCHIVE_DIR}/hc.${YEAR_MONTH}.log"
cat ${ARCHIVE_FILE} ${TMP_FILE} | sort -u >${ARCHIVE_FILE}
cat ${ARCHIVE_FILE} ${TMP1_FILE} | sort -u >${ARCHIVE_FILE}
LOG_COUNT=$(wc -l ${ARCHIVE_FILE} | cut -f1 -d' ')
log "# entries in ${ARCHIVE_FILE} now: ${LOG_COUNT}"
# remove archived messages from the $HC_LOG (but create a backup first!)
cp -p ${HC_LOG} ${SAVE_HC_LOG} 2>/dev/null
comm -23 ${HC_LOG} ${ARCHIVE_FILE} 2>/dev/null >${TMP_FILE}
if [[ -s ${TMP_FILE} ]]
# compare with the sorted $HC_LOG
sort ${HC_LOG} >${TMP1_FILE}
comm -23 ${TMP1_FILE} ${ARCHIVE_FILE} 2>/dev/null >${TMP2_FILE}
if [[ -s ${TMP2_FILE} ]]
then
mv ${TMP_FILE} ${HC_LOG} 2>/dev/null
mv ${TMP2_FILE} ${HC_LOG} 2>/dev/null
LOG_COUNT=$(wc -l ${HC_LOG} | cut -f1 -d' ')
log "# entries in ${HC_LOG} now: ${LOG_COUNT}"
ARCHIVE_RC=1
@ -76,7 +80,7 @@ do
done
# clean up temporary file(s)
rm -f ${TMP_FILE} ${SAVE_HC_LOG} >/dev/null 2>&1
rm -f ${TMP_FILE} ${TMP2_FILE} ${SAVE_HC_LOG} >/dev/null 2>&1
return ${ARCHIVE_RC}
}