From ffd0b105dc417a792ca15b61c89d16ad0e0fae98 Mon Sep 17 00:00:00 2001 From: Duc Date: Fri, 14 Mar 2025 07:24:18 -0700 Subject: [PATCH] Initial check-in --- FileZilla_Notifier/filezilla_notifier.sh | 166 +++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 FileZilla_Notifier/filezilla_notifier.sh diff --git a/FileZilla_Notifier/filezilla_notifier.sh b/FileZilla_Notifier/filezilla_notifier.sh new file mode 100644 index 0000000..3f63720 --- /dev/null +++ b/FileZilla_Notifier/filezilla_notifier.sh @@ -0,0 +1,166 @@ +#!/bin/bash + +function split_string(){ + local index=0 + local array + local element + local re='^( *).*' + + IFS=";" + unset tokens + read -ra array <<< "${1}" + for element in "${array[@]}" + do + [[ $element =~ $re ]] && tokens[index]="${element#${BASH_REMATCH[1]}}" + #echo "${tokens[$index]}" + index=$((index+1)) + done +} + +function describe_file_size(){ + local KB; + local INDEX + unset FILE_SIZE_FORMATTED + if [ "${1}" -gt "1023" ]; then + KB=$((${1}/1024)) + + #echo "${#1}" + STRING_LENGTH=${#KB} + STR_LEFT=${KB} + while [ ${#STR_LEFT} -gt 3 ]; do + INDEX=$((${#STR_LEFT}-3)) + STR_RIGHT=${STR_LEFT:INDEX:3} + STR_LEFT=${STR_LEFT:0:INDEX} + + if [ -z "${FILE_SIZE_FORMATTED}" ]; then + FILE_SIZE_FORMATTED="$STR_RIGHT" + else + FILE_SIZE_FORMATTED="$STR_RIGHT,$FILE_SIZE_FORMATTED" + fi + #echo "${FILE_SIZE_FORMATTED}" + done + FILE_SIZE_FORMATTED="$STR_LEFT,$FILE_SIZE_FORMATTED KB" + else + FILE_SIZE_FORMATTED="${1} B" + fi +} + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +DOWNLOAD_DIR=/volume1/FileZilla/Download + +EMAIL_FILEPATH=${SCRIPT_DIR}/email.txt +LOG_FILEPATH=${SCRIPT_DIR}/log.txt +FILES_FILEPATH=${SCRIPT_DIR}/files.txt +ALIVE_LOG_FILEPATH=${SCRIPT_DIR}/am_i_alive.txt + +EMAIL_TO=dkle99@yahoo.com +EMAIL_FROM=noreply@noreply.com + +echo -e "`date`\n" > ${LOG_FILEPATH} + +while true; do + echo "Last updated on `date` " > ${ALIVE_LOG_FILEPATH} + unset FILE_ARRAY_CURRENT + unset EMAIL_BODY + index=0 + # get a list of files from the DOWNLOAD directory + for entry in "$DOWNLOAD_DIR"/* + do + if [ -f "$entry" ];then + FILE_SIZE=$(stat -c%s "$entry") + FILE_ARRAY_CURRENT[index]="$entry; $FILE_SIZE" + index=$((index+1)) + fi + done + + # if file exist + if [ -f "${FILES_FILEPATH}" ]; then + # read each file info to see if we need to ignore reporting of certain files + while read -r line; do + split_string "$line" + FILE_TOKENS=("${tokens[@]}") # copy array + + # usually there are only 2 items, file name and size + # if there are 3 items, it means this file is to be ignored + if [ ${#FILE_TOKENS[@]} == 3 ]; then + for (( i=0; i<${#FILE_ARRAY_CURRENT[@]}; i++ )); + do + split_string "${FILE_ARRAY_CURRENT[$i]}" + CURRENT_TOKENS=("${tokens[@]}") # copy array + if [ "${FILE_TOKENS[0]}" == "${CURRENT_TOKENS[0]}" ]; then + FILE_ARRAY_CURRENT[i]="${CURRENT_TOKENS[0]}; ${CURRENT_TOKENS[1]}; ${FILE_TOKENS[2]}" + fi + done + fi + done < ${FILES_FILEPATH} + fi + + for (( i=0; i<${#FILE_ARRAY_CURRENT[@]}; i++ )); + do + #echo "${FILE_ARRAY_CURRENT[$i]}" + split_string "${FILE_ARRAY_CURRENT[$i]}" + CURRENT_TOKENS=("${tokens[@]}") # copy array + describe_file_size "${CURRENT_TOKENS[1]}" + TEXT_FORMATTED="${CURRENT_TOKENS[0]}; ${FILE_SIZE_FORMATTED}" + if [ ${#CURRENT_TOKENS[@]} == 3 ]; then + TEXT_FORMATTED="${TEXT_FORMATTED}; ${CURRENT_TOKENS[2]}" + fi + if [ $i == 0 ]; then + echo -e "${TEXT_FORMATTED}" > ${FILES_FILEPATH} + else + echo -e "${TEXT_FORMATTED}" >> ${FILES_FILEPATH} + fi + #echo "index: $i, value: ${FILE_ARRAY_CURRENT[$i]}" + done + + # if FILE_ARRAY_PREVIOUS is set + if [ ! -z "${FILE_ARRAY_PREVIOUS}" ]; then + for (( i=0; i<${#FILE_ARRAY_CURRENT[@]}; i++ )); + do + split_string "${FILE_ARRAY_CURRENT[$i]}" + CURRENT_TOKENS=("${tokens[@]}") # copy array + + # only interested in record with 2 items... + # records with 3 items are files that have fully been downloaded + if [ ${#CURRENT_TOKENS[@]} == 2 ]; then + for (( j=0; j<${#FILE_ARRAY_PREVIOUS[@]}; j++ )); + do + split_string "${FILE_ARRAY_PREVIOUS[$j]}" + PREVIOUS_TOKENS=("${tokens[@]}") # copy array + + # compare the file sizes, if they are the same, that means transfer has stopped + if [ "${PREVIOUS_TOKENS[0]}" == "${CURRENT_TOKENS[0]}" ] && [ "${PREVIOUS_TOKENS[1]}" == "${CURRENT_TOKENS[1]}" ]; then + if [ -z "${FILE_ARRAY_PREVIOUS}" ]; then + EMAIL_BODY="${PREVIOUS_TOKENS[0]}" + else + EMAIL_BODY="${EMAIL_BODY}\n${PREVIOUS_TOKENS[0]}" + fi + fi + done + fi + done + fi + + FILE_ARRAY_PREVIOUS=("${FILE_ARRAY_CURRENT[@]}") # copy array + + #if EMAIL_BODY is set + if [ ! -z "${EMAIL_BODY}" ]; then + echo "To: ${EMAIL_TO} " > ${EMAIL_FILEPATH} + echo "From: ${EMAIL_FROM} " >> ${EMAIL_FILEPATH} + echo "Subject: FileZilla Download Stopped" >> ${EMAIL_FILEPATH} + echo -e "\nThe following files have stopped downloading:\n${EMAIL_BODY}\n" >> ${EMAIL_FILEPATH} + email_response=$(ssmtp ${EMAIL_TO} < ${EMAIL_FILEPATH} 2>&1) + if [[ "$email_response" == "" ]]; then + echo -e "\nEmail Sent Successfully\n" + else + echo -e "\n\nWARNING -- An error occurred while sending email. The error was: $email_response\n\n" + fi + fi + + sleep 3600 +done + + + +