diff --git a/internal/middleware/sentryhandler/sentryhandler.go b/internal/middleware/sentryhandler/sentryhandler.go index ee79ea494985337790bdb1c8cb61bb7cbbae95f1..b81543b31ea4d39de2acabd601137074e7f1f744 100644 --- a/internal/middleware/sentryhandler/sentryhandler.go +++ b/internal/middleware/sentryhandler/sentryhandler.go @@ -15,6 +15,15 @@ import ( "google.golang.org/grpc/codes" ) +// TODO: this blacklist needs to be configurable via config.toml +var sentryErrorBlacklist = []struct { + method string + code codes.Code +}{ + // Blacklist InfoRefsUploadPack/NotFound because Geo creates lots of bogus wiki clone requests + {method: "/gitaly.SmartHTTPService/InfoRefsUploadPack", code: codes.NotFound}, +} + // UnaryLogHandler handles access times and errors for unary RPC's func UnaryLogHandler(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { start := time.Now() @@ -53,15 +62,24 @@ func methodToCulprit(methodName string) string { return methodName } -func logErrorToSentry(err error) (code codes.Code, bypass bool) { +func logErrorToSentry(method string, err error) (code codes.Code, bypass bool) { code = helper.GrpcCode(err) - bypass = code == codes.OK || code == codes.Canceled - return code, bypass + if code == codes.OK || code == codes.Canceled { + return code, true + } + + for _, blacklisted := range sentryErrorBlacklist { + if method == blacklisted.method && code == blacklisted.code { + return code, true + } + } + + return code, false } func generateRavenPacket(ctx context.Context, method string, start time.Time, err error) (*raven.Packet, map[string]string) { - grpcErrorCode, bypass := logErrorToSentry(err) + grpcErrorCode, bypass := logErrorToSentry(method, err) if bypass { return nil, nil } diff --git a/internal/middleware/sentryhandler/sentryhandler_test.go b/internal/middleware/sentryhandler/sentryhandler_test.go index b156de4744715086c5563d90e4b068dcc35434e8..bd704b3919237ce63e2971248f8e1af1643dedb5 100644 --- a/internal/middleware/sentryhandler/sentryhandler_test.go +++ b/internal/middleware/sentryhandler/sentryhandler_test.go @@ -48,6 +48,13 @@ func Test_generateRavenPacket(t *testing.T) { err: nil, wantNil: true, }, + { + name: "InfoRefsUploadPack not found", + method: "/gitaly.SmartHTTPService/InfoRefsUploadPack", + sinceStart: 500 * time.Millisecond, + err: status.Errorf(codes.NotFound, "Something failed"), + wantNil: true, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {