From e2b0050b8d00f5df9bf7941cca986457b2d91df1 Mon Sep 17 00:00:00 2001 From: oliverpool Date: Wed, 22 Feb 2017 11:44:05 +0100 Subject: [PATCH] Use a simplfied error structure for error counting --- metrics.go | 27 ++++++++++++++++------ prometheuscollector/prometheuscollector.go | 8 +++---- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/metrics.go b/metrics.go index be68835..09231c5 100644 --- a/metrics.go +++ b/metrics.go @@ -77,11 +77,23 @@ func newMetrics() Metrics { // ErrorsTotalMap stores the counter for the different http errors. type ErrorsTotalMap struct { sync.RWMutex - m map[HTTPError]*uint64 + m map[simpleHTTPError]*uint64 +} + +type simpleHTTPError struct { + Msg string + Code int +} + +func serializedHTTPError(err HTTPError) simpleHTTPError { + return simpleHTTPError{ + Msg: err.Error(), + Code: err.StatusCode(), + } } func newErrorsTotalMap() ErrorsTotalMap { - m := make(map[HTTPError]*uint64, 20) + m := make(map[simpleHTTPError]*uint64, 20) return ErrorsTotalMap{ m: m, } @@ -90,8 +102,9 @@ func newErrorsTotalMap() ErrorsTotalMap { // retrievePointerFor returns (after creating it if necessary) the pointer to // the counter for the error. func (e *ErrorsTotalMap) retrievePointerFor(err HTTPError) *uint64 { + serr := serializedHTTPError(err) e.RLock() - ptr, ok := e.m[err] + ptr, ok := e.m[serr] e.RUnlock() if ok { return ptr @@ -100,17 +113,17 @@ func (e *ErrorsTotalMap) retrievePointerFor(err HTTPError) *uint64 { // For pointer creation, a WriteLock is required e.Lock() // We ensure that the ptr wasn't created in the meantime - if ptr, ok = e.m[err]; !ok { + if ptr, ok = e.m[serr]; !ok { ptr = new(uint64) - e.m[err] = ptr + e.m[serr] = ptr } e.Unlock() return ptr } // Load retrieves the map of the counter pointers atomically -func (e *ErrorsTotalMap) Load() (m map[HTTPError]*uint64) { - m = make(map[HTTPError]*uint64, len(e.m)) +func (e *ErrorsTotalMap) Load() (m map[simpleHTTPError]*uint64) { + m = make(map[simpleHTTPError]*uint64, len(e.m)) e.RLock() for err, ptr := range e.m { m[err] = ptr diff --git a/prometheuscollector/prometheuscollector.go b/prometheuscollector/prometheuscollector.go index 0113f20..a7dc95f 100644 --- a/prometheuscollector/prometheuscollector.go +++ b/prometheuscollector/prometheuscollector.go @@ -25,8 +25,8 @@ var ( []string{"method"}, nil) errorsTotalDesc = prometheus.NewDesc( "tusd_errors_total", - "Total number of errors per cause.", - []string{"status", "cause"}, nil) + "Total number of errors per status.", + []string{"status", "message"}, nil) bytesReceivedDesc = prometheus.NewDesc( "tusd_bytes_received", "Number of bytes received for uploads.", @@ -80,8 +80,8 @@ func (c Collector) Collect(metrics chan<- prometheus.Metric) { errorsTotalDesc, prometheus.GaugeValue, float64(atomic.LoadUint64(valuePtr)), - strconv.Itoa(httpError.StatusCode()), - httpError.Error(), + strconv.Itoa(httpError.Code), + httpError.Msg, ) }