/
endpoints.microgen.go
54 lines (48 loc) · 1.86 KB
/
endpoints.microgen.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// Code generated by microgen 0.9.0. DO NOT EDIT.
package transport
import (
"context"
"fmt"
endpoint "github.com/go-kit/kit/endpoint"
metrics "github.com/go-kit/kit/metrics"
opentracing "github.com/go-kit/kit/tracing/opentracing"
opentracinggo "github.com/opentracing/opentracing-go"
"time"
)
// EndpointsSet implements StringService API and used for transport purposes.
type EndpointsSet struct {
UppercaseEndpoint endpoint.Endpoint
CountEndpoint endpoint.Endpoint
TestCaseEndpoint endpoint.Endpoint
DummyMethodEndpoint endpoint.Endpoint
}
func InstrumentingEndpoints(endpoints EndpointsSet, tracer opentracinggo.Tracer) EndpointsSet {
return EndpointsSet{
CountEndpoint: opentracing.TraceServer(tracer, "Count")(endpoints.CountEndpoint),
DummyMethodEndpoint: opentracing.TraceServer(tracer, "DummyMethod")(endpoints.DummyMethodEndpoint),
TestCaseEndpoint: opentracing.TraceServer(tracer, "TestCase")(endpoints.TestCaseEndpoint),
UppercaseEndpoint: opentracing.TraceServer(tracer, "Uppercase")(endpoints.UppercaseEndpoint),
}
}
func LatencyMiddleware(dur metrics.Histogram, methodName string) endpoint.Middleware {
return func(next endpoint.Endpoint) endpoint.Endpoint {
dur := dur.With("method", methodName)
return func(ctx context.Context, request interface{}) (response interface{}, err error) {
defer func(begin time.Time) {
dur.With("success", fmt.Sprint(err == nil)).Observe(time.Since(begin).Seconds())
}(time.Now())
return next(ctx, request)
}
}
}
func RequestFrequencyMiddleware(freq metrics.Gauge, methodName string) endpoint.Middleware {
return func(next endpoint.Endpoint) endpoint.Endpoint {
freq := freq.With("method", methodName)
return func(ctx context.Context, request interface{}) (interface{}, error) {
freq.Add(1)
response, err := next(ctx, request)
freq.Add(-1)
return response, err
}
}
}