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,36 +38,40 @@ typeset YEAR_MONTH=""
typeset LOG_COUNT=0 typeset LOG_COUNT=0
typeset ARCHIVE_RC=0 typeset ARCHIVE_RC=0
typeset SAVE_HC_LOG="${HC_LOG}.$$" 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 # 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 # isolate messages from HC, find unique %Y-%m combinations
grep ".*${SEP}${HC_NAME}${SEP}" ${HC_LOG} 2>/dev/null |\ grep ".*${SEP}${HC_NAME}${SEP}" ${HC_LOG} 2>/dev/null |\
cut -f1 -d"${SEP}" | cut -f1 -d' ' | cut -f1-2 -d'-' | sort -u |\ cut -f1 -d"${SEP}" | cut -f1 -d' ' | cut -f1-2 -d'-' | sort -u |\
while read YEAR_MONTH while read YEAR_MONTH
do do
# find all messages for that YEAR-MONTH combination # find all messages for that YEAR-MONTH combination
grep "${YEAR_MONTH}.*${SEP}${HC_NAME}${SEP}" ${HC_LOG} >${TMP_FILE} grep "${YEAR_MONTH}.*${SEP}${HC_NAME}${SEP}" ${HC_LOG} >${TMP1_FILE}
LOG_COUNT=$(wc -l ${TMP_FILE} | cut -f1 -d' ') LOG_COUNT=$(wc -l ${TMP1_FILE} | cut -f1 -d' ')
log "# of new entries to archive: ${LOG_COUNT}" log "# of new entries to archive: ${LOG_COUNT}"
# combine existing archived messages and resort # combine existing archived messages and resort
ARCHIVE_FILE="${ARCHIVE_DIR}/hc.${YEAR_MONTH}.log" 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_COUNT=$(wc -l ${ARCHIVE_FILE} | cut -f1 -d' ')
log "# entries in ${ARCHIVE_FILE} now: ${LOG_COUNT}" log "# entries in ${ARCHIVE_FILE} now: ${LOG_COUNT}"
# remove archived messages from the $HC_LOG (but create a backup first!) # remove archived messages from the $HC_LOG (but create a backup first!)
cp -p ${HC_LOG} ${SAVE_HC_LOG} 2>/dev/null cp -p ${HC_LOG} ${SAVE_HC_LOG} 2>/dev/null
comm -23 ${HC_LOG} ${ARCHIVE_FILE} 2>/dev/null >${TMP_FILE} # compare with the sorted $HC_LOG
if [[ -s ${TMP_FILE} ]] sort ${HC_LOG} >${TMP1_FILE}
comm -23 ${TMP1_FILE} ${ARCHIVE_FILE} 2>/dev/null >${TMP2_FILE}
if [[ -s ${TMP2_FILE} ]]
then 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_COUNT=$(wc -l ${HC_LOG} | cut -f1 -d' ')
log "# entries in ${HC_LOG} now: ${LOG_COUNT}" log "# entries in ${HC_LOG} now: ${LOG_COUNT}"
ARCHIVE_RC=1 ARCHIVE_RC=1
else else
warn "a problem occurred. Rolling back archival" warn "a problem occurred. Rolling back archival"
mv ${SAVE_HC_LOG} ${HC_LOG} 2>/dev/null mv ${SAVE_HC_LOG} ${HC_LOG} 2>/dev/null
@ -76,7 +80,7 @@ do
done done
# clean up temporary file(s) # 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} return ${ARCHIVE_RC}
} }
@ -484,11 +488,11 @@ then
then then
die "you cannot specify '--today' with '--id'" die "you cannot specify '--today' with '--id'"
fi fi
# switch on history for --last & --today # switch on history for --last & --today
if (( ARG_LAST != 0 )) || (( ARG_TODAY != 0 )) if (( ARG_LAST != 0 )) || (( ARG_TODAY != 0 ))
then then
ARG_HISTORY=1 ARG_HISTORY=1
fi fi
fi fi
if (( DO_REPORT_STD == 0 )) && (( ARG_LAST != 0 )) if (( DO_REPORT_STD == 0 )) && (( ARG_LAST != 0 ))
then then