package main import ( "bytes" "fmt" "log" "os" "time" "canguidev.fr/pvnet/function" simplyssh "canguidev.fr/pvnet/simply-ssh" "github.com/TwiN/go-choice" "github.com/joho/godotenv" "github.com/pkg/sftp" ) func main(){ //var path string="/Users/cangui/.ssh/julien_pvnet" ///Users/cangui/Documents/Dev peso/Golang dev/test.xlsx err := godotenv.Load() if err != nil { log.Fatal("Error loading .env file") } var pathSsh string = os.Getenv("PATH_SSH") var pathConfigSsh = os.Getenv("PATH_SSH_CONF") var pathExcel string= os.Getenv("PATH_FOLDER") var mysqlUser string var mysqlPswd string var pathSaveSql string // Chargement de la liste des hosts du fichier config ssh d:=simplyssh.GetHost(pathConfigSsh) var s []string for _, host := range d { fmt.Println(host) s=append(s,string(host.Id)+" "+host.Host) } // selectionne du host choice, index, err := gochoice.Pick( "What do you want to do?\nPick:", s, ) selectHost:=choice if err != nil { fmt.Println("You didn't select anything!",err) } else { for _, host := range d { // for sur les hosts et break sur le host selectionner if(host.Id == uint(index)){ fmt.Println("debut de connection") // connection en ssh avec la clée et les informations du fichier config client:=simplyssh.Connect(pathSsh,host.HostName,host.Port,host.User) command := "mkdir backup" defer client.Close() // Ouverture d une session pour excecuté la commande session, err := client.NewSession() if err != nil { log.Fatal("Failed to create session: ", err) } defer session.Close() // initialisation du buffer pour recupere les infos reçu de l' hôte var b bytes.Buffer session.Stdout = &b //exceution de la commande if err := session.Run(command); err != nil { fmt.Println("Dossier existe dejà") // Fermez donc cette session session.Close() // Créez une nouvelle session pour exécuter le backup sessionBackup, err := client.NewSession() if err != nil { log.Fatal("Failed to create session for backup: ", err) } defer sessionBackup.Close() choice, index, err := gochoice.Pick( "What do you want to do?\nPick:", []string{ "Backup sql and download", "Backup site", "Check serveur apache", }, ) if err != nil { fmt.Println("You didn't select anything!") return } fmt.Println("Enter path download key: ") fmt.Printf("You have selected: '%s', which is the index %d\n", choice, index) if (index == 0) { //var pathSaveSite string orderedKeys := []string{"host","mysql_login", "mysql_pasw", "path_save_sql", "path_save_site"} excel:=function.ReadExcel(pathExcel) key:="host" // Parcourir les résultats d'Excel for _, value := range excel { // Lire les clés dans l'ordre spécifié for _, k := range orderedKeys { if v, exists := value[k]; exists && k == key { fmt.Println("Key:", k, "Value:", v) if(k==selectHost){ switch k { case "path_save_sql": pathSaveSql = v case "path_save_site": // pathSaveSite = v case "mysql_login": mysqlUser = v case "mysql_pasw": mysqlPswd = v } } // Switch pour affecter les variables } } } fmt.Println("MySQL User:", mysqlUser) fmt.Println("MySQL Password:", mysqlPswd) fmt.Println("Path Save SQL:", pathSaveSql) log.Fatal("stop julien") currentTime := time.Now() formattedTime := currentTime.Format("20060102_150405") filename := "backup/test_" + formattedTime + ".sql" commandBackup := "mysqldump -u "+mysqlUser+" -p'"+mysqlPswd+"' test > " + filename // Maintenant on utilise la sessionBackup pour exécuter la commande du backup if err := sessionBackup.Run(commandBackup); err != nil { log.Fatal("Failed to run commandBackup: " + err.Error()) } fmt.Println("backup ok") sftpClient, err := sftp.NewClient(client) if err != nil { log.Fatal("Erreur connection: ", err) } defer sftpClient.Close() var pathDownload string fmt.Scanln(&pathDownload) fmt.Println(filename) currentTime2 := time.Now() formattedTime2:= currentTime2.Format("20060102_150405") filename2 := "test_" + formattedTime2 + ".sql" err = simplyssh.DownloadFile(sftpClient, filename, pathSaveSql+filename2) if err != nil { log.Fatal("Erreur lors du téléchargement: ", err) } fmt.Println("Téléchargement terminé") } //log.Fatal("Failed to run: " + err.Error()) } fmt.Println(b.String()) } } fmt.Printf("You have selected: '%s', which is the index %d\n", choice, index) } }