KDOC 56: flagrのコードを読んでメモする

DONE プロジェクトのステータス

プロジェクトは終了である。

概要

openflagr/flagrを読んだメモ。バックエンドはGoで書かれている。

DB初期化部分

グローバル変数にdb取得関数がある。

var getDB = entity.GetDB

変数の中身となる関数。

// 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
}

データベース分岐部分

データベース分岐している箇所。

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による結合テストをしている。

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

    # for backward compatibility with checkr/flagr
    start_test checkr_flagr_with_sqlite
}

関連

  • 疑問: 設計の短所を書く