Spaces:
Runtime error
Runtime error
| package database | |
| import ( | |
| "fmt" | |
| "log" | |
| "net/url" | |
| "os" | |
| "strings" | |
| "uptime/backend/models" | |
| "github.com/glebarez/sqlite" | |
| "gorm.io/driver/mysql" | |
| "gorm.io/gorm" | |
| "gorm.io/gorm/logger" | |
| ) | |
| var DB *gorm.DB | |
| func ConnectDatabase() { | |
| var err error | |
| dsn := os.Getenv("DATABASE_URI") | |
| gormConfig := &gorm.Config{ | |
| Logger: logger.Default.LogMode(logger.Silent), | |
| } | |
| if dsn == "" { | |
| log.Println("DATABASE_URI is not set, falling back to sqlite.") | |
| DB, err = gorm.Open(sqlite.Open("test.db"), gormConfig) | |
| } else { | |
| // Parse the aiven-provided URI | |
| parsedURL, err := url.Parse(dsn) | |
| if err != nil { | |
| log.Fatal("Failed to parse DATABASE_URI!", err) | |
| } | |
| // Extract components | |
| password, _ := parsedURL.User.Password() | |
| host := parsedURL.Host | |
| path := strings.Trim(parsedURL.Path, "/") | |
| // Format for gorm | |
| dsn = fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", | |
| parsedURL.User.Username(), | |
| password, | |
| host, | |
| path, | |
| ) | |
| DB, err = gorm.Open(mysql.Open(dsn), gormConfig) | |
| } | |
| if err != nil { | |
| log.Fatal("Failed to connect to database!", err) | |
| } | |
| DB.AutoMigrate(&models.Monitor{}, &models.Latency{}, &models.User{}) | |
| } |