OSDN Git Service

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