Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "bin-updater/model"
- "fmt"
- "log"
- "net"
- "os"
- "strings"
- "time"
- "github.com/go-sql-driver/mysql"
- "github.com/jinzhu/gorm"
- _ "github.com/jinzhu/gorm/dialects/mysql"
- "golang.org/x/net/proxy"
- )
- // InitDB starts the DB
- func InitDB(config *model.Config) (*gorm.DB, error) {
- log.Println("Connecting to database")
- fixieData := strings.Split(config.Socks, "@")
- fixieAddr := fixieData[1]
- authData := strings.Split(fixieData[0], ":")
- auth := proxy.Auth{
- User: authData[0],
- Password: authData[1],
- }
- dialer, err := proxy.SOCKS5("tcp", fixieAddr, &auth, proxy.Direct)
- if err != nil {
- fmt.Fprintln(os.Stderr, "can't connect to the proxy:", err)
- os.Exit(1)
- }
- mysql.RegisterDial("fixieDial", func(addr string) (net.Conn, error) {
- return dialer.Dial("tcp", addr)
- })
- conn := fmt.Sprintf("%s:%s@fixieDial(%s:3306)/%s?parseTime=true", config.DBUser, config.DBPassword, config.DBHost, config.DBName)
- //conn := fmt.Sprintf("%s:%s@tcp(%s)/%s?parseTime=true", config.DBUser, config.DBPassword, config.DBHost, config.DBName)
- fmt.Println("Connection details:", conn)
- var db *gorm.DB
- // Ping until connection comes alive.
- var dbError error
- maxAttempts := 5
- fmt.Println("Starting connection attempts.")
- for attempts := 1; attempts <= maxAttempts; attempts++ {
- // dbError = db.DB().Ping()
- db, dbError = gorm.Open("mysql", conn)
- if dbError == nil {
- break
- }
- log.Println(dbError)
- time.Sleep(time.Duration(attempts) * time.Second)
- }
- if dbError != nil {
- // log.Fatal(dbError)
- return nil, dbError
- }
- //db.LogMode(true)
- fmt.Println("Connected to db successfully!")
- return db, nil
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement