Add new Prom metrics fn_timeout and fn_errors (#679)

* Add new Prom metric fn_timedout

* Add new Prometheus metric fn_errors

* Tidy up variable name

* Add new Prometheus metric fn_errors

* gofmt
This commit is contained in:
Nigel Deakin
2018-01-15 14:49:33 +00:00
committed by GitHub
parent 633b4c4ba1
commit 8bf26efa29
2 changed files with 22 additions and 4 deletions

View File

@@ -227,8 +227,10 @@ func transformTimeout(e error, isRetriable bool) error {
func (a *agent) handleStatsDequeue(ctx context.Context, call *call, err error) { func (a *agent) handleStatsDequeue(ctx context.Context, call *call, err error) {
if err == context.DeadlineExceeded { if err == context.DeadlineExceeded {
a.stats.Dequeue(ctx, call.AppName, call.Path) a.stats.Dequeue(ctx, call.AppName, call.Path)
// note that this is not a timeout from the perspective of the caller, so don't increment the timeout count
} else { } else {
a.stats.DequeueAndFail(ctx, call.AppName, call.Path) a.stats.DequeueAndFail(ctx, call.AppName, call.Path)
a.stats.IncrementErrors(ctx)
} }
} }
@@ -240,6 +242,12 @@ func (a *agent) handleStatsEnd(ctx context.Context, call *call, err error) {
} else { } else {
// decrement running count, increment failed count // decrement running count, increment failed count
a.stats.Failed(ctx, call.AppName, call.Path) a.stats.Failed(ctx, call.AppName, call.Path)
// increment the timeout or errors count, as appropriate
if err == context.DeadlineExceeded {
a.stats.IncrementTimedout(ctx)
} else {
a.stats.IncrementErrors(ctx)
}
} }
} }

View File

@@ -94,7 +94,7 @@ func (s *stats) DequeueAndStart(ctx context.Context, app string, path string) {
s.running++ s.running++
s.getStatsForFunction(path).running++ s.getStatsForFunction(path).running++
common.IncrementGauge(ctx, runningSuffix) common.IncrementGauge(ctx, runningMetricName)
s.mu.Unlock() s.mu.Unlock()
} }
@@ -104,7 +104,7 @@ func (s *stats) Complete(ctx context.Context, app string, path string) {
s.running-- s.running--
s.getStatsForFunction(path).running-- s.getStatsForFunction(path).running--
common.DecrementGauge(ctx, runningSuffix) common.DecrementGauge(ctx, runningMetricName)
s.complete++ s.complete++
s.getStatsForFunction(path).complete++ s.getStatsForFunction(path).complete++
@@ -118,7 +118,7 @@ func (s *stats) Failed(ctx context.Context, app string, path string) {
s.running-- s.running--
s.getStatsForFunction(path).running-- s.getStatsForFunction(path).running--
common.DecrementGauge(ctx, runningSuffix) common.DecrementGauge(ctx, runningMetricName)
s.failed++ s.failed++
s.getStatsForFunction(path).failed++ s.getStatsForFunction(path).failed++
@@ -141,6 +141,14 @@ func (s *stats) DequeueAndFail(ctx context.Context, app string, path string) {
s.mu.Unlock() s.mu.Unlock()
} }
func (s *stats) IncrementTimedout(ctx context.Context) {
common.IncrementCounter(ctx, timedoutMetricName)
}
func (s *stats) IncrementErrors(ctx context.Context) {
common.IncrementCounter(ctx, errorsMetricName)
}
func (s *stats) Stats() Stats { func (s *stats) Stats() Stats {
var stats Stats var stats Stats
s.mu.Lock() s.mu.Lock()
@@ -160,7 +168,9 @@ func (s *stats) Stats() Stats {
const ( const (
queuedMetricName = "queued" queuedMetricName = "queued"
callsMetricName = "calls" callsMetricName = "calls"
runningSuffix = "running" runningMetricName = "running"
completedMetricName = "completed" completedMetricName = "completed"
failedMetricName = "failed" failedMetricName = "failed"
timedoutMetricName = "timedout"
errorsMetricName = "errors"
) )