#!/bin/ash # Variables FILE_TO_TRANSFER="testfile1.img" DESTINATION_USER="root@192.168.9.105" DESTINATION_PATH="/mnt/" TRANSFER_METHOD=$1 REMOVE_REMOTE="rm $DESTINATION_PATH$FILE_TO_TRANSFER" 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 <> $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 -T $DESTINATION_USER << EOF $REMOVE_REMOTE EOF echo "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