Initial check-in
This commit is contained in:
166
FileZilla_Notifier/filezilla_notifier.sh
Normal file
166
FileZilla_Notifier/filezilla_notifier.sh
Normal 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
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user