diff --git a/fileUploadRandom.sh b/fileUploadRandom.sh index c030951..d86ddb4 100755 --- a/fileUploadRandom.sh +++ b/fileUploadRandom.sh @@ -34,7 +34,17 @@ DCM_PATH="/lib/rdk" SELFHEAL_PATH="/usr/ccsp/tad" CERT_CHECKER_PATH="/lib/rdk" -calcRandTimeandUpload() +CRON_MODE=0 +FILEUPLOAD_TMP_DIR="/tmp/.fileupload_random" +RANDOM_DELAY_FILE="$FILEUPLOAD_TMP_DIR/.remaining_secs" +TICK_FILE="$FILEUPLOAD_TMP_DIR/.tick" +CRON_INSTALLED_FLAG="$FILEUPLOAD_TMP_DIR/.cron_installed" + +if [ ! -d "$FILEUPLOAD_TMP_DIR" ]; then + mkdir -p "$FILEUPLOAD_TMP_DIR" +fi + +generate_random_delay() { rand_hr=0 rand_min=0 @@ -45,15 +55,71 @@ calcRandTimeandUpload() # Calculate random second rand_sec=`awk -v min=0 -v max=59 -v seed="$(date +%N)" 'BEGIN{srand(seed);print int(min+rand()*(max-min+1))}'` - + # Calculate random hour rand_hr=`awk -v min=0 -v max=2 -v seed="$(date +%N)" 'BEGIN{srand(seed);print int(min+rand()*(max-min+1))}'` - echo_t "RDK Logger : Random Time Generated : $rand_hr hr $rand_min min $rand_sec sec" - + echo_t "RDK Logger : Random Time Generated : $rand_hr hr $rand_min min $rand_sec sec" >&2 + min_to_sleep=$(($rand_hr*60 + $rand_min)) sec_to_sleep=$(($min_to_sleep*60 + $rand_sec)) - sleep $sec_to_sleep; + + echo "$sec_to_sleep" +} + +calcRandTimeandUpload() +{ + delay_completed=0 + if [ "$CRON_MODE" = "1" ]; then + if [ ! -f "$RANDOM_DELAY_FILE" ]; then + sec_to_sleep=$(generate_random_delay) + echo "$sec_to_sleep" > "$RANDOM_DELAY_FILE" + echo_t "fileupload_random: Initial random delay stored: $sec_to_sleep seconds" >&2 + else + echo_t "fileupload_random: Random delay already generated, reusing existing value" >&2 + fi + + if [ -f "$TICK_FILE" ]; then + current_tick=$(cat "$TICK_FILE") + else + current_tick=0 + fi + + if [ "$current_tick" = "0" ]; then + remaining=$(cat "$RANDOM_DELAY_FILE" 2>/dev/null) + [ -z "$remaining" ] && remaining=0 + + if [ "$remaining" -le 300 ]; then + echo_t "fileupload_random: Sleeping $remaining seconds NOW" >&2 + [ "$remaining" -gt 0 ] && sleep "$remaining" + rm -f "$RANDOM_DELAY_FILE" "$TICK_FILE" + delay_completed=1 + else + echo_t "fileupload_random: Remaining delay before upload: $remaining seconds" >&2 + new_remaining=$((remaining - 300)) + if [ "$new_remaining" -lt 0 ]; then + new_remaining=0 + fi + echo $new_remaining > "$RANDOM_DELAY_FILE" + echo_t "fileupload_random: Updated remaining delay to $new_remaining seconds, exiting" >&2 + fi + else + echo_t "fileupload_random: Skipping countdown this minute (tick=$current_tick/4)" >&2 + fi + + new_tick=$(( (current_tick + 1) % 5 )) + echo "$new_tick" > "$TICK_FILE" + + if [ "$delay_completed" != "1" ]; then + return 0 + fi + fi + + if [ "$CRON_MODE" != "1" ]; then + sec_to_sleep=$(generate_random_delay) + echo_t "fileupload_random: Sleeping for $sec_to_sleep seconds" >&2 + sleep "$sec_to_sleep" + fi if [ -f "$MAINTENANCEWINDOW" ] then @@ -226,37 +292,85 @@ getTFTPServer() fi } +check_maintenance_window_upload() +{ + upload_logfile=1 + if [ "$UTC_ENABLE" == "true" ]; then + cur_hr=`LTime H | tr -dc '0-9'` + cur_min=`LTime M | tr -dc '0-9'` + else + cur_hr=`date +"%H"` + cur_min=`date +"%M"` + fi + + if [ "$cur_hr" -ge "02" ] && [ "$cur_hr" -le "05" ]; then + if [ "$cur_hr" = "05" ] && [ "$cur_min" != "00" ]; then + upload_logfile=1 + else + if [ "$upload_logfile" = "1" ]; then + calcRandTimeandUpload + fi + fi + else + upload_logfile=1 + fi +} BUILD_TYPE=`getBuildType` SERVER=`getTFTPServer $BUILD_TYPE` -loop=1 -upload_logfile=1 -while [ $loop -eq 1 ] -do - sleep 60 - if [ "$UTC_ENABLE" == "true" ] - then - cur_hr=`LTime H | tr -dc '0-9'` - cur_min=`LTime M | tr -dc '0-9'` - else - cur_hr=`date +"%H"` - cur_min=`date +"%M"` - fi +install_cron_entry() { + CRON_LINE="* * * * * /rdklogger/fileUploadRandom.sh" + + if crontab -l 2>/dev/null | grep -q "fileUploadRandom.sh"; then + echo_t "fileUploadRandom.sh - Cron entry already present" + return 0 + fi - if [ "$cur_hr" -ge "02" ] && [ "$cur_hr" -le "05" ] - then - if [ "$cur_hr" = "05" ] && [ "$cur_min" != "00" ] - then - upload_logfile=1 - else - if [ "$upload_logfile" = "1" ] - then - calcRandTimeandUpload - fi - fi - else - upload_logfile=1 - fi -done + (crontab -l 2>/dev/null; echo "$CRON_LINE") | crontab - + rc=$? + + if [ $rc -eq 0 ]; then + echo_t "fileUploadRandom.sh - Cron installed cleanly: $CRON_LINE" + else + echo_t "fileUploadRandom.sh - Cron install failed (rc=$rc)" + fi +} + +service_mode() { + echo_t "fileUploadRandom.sh - Running in SERVICE mode" + + while [ 1 ]; + do + sleep 60 + CRON_MODE=0 + check_maintenance_window_upload + done +} + +rdklogger_cron_enable=`syscfg get RdkbLogCronEnable` + +if [ "$rdklogger_cron_enable" = "true" ]; then + echo_t "fileUploadRandom.sh - Running in CRON mode" + CRON_MODE=1 + + if [ ! -d "$FILEUPLOAD_TMP_DIR" ]; then + mkdir -p "$FILEUPLOAD_TMP_DIR" + fi + + if [ ! -f "$CRON_INSTALLED_FLAG" ]; then + install_cron_entry + touch "$CRON_INSTALLED_FLAG" + fi + + if [ -f "$RANDOM_DELAY_FILE" ]; then + calcRandTimeandUpload + else + check_maintenance_window_upload + fi + exit 0 +else + CRON_MODE=0 + service_mode +fi diff --git a/rdkbLogMonitor.sh b/rdkbLogMonitor.sh index 8f10b41..30b1dd8 100644 --- a/rdkbLogMonitor.sh +++ b/rdkbLogMonitor.sh @@ -76,6 +76,15 @@ DeviceUP=0 # Check if upload on reboot flag is ON. If "yes", then we will upload the # log files first before starting monitoring of logs. +BOOT_PROCESSED_FLAG="/tmp/.rdkb_log_boot_done" +CRON_INSTALLED_FLAG="/tmp/.rdkbLogMonitor_cron_installed" +RANDOM_DELAY_FILE="/tmp/.rdkb_logmonitor/.remaining_secs" +TICK_FILE="/tmp/.rdkb_logmonitor/.tick" + +RDKB_LOGMON_TMP_DIR="/tmp/.rdkb_logmonitor" +if [ ! -d "$RDKB_LOGMON_TMP_DIR" ]; then + mkdir -p "$RDKB_LOGMON_TMP_DIR" +fi #--------------------------------- # Function declarations @@ -118,13 +127,65 @@ getBuildType() } +generate_random_sleep() +{ + randomizedNumber=`awk -v min=0 -v max=30 -v seed="$(date +%N)" 'BEGIN{srand(seed);print int(min+rand()*(max-min+1))}'` + RANDOM_SLEEP=`expr $randomizedNumber \\* 60` + echo_t "Random sleep for $RANDOM_SLEEP seconds" >&2 + echo "$RANDOM_SLEEP" +} + random_sleep() { + delay_completed=0 + if [ "$CRON_MODE" = "1" ]; then + if [ ! -f "$RANDOM_DELAY_FILE" ]; then + RANDOM_SLEEP=$(generate_random_sleep) + echo "$RANDOM_SLEEP" > "$RANDOM_DELAY_FILE" + echo_t "rdkbLogMonitor: Initial random delay stored: $RANDOM_SLEEP seconds" >&2 + else + echo_t "rdkbLogMonitor: Random already generated, reusing existing value" >&2 + fi + + if [ -f "$TICK_FILE" ]; then + current_tick=$(cat "$TICK_FILE") + else + current_tick=0 + fi + + if [ "$current_tick" = "0" ]; then + remaining=$(cat "$RANDOM_DELAY_FILE" 2>/dev/null) + [ -z "$remaining" ] && remaining=0 + + if [ "$remaining" -le 300 ]; then + echo_t "rdkbLogMonitor: Sleeping $remaining seconds NOW" >&2 + [ "$remaining" -gt 0 ] && sleep "$remaining" + rm -f "$RANDOM_DELAY_FILE" "$TICK_FILE" + delay_completed=1 + else + echo_t "rdkbLogMonitor: Remaining sleep before completion: $remaining seconds" >&2 + new_remaining=$((remaining - 300)) + if [ "$new_remaining" -lt 0 ]; then + new_remaining=0 + fi + echo $new_remaining > "$RANDOM_DELAY_FILE" + echo_t "rdkbLogMonitor: Updated remaining sleep to $new_remaining seconds, exiting" >&2 + fi + else + echo_t "rdkbLogMonitor: Skipping this minute (tick=$current_tick/4)" >&2 + fi + + new_tick=$(( (current_tick + 1) % 5 )) + echo "$new_tick" > "$TICK_FILE" - randomizedNumber=`awk -v min=0 -v max=30 -v seed="$(date +%N)" 'BEGIN{srand(seed);print int(min+rand()*(max-min+1))}'` - RANDOM_SLEEP=`expr $randomizedNumber \\* 60` - echo_t "Random sleep for $RANDOM_SLEEP" - sleep $RANDOM_SLEEP + if [ "$delay_completed" != "1" ]; then + return 0 + fi + else + RANDOM_SLEEP=$(generate_random_sleep) + echo_t "rdkbLogMonitor: Sleeping for $RANDOM_SLEEP seconds" >&2 + sleep $RANDOM_SLEEP + fi } ## Process the responce and update it in a file DCMSettings.conf @@ -405,7 +466,7 @@ bootup_tarlogs() fi preserveThisLog $UploadFile $TarCreatePath else - echo_t "RDK_LOGGER: Keeping the tar in $TarCreatePath for non-xb3". + echo_t "RDK_LOGGER: Keeping the tar in $TarCreatePath for non-xb3" fi fi fi @@ -417,6 +478,12 @@ bootup_upload() { echo_t "RDK_LOGGER: bootup_upload" + if [ "$rdklogger_cron_enable" = "true" ]; then + CRON_MODE=1 + if [ ! -d "$RDKB_LOGMON_TMP_DIR" ]; then + mkdir -p "$RDKB_LOGMON_TMP_DIR" + fi + fi if [ -e "$UPLOAD_ON_REBOOT" ] then @@ -499,9 +566,8 @@ bootup_upload() boot_up_log_synced="true" if [ "$fileToUpload" != "" ] then - - random_sleep - $RDK_LOGGER_PATH/uploadRDKBLogs.sh $SERVER "HTTP" $URL "true" "" $TMP_LOG_UPLOAD_PATH "true" + random_sleep + $RDK_LOGGER_PATH/uploadRDKBLogs.sh $SERVER "HTTP" $URL "true" "" $TMP_LOG_UPLOAD_PATH "true" else echo_t "No log file found in logbackupreboot folder" fi @@ -575,7 +641,7 @@ bootup_upload() echo_t "File to be uploaded from logbackup/ is $UploadFile " if [ "$UPLOADED_AFTER_REBOOT" == "true" ] then - random_sleep + random_sleep $RDK_LOGGER_PATH/uploadRDKBLogs.sh $SERVER "HTTP" $URL "false" "" $TMP_LOG_UPLOAD_PATH "true" else while [ "$loop" = "1" ] @@ -648,15 +714,234 @@ fi # RDKB-26588 && TRDKB-355 - Mitigation # # To Ensure only one instance is running # ######################################################## -RDKLOG_LOCK_DIR="/tmp/locking_logmonitor" +UPLOAD_LOGS=`processDCMResponse` +rdklogger_cron_enable=`syscfg get RdkbLogCronEnable` + +if [ "$rdklogger_cron_enable" = "true" ]; then + LOCKFILE="/tmp/rdkb_cron.lock" + if [ -f "$LOCKFILE" ]; then + old_pid=$(cat "$LOCKFILE" 2>/dev/null) + if [ -n "$old_pid" ] && kill -0 "$old_pid" 2>/dev/null; then + echo_t "rdkbLogMonitor: Already running (cron protected, pid=$old_pid)" + exit 0 + fi + rm -f "$LOCKFILE" + fi + echo $$ > "$LOCKFILE" + cleanup() { rm -f "$LOCKFILE"; } + trap cleanup EXIT -if mkdir $RDKLOG_LOCK_DIR -then - echo "Got the first instance running" + echo_t "rdkbLogMonitor: Cron PID $$ started (THRESHOLD CHECK MODE)" + + if [ ! -f "$BOOT_PROCESSED_FLAG" ]; then + echo_t "First run after boot: running bootup_tarlogs and bootup_upload" + touch "$BOOT_PROCESSED_FLAG" + else + getLogfileSize "$LOG_PATH" + if [ "$totalSize" -lt "$MAXSIZE" ]; then + echo_t "Log size below threshold ($totalSize < $MAXSIZE). Exiting early (cron will retry in 1 min)." + exit 0 + fi + echo_t "THRESHOLD HIT! Log size: $totalSize >= $MAXSIZE. Starting full processing..." + fi else - echo "Already a instance is running; No 2nd instance" - exit + RDKLOG_LOCK_DIR="/tmp/locking_logmonitor" + + if mkdir $RDKLOG_LOCK_DIR + then + echo "Got the first instance running" + else + echo "Already a instance is running; No 2nd instance" + exit + fi fi + +install_cron_entry() { + CRON_LINE="* * * * * /rdklogger/rdkbLogMonitor.sh" + + if crontab -l 2>/dev/null | grep -q "rdkbLogMonitor.sh"; then + echo_t "rdkbLogMonitor.sh - Cron entry already present" + return 0 + fi + + (crontab -l 2>/dev/null; echo "$CRON_LINE") | crontab - + rc=$? + + if [ $rc -eq 0 ]; then + echo_t "rdkbLogMonitor.sh - Cron installed cleanly: $CRON_LINE" + else + echo_t "rdkbLogMonitor.sh - Cron install failed (rc=$rc)" + fi +} + +device_state() +{ + if [ "$DeviceUP" = "0" ]; then + #for rdkb-4260 + t2CountNotify "SYS_INFO_bootup" + if [ -f "$SW_UPGRADE_REBOOT" ]; then + echo_t "RDKB_REBOOT: Device is up after reboot due to software upgrade" + t2CountNotify "SYS_INFO_SW_upgrade_reboot" + #deleting reboot_due_to_sw_upgrade file + echo_t "Deleting file /nvram/reboot_due_to_sw_upgrade" + rm -rf /nvram/reboot_due_to_sw_upgrade + DeviceUP=1 + else + echo_t "RDKB_REBOOT: Device is up after reboot" + DeviceUP=1 + fi + fi +} + +regular_upload_state() +{ + if [ ! -e $REGULAR_UPLOAD ] + then + getLogfileSize "$LOG_PATH" + if [ "$totalSize" -ge "$MAXSIZE" ]; then + echo_t "Log size max reached" + get_logbackup_cfg + if [ "$UPLOAD_LOGS" = "" ] || [ ! -f "$DCM_SETTINGS_PARSED" ] + then + echo_t "processDCMResponse to get the logUploadSettings" + UPLOAD_LOGS=`processDCMResponse` + fi + + echo_t "UPLOAD_LOGS val is $UPLOAD_LOGS" + if [ "$UPLOAD_LOGS" = "true" ] || [ "$UPLOAD_LOGS" = "" ] + then + UPLOAD_LOGS="true" + # this file is touched to indicate log upload is enabled + # we check this file in logfiles.sh before creating tar ball. + # tar ball will be created only if this file exists. + echo_t "Log upload is enabled. Touching indicator in regular upload" + touch /tmp/.uploadregularlogs + else + echo_t "Log upload is disabled. Removing indicator in regular upload" + rm -rf /tmp/.uploadregularlogs + fi + + cd $TMP_UPLOAD + FILE_NAME=`ls | grep "tgz"` + # This event is set to "yes" whenever wan goes down. + # So, we should not move tar to /tmp in that case. + wan_event=`sysevent get wan_event_log_upload` + wan_status=`sysevent get wan-status` + if [ "$FILE_NAME" != "" ] && [ "$boot_up_log_synced" = "false" ]; then + mkdir $TMP_LOG_UPLOAD_PATH + mv $FILE_NAME $TMP_LOG_UPLOAD_PATH + fi + cd - + boot_up_log_synced="true" + if [ "$LOGBACKUP_ENABLE" == "true" ]; then + createSysDescr + syncLogs_nvram2 + # Check if there is any tar ball to be preserved + # else tar ball will be removed in backupnvram2logs + logBackupEnable=`syscfg get log_backup_enable` + if [ "$logBackupEnable" = "true" ];then + echo_t "Back up to preserve location is enabled" + fileName=`ls -tr $TMP_UPLOAD | grep tgz | head -n 1` + if [ "$fileName" != "" ] + then + # Call PreserveLog which will move logs to preserve location + preserveThisLog $fileName $TMP_UPLOAD + fi + fi + backupnvram2logs "$TMP_UPLOAD" + else + syncLogs + backupAllLogs "$LOG_PATH" "$LOG_BACK_UP_PATH" "cp" + fi + if [ "$UPLOAD_LOGS" = "true" ] + then + $RDK_LOGGER_PATH/uploadRDKBLogs.sh $SERVER "HTTP" $URL "false" + http_ret=$? + echo_t "Logupload http_ret value = $http_ret" + if [ "$http_ret" = "200" ] || [ "$http_ret" = "302" ] ;then + logBackupEnable=`syscfg get log_backup_enable` + if [ "$logBackupEnable" = "true" ] ; then + if [ -d $PRESERVE_LOG_PATH ] ; then + cd $PRESERVE_LOG_PATH + fileToUpload=`ls | grep tgz` + if [ "$fileToUpload" != "" ] ;then + file_list=$fileToUpload + echo_t "Direct comm. available preserve logs = $fileToUpload" + $RDK_LOGGER_PATH/uploadRDKBLogs.sh $SERVER "HTTP" $URL "true" "" $PRESERVE_LOG_PATH + else + echo_t "Direct comm. No preserve logs found in $PRESERVE_LOG_PATH" + fi + fi + fi + else + echo_t "Preserve Logupload not success because of http val $http_ret" + fi + else + echo_t "Regular log upload is disabled" + fi + fi + fi + + # Syncing logs after particular interval + get_logbackup_cfg + if [ "$LOGBACKUP_ENABLE" == "true" ]; then # nvram2 supported and backup is true + minute_count=$((minute_count + 1)) + bootup_time_sec=$(cut -d. -f1 /proc/uptime) + if [ "$bootup_time_sec" -le "2400" ] && [ $minute_count -eq 10 ]; then + minute_count=0 + echo_t "RDK_LOGGER: Syncing every 10 minutes for initial 30 minutes" + syncLogs_nvram2 + elif [ "$minute_count" -ge "$LOGBACKUP_INTERVAL" ]; then + minute_count=0 + syncLogs_nvram2 + if [ "$ATOM_SYNC" == "" ]; then + syncLogs + fi + #ARRISXB6-5184 + if [ "$BOX_TYPE" = "XB6" -a "$MANUFACTURE" = "Arris" ] ; then + remove_hidden_files "/rdklogs/logs" + remove_hidden_files "/nvram/logs" + remove_hidden_files "/nvram2/logs" + fi + fi + else + # Suppress ls errors to prevent constant prints in non supported devices + file_list=`ls 2>/dev/null $LOG_SYNC_PATH` + if [ "$file_list" != "" ]; then + echo_t "RDK_LOGGER: Disabling nvram2 logging" + createSysDescr + + if [ "$UPLOAD_LOGS" = "" ] || [ ! -f "$DCM_SETTINGS_PARSED" ] + then + echo_t "processDCMResponse to get the logUploadSettings" + UPLOAD_LOGS=`processDCMResponse` + fi + + echo_t "UPLOAD_LOGS val is $UPLOAD_LOGS" + if [ "$UPLOAD_LOGS" = "true" ] || [ "$UPLOAD_LOGS" = "" ] + then + UPLOAD_LOGS="true" + echo_t "Log upload is enabled. Touching indicator in maintenance window" + touch /tmp/.uploadregularlogs + else + echo_t "Log upload is disabled. Removing indicator in maintenance window" + rm /tmp/.uploadregularlogs + fi + syncLogs_nvram2 + if [ "$ATOM_SYNC" == "" ]; then + syncLogs + fi + backupnvram2logs "$TMP_UPLOAD" + if [ "$UPLOAD_LOGS" = "true" ] + then + $RDK_LOGGER_PATH/uploadRDKBLogs.sh $SERVER "HTTP" $URL "false" "true" + else + echo_t "Regular log upload is disabled" + fi + fi + fi +} + ######################################################## PEER_COMM_ID="/tmp/elxrretyt-logm.swr" @@ -825,187 +1110,46 @@ fi bootup_tarlogs bootup_upload & -UPLOAD_LOGS=`processDCMResponse` -while [ "$loop" = "1" ] -do - if [ "$DeviceUP" = "0" ]; then - #for rdkb-4260 - t2CountNotify "SYS_INFO_bootup" - if [ -f "$SW_UPGRADE_REBOOT" ]; then - echo_t "RDKB_REBOOT: Device is up after reboot due to software upgrade" - t2CountNotify "SYS_INFO_SW_upgrade_reboot" - #deleting reboot_due_to_sw_upgrade file - echo_t "Deleting file /nvram/reboot_due_to_sw_upgrade" - rm -rf /nvram/reboot_due_to_sw_upgrade - DeviceUP=1 - else - echo_t "RDKB_REBOOT: Device is up after reboot" - DeviceUP=1 - fi - fi - - sleep 60 - if [ ! -e $REGULAR_UPLOAD ] - then - getLogfileSize "$LOG_PATH" - - if [ "$totalSize" -ge "$MAXSIZE" ]; then - echo_t "Log size max reached" - get_logbackup_cfg +service_mode() { + echo_t "rdkbLogMonitor.sh - Running in SERVICE mode" + + while [ 1 ]; + do + CRON_MODE=0 + device_state + sleep 60 + regular_upload_state + done + ######################################################## + # RDKB-26588 && TRDKB-355 - Mitigation # + # To Ensure only one instance is running # + ######################################################## + rm -rf $RDKLOG_LOCK_DIR + ######################################################## +} - if [ "$UPLOAD_LOGS" = "" ] || [ ! -f "$DCM_SETTINGS_PARSED" ] - then - echo_t "processDCMResponse to get the logUploadSettings" - UPLOAD_LOGS=`processDCMResponse` - fi +if [ "$rdklogger_cron_enable" = "true" ]; then + echo_t "rdkbLogMonitor.sh - Running in CRON mode" + CRON_MODE=1 - echo_t "UPLOAD_LOGS val is $UPLOAD_LOGS" - if [ "$UPLOAD_LOGS" = "true" ] || [ "$UPLOAD_LOGS" = "" ] - then - UPLOAD_LOGS="true" - # this file is touched to indicate log upload is enabled - # we check this file in logfiles.sh before creating tar ball. - # tar ball will be created only if this file exists. - echo_t "Log upload is enabled. Touching indicator in regular upload" - touch /tmp/.uploadregularlogs - else - echo_t "Log upload is disabled. Removing indicator in regular upload" - rm -rf /tmp/.uploadregularlogs - fi - - cd $TMP_UPLOAD - FILE_NAME=`ls | grep "tgz"` - # This event is set to "yes" whenever wan goes down. - # So, we should not move tar to /tmp in that case. - wan_event=`sysevent get wan_event_log_upload` - wan_status=`sysevent get wan-status` - if [ "$FILE_NAME" != "" ] && [ "$boot_up_log_synced" = "false" ]; then - mkdir $TMP_LOG_UPLOAD_PATH - mv $FILE_NAME $TMP_LOG_UPLOAD_PATH - fi - cd - - boot_up_log_synced="true" - if [ "$LOGBACKUP_ENABLE" == "true" ]; then - createSysDescr - syncLogs_nvram2 - - # Check if there is any tar ball to be preserved - # else tar ball will be removed in backupnvram2logs - logBackupEnable=`syscfg get log_backup_enable` - if [ "$logBackupEnable" = "true" ];then - echo_t "Back up to preserve location is enabled" - fileName=`ls -tr $TMP_UPLOAD | grep tgz | head -n 1` - if [ "$fileName" != "" ] - then - # Call PreserveLog which will move logs to preserve location - preserveThisLog $fileName $TMP_UPLOAD - fi - fi - - backupnvram2logs "$TMP_UPLOAD" - else - syncLogs - backupAllLogs "$LOG_PATH" "$LOG_BACK_UP_PATH" "cp" - fi - if [ "$UPLOAD_LOGS" = "true" ] - then - $RDK_LOGGER_PATH/uploadRDKBLogs.sh $SERVER "HTTP" $URL "false" - http_ret=$? - echo_t "Logupload http_ret value = $http_ret" - if [ "$http_ret" = "200" ] || [ "$http_ret" = "302" ] ;then - logBackupEnable=`syscfg get log_backup_enable` - - if [ "$logBackupEnable" = "true" ] ; then - if [ -d $PRESERVE_LOG_PATH ] ; then - cd $PRESERVE_LOG_PATH - fileToUpload=`ls | grep tgz` - if [ "$fileToUpload" != "" ] ;then - file_list=$fileToUpload - echo_t "Direct comm. available preserve logs = $fileToUpload" - $RDK_LOGGER_PATH/uploadRDKBLogs.sh $SERVER "HTTP" $URL "true" "" $PRESERVE_LOG_PATH - else - echo_t "Direct comm. No preserve logs found in $PRESERVE_LOG_PATH" - fi - fi - fi - else - echo_t "Preserve Logupload not success because of http val $http_ret" - fi - - else - echo_t "Regular log upload is disabled" - fi - fi - fi - - # Syncing logs after particular interval - get_logbackup_cfg - if [ "$LOGBACKUP_ENABLE" == "true" ]; then # nvram2 supported and backup is true - minute_count=$((minute_count + 1)) - bootup_time_sec=$(cut -d. -f1 /proc/uptime) - if [ "$bootup_time_sec" -le "2400" ] && [ $minute_count -eq 10 ]; then - minute_count=0 - echo_t "RDK_LOGGER: Syncing every 10 minutes for initial 30 minutes" - syncLogs_nvram2 - elif [ "$minute_count" -ge "$LOGBACKUP_INTERVAL" ]; then - minute_count=0 - syncLogs_nvram2 - if [ "$ATOM_SYNC" == "" ]; then - syncLogs - fi - #ARRISXB6-5184 - if [ "$BOX_TYPE" = "XB6" -a "$MANUFACTURE" = "Arris" ] ; then - remove_hidden_files "/rdklogs/logs" - remove_hidden_files "/nvram/logs" - remove_hidden_files "/nvram2/logs" - fi - fi - else - # Suppress ls errors to prevent constant prints in non supported devices - file_list=`ls 2>/dev/null $LOG_SYNC_PATH` - if [ "$file_list" != "" ]; then - echo_t "RDK_LOGGER: Disabling nvram2 logging" - createSysDescr - - if [ "$UPLOAD_LOGS" = "" ] || [ ! -f "$DCM_SETTINGS_PARSED" ] - then - echo_t "processDCMResponse to get the logUploadSettings" - UPLOAD_LOGS=`processDCMResponse` - fi + if [ ! -d "$RDKB_LOGMON_TMP_DIR" ]; then + mkdir -p "$RDKB_LOGMON_TMP_DIR" + fi + + if [ -f "$RANDOM_DELAY_FILE" ]; then + random_sleep + fi - echo_t "UPLOAD_LOGS val is $UPLOAD_LOGS" - if [ "$UPLOAD_LOGS" = "true" ] || [ "$UPLOAD_LOGS" = "" ] - then - UPLOAD_LOGS="true" - echo_t "Log upload is enabled. Touching indicator in maintenance window" - touch /tmp/.uploadregularlogs - else - echo_t "Log upload is disabled. Removing indicator in maintenance window" - rm /tmp/.uploadregularlogs - fi - - syncLogs_nvram2 - if [ "$ATOM_SYNC" == "" ]; then - syncLogs - fi - backupnvram2logs "$TMP_UPLOAD" - - if [ "$UPLOAD_LOGS" = "true" ] - then - $RDK_LOGGER_PATH/uploadRDKBLogs.sh $SERVER "HTTP" $URL "false" "true" - else - echo_t "Regular log upload is disabled" - fi - - fi - fi - -done + if [ ! -f "$CRON_INSTALLED_FLAG" ]; then + install_cron_entry + touch "$CRON_INSTALLED_FLAG" + fi + device_state + regular_upload_state + exit 0 +else + CRON_MODE=0 + service_mode +fi -######################################################## -# RDKB-26588 && TRDKB-355 - Mitigation # -# To Ensure only one instance is running # -######################################################## -rm -rf $RDKLOG_LOCK_DIR -######################################################## diff --git a/update_journal_log.sh b/update_journal_log.sh index 2802131..2460884 100644 --- a/update_journal_log.sh +++ b/update_journal_log.sh @@ -30,8 +30,14 @@ BootupLog_is_updated=0 JOURNAL_RUNTIME_DIR="/run/systemd/journald.conf.d" JOURNAL_OVERRIDE_FILE="${JOURNAL_RUNTIME_DIR}/override.conf" -while [ 1 ] -do +CRON_INSTALLED_FLAG="/tmp/rdklogger_cron_installed" +CONSOLE_LOG_FILE="/rdklogs/logs/Consolelog.txt.0" + +echo_t() { + echo "$(date +"%y%m%d-%T.%6N") $1" +} + +do_journal_iteration() { uptime_in_secs=$(cut -d. -f1 /proc/uptime) if [ "$uptime_in_secs" -ge 1800 ] && [ ! -f "$JOURNAL_OVERRIDE_FILE" ]; then mkdir -p "$JOURNAL_RUNTIME_DIR" @@ -62,13 +68,77 @@ EOF BootupLog_is_updated=1; fi fi - # ARRISXB6-8252 sleep for 60 sec until we populate journalctl - if [ "$BOX_TYPE" = "XB6" -a "$MANUFACTURE" = "Arris" ];then - dmesgsyncinterval=60 - else - dmesgsyncinterval=`syscfg get dmesglogsync_interval` - fi +} + +install_cron_entry() { + if [ "$BOX_TYPE" = "XB6" -a "$MANUFACTURE" = "Arris" ]; then + dmesgsyncinterval_sec=60 + cron="* * * * *" + else + dmesgsyncinterval_sec="$(syscfg get dmesglogsync_interval)" + case "$dmesgsyncinterval_sec" in + "60") cron="* * * * *" ;; + "300") cron="*/5 * * * *" ;; + "600") cron="*/10 * * * *" ;; + "900") cron="*/15 * * * *" ;; + "3600") cron="0 * * * *" ;; + *) cron="*/15 * * * *" ;; + esac + fi + + CRON_LINE="$cron /rdklogger/update_journal_log.sh start" + + if crontab -l 2>/dev/null | grep -q "update_journal_log.sh"; then + echo_t "update_journal_log.sh - Cron entry already present" >> "$CONSOLE_LOG_FILE" + return 0 + fi + + (crontab -l 2>/dev/null; echo "$CRON_LINE") | crontab - + rc=$? + + if [ $rc -eq 0 ]; then + echo_t "update_journal_log.sh - Cron installed cleanly: $CRON_LINE" >> "$CONSOLE_LOG_FILE" + else + echo_t "update_journal_log.sh - Cron install failed (rc=$rc)" >> "$CONSOLE_LOG_FILE" + fi +} + +service_mode() { + echo_t "update_journal_log.sh - Running in SERVICE mode" >> "$CONSOLE_LOG_FILE" + + while [ 1 ]; + do + do_journal_iteration + # ARRISXB6-8252 sleep for 60 sec until we populate journalctl + if [ "$BOX_TYPE" = "XB6" -a "$MANUFACTURE" = "Arris" ];then + dmesgsyncinterval=60 + else + dmesgsyncinterval=`syscfg get dmesglogsync_interval` + fi + + sleep $dmesgsyncinterval + + done +} - sleep $dmesgsyncinterval - -done +rdklogger_cron_enable=`syscfg get RdkbLogCronEnable` +if [ "$rdklogger_cron_enable" = "true" ]; then + echo_t "update_journal_log.sh - Running in CRON mode" >> "$CONSOLE_LOG_FILE" + + if [ ! -f "$CRON_INSTALLED_FLAG" ]; then + install_cron_entry + touch "$CRON_INSTALLED_FLAG" + do_journal_iteration + + if [ -f /lib/systemd/system/log_journalmsg.service ]; then + echo_t "Disabling log_journalmsg.service for cron mode" >> "$CONSOLE_LOG_FILE" + systemctl stop log_journalmsg.service + fi + exit 0 + else + do_journal_iteration + exit 0 + fi +else + service_mode +fi