Initial check-in

This commit is contained in:
Duc
2025-03-14 07:24:18 -07:00
parent 21f09d9ad2
commit ffd0b105dc

View File

@@ -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