/models/gorm.go
https://github.com/NyaaPantsu/nyaa · Go · 114 lines · 85 code · 16 blank · 13 comment · 26 complexity · 8bf8782cd6e012a43b107102a48cfedd MD5 · raw file
- package models
- import (
- "github.com/NyaaPantsu/nyaa/config"
- "github.com/NyaaPantsu/nyaa/utils/log"
- "github.com/jinzhu/gorm"
- _ "github.com/jinzhu/gorm/dialects/postgres" // Need for postgres support
- _ "github.com/jinzhu/gorm/dialects/sqlite" // Need for sqlite
- elastic "gopkg.in/olivere/elastic.v5"
- )
- const (
- // SqliteType : name of the sqlite type in gorm
- SqliteType = "sqlite3"
- )
- // Logger interface
- type Logger interface {
- Print(v ...interface{})
- }
- // DefaultLogger : use the default gorm logger that prints to stdout
- var DefaultLogger Logger
- // ORM : Variable for interacting with database
- var ORM *gorm.DB
- // ElasticSearchClient : Client for Elastic search
- var ElasticSearchClient *elastic.Client
- // IsSqlite : Variable to know if we are in sqlite or postgres
- var IsSqlite bool
- // ElasticSearchInit : Initialization of ES client
- func ElasticSearchInit() (*elastic.Client, error) {
- client, err := elastic.NewClient()
- if err != nil {
- log.Errorf("Unable to create elasticsearch client: %s", err)
- return nil, err
- }
- log.Infof("Using elasticsearch client")
- return client, nil
- }
- // GormInit init gorm ORM.
- func GormInit(logger Logger) (*gorm.DB, error) {
- conf := config.Get()
- db, openErr := gorm.Open(conf.DBType, conf.DBParams)
- if openErr != nil {
- log.CheckError(openErr)
- return nil, openErr
- }
- IsSqlite = conf.DBType == SqliteType
- connectionErr := db.DB().Ping()
- if connectionErr != nil {
- log.CheckError(connectionErr)
- return nil, connectionErr
- }
- db.DB().SetMaxIdleConns(1)
- // This should be about the number of cores the machine has (and should
- // be lower than the max_connection specified by postgresql.conf)
- // Since we have two applications running, this should really be
- // number of cores / 2
- // TODO Make configurable
- db.DB().SetMaxOpenConns(4)
- if config.Get().Environment == "DEVELOPMENT" {
- db.LogMode(true)
- }
- switch conf.DBLogMode {
- case "detailed":
- db.LogMode(true)
- case "silent":
- db.LogMode(false)
- }
- if logger != nil {
- db.SetLogger(logger)
- }
- db.AutoMigrate(&User{}, &UserFollows{}, &UserUploadsOld{}, &Notification{}, &Activity{})
- if db.Error != nil {
- return db, db.Error
- }
- db.AutoMigrate(&Torrent{}, &TorrentReport{}, &Scrape{})
- if db.Error != nil {
- return db, db.Error
- }
- db.AutoMigrate(&File{})
- if db.Error != nil {
- return db, db.Error
- }
- db.AutoMigrate(&Comment{}, &OldComment{})
- if db.Error != nil {
- return db, db.Error
- }
- db.AutoMigrate(&OpenID{}, &Access{}, &Refresh{}, &Code{})
- if db.Error != nil {
- return db, db.Error
- }
- db.AutoMigrate(&OauthClient{})
- if db.Error != nil {
- return db, db.Error
- }
- db.AutoMigrate(&Tag{})
- if db.Error != nil {
- return db, db.Error
- }
- return db, nil
- }