prysm-pulse/shared/traceutil/recovery_interceptor_option.go

23 lines
635 B
Go
Raw Normal View History

package traceutil
import (
"context"
"errors"
"runtime/debug"
"github.com/sirupsen/logrus"
"go.opencensus.io/trace"
)
// RecoveryHandlerFunc is a function that recovers from the panic `p` by returning an `error`.
// The context can be used to extract request scoped metadata and context values.
func RecoveryHandlerFunc(ctx context.Context, p interface{}) error {
span := trace.FromContext(ctx)
if span != nil {
span.AddAttributes(trace.StringAttribute("stack", string(debug.Stack())))
}
err := errors.New(p.(string))
logrus.WithError(err).WithField("stack", string(debug.Stack())).Error("gRPC panicked!")
return err
}