mirror of
https://github.com/weaveworks/scope.git
synced 2026-03-04 02:30:45 +00:00
Correctly instrument websocket handshakes
Part of weaveworks/monitoring#82
This commit is contained in:
17
vendor/github.com/weaveworks/common/middleware/instrument.go
generated
vendored
17
vendor/github.com/weaveworks/common/middleware/instrument.go
generated
vendored
@@ -19,16 +19,25 @@ type Instrument struct {
|
||||
Duration *prometheus.HistogramVec
|
||||
}
|
||||
|
||||
func isWSHandshakeRequest(req *http.Request) bool {
|
||||
return strings.ToLower(req.Header.Get("Upgrade")) == "websocket" &&
|
||||
strings.ToLower(req.Header.Get("Connection")) == "upgrade"
|
||||
// IsWSHandshakeRequest returns true if the given request is a websocket handshake request.
|
||||
func IsWSHandshakeRequest(req *http.Request) bool {
|
||||
if strings.ToLower(req.Header.Get("Upgrade")) == "websocket" {
|
||||
// Connection header values can be of form "foo, bar, ..."
|
||||
parts := strings.Split(strings.ToLower(req.Header.Get("Connection")), ",")
|
||||
for _, part := range parts {
|
||||
if strings.TrimSpace(part) == "upgrade" {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// Wrap implements middleware.Interface
|
||||
func (i Instrument) Wrap(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
begin := time.Now()
|
||||
isWS := strconv.FormatBool(isWSHandshakeRequest(r))
|
||||
isWS := strconv.FormatBool(IsWSHandshakeRequest(r))
|
||||
interceptor := &interceptor{ResponseWriter: w, statusCode: http.StatusOK}
|
||||
route := i.getRouteName(r)
|
||||
next.ServeHTTP(interceptor, r)
|
||||
|
||||
2
vendor/manifest
vendored
2
vendor/manifest
vendored
@@ -1361,7 +1361,7 @@
|
||||
"importpath": "github.com/weaveworks/common",
|
||||
"repository": "https://github.com/weaveworks/common",
|
||||
"vcs": "git",
|
||||
"revision": "5edbff9f695b090e16bbb90dd89b83b70178c49e",
|
||||
"revision": "cc20acf03ebf74be0facaae4259dff6cde01ce77",
|
||||
"branch": "master",
|
||||
"notests": true
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user