transfert/transfert.sh
2024-08-16 15:41:48 +02:00

121 lines
3.5 KiB
Bash
Executable File

#!/bin/ash
# Variables
FILE_TO_TRANSFER="testfile1.img"
DESTINATION_USER="root@192.168.9.105"
DESTINATION_PATH="/mnt/"
TRANSFER_METHOD=$1
REMOVE_REMOTE="rm -r $DESTINATION_PATH*"
LOGFILE="transfer_log.txt"
DATE=$(date +"%Y%m%d")
STIME=$(date +"%Y/%m/%d - %H:%M:%S")
i=1
# Fonction pour démarrer le transfert
start_transfer() {
case $TRANSFER_METHOD in
scp)
{ time scp $FILE_TO_TRANSFER $DESTINATION_USER:$DESTINATION_PATH; } 2>> $LOGFILE
;;
rsync)
{ time rsync -av --progress $FILE_TO_TRANSFER $DESTINATION_USER:$DESTINATION_PATH; } 2>> $LOGFILE
;;
sftp)
{ time sftp $DESTINATION_USER:$DESTINATION_PATH <<EOF
put $FILE_TO_TRANSFER
EOF
} 2>> $LOGFILE
;;
*)
echo "Méthode de transfert non reconnue."
exit 1
;;
esac
}
check_db() {
if su postgres -c "psql -lqt | grep -q d$DATE"; then
echo ""
else
echo "|| CREATE DB d$DATE ||"
su postgres -c "createdb -T template0 d$DATE"
fi
}
check_table(){
if su postgres -c "psql d$DATE -c \"\d\"| grep -q $TRANSFER_METHOD"; then
echo ""
else
echo "|| CREATE TABLE $TRANSFER_METHOD ||"
su postgres -c "psql d$DATE -c \"CREATE TABLE $TRANSFER_METHOD (id SERIAL, tmp BIGINT, speed NUMERIC, cut INT);\""
fi
}
insert_db(){
su postgres -c "psql d$DATE -c \"INSERT INTO $TRANSFER_METHOD (id, tmp, speed, cut) VALUES (DEFAULT, $TOTAL_SECONDS, $TRANSFER_SPEED, $ERRORS);\""
}
make_dbtot(){
su postgres -c "psql d$DATE -c \"CREATE TABLE total$TRANSFER_METHOD AS SELECT ROUND(AVG(tmp), 2) AS tmp , ROUND(AVG(speed), 2) AS speed, SUM(cut) AS cut FROM $TRANSFER_METHOD;\""
}
# Tu fait le check-up
check_db
check_table
for i in $(seq 1 10);
do
# Démarrer le transfert et mesurer le temps
start_transfer
# Analyser les données
# Extraire les minutes et les secondes
MINUTES=$(grep real $LOGFILE | awk '{print $2}' | sed 's/m//')
SECONDS=$(grep real $LOGFILE | awk '{print $3}' | sed 's/s//')
# Si MINUTES est vide, on n'a que des secondes
if [ -z "$MINUTES" ]; then
TOTAL_SECONDS=$SECONDS
else
# Sinon, on convertit les minutes en secondes et on ajoute les secondes
TOTAL_SECONDS=$(echo "$MINUTES * 60 + $SECONDS" | bc)
fi
TRANSFER_SIZE=$(ls -l $FILE_TO_TRANSFER | awk '{print $5}')
TRANSFER_SPEED=$(echo "scale=2; ($TRANSFER_SIZE / 1024 / 1024) / $TOTAL_SECONDS" | bc)
ERRORS=$(grep -i "error" $LOGFILE | wc -l)
insert_db
i=$($i + 1)
ssh $DESTINATION_USER $REMOVE_REMOTE
rm $LOGFILE
done
make_dbtot
DBTMP_S=$(su postgres -c "psql d$DATE -t -A -c \"select tmp from total$TRANSFER_METHOD;\"")
DBTMP_M=$(echo "$DBTMP_S / 60" | bc)
DBSPEED=$(su postgres -c "psql d$DATE -t -A -c \"select speed from total$TRANSFER_METHOD;\"")
DBCUT=$(su postgres -c "psql d$DATE -t -A -c \"select cut from total$TRANSFER_METHOD;\"")
ETIME=$(date +"%Y/%m/%d - %H:%M:%S")
QUANT=$(su postgres -c "psql d$DATE -t -A -c \"select id from $TRANSFER_METHOD ORDER BY id DESC LIMIT 1;\"")
# Afficher les résultats
echo "====================" >> report.txt
echo "Résumé du transfert " >> report.txt
echo "====================" >> report.txt
echo "Commande de tranfert: $TRANSFER_METHOD" >> report.txt
echo "Temps de transfert m: $DBTMP_M" >> report.txt
echo "Temps de transfert s: $DBTMP_S" >> report.txt
echo "Vitesse de transfert: $DBSPEED MB/s" >> report.txt
echo "Nombre de coupures: $DBCUT" >> report.txt
echo "Quantite dans la table: $QUANT" >> report.txt
echo "Debut: $STIME" >> report.txt
echo "Fin: $ETIME" >> report.txt
# Nettoyage