Skip to content

Commit

Permalink
panic recovery interceptor
Browse files Browse the repository at this point in the history
  • Loading branch information
sekulicd committed Aug 30, 2024
1 parent 71b452e commit 8462fd9
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 2 deletions.
6 changes: 4 additions & 2 deletions internal/core/application/transaction_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import (
"github.com/vulpemventures/go-elements/transaction"
"github.com/vulpemventures/ocean/internal/core/domain"
"github.com/vulpemventures/ocean/internal/core/ports"
wallet "github.com/vulpemventures/ocean/pkg/wallet"
"github.com/vulpemventures/ocean/pkg/wallet"
singlesig "github.com/vulpemventures/ocean/pkg/wallet/single-sig"
)

Expand Down Expand Up @@ -90,7 +90,9 @@ func (ts *TransactionService) GetTransactionInfo(
if err != nil {
return nil, err
}
tx = &res[0]
if len(res) != 0 {
tx = &res[0]
}
}
return (*TransactionInfo)(tx), nil
}
Expand Down
2 changes: 2 additions & 0 deletions internal/interfaces/grpc/interceptor/interceptor.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ func UnaryInterceptor() grpc.ServerOption {
return grpc.UnaryInterceptor(
middleware.ChainUnaryServer(
unaryLogger,
unaryPanicRecoveryInterceptor(),
),
)
}
Expand All @@ -19,6 +20,7 @@ func StreamInterceptor() grpc.ServerOption {
return grpc.StreamInterceptor(
middleware.ChainStreamServer(
streamLogger,
streamPanicRecoveryInterceptor(),
),
)
}
45 changes: 45 additions & 0 deletions internal/interfaces/grpc/interceptor/panic.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package grpc_interceptor

import (
"context"
"runtime/debug"

log "github.com/sirupsen/logrus"
"google.golang.org/grpc"
)

func unaryPanicRecoveryInterceptor() grpc.UnaryServerInterceptor {
return func(
ctx context.Context,
req interface{},
info *grpc.UnaryServerInfo,
handler grpc.UnaryHandler,
) (interface{}, error) {
defer func() {
if r := recover(); r != nil {
log.Errorf("panic-recovery middleware recovered from panic: %v", r)
log.Tracef("panic-recovery middleware recovered from panic: %v", string(debug.Stack()))
}
}()

return handler(ctx, req)
}
}

func streamPanicRecoveryInterceptor() grpc.StreamServerInterceptor {
return func(
srv interface{},
stream grpc.ServerStream,
info *grpc.StreamServerInfo,
handler grpc.StreamHandler,
) error {
defer func() {
if r := recover(); r != nil {
log.Errorf("panic-recovery middleware recovered from panic: %v", r)
log.Tracef("panic-recovery middleware recovered from panic: %v", string(debug.Stack()))
}
}()

return handler(srv, stream)
}
}

0 comments on commit 8462fd9

Please sign in to comment.