From 97a845fda2ca164dc91442e9ca80015ba5aecf42 Mon Sep 17 00:00:00 2001 From: Vivek Kumar Dutta Date: Thu, 20 Mar 2025 14:48:20 +0530 Subject: [PATCH] self-diagnostics: compile logs in case of failure --- self-diagnostics/Makefile | 2 +- .../files/usr/sbin/self-diagnostics | 149 ++++++++++-------- 2 files changed, 80 insertions(+), 71 deletions(-) diff --git a/self-diagnostics/Makefile b/self-diagnostics/Makefile index 661ccd5f8..b3c781009 100644 --- a/self-diagnostics/Makefile +++ b/self-diagnostics/Makefile @@ -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 diff --git a/self-diagnostics/files/usr/sbin/self-diagnostics b/self-diagnostics/files/usr/sbin/self-diagnostics index 3701dfec1..db1e6c94a 100755 --- a/self-diagnostics/files/usr/sbin/self-diagnostics +++ b/self-diagnostics/files/usr/sbin/self-diagnostics @@ -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