Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
a6c1e621
Commit
a6c1e621
authored
Feb 17, 2021
by
Matthias Käppler
Committed by
Patrick Bajao
Feb 17, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "Migrate to labkit error tracking"
This reverts commit
4f0c3682
.
parent
290e36b3
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
146 additions
and
88 deletions
+146
-88
changelogs/unreleased/revert-sentry-go.yml
changelogs/unreleased/revert-sentry-go.yml
+5
-0
go.mod
go.mod
+2
-0
go.sum
go.sum
+2
-0
internal/errortracker/sentry.go
internal/errortracker/sentry.go
+0
-60
internal/helper/helpers.go
internal/helper/helpers.go
+31
-12
internal/helper/raven.go
internal/helper/raven.go
+58
-0
internal/imageresizer/image_resizer.go
internal/imageresizer/image_resizer.go
+4
-6
internal/log/logging.go
internal/log/logging.go
+2
-4
internal/upstream/upstream.go
internal/upstream/upstream.go
+1
-2
main.go
main.go
+1
-4
raven.go
raven.go
+40
-0
No files found.
changelogs/unreleased/revert-sentry-go.yml
0 → 100644
View file @
a6c1e621
---
title
:
Revert "Migrate to labkit error tracking"
merge_request
:
685
author
:
type
:
other
go.mod
View file @
a6c1e621
...
...
@@ -8,8 +8,10 @@ require (
github.com/FZambia/sentinel v1.0.0
github.com/alecthomas/chroma v0.7.3
github.com/aws/aws-sdk-go v1.36.1
github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054 // indirect
github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/disintegration/imaging v1.6.2
github.com/getsentry/raven-go v0.2.0
github.com/golang/gddo v0.0.0-20190419222130-af0f2af80721
github.com/golang/protobuf v1.4.3
github.com/gomodule/redigo v2.0.0+incompatible
...
...
go.sum
View file @
a6c1e621
...
...
@@ -145,6 +145,8 @@ github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QH
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/certifi/gocertifi v0.0.0-20180905225744-ee1a9a0726d2/go.mod h1:GJKEexRPVJrBSOjoqN5VNOIKJ5Q3RViH6eu3puDRwx4=
github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054 h1:uH66TXeswKn5PW5zdZ39xEwfS9an067BirqA+P4QaLI=
github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA=
github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
...
...
internal/errortracker/sentry.go
deleted
100644 → 0
View file @
290e36b3
package
errortracker
import
(
"fmt"
"net/http"
"os"
"runtime/debug"
"gitlab.com/gitlab-org/labkit/errortracking"
"gitlab.com/gitlab-org/labkit/log"
)
// NewHandler allows us to handle panics in upstreams gracefully, by logging them
// using structured logging and reporting them into Sentry as `error`s with a
// proper correlation ID attached.
func
NewHandler
(
next
http
.
Handler
)
http
.
Handler
{
return
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
defer
func
()
{
if
p
:=
recover
();
p
!=
nil
{
fields
:=
log
.
ContextFields
(
r
.
Context
())
log
.
WithFields
(
fields
)
.
Error
(
p
)
debug
.
PrintStack
()
// A panic isn't always an `error`, so we may have to convert it into one.
e
,
ok
:=
p
.
(
error
)
if
!
ok
{
e
=
fmt
.
Errorf
(
"%v"
,
p
)
}
TrackFailedRequest
(
r
,
e
,
fields
)
}
}()
next
.
ServeHTTP
(
w
,
r
)
})
}
func
TrackFailedRequest
(
r
*
http
.
Request
,
err
error
,
fields
log
.
Fields
)
{
captureOpts
:=
[]
errortracking
.
CaptureOption
{
errortracking
.
WithContext
(
r
.
Context
()),
errortracking
.
WithRequest
(
r
),
}
for
k
,
v
:=
range
fields
{
captureOpts
=
append
(
captureOpts
,
errortracking
.
WithField
(
k
,
fmt
.
Sprintf
(
"%v"
,
v
)))
}
errortracking
.
Capture
(
err
,
captureOpts
...
)
}
func
Initialize
(
version
string
)
error
{
// Use a custom environment variable (not SENTRY_DSN) to prevent
// clashes with gitlab-rails.
sentryDSN
:=
os
.
Getenv
(
"GITLAB_WORKHORSE_SENTRY_DSN"
)
sentryEnvironment
:=
os
.
Getenv
(
"GITLAB_WORKHORSE_SENTRY_ENVIRONMENT"
)
return
errortracking
.
Initialize
(
errortracking
.
WithSentryDSN
(
sentryDSN
),
errortracking
.
WithSentryEnvironment
(
sentryEnvironment
),
errortracking
.
WithVersion
(
version
),
)
}
internal/helper/helpers.go
View file @
a6c1e621
...
...
@@ -14,31 +14,50 @@ import (
"syscall"
"github.com/sebest/xff"
"gitlab.com/gitlab-org/
gitlab-workhorse/internal/log
"
"gitlab.com/gitlab-org/labkit/log"
"gitlab.com/gitlab-org/
labkit/mask
"
)
const
NginxResponseBufferHeader
=
"X-Accel-Buffering"
func
CaptureAndFail
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
,
err
error
,
msg
string
,
code
int
,
loggerCallbacks
...
log
.
ConfigureLogger
)
{
http
.
Error
(
w
,
msg
,
code
)
logger
:=
log
.
WithRequest
(
r
)
.
WithError
(
err
)
for
_
,
cb
:=
range
loggerCallbacks
{
logger
=
cb
(
logger
)
func
logErrorWithFields
(
r
*
http
.
Request
,
err
error
,
fields
log
.
Fields
)
{
if
err
!=
nil
{
CaptureRavenError
(
r
,
err
,
fields
)
}
logger
.
Error
(
msg
)
printError
(
r
,
err
,
fields
)
}
func
CaptureAndFail
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
,
err
error
,
msg
string
,
code
int
)
{
http
.
Error
(
w
,
msg
,
code
)
logErrorWithFields
(
r
,
err
,
nil
)
}
func
Fail500
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
,
err
error
)
{
CaptureAndFail
(
w
,
r
,
err
,
"Internal server error"
,
http
.
StatusInternalServerError
)
}
func
Fail500
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
,
err
error
,
loggerCallbacks
...
log
.
ConfigureLogger
)
{
CaptureAndFail
(
w
,
r
,
err
,
"Internal server error"
,
http
.
StatusInternalServerError
,
loggerCallbacks
...
)
func
Fail500WithFields
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
,
err
error
,
fields
log
.
Fields
)
{
http
.
Error
(
w
,
"Internal server error"
,
http
.
StatusInternalServerError
)
logErrorWithFields
(
r
,
err
,
fields
)
}
func
RequestEntityTooLarge
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
,
err
error
)
{
CaptureAndFail
(
w
,
r
,
err
,
"Request Entity Too Large"
,
http
.
StatusRequestEntityTooLarge
)
}
func
printError
(
r
*
http
.
Request
,
err
error
,
fields
log
.
Fields
)
{
if
r
!=
nil
{
entry
:=
log
.
WithContextFields
(
r
.
Context
(),
log
.
Fields
{
"method"
:
r
.
Method
,
"uri"
:
mask
.
URL
(
r
.
RequestURI
),
})
entry
.
WithFields
(
fields
)
.
WithError
(
err
)
.
Error
()
}
else
{
log
.
WithFields
(
fields
)
.
WithError
(
err
)
.
Error
(
"unknown error"
)
}
}
func
SetNoCacheHeaders
(
header
http
.
Header
)
{
header
.
Set
(
"Cache-Control"
,
"no-cache, no-store, max-age=0, must-revalidate"
)
header
.
Set
(
"Pragma"
,
"no-cache"
)
...
...
@@ -78,7 +97,7 @@ func OpenFile(path string) (file *os.File, fi os.FileInfo, err error) {
func
URLMustParse
(
s
string
)
*
url
.
URL
{
u
,
err
:=
url
.
Parse
(
s
)
if
err
!=
nil
{
log
.
WithError
(
err
)
.
WithField
s
(
log
.
Fields
{
"url"
:
s
})
.
Error
(
"urlMustParse"
)
log
.
WithError
(
err
)
.
WithField
(
"url"
,
s
)
.
Fatal
(
"urlMustParse"
)
}
return
u
}
...
...
internal/helper/raven.go
0 → 100644
View file @
a6c1e621
package
helper
import
(
"net/http"
"reflect"
raven
"github.com/getsentry/raven-go"
//lint:ignore SA1019 this was recently deprecated. Update workhorse to use labkit errortracking package.
correlation
"gitlab.com/gitlab-org/labkit/correlation/raven"
"gitlab.com/gitlab-org/labkit/log"
)
var
ravenHeaderBlacklist
=
[]
string
{
"Authorization"
,
"Private-Token"
,
}
func
CaptureRavenError
(
r
*
http
.
Request
,
err
error
,
fields
log
.
Fields
)
{
client
:=
raven
.
DefaultClient
extra
:=
raven
.
Extra
{}
for
k
,
v
:=
range
fields
{
extra
[
k
]
=
v
}
interfaces
:=
[]
raven
.
Interface
{}
if
r
!=
nil
{
CleanHeadersForRaven
(
r
)
interfaces
=
append
(
interfaces
,
raven
.
NewHttp
(
r
))
//lint:ignore SA1019 this was recently deprecated. Update workhorse to use labkit errortracking package.
extra
=
correlation
.
SetExtra
(
r
.
Context
(),
extra
)
}
exception
:=
&
raven
.
Exception
{
Stacktrace
:
raven
.
NewStacktrace
(
2
,
3
,
nil
),
Value
:
err
.
Error
(),
Type
:
reflect
.
TypeOf
(
err
)
.
String
(),
}
interfaces
=
append
(
interfaces
,
exception
)
packet
:=
raven
.
NewPacketWithExtra
(
err
.
Error
(),
extra
,
interfaces
...
)
client
.
Capture
(
packet
,
nil
)
}
func
CleanHeadersForRaven
(
r
*
http
.
Request
)
{
if
r
==
nil
{
return
}
for
_
,
key
:=
range
ravenHeaderBlacklist
{
if
r
.
Header
.
Get
(
key
)
!=
""
{
r
.
Header
.
Set
(
key
,
"[redacted]"
)
}
}
}
internal/imageresizer/image_resizer.go
View file @
a6c1e621
...
...
@@ -428,18 +428,16 @@ func logFields(startTime time.Time, params *resizeParams, outcome *resizeOutcome
func
handleOutcome
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
startTime
time
.
Time
,
params
*
resizeParams
,
outcome
*
resizeOutcome
)
{
fields
:=
logFields
(
startTime
,
params
,
outcome
)
log
ger
:=
log
.
WithRequest
(
req
)
.
WithFields
(
fields
)
log
:=
log
.
WithRequest
(
req
)
.
WithFields
(
fields
)
switch
outcome
.
status
{
case
statusRequestFailure
:
if
outcome
.
bytesWritten
<=
0
{
helper
.
Fail500
(
w
,
req
,
outcome
.
err
,
func
(
b
*
log
.
Builder
)
*
log
.
Builder
{
return
b
.
WithFields
(
fields
)
})
helper
.
Fail500WithFields
(
w
,
req
,
outcome
.
err
,
fields
)
}
else
{
log
ger
.
WithError
(
outcome
.
err
)
.
Error
(
outcome
.
status
)
log
.
WithError
(
outcome
.
err
)
.
Error
(
outcome
.
status
)
}
default
:
log
ger
.
Info
(
outcome
.
status
)
log
.
Info
(
outcome
.
status
)
}
}
internal/log/logging.go
View file @
a6c1e621
...
...
@@ -8,13 +8,11 @@ import (
"gitlab.com/gitlab-org/labkit/mask"
"golang.org/x/net/context"
"gitlab.com/gitlab-org/gitlab-workhorse/internal/
errortrack
er"
"gitlab.com/gitlab-org/gitlab-workhorse/internal/
help
er"
)
type
Fields
=
log
.
Fields
type
ConfigureLogger
func
(
*
Builder
)
*
Builder
type
Builder
struct
{
entry
*
logrus
.
Entry
fields
log
.
Fields
...
...
@@ -85,6 +83,6 @@ func (b *Builder) Error(args ...interface{}) {
b
.
entry
.
Error
(
args
...
)
if
b
.
req
!=
nil
&&
b
.
err
!=
nil
{
errortracker
.
TrackFailedRequest
(
b
.
req
,
b
.
err
,
b
.
fields
)
helper
.
CaptureRavenError
(
b
.
req
,
b
.
err
,
b
.
fields
)
}
}
internal/upstream/upstream.go
View file @
a6c1e621
...
...
@@ -16,7 +16,6 @@ import (
"gitlab.com/gitlab-org/labkit/correlation"
"gitlab.com/gitlab-org/gitlab-workhorse/internal/config"
"gitlab.com/gitlab-org/gitlab-workhorse/internal/errortracker"
"gitlab.com/gitlab-org/gitlab-workhorse/internal/helper"
"gitlab.com/gitlab-org/gitlab-workhorse/internal/rejectmethods"
"gitlab.com/gitlab-org/gitlab-workhorse/internal/upload"
...
...
@@ -64,7 +63,7 @@ func NewUpstream(cfg config.Config, accessLogger *logrus.Logger) http.Handler {
correlationOpts
=
append
(
correlationOpts
,
correlation
.
WithPropagation
())
}
handler
:=
correlation
.
InjectCorrelationID
(
errortracker
.
NewHandler
(
&
up
)
,
correlationOpts
...
)
handler
:=
correlation
.
InjectCorrelationID
(
&
up
,
correlationOpts
...
)
// TODO: move to LabKit https://gitlab.com/gitlab-org/gitlab-workhorse/-/issues/339
handler
=
rejectmethods
.
NewMiddleware
(
handler
)
return
handler
...
...
main.go
View file @
a6c1e621
...
...
@@ -16,7 +16,6 @@ import (
"gitlab.com/gitlab-org/labkit/tracing"
"gitlab.com/gitlab-org/gitlab-workhorse/internal/config"
"gitlab.com/gitlab-org/gitlab-workhorse/internal/errortracker"
"gitlab.com/gitlab-org/gitlab-workhorse/internal/queueing"
"gitlab.com/gitlab-org/gitlab-workhorse/internal/redis"
"gitlab.com/gitlab-org/gitlab-workhorse/internal/secret"
...
...
@@ -157,8 +156,6 @@ func run(boot bootConfig, cfg config.Config) error {
}
defer
closer
.
Close
()
errortracker
.
Initialize
(
cfg
.
Version
)
tracing
.
Initialize
(
tracing
.
WithServiceName
(
"gitlab-workhorse"
))
log
.
WithField
(
"version"
,
Version
)
.
WithField
(
"build_time"
,
BuildTime
)
.
Print
(
"Starting"
)
...
...
@@ -226,7 +223,7 @@ func run(boot bootConfig, cfg config.Config) error {
}
defer
accessCloser
.
Close
()
up
:=
upstream
.
NewUpstream
(
cfg
,
accessLogger
)
up
:=
wrapRaven
(
upstream
.
NewUpstream
(
cfg
,
accessLogger
)
)
go
func
()
{
finalErrors
<-
http
.
Serve
(
listener
,
up
)
}()
...
...
raven.go
0 → 100644
View file @
a6c1e621
package
main
import
(
"net/http"
"os"
raven
"github.com/getsentry/raven-go"
"gitlab.com/gitlab-org/gitlab-workhorse/internal/helper"
)
func
wrapRaven
(
h
http
.
Handler
)
http
.
Handler
{
// Use a custom environment variable (not SENTRY_DSN) to prevent
// clashes with gitlab-rails.
sentryDSN
:=
os
.
Getenv
(
"GITLAB_WORKHORSE_SENTRY_DSN"
)
sentryEnvironment
:=
os
.
Getenv
(
"GITLAB_WORKHORSE_SENTRY_ENVIRONMENT"
)
raven
.
SetDSN
(
sentryDSN
)
// sentryDSN may be empty
if
sentryEnvironment
!=
""
{
raven
.
SetEnvironment
(
sentryEnvironment
)
}
if
sentryDSN
==
""
{
return
h
}
raven
.
DefaultClient
.
SetRelease
(
Version
)
return
http
.
HandlerFunc
(
raven
.
RecoveryHandler
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
defer
func
()
{
if
p
:=
recover
();
p
!=
nil
{
helper
.
CleanHeadersForRaven
(
r
)
panic
(
p
)
}
}()
h
.
ServeHTTP
(
w
,
r
)
}))
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment