mirror of
https://github.com/lightninglabs/pool.git
synced 2026-08-14 12:43:03 +02:00
165 lines
5 KiB
Go
165 lines
5 KiB
Go
// As this file is very similar in every package, ignore the linter here.
|
|
// nolint:dupl,interfacer
|
|
package pool
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/btcsuite/btclog"
|
|
"github.com/lightninglabs/aperture/lsat"
|
|
"github.com/lightninglabs/lndclient"
|
|
"github.com/lightninglabs/pool/account"
|
|
"github.com/lightninglabs/pool/auctioneer"
|
|
"github.com/lightninglabs/pool/clientdb"
|
|
"github.com/lightninglabs/pool/order"
|
|
"github.com/lightningnetwork/lnd/build"
|
|
"github.com/lightningnetwork/lnd/signal"
|
|
"google.golang.org/grpc"
|
|
)
|
|
|
|
const Subsystem = "LLMD"
|
|
|
|
var (
|
|
logWriter = build.NewRotatingLogWriter()
|
|
log = build.NewSubLogger(Subsystem, logWriter.GenSubLogger)
|
|
rpcLog = build.NewSubLogger("RPCS", logWriter.GenSubLogger)
|
|
fndgLog = build.NewSubLogger("FNDG", logWriter.GenSubLogger)
|
|
|
|
// SupportedSubsystems is a function that returns a list of all
|
|
// supported logging sub systems.
|
|
SupportedSubsystems = logWriter.SupportedSubsystems
|
|
)
|
|
|
|
func init() {
|
|
setSubLogger(Subsystem, log, nil)
|
|
setSubLogger("RPCS", rpcLog, nil)
|
|
setSubLogger("FNDG", fndgLog, nil)
|
|
addSubLogger(auctioneer.Subsystem, auctioneer.UseLogger)
|
|
addSubLogger(order.Subsystem, order.UseLogger)
|
|
addSubLogger("LNDC", lndclient.UseLogger)
|
|
addSubLogger("SGNL", signal.UseLogger)
|
|
addSubLogger(account.Subsystem, account.UseLogger)
|
|
addSubLogger(lsat.Subsystem, lsat.UseLogger)
|
|
addSubLogger(clientdb.Subsystem, clientdb.UseLogger)
|
|
}
|
|
|
|
// addSubLogger is a helper method to conveniently create and register the
|
|
// logger of a sub system.
|
|
func addSubLogger(subsystem string, useLogger func(btclog.Logger)) {
|
|
logger := build.NewSubLogger(subsystem, logWriter.GenSubLogger)
|
|
setSubLogger(subsystem, logger, useLogger)
|
|
}
|
|
|
|
// setSubLogger is a helper method to conveniently register the logger of a sub
|
|
// system.
|
|
func setSubLogger(subsystem string, logger btclog.Logger,
|
|
useLogger func(btclog.Logger)) {
|
|
|
|
logWriter.RegisterSubLogger(subsystem, logger)
|
|
if useLogger != nil {
|
|
useLogger(logger)
|
|
}
|
|
}
|
|
|
|
// errorLogUnaryServerInterceptor is a simple UnaryServerInterceptor that will
|
|
// automatically log any errors that occur when serving a client's unary
|
|
// request.
|
|
func errorLogUnaryServerInterceptor(logger btclog.Logger) grpc.UnaryServerInterceptor {
|
|
return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo,
|
|
handler grpc.UnaryHandler) (interface{}, error) {
|
|
|
|
resp, err := handler(ctx, req)
|
|
if err != nil {
|
|
// TODO(roasbeef): also log request details?
|
|
logger.Errorf("[%v]: %v", info.FullMethod, err)
|
|
}
|
|
|
|
return resp, err
|
|
}
|
|
}
|
|
|
|
// errorLogUnaryClientInterceptor is a simple UnaryClientInterceptor that will
|
|
// automatically log any errors that occur when executing a unary request to
|
|
// the server.
|
|
func errorLogUnaryClientInterceptor(logger btclog.Logger) grpc.UnaryClientInterceptor {
|
|
return func(ctx context.Context, method string, req, reply interface{},
|
|
cc *grpc.ClientConn, invoker grpc.UnaryInvoker,
|
|
opts ...grpc.CallOption) error {
|
|
|
|
err := invoker(ctx, method, req, reply, cc, opts...)
|
|
if err != nil {
|
|
logger.Errorf("[%v]: %v", method, err)
|
|
}
|
|
|
|
return err
|
|
}
|
|
}
|
|
|
|
// errorLogStreamServerInterceptor is a simple StreamServerInterceptor that
|
|
// will log any errors that occur while processing a client or server streaming
|
|
// RPC.
|
|
func errorLogStreamServerInterceptor(logger btclog.Logger) grpc.StreamServerInterceptor {
|
|
return func(srv interface{}, ss grpc.ServerStream,
|
|
info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
|
|
|
|
err := handler(srv, ss)
|
|
if err != nil {
|
|
logger.Errorf("[%v]: %v", info.FullMethod, err)
|
|
}
|
|
|
|
return err
|
|
}
|
|
}
|
|
|
|
// errorLoggingClientStream wraps around the default client stream to long any errors
|
|
// that happen when we attempt to send or receive messages on the main stream.
|
|
type errorLoggingClientStream struct {
|
|
grpc.ClientStream
|
|
|
|
methodName string
|
|
|
|
logger btclog.Logger
|
|
}
|
|
|
|
// RecvMsg attempts to recv a message, but logs an error if it occurs.
|
|
func (e *errorLoggingClientStream) RecvMsg(m interface{}) error {
|
|
err := e.ClientStream.RecvMsg(m)
|
|
if err != nil {
|
|
e.logger.Errorf("[%v]: %v", e.methodName, err)
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
// SendMsg attempts to send a message, but logs an error if it occurs.
|
|
func (e *errorLoggingClientStream) SendMsg(m interface{}) error {
|
|
err := e.ClientStream.SendMsg(m)
|
|
if err != nil {
|
|
e.logger.Errorf("[%v]: %v", e.methodName, err)
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
// errorLogStreamClientInterceptor is a simple StreamClientInterceptor that
|
|
// will log any errors that occur while processing the messages for a server's
|
|
// streaming RPC.
|
|
func errorLogStreamClientInterceptor(logger btclog.Logger) grpc.StreamClientInterceptor {
|
|
|
|
return func(ctx context.Context, desc *grpc.StreamDesc,
|
|
cc *grpc.ClientConn, method string, streamer grpc.Streamer,
|
|
opts ...grpc.CallOption) (grpc.ClientStream, error) {
|
|
|
|
mainStream, err := streamer(ctx, desc, cc, method, opts...)
|
|
if err != nil {
|
|
logger.Errorf("[%v]: %v", method, err)
|
|
return nil, err
|
|
}
|
|
|
|
return &errorLoggingClientStream{
|
|
ClientStream: mainStream,
|
|
logger: logger,
|
|
methodName: method,
|
|
}, nil
|
|
}
|
|
}
|