[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:
parent
1149310673
commit
c1585d5f8a
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
}()
|
}()
|
||||||
|
|
Loading…
Reference in New Issue