121 lines
3.5 KiB
Bash
Executable File
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
|