From 21da83dfc7ef8613ffe077f819a0bd32d6141471 Mon Sep 17 00:00:00 2001 From: Lukas Bachschwell Date: Tue, 13 Nov 2018 19:03:47 +0100 Subject: [PATCH] First migrate tenants script --- scripts/migrateTenants.go | 78 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 scripts/migrateTenants.go diff --git a/scripts/migrateTenants.go b/scripts/migrateTenants.go new file mode 100644 index 0000000..77812f5 --- /dev/null +++ b/scripts/migrateTenants.go @@ -0,0 +1,78 @@ +package main + +import ( + "fmt" + companyDB "multitenantStack/services/companydb" + "os" + "os/exec" + "strings" + + _ "github.com/lib/pq" +) + +var conf companyDB.DBConfig + +func main() { + migType := "" + if len(os.Args) > 1 { + migType = os.Args[1] + } + + companyDB.InitCompanyDBService() + conf = companyDB.Conf + + systemDB := companyDB.GetSystemDatabase() + + result, err := systemDB.Query("SELECT datname FROM pg_database WHERE datistemplate = false;") + if err != nil { + panic(err.Error()) + } + + fmt.Printf("migrate %s\n", migType) + + for result.Next() { + var dbName string + result.Scan(&dbName) + if strings.HasPrefix(dbName, "company_") { + fmt.Printf(" migrating...") + migrateDbName(dbName, migType) + } + fmt.Printf("\n") + } +} + +func printCommand(cmd *exec.Cmd) { + fmt.Printf("==> Executing: %s\n", strings.Join(cmd.Args, " ")) +} + +func printError(err error) { + if err != nil { + os.Stderr.WriteString(fmt.Sprintf("==> Error: %s\n", err.Error())) + } +} + +func printOutput(outs []byte) { + if len(outs) > 0 { + fmt.Printf("==> Output: %s\n", string(outs)) + } +} + +func migrateDbName(dbName, migType string) { + connString := fmt.Sprintf("--conn=\"postgres://%s:%s@%s:%d/%s?sslmode=%s\"", conf.User, conf.Password, conf.Host, conf.Port, dbName, conf.Ssl) + fmt.Println(connString) + + cmdString := fmt.Sprintf("%s%s", os.Getenv("GOPATH"), "/bin/bee") + cmd := exec.Command(cmdString, "migrate", migType, connString) + + // Combine stdout and stderr + printCommand(cmd) + _, err := cmd.CombinedOutput() + printError(err) + // printOutput(output) + + // check what migration type + // query system table + // //run all or single tenant, check if tenant exists + // execute commands (blocking!) + // print out all states in new lines with green or red and error +}