diff --git a/weed/s3api/stats.go b/weed/s3api/stats.go index 16a546c66..b667b32a0 100644 --- a/weed/s3api/stats.go +++ b/weed/s3api/stats.go @@ -4,18 +4,35 @@ import ( stats_collect "github.com/chrislusf/seaweedfs/weed/stats" "github.com/chrislusf/seaweedfs/weed/util" "net/http" + "strconv" "time" ) +type StatusRecorder struct { + http.ResponseWriter + Status int +} + +func NewStatusResponseWriter(w http.ResponseWriter) *StatusRecorder { + return &StatusRecorder{w, http.StatusOK} +} + +func (r *StatusRecorder) WriteHeader(status int) { + r.Status = status + r.ResponseWriter.WriteHeader(status) +} + +func (r *StatusRecorder) Flush() { + r.ResponseWriter.(http.Flusher).Flush() +} + func track(f http.HandlerFunc, action string) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Server", "SeaweedFS S3 "+util.VERSION) - + recorder := NewStatusResponseWriter(w) start := time.Now() - stats_collect.S3RequestCounter.WithLabelValues(action).Inc() - f(w, r) + f(recorder, r) stats_collect.S3RequestHistogram.WithLabelValues(action).Observe(time.Since(start).Seconds()) + stats_collect.S3RequestCounter.WithLabelValues(action, strconv.Itoa(recorder.Status)).Inc() } } diff --git a/weed/stats/metrics.go b/weed/stats/metrics.go index d930caf0f..bc3cff0d0 100644 --- a/weed/stats/metrics.go +++ b/weed/stats/metrics.go @@ -16,7 +16,7 @@ import ( ) var ( - Gather = prometheus.NewRegistry() + Gather = prometheus.NewRegistry() FilerRequestCounter = prometheus.NewCounterVec( prometheus.CounterOpts{ @@ -99,7 +99,7 @@ var ( Subsystem: "s3", Name: "request_total", Help: "Counter of s3 requests.", - }, []string{"type"}) + }, []string{"type", "statusCode"}) S3RequestHistogram = prometheus.NewHistogramVec( prometheus.HistogramOpts{ Namespace: "SeaweedFS",