self-diagnostics: compile logs in case of failure

This commit is contained in:
Vivek Kumar Dutta 2025-03-20 14:48:20 +05:30
parent 21cdf07e54
commit 97a845fda2
No known key found for this signature in database
GPG key ID: 4E09F5AD8265FD4C
2 changed files with 80 additions and 71 deletions

View file

@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=self-diagnostics
PKG_VERSION:=1.0.15
PKG_VERSION:=1.0.16
PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0-only

View file

@ -13,29 +13,6 @@ COMPOPTS=""
TIMEOUT=5
JSON_OUT_BUFFER=""
cleanup()
{
if [ -d "${REPORT_TEMP_DIR}" ]; then
rm -rf ${REPORT_TEMP_DIR}
fi
}
trap cleanup EXIT
help()
{
echo "Generate self diagnostics report"
echo
echo "Syntax: $0 [-m|h|l|j]"
echo
echo "Options:"
echo " l List available module(s)"
echo " m Generate system report of specific module(s)"
echo " j Enable JSON output"
echo " h Print this help"
echo
}
log()
{
log_file="${REPORT_TEMP_DIR}/execution.log"
@ -52,6 +29,85 @@ err_log()
echo "[$(date +%Y:%m:%d-%H:%M:%S) ERR] $*" >> ${log_file}
}
generate_report()
{
local filename
filename="${REPORT_PATH}/${REPORT_NAME}"
[ -f "${filename}.tar" ] && rm "${filename}.tar"
[ -f "${filename}.tar.gz" ] && rm "${filename}.tar.gz"
log "# Report generation completed #"
cd ${REPORT_TEMP_DIR} && {
filename="${filename}.tar"
tar -cf "${filename}" *
}
if [ -n "$COMPOPTS" ]; then
gzip -${COMPOPTS} -f "${filename}"
filename="${filename}.gz"
fi
# Move logs if failed to generate tar
if [ ! -f "${filename}" ]; then
mv ${REPORT_TEMP_DIR}/*.log ${REPORT_PATH}/
fi
if [ "${JSON_OUT}" -eq 1 ]; then
json_init
json_load "${JSON_OUT_BUFFER}"
if [ -f "${filename}" ]; then
json_add_string result "${filename}"
else
log "error: Failed to generate report tar, check logs in ${REPORT_PATH}"
json_add_string error "Failed to generate report tar, check logs in ${REPORT_PATH}"
fi
json_dump
else
if [ -f "${filename}" ]; then
echo "result: ${filename}"
else
log "error: Failed to generate report tar, check logs in ${REPORT_PATH}"
echo "error: Failed to generate report tar, check logs in ${REPORT_PATH}"
fi
fi
}
cleanup()
{
if [ -d "${REPORT_TEMP_DIR}" ]; then
generate_report
rm -rf ${REPORT_TEMP_DIR}
fi
}
term_cleanup()
{
if [ -d "${REPORT_TEMP_DIR}" ]; then
err_log "Exiting due to TERM/INT signal"
generate_report
rm -rf ${REPORT_TEMP_DIR}
fi
}
trap cleanup EXIT
trap term_cleanup INT TERM
help()
{
echo "Generate self diagnostics report"
echo
echo "Syntax: $0 [-m|h|l|j]"
echo
echo "Options:"
echo " l List available module(s)"
echo " m Generate system report of specific module(s)"
echo " j Enable JSON output"
echo " h Print this help"
echo
}
# Alias ubus to have a smaller 5-second timeout on all subsequent calls
ubus()
{
@ -333,51 +389,6 @@ list_modules()
fi
}
generate_report()
{
local filename
filename="${REPORT_PATH}/${REPORT_NAME}"
[ -f "${filename}.tar" ] && rm "${filename}.tar"
[ -f "${filename}.tar.gz" ] && rm "${filename}.tar.gz"
log "# Report generation completed #"
cd ${REPORT_TEMP_DIR} && {
filename="${filename}.tar"
tar -cf "${filename}" *
}
if [ -n "$COMPOPTS" ]; then
gzip -${COMPOPTS} -f "${filename}"
filename="${filename}.gz"
fi
# Move logs if failed to generate tar
if [ ! -f "${filename}" ]; then
mv ${REPORT_TEMP_DIR}/*.log ${REPORT_PATH}/
fi
if [ "${JSON_OUT}" -eq 1 ]; then
json_init
json_load "${JSON_OUT_BUFFER}"
if [ -f "${filename}" ]; then
json_add_string result "${filename}"
else
log "error: Failed to generate report tar, check logs in ${REPORT_PATH}"
json_add_string error "Failed to generate report tar, check logs in ${REPORT_PATH}"
fi
json_dump
else
if [ -f "${filename}" ]; then
echo "result: ${filename}"
else
log "error: Failed to generate report tar, check logs in ${REPORT_PATH}"
echo "error: Failed to generate report tar, check logs in ${REPORT_PATH}"
fi
fi
}
[ ! -d "${SPEC_DIR}" ] && {
log "# ${SPEC_DIR} does not exist"
exit 1
@ -413,5 +424,3 @@ if [ -z "${modules}" ]; then
else
generate_module ${modules}
fi
generate_report