File size: 1,220 Bytes
2196bfe
 
 
e0ff2ea
2196bfe
e0ff2ea
2196bfe
 
 
 
 
 
 
9b5cfec
2196bfe
 
 
 
 
 
 
9b5cfec
 
 
 
 
2196bfe
 
9b5cfec
2196bfe
e0ff2ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9b5cfec
2196bfe
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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{})
}