Newer
Older
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
package database
import (
"fmt"
"os"
"time"
"github.com/glebarez/sqlite"
gormloggerlogrus "github.com/nekomeowww/gorm-logger-logrus"
"github.com/sirupsen/logrus"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"jonasled.dev/jonasled/ems-esp-logger/database/tables"
"jonasled.dev/jonasled/ems-esp-logger/log"
)
var Db *gorm.DB
func Init() {
var err error
var dbdriver gorm.Dialector
switch os.Getenv("OUTPUT_DATABASE_TYPE") {
case "sqlite":
dbdriver = sqlite.Open(os.Getenv("OUTPUT_DATABSE"))
case "mysql":
dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
os.Getenv("OUTPUT_DATABASE_USER"),
os.Getenv("OUTPUT_DATABASE_PASSWORD"),
os.Getenv("OUTPUT_DATABASE_HOST"),
os.Getenv("OUTPUT_DATABSE"),
)
dbdriver = mysql.Open(dsn)
default:
log.Log.Fatal("Please set OUTPUT_DATABASE_TYPE to a valid value")
}
Db, err = gorm.Open(dbdriver, &gorm.Config{
Logger: gormloggerlogrus.New(gormloggerlogrus.Options{
Logger: logrus.NewEntry(log.Log),
LogLevel: logger.Error,
IgnoreRecordNotFoundError: false,
SlowThreshold: time.Millisecond * 200,
FileWithLineNumField: "file",
}),
})
if err != nil {
log.Log.Fatal("Failed initializing database: ", err.Error())
}
if os.Getenv("OUTPUT_DATABASE_EXECUTE_MIGRATIONS") != "false" {
log.Log.Info("Executing database migrations")
Db.AutoMigrate(&tables.Instance{}, &tables.ValueType{}, &tables.Value{})
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
}
}
func CreateInstance() {
instanceName := os.Getenv("INSTANCE_NAME")
instanceDescription := os.Getenv("INSTANCE_DESCRIPTION")
if instanceName == "" || instanceDescription == "" {
log.Log.Fatal("INSTANCE_NAME and INSTANCE_DESCRIPTION must be set")
}
var instance tables.Instance
err := Db.Where("name = ?", instanceName).First(&instance).Error
if err != nil {
if err == gorm.ErrRecordNotFound {
// Create a new instance if it doesn't exist
instance = tables.Instance{
Name: instanceName,
Description: instanceDescription,
}
if err := Db.Create(&instance).Error; err != nil {
log.Log.Fatalf("Failed to create instance: %v", err)
}
log.Log.Infof("Created new instance: %+v\n", instance)
} else {
log.Log.Fatalf("Failed to query database: %v", err)
}
} else {
// Update the description if the instance exists
instance.Description = instanceDescription
if err := Db.Save(&instance).Error; err != nil {
log.Log.Fatalf("Failed to update instance description: %v", err)
}
log.Log.Infof("Updated instance description: %+v\n", instance)
}
}