mirror of
1
Fork 0

[bugfix] Fix domains not being unblockable, log internal server errors from API (#833)

* log internal server errors from 500 api calls

* don't exec into nil dest

* don't exec into nil dest

* log error in router logger not api errorhandling

* update logging a tad

* linter
This commit is contained in:
tobi 2022-09-17 19:12:12 +02:00 committed by GitHub
parent 1149310673
commit c1585d5f8a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 9 additions and 13 deletions

View File

@ -86,6 +86,10 @@ func genericErrorHandler(c *gin.Context, instanceGet func(ctx context.Context, d
// if something goes wrong during the function, it will recover and just try to serve // if something goes wrong during the function, it will recover and just try to serve
// an appropriate application/json content-type error. // an appropriate application/json content-type error.
func ErrorHandler(c *gin.Context, errWithCode gtserror.WithCode, instanceGet func(ctx context.Context, domain string) (*apimodel.Instance, gtserror.WithCode)) { func ErrorHandler(c *gin.Context, errWithCode gtserror.WithCode, instanceGet func(ctx context.Context, domain string) (*apimodel.Instance, gtserror.WithCode)) {
// set the error on the gin context so that it can be logged
// in the gin logger middleware (internal/router/logger.go)
c.Error(errWithCode) //nolint:errcheck
// discover if we're allowed to serve a nice html error page, // discover if we're allowed to serve a nice html error page,
// or if we should just use a json. Normally we would want to // or if we should just use a json. Normally we would want to
// check for a returned error, but if an error occurs here we // check for a returned error, but if an error occurs here we

View File

@ -107,7 +107,7 @@ func (d *domainDB) DeleteDomainBlock(ctx context.Context, domain string) db.Erro
_, err := d.conn.NewDelete(). _, err := d.conn.NewDelete().
Model((*gtsmodel.DomainBlock)(nil)). Model((*gtsmodel.DomainBlock)(nil)).
Where("domain = ?", domain). Where("domain = ?", domain).
Exec(ctx, nil) Exec(ctx)
if err != nil { if err != nil {
return d.conn.ProcessError(err) return d.conn.ProcessError(err)
} }

View File

@ -72,29 +72,21 @@ func loggingMiddleware(c *gin.Context) {
fields[4] = kv.Field{"statusCode", code} fields[4] = kv.Field{"statusCode", code}
fields[5] = kv.Field{"path", path} fields[5] = kv.Field{"path", path}
var lvl level.LEVEL // Create log entry with fields
l := log.WithFields(fields...)
// Default is info // Default is info
lvl = level.INFO lvl := level.INFO
if code >= 500 { if code >= 500 {
// This is a server error // This is a server error
lvl = level.ERROR lvl = level.ERROR
l = l.WithField("error", c.Errors)
if len(c.Errors) > 0 {
// Add an error string log field
fields = append(fields, kv.Field{
"error", c.Errors.String(),
})
}
} }
// Generate a nicer looking bytecount // Generate a nicer looking bytecount
size := bytesize.Size(c.Writer.Size()) size := bytesize.Size(c.Writer.Size())
// Create log entry with fields
l := log.WithFields(fields...)
// Finally, write log entry with status text body size // Finally, write log entry with status text body size
l.Logf(lvl, "%s: wrote %s", http.StatusText(code), size) l.Logf(lvl, "%s: wrote %s", http.StatusText(code), size)
}() }()