...
1
2
3
4
5
6
7
8
9
10
11
12
13
14 package dbstore
15
16 import (
17 "context"
18
19 "go.uber.org/fx"
20
21 "github.com/jinzhu/gorm"
22
23 "github.com/chaos-mesh/chaos-mesh/pkg/config"
24
25 ctrl "sigs.k8s.io/controller-runtime"
26 )
27
28 var (
29 sqliteDriver string = "sqlite3"
30 log = ctrl.Log.WithName("store/dbstore")
31 )
32
33
34 type DB struct {
35 *gorm.DB
36 }
37
38
39 func NewDBStore(lc fx.Lifecycle, conf *config.ChaosDashboardConfig) (*DB, error) {
40 dsn := conf.Database.Datasource
41
42
43 if conf.Database.Driver == sqliteDriver {
44 dsn += "?cache=shared"
45 }
46
47 gormDB, err := gorm.Open(conf.Database.Driver, dsn)
48 if err != nil {
49 log.Error(err, "failed to open DB", "driver", conf.Database.Driver, "datasource", conf.Database.Datasource)
50 return nil, err
51 }
52
53
54 if conf.Database.Driver == sqliteDriver {
55 gormDB.DB().SetMaxOpenConns(1)
56 }
57
58 db := &DB{
59 gormDB,
60 }
61
62 lc.Append(fx.Hook{
63 OnStop: func(context.Context) error {
64 return db.Close()
65 },
66 })
67
68 return db, nil
69 }
70