Added archival feature (also included code for this into the reporting functions)
This commit is contained in:
@@ -23,6 +23,64 @@
|
||||
# DO NOT CHANGE THIS FILE UNLESS YOU KNOW WHAT YOU ARE DOING!
|
||||
#******************************************************************************
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# @(#) FUNCTION: archive_hc()
|
||||
# DOES: archive log entries for a given HC
|
||||
# EXPECTS: HC name [string]
|
||||
# RETURNS: 0=no archiving needed; 1=archiving OK; 2=archiving NOK
|
||||
# REQUIRES: n/a
|
||||
function archive_hc
|
||||
{
|
||||
(( ARG_DEBUG != 0 && ARG_DEBUG_LEVEL > 0 )) && set "${DEBUG_OPTS}"
|
||||
typeset HC_NAME="$1"
|
||||
typeset ARCHIVE_FILE=""
|
||||
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.$$"
|
||||
|
||||
# set local trap for cleanup
|
||||
trap "rm -f ${TMP_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 |\
|
||||
cut -f1 -d"${SEP}" | cut -f1 -d' ' | cut -f1-2 -d'-' | sort -u |\
|
||||
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' ')
|
||||
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}
|
||||
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} ]]
|
||||
then
|
||||
mv ${TMP_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
|
||||
else
|
||||
warn "a problem occurred. Rolling back archival"
|
||||
mv ${SAVE_HC_LOG} ${HC_LOG} 2>/dev/null
|
||||
ARCHIVE_RC=2
|
||||
fi
|
||||
done
|
||||
|
||||
# clean up temporary file(s)
|
||||
rm -f ${TMP_FILE} ${SAVE_HC_LOG} >/dev/null 2>&1
|
||||
|
||||
return ${ARCHIVE_RC}
|
||||
}
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# @(#) FUNCTION: debug()
|
||||
# DOES: handle debug messages
|
||||
@@ -391,7 +449,7 @@ if (( DO_NOTIFY_SMS != 0 )) && [[ -z "${ARG_SMS_PROVIDER}" ]]
|
||||
then
|
||||
die "you cannot specify '--notify=sms' without '--sms-provider'"
|
||||
fi
|
||||
# --report/--detail/--id/--reverse/--last/--today
|
||||
# --report/--detail/--id/--reverse/--last/--today/--with-history
|
||||
if (( DO_REPORT_STD != 0 ))
|
||||
then
|
||||
if (( ARG_DETAIL != 0 )) && [[ -z "${ARG_FAIL_ID}" ]]
|
||||
@@ -426,6 +484,11 @@ then
|
||||
then
|
||||
die "you cannot specify '--today' with '--id'"
|
||||
fi
|
||||
# switch on history for --last & --today
|
||||
if (( ARG_LAST != 0 )) || (( ARG_TODAY != 0 ))
|
||||
then
|
||||
ARG_HISTORY=1
|
||||
fi
|
||||
fi
|
||||
if (( DO_REPORT_STD == 0 )) && (( ARG_LAST != 0 ))
|
||||
then
|
||||
@@ -439,6 +502,10 @@ if (( DO_REPORT_STD == 0 )) && (( ARG_DETAIL != 0 ))
|
||||
then
|
||||
die "you cannot specify '--detail' without '--report'"
|
||||
fi
|
||||
if (( DO_REPORT_STD == 0 )) && (( ARG_HISTORY != 0 ))
|
||||
then
|
||||
die "you cannot specify '--with-history' without '--report'"
|
||||
fi
|
||||
if (( DO_REPORT_STD == 0 )) && [[ -n "${ARG_FAIL_ID}" ]]
|
||||
then
|
||||
die "you cannot specify '--id' without '--report'"
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
function report_std
|
||||
{
|
||||
# ------------------------- CONFIGURATION starts here -------------------------
|
||||
typeset _VERSION="2017-12-15" # YYYY-MM-DD
|
||||
typeset _VERSION="2017-12-26" # YYYY-MM-DD
|
||||
typeset _SUPPORTED_PLATFORMS="AIX,HP-UX,Linux" # uname -s match
|
||||
# ------------------------- CONFIGURATION ends here ---------------------------
|
||||
|
||||
@@ -52,9 +52,19 @@ typeset _HC_LAST_FAIL_ID="-"
|
||||
typeset _HC_LAST_EVENT_FAIL_ID=0
|
||||
typeset _HC_LAST_EVENT_STC=""
|
||||
typeset _ID_NEEDLE=""
|
||||
typeset _LOG_STASH=""
|
||||
typeset _REPORT_LINE=""
|
||||
typeset _SORT_CMD=""
|
||||
|
||||
# which files do we need to examine
|
||||
if (( ARG_HISTORY != 0 ))
|
||||
then
|
||||
set +f # file globbing must be on
|
||||
_LOG_STASH="${HC_LOG} ${ARCHIVE_DIR}/hc.*.log"
|
||||
else
|
||||
_LOG_STASH="${HC_LOG}"
|
||||
fi
|
||||
|
||||
# --last report
|
||||
if (( ARG_LAST != 0 ))
|
||||
then
|
||||
@@ -68,14 +78,14 @@ then
|
||||
_HC_LAST_FAIL_ID="-"
|
||||
# find last event or block of events (same timestamp)
|
||||
# (but unfortunately this is only accurate to events within the SAME second!)
|
||||
_HC_LAST_TIME="$(grep ${_HC_LAST} ${HC_LOG} 2>/dev/null | sort -n | cut -f1 -d${SEP} | uniq | tail -1)"
|
||||
_HC_LAST_TIME="$(grep -h ${_HC_LAST} ${_LOG_STASH} 2>/dev/null | sort -n | cut -f1 -d${SEP} | uniq | tail -1)"
|
||||
if [[ -z "${_HC_LAST_TIME}" ]]
|
||||
then
|
||||
_HC_LAST_TIME="-"
|
||||
_HC_LAST_STC="-"
|
||||
else
|
||||
# find all STC codes for the last event and add them up
|
||||
grep "${_HC_LAST_TIME}${SEP}${HC_LAST}" ${HC_LOG} 2>/dev/null |\
|
||||
grep -h "${_HC_LAST_TIME}${SEP}${HC_LAST}" ${_LOG_STASH} 2>/dev/null |\
|
||||
while read -r _REPORT_LINE
|
||||
do
|
||||
_HC_LAST_EVENT_STC=$(print "${_REPORT_LINE}" | cut -f3 -d"${SEP}")
|
||||
@@ -99,7 +109,7 @@ else
|
||||
(( ARG_TODAY != 0 )) && _ID_NEEDLE="$(date '+%Y%m%d')" # refers to timestamp of HC FAIL_ID
|
||||
|
||||
# check fail count (look for unique IDs in the 5th field of the HC log)
|
||||
_FAIL_COUNT=$(cut -f5 -d"${SEP}" ${HC_LOG} 2>/dev/null | grep -E -e "${_ID_NEEDLE}" | uniq | wc -l)
|
||||
_FAIL_COUNT=$(cut -f5 -d"${SEP}" ${_LOG_STASH} 2>/dev/null | grep -E -e "${_ID_NEEDLE}" | uniq | wc -l)
|
||||
if (( _FAIL_COUNT != 0 ))
|
||||
then
|
||||
# check for detail or not?
|
||||
@@ -123,7 +133,7 @@ else
|
||||
|
||||
# print failed events
|
||||
# no extended grep here and no end $SEP!
|
||||
grep ".*${SEP}.*${SEP}.*${SEP}.*${SEP}${_ID_NEEDLE}" ${HC_LOG} 2>/dev/null |\
|
||||
grep -h ".*${SEP}.*${SEP}.*${SEP}.*${SEP}${_ID_NEEDLE}" ${_LOG_STASH} 2>/dev/null |\
|
||||
${_SORT_CMD} | while read -r _REPORT_LINE
|
||||
do
|
||||
_FAIL_F1=$(print "${_REPORT_LINE}" | cut -f1 -d"${SEP}")
|
||||
@@ -141,7 +151,7 @@ else
|
||||
_EVENT_COUNT=1
|
||||
_DIR_PREFIX="$(expr substr ${ARG_FAIL_ID} 1 4)-$(expr substr ${ARG_FAIL_ID} 5 2)"
|
||||
# no extended grep here!
|
||||
grep ".*${SEP}.*${SEP}.*${SEP}.*${SEP}${_ID_NEEDLE}${SEP}" ${HC_LOG} 2>/dev/null |\
|
||||
grep -h ".*${SEP}.*${SEP}.*${SEP}.*${SEP}${_ID_NEEDLE}${SEP}" ${_LOG_STASH} 2>/dev/null |\
|
||||
${_SORT_CMD} | while read -r _REPORT_LINE
|
||||
do
|
||||
_FAIL_F1=$(print "${_REPORT_LINE}" | cut -f1 -d"${SEP}")
|
||||
|
||||
Reference in New Issue
Block a user