OSDN Git Service

new repo
[bytom/vapor.git] / vendor / github.com / go-kit / kit / examples / stringsvc2 / instrumenting.go
1 package main
2
3 import (
4         "fmt"
5         "time"
6
7         "github.com/go-kit/kit/metrics"
8 )
9
10 type instrumentingMiddleware struct {
11         requestCount   metrics.Counter
12         requestLatency metrics.Histogram
13         countResult    metrics.Histogram
14         next           StringService
15 }
16
17 func (mw instrumentingMiddleware) Uppercase(s string) (output string, err error) {
18         defer func(begin time.Time) {
19                 lvs := []string{"method", "uppercase", "error", fmt.Sprint(err != nil)}
20                 mw.requestCount.With(lvs...).Add(1)
21                 mw.requestLatency.With(lvs...).Observe(time.Since(begin).Seconds())
22         }(time.Now())
23
24         output, err = mw.next.Uppercase(s)
25         return
26 }
27
28 func (mw instrumentingMiddleware) Count(s string) (n int) {
29         defer func(begin time.Time) {
30                 lvs := []string{"method", "count", "error", "false"}
31                 mw.requestCount.With(lvs...).Add(1)
32                 mw.requestLatency.With(lvs...).Observe(time.Since(begin).Seconds())
33                 mw.countResult.Observe(float64(n))
34         }(time.Now())
35
36         n = mw.next.Count(s)
37         return
38 }