statping/types/configs/connection.go

107 lines
2.8 KiB
Go
Raw Normal View History

2020-03-04 10:29:00 +00:00
package configs
import (
"fmt"
"github.com/jinzhu/gorm"
"github.com/pkg/errors"
2020-03-09 18:17:55 +00:00
"github.com/statping/statping/database"
2020-03-10 05:24:35 +00:00
"github.com/statping/statping/types/checkins"
"github.com/statping/statping/types/core"
"github.com/statping/statping/types/failures"
"github.com/statping/statping/types/groups"
"github.com/statping/statping/types/hits"
"github.com/statping/statping/types/incidents"
"github.com/statping/statping/types/messages"
2020-03-14 03:13:20 +00:00
"github.com/statping/statping/types/notifications"
2020-03-09 18:17:55 +00:00
"github.com/statping/statping/types/null"
2020-03-10 05:24:35 +00:00
"github.com/statping/statping/types/services"
2020-03-09 18:17:55 +00:00
"github.com/statping/statping/types/users"
"github.com/statping/statping/utils"
2020-03-04 10:29:00 +00:00
"time"
)
// Connect will attempt to connect to the sqlite, postgres, or mysql database
2020-03-04 14:20:47 +00:00
func Connect(configs *DbConfig, retry bool) error {
2020-04-16 09:57:00 +00:00
conn := configs.ConnectionString()
2020-04-24 03:48:21 +00:00
p := utils.Params
2020-03-04 10:29:00 +00:00
var err error
log.WithFields(utils.ToFields(configs, conn)).Debugln("attempting to connect to database")
dbSession, err := database.Openw(configs.DbConn, conn)
if err != nil {
2020-04-16 09:57:00 +00:00
log.Errorf(fmt.Sprintf("Database connection error %s", err))
2020-03-04 10:29:00 +00:00
if retry {
2020-04-09 01:47:27 +00:00
log.Warnln(fmt.Sprintf("Database %s connection to '%s' is not available, trying again in 5 seconds...", configs.DbConn, configs.DbHost))
2020-03-05 05:38:56 +00:00
time.Sleep(5 * time.Second)
return Connect(configs, retry)
2020-03-04 10:29:00 +00:00
} else {
return err
}
}
2020-03-05 05:38:56 +00:00
2020-04-24 03:48:21 +00:00
apiSecret := p.GetString("API_SECRET")
2020-03-05 05:38:56 +00:00
configs.ApiSecret = apiSecret
2020-03-04 10:29:00 +00:00
log.WithFields(utils.ToFields(dbSession)).Debugln("connected to database")
2020-04-24 03:48:21 +00:00
maxOpenConn := p.GetInt("MAX_OPEN_CONN")
maxIdleConn := p.GetInt("MAX_IDLE_CONN")
maxLifeConn := p.GetDuration("MAX_LIFE_CONN")
2020-03-04 10:29:00 +00:00
2020-04-16 09:57:00 +00:00
dbSession.DB().SetMaxOpenConns(maxOpenConn)
dbSession.DB().SetMaxIdleConns(maxIdleConn)
dbSession.DB().SetConnMaxLifetime(maxLifeConn)
2020-03-04 10:29:00 +00:00
if dbSession.DB().Ping() == nil {
if utils.VerboseMode >= 4 {
2020-03-10 05:24:35 +00:00
dbSession.LogMode(true).Debug().SetLogger(gorm.Logger{log})
2020-03-04 10:29:00 +00:00
}
log.Infoln(fmt.Sprintf("Database %s connection was successful.", configs.DbConn))
2020-03-04 10:29:00 +00:00
}
2020-03-10 05:24:35 +00:00
configs.Db = dbSession
initModels(configs.Db)
2020-03-04 10:29:00 +00:00
return err
}
2020-03-10 05:24:35 +00:00
func initModels(db database.Database) {
core.SetDB(db)
services.SetDB(db)
hits.SetDB(db)
failures.SetDB(db)
checkins.SetDB(db)
2020-03-14 03:13:20 +00:00
notifications.SetDB(db)
2020-03-10 05:24:35 +00:00
incidents.SetDB(db)
users.SetDB(db)
messages.SetDB(db)
groups.SetDB(db)
}
2020-04-22 05:46:48 +00:00
func CreateAdminUser(c *DbConfig) error {
2020-04-24 02:26:09 +00:00
log.Infoln(fmt.Sprintf("Default Admininstrator user does not exist, creating now! (admin/admin)"))
2020-03-04 14:20:47 +00:00
2020-04-24 02:26:09 +00:00
adminUser := utils.Params.GetString("ADMIN_USER")
adminPass := utils.Params.GetString("ADMIN_PASSWORD")
if adminUser == "" || adminPass == "" {
adminUser = "admin"
adminPass = "admin"
2020-03-06 22:18:06 +00:00
}
2020-03-04 10:29:00 +00:00
admin := &users.User{
2020-04-24 02:26:09 +00:00
Username: adminUser,
Password: adminPass,
2020-03-04 10:29:00 +00:00
Email: "info@admin.com",
Admin: null.NewNullBool(true),
}
2020-03-06 22:18:06 +00:00
2020-03-04 10:29:00 +00:00
if err := admin.Create(); err != nil {
return errors.Wrap(err, "error creating admin")
}
2020-03-04 14:20:47 +00:00
return nil
2020-03-04 10:29:00 +00:00
}