reference global logrus (#274)

* reference logrus' global logger instead of passing and storing a logger reference everywhere

* always directly use global logrus logger instead of referencing an instance

* test suites should also directly use the global logrus logger

* rename gin logging function to clarify that it's middleware

* correct comments which erroneously referenced removed logger parameter

* setting log level for tests now uses logrus' exported type instead of the string value, to guarantee error isn't possible
This commit is contained in:
R. Aidan Campbell 2021-10-11 05:37:33 -07:00 committed by GitHub
commit 083099a957
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
210 changed files with 506 additions and 662 deletions

View file

@ -24,6 +24,7 @@ import (
"crypto/rsa"
"database/sql"
"fmt"
"github.com/sirupsen/logrus"
"net"
"net/mail"
"strings"
@ -86,7 +87,7 @@ func (a *adminDB) IsEmailAvailable(ctx context.Context, email string) (bool, db.
func (a *adminDB) NewSignup(ctx context.Context, username string, reason string, requireApproval bool, email string, password string, signUpIP net.IP, locale string, appID string, emailVerified bool, admin bool) (*gtsmodel.User, db.Error) {
key, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
a.conn.log.Errorf("error creating new rsa key: %s", err)
logrus.Errorf("error creating new rsa key: %s", err)
return nil, err
}
@ -183,7 +184,7 @@ func (a *adminDB) CreateInstanceAccount(ctx context.Context) db.Error {
WhereGroup(" AND ", whereEmptyOrNull("domain"))
count, err := existsQ.Count(ctx)
if err != nil && count == 1 {
a.conn.log.Infof("instance account %s already exists", username)
logrus.Infof("instance account %s already exists", username)
return nil
} else if err != sql.ErrNoRows {
return a.conn.ProcessError(err)
@ -191,7 +192,7 @@ func (a *adminDB) CreateInstanceAccount(ctx context.Context) db.Error {
key, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
a.conn.log.Errorf("error creating new rsa key: %s", err)
logrus.Errorf("error creating new rsa key: %s", err)
return err
}
@ -226,7 +227,7 @@ func (a *adminDB) CreateInstanceAccount(ctx context.Context) db.Error {
return a.conn.ProcessError(err)
}
a.conn.log.Infof("instance account %s CREATED with id %s", username, acct.ID)
logrus.Infof("instance account %s CREATED with id %s", username, acct.ID)
return nil
}
@ -244,7 +245,7 @@ func (a *adminDB) CreateInstanceInstance(ctx context.Context) db.Error {
return err
}
if exists {
a.conn.log.Infof("instance entry already exists")
logrus.Infof("instance entry already exists")
return nil
}
@ -269,6 +270,6 @@ func (a *adminDB) CreateInstanceInstance(ctx context.Context) db.Error {
return a.conn.ProcessError(err)
}
a.conn.log.Infof("created instance instance %s with id %s", domain, i.ID)
logrus.Infof("created instance instance %s with id %s", domain, i.ID)
return nil
}

View file

@ -21,6 +21,7 @@ package bundb
import (
"context"
"errors"
"github.com/sirupsen/logrus"
"github.com/superseriousbusiness/gotosocial/internal/config"
"github.com/superseriousbusiness/gotosocial/internal/db"
@ -165,6 +166,6 @@ func (b *basicDB) IsHealthy(ctx context.Context) db.Error {
}
func (b *basicDB) Stop(ctx context.Context) db.Error {
b.conn.log.Info("closing db connection")
logrus.Info("closing db connection")
return b.conn.Close()
}

View file

@ -78,8 +78,8 @@ type bunDBService struct {
conn *DBConn
}
func doMigration(ctx context.Context, db *bun.DB, log *logrus.Logger) error {
l := log.WithField("func", "doMigration")
func doMigration(ctx context.Context, db *bun.DB) error {
l := logrus.WithField("func", "doMigration")
migrator := migrate.NewMigrator(db, migrations.Migrations)
@ -106,7 +106,7 @@ func doMigration(ctx context.Context, db *bun.DB, log *logrus.Logger) error {
// NewBunDBService returns a bunDB derived from the provided config, which implements the go-fed DB interface.
// Under the hood, it uses https://github.com/uptrace/bun to create and maintain a database connection.
func NewBunDBService(ctx context.Context, c *config.Config, log *logrus.Logger) (db.DB, error) {
func NewBunDBService(ctx context.Context, c *config.Config) (db.DB, error) {
var sqldb *sql.DB
var conn *DBConn
@ -120,7 +120,7 @@ func NewBunDBService(ctx context.Context, c *config.Config, log *logrus.Logger)
}
sqldb = stdlib.OpenDB(*opts)
tweakConnectionValues(sqldb)
conn = WrapDBConn(bun.NewDB(sqldb, pgdialect.New()), log)
conn = WrapDBConn(bun.NewDB(sqldb, pgdialect.New()))
case dbTypeSqlite:
// SQLITE
@ -138,10 +138,10 @@ func NewBunDBService(ctx context.Context, c *config.Config, log *logrus.Logger)
return nil, fmt.Errorf("could not open sqlite db: %s", err)
}
tweakConnectionValues(sqldb)
conn = WrapDBConn(bun.NewDB(sqldb, sqlitedialect.New()), log)
conn = WrapDBConn(bun.NewDB(sqldb, sqlitedialect.New()))
if c.DBConfig.Address == "file::memory:?cache=shared" {
log.Warn("sqlite in-memory database should only be used for debugging")
logrus.Warn("sqlite in-memory database should only be used for debugging")
// don't close connections on disconnect -- otherwise
// the SQLite database will be deleted when there
@ -152,23 +152,23 @@ func NewBunDBService(ctx context.Context, c *config.Config, log *logrus.Logger)
return nil, fmt.Errorf("database type %s not supported for bundb", strings.ToLower(c.DBConfig.Type))
}
if log.Level >= logrus.TraceLevel {
if logrus.GetLevel() >= logrus.TraceLevel {
// add a hook to just log queries and the time they take
conn.DB.AddQueryHook(newDebugQueryHook(log))
conn.DB.AddQueryHook(newDebugQueryHook())
}
// actually *begin* the connection so that we can tell if the db is there and listening
if err := conn.Ping(); err != nil {
return nil, fmt.Errorf("db connection error: %s", err)
}
log.Info("connected to database")
logrus.Info("connected to database")
for _, t := range registerTables {
// https://bun.uptrace.dev/orm/many-to-many-relation/
conn.RegisterModel(t)
}
if err := doMigration(ctx, conn.DB, log); err != nil {
if err := doMigration(ctx, conn.DB); err != nil {
return nil, fmt.Errorf("db migration error: %s", err)
}
@ -398,7 +398,7 @@ func (ps *bunDBService) MentionStringsToMentions(ctx context.Context, targetAcco
if err != nil {
if err == sql.ErrNoRows {
// no result found for this username/domain so just don't include it as a mencho and carry on about our business
ps.conn.log.Debugf("no account found with username '%s' and domain '%s', skipping it", username, domain)
logrus.Debugf("no account found with username '%s' and domain '%s', skipping it", username, domain)
continue
}
// a serious error has happened so bail
@ -464,7 +464,7 @@ func (ps *bunDBService) EmojiStringsToEmojis(ctx context.Context, emojis []strin
if err != nil {
if err == sql.ErrNoRows {
// no result found for this username/domain so just don't include it as an emoji and carry on about our business
ps.conn.log.Debugf("no emoji found with shortcode %s, skipping it", e)
logrus.Debugf("no emoji found with shortcode %s, skipping it", e)
continue
}
// a serious error has happened so bail

View file

@ -19,7 +19,6 @@
package bundb_test
import (
"github.com/sirupsen/logrus"
"github.com/stretchr/testify/suite"
"github.com/superseriousbusiness/gotosocial/internal/config"
"github.com/superseriousbusiness/gotosocial/internal/db"
@ -32,7 +31,6 @@ type BunDBStandardTestSuite struct {
suite.Suite
config *config.Config
db db.DB
log *logrus.Logger
// standard suite models
testTokens map[string]*gtsmodel.Token
@ -61,7 +59,7 @@ func (suite *BunDBStandardTestSuite) SetupSuite() {
func (suite *BunDBStandardTestSuite) SetupTest() {
suite.config = testrig.NewTestConfig()
suite.db = testrig.NewTestDB()
suite.log = testrig.NewTestLog()
testrig.InitTestLog()
testrig.StandardDBSetup(suite.db, suite.testAccounts)
}

View file

@ -4,7 +4,6 @@ import (
"context"
"database/sql"
"github.com/sirupsen/logrus"
"github.com/superseriousbusiness/gotosocial/internal/db"
"github.com/uptrace/bun"
"github.com/uptrace/bun/dialect"
@ -15,12 +14,11 @@ type DBConn struct {
// TODO: move *Config here, no need to be in each struct type
errProc func(error) db.Error // errProc is the SQL-type specific error processor
log *logrus.Logger // log is the logger passed with this DBConn
*bun.DB // DB is the underlying bun.DB connection
}
// WrapDBConn @TODO
func WrapDBConn(dbConn *bun.DB, log *logrus.Logger) *DBConn {
func WrapDBConn(dbConn *bun.DB) *DBConn {
var errProc func(error) db.Error
switch dbConn.Dialect().Name() {
case dialect.PG:
@ -32,7 +30,6 @@ func WrapDBConn(dbConn *bun.DB, log *logrus.Logger) *DBConn {
}
return &DBConn{
errProc: errProc,
log: log,
DB: dbConn,
}
}

View file

@ -20,6 +20,7 @@ package bundb
import (
"context"
"github.com/sirupsen/logrus"
"github.com/superseriousbusiness/gotosocial/internal/config"
"github.com/superseriousbusiness/gotosocial/internal/db"
@ -98,7 +99,7 @@ func (i *instanceDB) CountInstanceDomains(ctx context.Context, domain string) (i
}
func (i *instanceDB) GetInstanceAccounts(ctx context.Context, domain string, maxID string, limit int) ([]*gtsmodel.Account, db.Error) {
i.conn.log.Debug("GetAccountsForInstance")
logrus.Debug("GetAccountsForInstance")
accounts := []*gtsmodel.Account{}

View file

@ -27,26 +27,24 @@ import (
"github.com/uptrace/bun"
)
func newDebugQueryHook(log *logrus.Logger) bun.QueryHook {
func newDebugQueryHook() bun.QueryHook {
return &debugQueryHook{
log: log,
}
}
// debugQueryHook implements bun.QueryHook
type debugQueryHook struct {
log *logrus.Logger
}
func (q *debugQueryHook) BeforeQuery(ctx context.Context, event *bun.QueryEvent) context.Context {
func (q *debugQueryHook) BeforeQuery(ctx context.Context, _ *bun.QueryEvent) context.Context {
// do nothing
return ctx
}
// AfterQuery logs the time taken to query, the operation (select, update, etc), and the query itself as translated by bun.
func (q *debugQueryHook) AfterQuery(ctx context.Context, event *bun.QueryEvent) {
func (q *debugQueryHook) AfterQuery(_ context.Context, event *bun.QueryEvent) {
dur := time.Since(event.StartTime).Round(time.Microsecond)
l := q.log.WithFields(logrus.Fields{
l := logrus.WithFields(logrus.Fields{
"duration": dur,
"operation": event.Operation(),
})