diff options
author | Jaime Martinez <jmartinez@gitlab.com> | 2020-06-04 04:56:03 +0300 |
---|---|---|
committer | Jaime Martinez <jmartinez@gitlab.com> | 2020-06-04 04:56:03 +0300 |
commit | c877296b468e4a828da27f4fd47c3e17eb7e2e1d (patch) | |
tree | 699bfd4507f8645b1f5b9a0dc2a717870a960c88 | |
parent | 4eedf5c25e17698d03cd71960040f155f51672c9 (diff) |
Add serving time metric for all files
-rw-r--r-- | app.go | 4 | ||||
-rw-r--r-- | internal/serving/disk/reader.go | 6 | ||||
-rw-r--r-- | internal/serving/disk/serving.go | 2 | ||||
-rw-r--r-- | metrics/metrics.go | 6 |
4 files changed, 14 insertions, 4 deletions
@@ -7,6 +7,7 @@ import ( "net/http" "os" "sync" + "time" ghandlers "github.com/gorilla/handlers" "github.com/rs/cors" @@ -257,6 +258,9 @@ func (a *theApp) accessControlMiddleware(handler http.Handler) http.Handler { // return a 404 Not Found response func (a *theApp) serveFileOrNotFoundHandler() http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + start := time.Now() + defer metrics.ServingTime.Set(time.Since(start).Seconds()) + domain := request.GetDomain(r) fileServed := domain.ServeFileHTTP(w, r) diff --git a/internal/serving/disk/reader.go b/internal/serving/disk/reader.go index 38d055cf..949dd4e0 100644 --- a/internal/serving/disk/reader.go +++ b/internal/serving/disk/reader.go @@ -17,7 +17,7 @@ import ( // Reader is a disk access driver type Reader struct { - fileSizeMetrics *prometheus.GaugeVec + fileSizeMetric *prometheus.GaugeVec } func (reader *Reader) tryFile(h serving.Handler) error { @@ -144,7 +144,7 @@ func (reader *Reader) serveFile(w http.ResponseWriter, r *http.Request, origPath return err } - reader.fileSizeMetrics.With(prometheus.Labels{"serving_type": "disk", "content_type": contentType}).Set(float64(fi.Size())) + reader.fileSizeMetric.With(prometheus.Labels{"serving_type": "disk", "content_type": contentType}).Set(float64(fi.Size())) w.Header().Set("Content-Type", contentType) http.ServeContent(w, r, origPath, fi.ModTime(), file) @@ -172,7 +172,7 @@ func (reader *Reader) serveCustomFile(w http.ResponseWriter, r *http.Request, co return err } - reader.fileSizeMetrics.With(prometheus.Labels{"serving_type": "disk", "content_type": contentType}).Set(float64(fi.Size())) + reader.fileSizeMetric.With(prometheus.Labels{"serving_type": "disk", "content_type": contentType}).Set(float64(fi.Size())) w.Header().Set("Content-Type", contentType) w.Header().Set("Content-Length", strconv.FormatInt(fi.Size(), 10)) diff --git a/internal/serving/disk/serving.go b/internal/serving/disk/serving.go index 84945c8d..94a6d001 100644 --- a/internal/serving/disk/serving.go +++ b/internal/serving/disk/serving.go @@ -8,7 +8,7 @@ import ( var disk = &Disk{ reader: Reader{ - fileSizeMetrics: metrics.ServingFileSize, + fileSizeMetric: metrics.ServingFileSize, }, } diff --git a/metrics/metrics.go b/metrics/metrics.go index 1950eb77..949ffa1e 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -82,6 +82,12 @@ var ( Name: "gitlab_pages_serving_file_size", Help: "The size in bytes for each file that has been served", }, []string{"serving_type", "content_type"}) + + // ServingTime metric for time taken to find a file serving it or not found. + ServingTime = prometheus.NewGauge(prometheus.GaugeOpts{ + Name: "gitlab_pages_serving_time", + Help: "The time (in seconds) taken to serve a file", + }) ) // MustRegister collectors with the Prometheus client |