Import
This commit is contained in:
parent
2b6abac607
commit
63a767d890
25 changed files with 3027 additions and 0 deletions
97
util/gormzerolog/logger.go
Normal file
97
util/gormzerolog/logger.go
Normal file
|
@ -0,0 +1,97 @@
|
|||
package gormzerolog
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"github.com/rs/zerolog"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/logger"
|
||||
)
|
||||
|
||||
type logAdapter struct {
|
||||
logger *zerolog.Logger
|
||||
config logger.Config
|
||||
}
|
||||
|
||||
// New returns a logger that will use zerolog to log messages.
|
||||
// Both `config` and `logger` are optional. If `logger` is `nil`,
|
||||
// it will be retrieved from context.Context. Config options that
|
||||
// are configured in zerolog are not supported (currently that's
|
||||
// `Colorful` and `LogLevel`).
|
||||
func New(config *logger.Config, logger *zerolog.Logger) logger.Interface {
|
||||
r := &logAdapter{logger: logger}
|
||||
if config != nil {
|
||||
r.config = *config
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
func (l *logAdapter) ctx(ctx context.Context) *zerolog.Logger {
|
||||
if l.logger != nil {
|
||||
return l.logger
|
||||
}
|
||||
return zerolog.Ctx(ctx)
|
||||
}
|
||||
|
||||
// Stuff below was copy-pasted from https://github.com/go-gorm/gorm/blob/v1.25.7/logger/logger.go
|
||||
// and edited.
|
||||
|
||||
func (l *logAdapter) LogMode(level logger.LogLevel) logger.Interface {
|
||||
return l
|
||||
}
|
||||
|
||||
// Info print info
|
||||
func (l *logAdapter) Info(ctx context.Context, msg string, data ...interface{}) {
|
||||
l.ctx(ctx).Info().CallerSkipFrame(3).Msgf(msg, data...)
|
||||
}
|
||||
|
||||
// Warn print warn messages
|
||||
func (l *logAdapter) Warn(ctx context.Context, msg string, data ...interface{}) {
|
||||
l.ctx(ctx).Warn().CallerSkipFrame(3).Msgf(msg, data...)
|
||||
}
|
||||
|
||||
// Error print error messages
|
||||
func (l *logAdapter) Error(ctx context.Context, msg string, data ...interface{}) {
|
||||
l.ctx(ctx).Error().CallerSkipFrame(3).Msgf(msg, data...)
|
||||
}
|
||||
|
||||
// Trace print sql message
|
||||
//
|
||||
//nolint:cyclop
|
||||
func (l *logAdapter) Trace(ctx context.Context, begin time.Time, fc func() (string, int64), err error) {
|
||||
elapsed := time.Since(begin)
|
||||
sql, rows := fc()
|
||||
switch {
|
||||
case err != nil && (!errors.Is(err, gorm.ErrRecordNotFound) || !l.config.IgnoreRecordNotFoundError):
|
||||
log := l.ctx(ctx).Error().CallerSkipFrame(3).Err(err)
|
||||
if rows >= 0 {
|
||||
log.Int64("rows", rows)
|
||||
}
|
||||
log.Dur("dur", elapsed)
|
||||
log.Msgf("%s: %s", sql, err)
|
||||
case elapsed > l.config.SlowThreshold && l.config.SlowThreshold != 0:
|
||||
log := l.ctx(ctx).Warn().CallerSkipFrame(3)
|
||||
if rows >= 0 {
|
||||
log.Int64("rows", rows)
|
||||
}
|
||||
log.Dur("dur", elapsed)
|
||||
log.Msgf("SLOW SQL: %s", sql)
|
||||
default:
|
||||
log := l.ctx(ctx).Trace().CallerSkipFrame(3)
|
||||
if rows >= 0 {
|
||||
log.Int64("rows", rows)
|
||||
}
|
||||
log.Dur("dur", elapsed)
|
||||
log.Msgf("%s", sql)
|
||||
}
|
||||
}
|
||||
|
||||
// ParamsFilter filter params
|
||||
func (l *logAdapter) ParamsFilter(ctx context.Context, sql string, params ...interface{}) (string, []interface{}) {
|
||||
if l.config.ParameterizedQueries {
|
||||
return sql, nil
|
||||
}
|
||||
return sql, params
|
||||
}
|
52
util/resolver/resolver.go
Normal file
52
util/resolver/resolver.go
Normal file
|
@ -0,0 +1,52 @@
|
|||
package resolver
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"os"
|
||||
|
||||
"github.com/bluesky-social/indigo/api"
|
||||
"github.com/bluesky-social/indigo/did"
|
||||
)
|
||||
|
||||
var Resolver did.Resolver
|
||||
|
||||
func init() {
|
||||
resolver := did.NewMultiResolver()
|
||||
plcAddr := os.Getenv("ATP_PLC_ADDR")
|
||||
if plcAddr == "" {
|
||||
plcAddr = "https://plc.directory"
|
||||
}
|
||||
resolver.AddHandler("plc", &fallbackResolver{
|
||||
resolvers: []did.Resolver{
|
||||
&api.PLCServer{Host: plcAddr},
|
||||
&api.PLCServer{Host: "https://plc.directory"},
|
||||
}})
|
||||
resolver.AddHandler("web", &did.WebResolver{})
|
||||
|
||||
Resolver = resolver
|
||||
}
|
||||
|
||||
func GetDocument(ctx context.Context, didstr string) (*did.Document, error) {
|
||||
return Resolver.GetDocument(ctx, didstr)
|
||||
}
|
||||
|
||||
type fallbackResolver struct {
|
||||
resolvers []did.Resolver
|
||||
}
|
||||
|
||||
func (r *fallbackResolver) GetDocument(ctx context.Context, didstr string) (*did.Document, error) {
|
||||
errs := []error{}
|
||||
for _, res := range r.resolvers {
|
||||
if d, err := res.GetDocument(ctx, didstr); err == nil {
|
||||
return d, nil
|
||||
}
|
||||
}
|
||||
return nil, errors.Join(errs...)
|
||||
}
|
||||
|
||||
func (r *fallbackResolver) FlushCacheFor(did string) {
|
||||
for _, res := range r.resolvers {
|
||||
res.FlushCacheFor(did)
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue