6 "github.com/go-kit/kit/log"
7 "github.com/go-kit/kit/metrics"
10 // Middleware describes a service (as opposed to endpoint) middleware.
11 type Middleware func(Service) Service
13 // LoggingMiddleware takes a logger as a dependency
14 // and returns a ServiceMiddleware.
15 func LoggingMiddleware(logger log.Logger) Middleware {
16 return func(next Service) Service {
17 return loggingMiddleware{logger, next}
21 type loggingMiddleware struct {
26 func (mw loggingMiddleware) Sum(ctx context.Context, a, b int) (v int, err error) {
28 mw.logger.Log("method", "Sum", "a", a, "b", b, "v", v, "err", err)
30 return mw.next.Sum(ctx, a, b)
33 func (mw loggingMiddleware) Concat(ctx context.Context, a, b string) (v string, err error) {
35 mw.logger.Log("method", "Concat", "a", a, "b", b, "v", v, "err", err)
37 return mw.next.Concat(ctx, a, b)
40 // InstrumentingMiddleware returns a service middleware that instruments
41 // the number of integers summed and characters concatenated over the lifetime of
43 func InstrumentingMiddleware(ints, chars metrics.Counter) Middleware {
44 return func(next Service) Service {
45 return instrumentingMiddleware{
53 type instrumentingMiddleware struct {
59 func (mw instrumentingMiddleware) Sum(ctx context.Context, a, b int) (int, error) {
60 v, err := mw.next.Sum(ctx, a, b)
61 mw.ints.Add(float64(v))
65 func (mw instrumentingMiddleware) Concat(ctx context.Context, a, b string) (string, error) {
66 v, err := mw.next.Concat(ctx, a, b)
67 mw.chars.Add(float64(len(v)))