# Exemple expect

#!/usr/bin/expect -f

# script de récupération de fichier
# Creator : Youenn DUVAL
# Mail    : youenn.duval@barbed.fr
# Date    : 19/30/2019

# Description :
# Script de récupération de fichier sur un serveur passé en argument(ip) ainsi que le pass
# Exemple ./import.sh 66.66.66.66 motdepasse
# Il crée un dossier import où il recupere les fichiers et un dossier export où il stock des archives en zip.
# Conditions: il doit récuperer 3 fichiers par servers, existant et non vide.
# Il récupere ses deux fichier plus le hostname. Les mets dans dossier Import/ipduserveur puis les compressent
# dans une archivre zip correspondant au nom d'host de la machine (ex: domaine.zip)
# en cas d'erreur il précise dans le nom de l'archive si il manque un fichier ou si il y a au moins un fichier vide

# Amélioration possible, nettoyage du dossier import, débuggage dy systeme de logs

# Déclaration des variables
#-----------------------------------------------------------------
set LOGIN "loginserver"
set PASS [lindex $argv 1]
set SERVER [lindex $argv 0]
set WORK_DIR "/repertoire/de/travail"
set IMPORT_DIR "$WORK_DIR/récup"
set EXPORT_DIR "$WORK_DIR/Export"
set FILE_DIR "/emplacement/des/fichier/a/recuperer"
set FILE_1 "fichier1"
set FILE_2 "ficher2"
set LOG "log_script"
set REPORT "log_report"


# Création du répertoire de réception et d'export
#-----------------------------------------------------------------
exec mkdir -p $IMPORT_DIR/$SERVER
exec mkdir -p $EXPORT_DIR

# Purge Log
#-----------------------------------------------------------------
#exec echo "" > $WORK_DIR/$REPORT

# Récupération du fichier hostname
#-----------------------------------------------------------------
spawn scp -r -p -o StrictHostKeyChecking=no $LOGIN@$SERVER:/etc/hostname $IMPORT_DIR/$SERVER
expect {
          "*password:*" { send $PASS\r\n; interact }
          eof { exit }
}
# Création de la variable hostname
set f [open "$IMPORT_DIR/$SERVER/hostname"]
set HOSTS [read $f]
close $f
set HOSTNAME [lindex [split $HOSTS \n] 0]


# Récupération du premier fichier
#-----------------------------------------------------------------
spawn scp -r -p -o StrictHostKeyChecking=no $LOGIN@$SERVER:$FILE_DIR/$FILE_1 $IMPORT_DIR/$SERVER
expect {
          "*password:*" { send $PASS\r\n; interact }
          eof { exit }
}

# Recupération du second fichier
#-----------------------------------------------------------------
spawn scp -r -p -o StrictHostKeyChecking=no $LOGIN@$SERVER:$FILE_DIR/$FILE_2 $IMPORT_DIR/$SERVER
expect {
         "*password:*" { send $PASS\r\n; interact }
         eof { exit }
}

# Les fichiers existe t il ?
#-----------------------------------------------------------------
set NUM_FILE 0
foreach f [glob $IMPORT_DIR/$SERVER/*] {
    set NUM_FILE [expr {$NUM_FILE + 1}]
}
# puts "Il y a $NUM_FILE fichiers dans le repertoire $SERVER"
if { $NUM_FILE < 3 } {
  # puts "Il manque un fichier"
  exec echo "Manque fichier serveur $SERVER" >> $WORK_DIR/$REPORT
  set HOSTNAME "$HOSTNAME-Error_num_File"
}

# Les fichiers sont ils egale à zero ?
#-----------------------------------------------------------------
set CONTROL 1
foreach f [glob $IMPORT_DIR/$SERVER/*] {
    set FILE_SIZE [file size $f]
    if {[file size $f] == 0} {
      puts "fichier à zero"
      exec echo "Le fichier $f a une taille égale a 0" >> $WORK_DIR/$REPORT
      set HOSTNAME "$HOSTNAME-Error_empty_file"
    }
}

# Compréssion du fichier
exec zip -rj $EXPORT_DIR/$HOSTNAME $IMPORT_DIR/$SERVER

puts "End"
puts ""