KDOC 56: flagrのコードを読んだメモ
DONE プロジェクトステータス
プロジェクトは終了である。
概要
openflagr/flagrを読んだメモ。バックエンドはGoで書かれている。
DB初期化部分
グローバル変数にdb取得関数がある。
https://github.com/openflagr/flagr/blob/fcc74ae8cb690c52ed202b157d198d8fa290d547/pkg/handler/handler.go#L20
var getDB = entity.GetDB
変数の中身となる関数。
https://github.com/openflagr/flagr/blob/fcc74ae8cb690c52ed202b157d198d8fa290d547/pkg/entity/db.go#L68-L84
// GetDB gets the db singleton func GetDB() *gorm.DB { singletonOnce.Do(func() { db, err := connectDB() if err != nil { if config.Config.DBConnectionDebug { logrus.WithField("err", err).Fatal("failed to connect to db") } else { logrus.Fatal("failed to connect to db") } } db.AutoMigrate(AutoMigrateTables...) singletonDB = db }) return singletonDB }
データベース分岐部分
データベース分岐している箇所。
https://github.com/openflagr/flagr/blob/fcc74ae8cb690c52ed202b157d198d8fa290d547/pkg/entity/db.go#L44-L64
err = retry.Do( func() error { switch config.Config.DBDriver { case “postgres”: db, err = gorm.Open(postgres.Open(config.Config.DBConnectionStr), &gorm.Config{ Logger: logger, }) case “sqlite3”: db, err = gorm.Open(sqlite.Open(config.Config.DBConnectionStr), &gorm.Config{ Logger: logger, }) case “mysql”: db, err = gorm.Open(mysql.Open(config.Config.DBConnectionStr), &gorm.Config{ Logger: logger, }) } return err }, retry.Attempts(config.Config.DBConnectionRetryAttempts), retry.Delay(config.Config.DBConnectionRetryDelay), )
各データベースによる結合テスト
sqlite, mysql, postgresによる結合テストをしている。
https://github.com/openflagr/flagr/blob/fcc74ae8cb690c52ed202b157d198d8fa290d547/integration_tests/test.sh#L396-L405
start() { start_test flagr_with_sqlite start_test flagr_with_mysql start_test flagr_with_mysql8 start_test flagr_with_postgres9 start_test flagr_with_postgres13
start_test checkr_flagr_with_sqlite }