From b491fdc8b9d8367ee7d0b6f31bed66d38f932b06 Mon Sep 17 00:00:00 2001 From: Kristijan Mitrovic Date: Tue, 28 Jul 2020 16:06:01 +0200 Subject: [PATCH] Use links to /dev/null when logs are turned off --- .../packer/roles/bubble/files/log_manager.sh | 80 +++---------------- 1 file changed, 13 insertions(+), 67 deletions(-) diff --git a/bubble-server/src/main/resources/packer/roles/bubble/files/log_manager.sh b/bubble-server/src/main/resources/packer/roles/bubble/files/log_manager.sh index b3c21f0f..a7926231 100755 --- a/bubble-server/src/main/resources/packer/roles/bubble/files/log_manager.sh +++ b/bubble-server/src/main/resources/packer/roles/bubble/files/log_manager.sh @@ -4,77 +4,23 @@ # https://getbubblenow.com/bubble-license/ # -function die { - echo 1>&2 "${1}" - exit 1 -} - BUBBLE_LOGS_FOLDER=/var/log/bubble REDIS_LOG_FLAG_KEY="bubble.StandardSelfNodeService.bubble_server_logs_enabled" -SUPERVISOR_CONFIG_DIR=/etc/supervisor/conf.d -if [[ ! -d "${SUPERVISOR_CONFIG_DIR}" ]]; then - die "Cannot find folder with supervisor configuration files" -fi - -# use bubble configuration as reference for current (previous) log flag state: -SUPERVISOR_BUBBLE_CONFIG=${SUPERVISOR_CONFIG_DIR}/bubble.conf -if [[ ! -f "${SUPERVISOR_BUBBLE_CONFIG}" ]]; then - die "Cannot find file with supervisor configuration for bubble process" -fi - -BUBBLE_ERR_LOG=$(awk -F "=" '/stderr_logfile/ {print $2}' ${SUPERVISOR_BUBBLE_CONFIG} | xargs echo) -SUPERVISOR_LOG_FLAG=$([[ ${BUBBLE_ERR_LOG} != NONE* ]] && echo true || echo false) - REDIS_LOG_FLAG_VALUE=$(echo "get ${REDIS_LOG_FLAG_KEY}" | redis-cli | xargs echo | tr '[:upper:]' '[:lower:]') -REDIS_LOG_FLAG=$([[ ${REDIS_LOG_FLAG_VALUE} == true ]] && echo true || echo false) - -function setLoggingForSupervisorConfig { - cfgFile="${1}" - logFlag="${2}" - tmpFile="$(mktemp /tmp/bubble.log_manager.XXXXXX)" - - while IFS= read -r line; do - if [[ ${line} == std???_logfile* ]]; then - if [[ "${logFlag}" == "true" ]]; then - # the line should be `std???_logfile = NONE # ` so just remove `NONE #` - echo "${line/_logfile = NONE # /_logfile = }" >> "${tmpFile}" - else - # truncate current log files: - logFile=$(echo "${line}" | awk -F "=" '{print $2}' | xargs echo) - # note that current log file will be truncated afterwards at the very end of this shell script together with - # other logs from this same folder (the log should be in ${BUBBLE_LOGS_FOLDER}). - # remove old logs if any: - rm "${logFile}.*" - # finally, set NONE got log output in supervisor config file's line: - if [[ ${line} != *"_logfile = NONE # "* ]]; then - # avoid adding multiple NONE in the line just in case with above test - echo "${line/_logfile = /_logfile = NONE # }" >> "${tmpFile}" - else - echo "${line}" >> "${tmpFile}" - fi - fi - else - echo "${line}" >> "${tmpFile}" - fi - done < "${cfgFile}" - cat "${tmpFile}" > "${cfgFile}" - - rm "${tmpFile}" -} - - -if [[ "${SUPERVISOR_LOG_FLAG}" != "${REDIS_LOG_FLAG}" ]]; then - # change log setup on supervisor configs to match value from redis - for cfgFile in "${SUPERVISOR_CONFIG_DIR}"/* ; do - setLoggingForSupervisorConfig "${cfgFile}" "${REDIS_LOG_FLAG}" +if [[ ${REDIS_LOG_FLAG_VALUE} == true ]]; then + is_reload_needed=false + for logFile in $(find "${BUBBLE_LOGS_FOLDER}"/* -type l); do + rm "${logFile}" + touch "${logFile}" + is_reload_needed=true + done + if [[ ${is_reload_needed} == true ]]; then + supervisorctl reload + fi +else + for logFile in $(find "${BUBBLE_LOGS_FOLDER}"/* -type f); do + ln -sf /dev/null "${logFile}" done - supervisorctl reread - supervisorctl reload -fi - -if [[ "${REDIS_LOG_FLAG}" != "true" ]]; then - # truncate tmp bubble log files each time as those might have some output in between: - ls ${BUBBLE_LOGS_FOLDER}/* | xargs truncate -c -s0 fi