mirror of
https://github.com/gitpod-io/gitpod.git
synced 2025-12-08 17:36:30 +00:00
61 lines
1.9 KiB
Go
61 lines
1.9 KiB
Go
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
|
|
// Licensed under the GNU Affero General Public License (AGPL).
|
|
// See License-AGPL.txt in the project root for license information.
|
|
|
|
package server
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/bufbuild/connect-go"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
func NewLogInterceptor(entry *logrus.Entry) connect.UnaryInterceptorFunc {
|
|
interceptor := func(next connect.UnaryFunc) connect.UnaryFunc {
|
|
return connect.UnaryFunc(func(ctx context.Context, req connect.AnyRequest) (connect.AnyResponse, error) {
|
|
logger := entry.
|
|
WithContext(ctx).
|
|
WithField("protocol", "connect").
|
|
WithField("procedure", req.Spec().Procedure).
|
|
WithField("address", req.Peer().Addr).
|
|
WithField("stream_type", streamType(req.Spec().StreamType))
|
|
|
|
isClient := req.Spec().IsClient
|
|
|
|
if isClient {
|
|
logger.WithField("headers", req.Header()).Debugf("Starting request for %s", req.Spec().Procedure)
|
|
} else {
|
|
logger.WithField("headers", req.Header()).Debugf("Handling request for %s", req.Spec().Procedure)
|
|
}
|
|
|
|
resp, err := next(ctx, req)
|
|
code := codeOf(err)
|
|
logger = logger.WithField("code", code)
|
|
|
|
if err != nil {
|
|
logger = logger.WithError(err)
|
|
if isClient {
|
|
logger.Errorf("Received response for %s with code %s", req.Spec().Procedure, code)
|
|
} else {
|
|
logger.Warnf("Completed handling of request for %s with code %s", req.Spec().Procedure, code)
|
|
}
|
|
} else {
|
|
if resp.Any() != nil {
|
|
logger = logger.WithField("response", resp.Any())
|
|
}
|
|
|
|
if isClient {
|
|
logger.WithField("response", resp.Any()).Debugf("Received ok response for %s", req.Spec().Procedure)
|
|
} else {
|
|
logger.WithField("response", resp.Any()).Debugf("Completed handling of request for %s with code %s", req.Spec().Procedure, code)
|
|
}
|
|
}
|
|
|
|
return resp, err
|
|
})
|
|
}
|
|
|
|
return connect.UnaryInterceptorFunc(interceptor)
|
|
}
|