sdad / database /database.go
zerolin1024's picture
Upload 2 files
9b5cfec verified
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{})
}