mirror of
https://github.com/minio/minio.git
synced 2025-11-07 21:02:58 -05:00
stats: Add network and http statisics (#3686)
Network: total bytes of incoming and outgoing server's data by taking advantage of our ConnMux Read/Write wrapping HTTP: total number of different http verbs passed in http requests and different status codes passed in http responses. This is counted in a new http handler.
This commit is contained in:
committed by
Harshavardhana
parent
6717a0b68c
commit
93fd269329
@@ -356,3 +356,52 @@ func (h resourceHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
// Serve HTTP.
|
||||
h.handler.ServeHTTP(w, r)
|
||||
}
|
||||
|
||||
// httpResponseRecorder wraps http.ResponseWriter
|
||||
// to record some useful http response data.
|
||||
type httpResponseRecorder struct {
|
||||
http.ResponseWriter
|
||||
http.Flusher
|
||||
respStatusCode int
|
||||
}
|
||||
|
||||
// Wraps ResponseWriter's Write()
|
||||
func (rww *httpResponseRecorder) Write(b []byte) (int, error) {
|
||||
return rww.ResponseWriter.Write(b)
|
||||
}
|
||||
|
||||
// Wraps ResponseWriter's Flush()
|
||||
func (rww *httpResponseRecorder) Flush() {
|
||||
f, ok := rww.ResponseWriter.(http.Flusher)
|
||||
if ok {
|
||||
f.Flush()
|
||||
}
|
||||
}
|
||||
|
||||
// Wraps ResponseWriter's WriteHeader() and record
|
||||
// the response status code
|
||||
func (rww *httpResponseRecorder) WriteHeader(httpCode int) {
|
||||
rww.respStatusCode = httpCode
|
||||
rww.ResponseWriter.WriteHeader(httpCode)
|
||||
}
|
||||
|
||||
// httpStatsHandler definition: gather HTTP statistics
|
||||
type httpStatsHandler struct {
|
||||
handler http.Handler
|
||||
}
|
||||
|
||||
// setHttpStatsHandler sets a http Stats Handler
|
||||
func setHTTPStatsHandler(h http.Handler) http.Handler {
|
||||
return httpStatsHandler{handler: h}
|
||||
}
|
||||
|
||||
func (h httpStatsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
// Wraps w to record http response information
|
||||
ww := &httpResponseRecorder{ResponseWriter: w}
|
||||
|
||||
// Execute the request
|
||||
h.handler.ServeHTTP(ww, r)
|
||||
|
||||
// Update http statistics
|
||||
globalHTTPStats.updateStats(r, ww)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user