golang_pvnet/main.go

172 lines
4.9 KiB
Go
Raw Normal View History

2024-12-11 09:17:30 +00:00
package main
import (
"bytes"
"fmt"
"log"
2024-12-11 19:59:13 +00:00
"os"
2024-12-11 09:17:30 +00:00
"time"
2024-12-11 11:26:42 +00:00
"canguidev.fr/pvnet/function"
2024-12-11 09:17:30 +00:00
simplyssh "canguidev.fr/pvnet/simply-ssh"
"github.com/TwiN/go-choice"
2024-12-11 19:59:13 +00:00
"github.com/joho/godotenv"
2024-12-11 11:26:42 +00:00
"github.com/pkg/sftp"
2024-12-11 09:17:30 +00:00
)
func main(){
//var path string="/Users/cangui/.ssh/julien_pvnet"
2024-12-11 19:59:13 +00:00
///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
2024-12-11 09:17:30 +00:00
// Chargement de la liste des hosts du fichier config ssh
2024-12-11 19:59:13 +00:00
d:=simplyssh.GetHost(pathConfigSsh)
2024-12-11 09:17:30 +00:00
var s []string
for _, host := range d {
2024-12-11 19:59:13 +00:00
fmt.Println(host)
2024-12-11 09:17:30 +00:00
s=append(s,string(host.Id)+" "+host.Host)
}
// selectionne du host
choice, index, err := gochoice.Pick(
"What do you want to do?\nPick:",
s,
)
2024-12-11 19:59:13 +00:00
selectHost:=choice
2024-12-11 09:17:30 +00:00
if err != nil {
2024-12-11 19:59:13 +00:00
fmt.Println("You didn't select anything!",err)
2024-12-11 09:17:30 +00:00
} 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
2024-12-11 19:59:13 +00:00
client:=simplyssh.Connect(pathSsh,host.HostName,host.Port,host.User)
2024-12-11 09:17:30 +00:00
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) {
2024-12-11 19:59:13 +00:00
//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")
2024-12-11 09:17:30 +00:00
currentTime := time.Now()
formattedTime := currentTime.Format("20060102_150405")
filename := "backup/test_" + formattedTime + ".sql"
2024-12-11 19:59:13 +00:00
commandBackup := "mysqldump -u "+mysqlUser+" -p'"+mysqlPswd+"' test > " + filename
2024-12-11 09:17:30 +00:00
// 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"
2024-12-11 19:59:13 +00:00
err = simplyssh.DownloadFile(sftpClient, filename, pathSaveSql+filename2)
2024-12-11 09:17:30 +00:00
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)
}
}