-
Notifications
You must be signed in to change notification settings - Fork 3
/
client.go
101 lines (86 loc) · 2.96 KB
/
client.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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package test
import (
"net/http"
"github.com/alexfalkowski/go-service/client"
"github.com/alexfalkowski/go-service/telemetry/tracer"
"github.com/alexfalkowski/go-service/transport"
g "github.com/alexfalkowski/go-service/transport/grpc"
h "github.com/alexfalkowski/go-service/transport/http"
"go.opentelemetry.io/otel/metric"
"go.uber.org/fx"
"go.uber.org/zap"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
)
// NewHTTPClient for test.
func NewHTTPClient(lc fx.Lifecycle, logger *zap.Logger, cfg *tracer.Config, tcfg *transport.Config, meter metric.Meter) *http.Client {
return NewHTTPClientWithRoundTripper(lc, logger, cfg, tcfg, nil, meter)
}
// NewHTTPClientWithRoundTripper for test.
func NewHTTPClientWithRoundTripper(lc fx.Lifecycle, logger *zap.Logger, cfg *tracer.Config, tcfg *transport.Config, rt http.RoundTripper, meter metric.Meter) *http.Client {
tracer, err := tracer.NewTracer(lc, Environment, Version, cfg, logger)
if err != nil {
panic(err)
}
client := h.NewClient(
h.WithClientLogger(logger),
h.WithClientRoundTripper(rt), h.WithClientBreaker(),
h.WithClientTracer(tracer), h.WithClientRetry(tcfg.HTTP.Retry),
h.WithClientMetrics(meter), h.WithClientUserAgent(tcfg.HTTP.UserAgent),
)
return client
}
// NewGRPCClient for test.
func NewGRPCClient(
lc fx.Lifecycle, logger *zap.Logger,
tcfg *transport.Config, ocfg *tracer.Config,
cred credentials.PerRPCCredentials,
meter metric.Meter,
) *grpc.ClientConn {
tracer, err := tracer.NewTracer(lc, Environment, Version, ocfg, logger)
if err != nil {
panic(err)
}
dialOpts := []grpc.DialOption{grpc.WithBlock()}
if cred != nil {
dialOpts = append(dialOpts, grpc.WithPerRPCCredentials(cred))
}
sec, _ := g.WithClientSecure(NewInsecureClientConfig())
cl := &client.Config{Host: "127.0.0.1:" + tcfg.GRPC.Port, Retry: tcfg.GRPC.Retry, UserAgent: tcfg.GRPC.UserAgent}
conn, err := g.NewClient(cl.Host,
g.WithClientUnaryInterceptors(), g.WithClientStreamInterceptors(),
g.WithClientLogger(logger), g.WithClientTracer(tracer),
g.WithClientBreaker(), g.WithClientRetry(cl.Retry),
g.WithClientDialOption(dialOpts...), g.WithClientMetrics(meter),
g.WithClientUserAgent(cl.UserAgent), sec,
)
if err != nil {
panic(err)
}
return conn
}
// NewSecureGRPCClient for test.
func NewSecureGRPCClient(
lc fx.Lifecycle, logger *zap.Logger,
tcfg *transport.Config, ocfg *tracer.Config,
meter metric.Meter,
) *grpc.ClientConn {
tracer, err := tracer.NewTracer(lc, Environment, Version, ocfg, logger)
if err != nil {
panic(err)
}
sec, err := g.WithClientSecure(NewSecureClientConfig())
if err != nil {
panic(err)
}
conn, err := g.NewClient("localhost:"+tcfg.GRPC.Port,
g.WithClientUnaryInterceptors(), g.WithClientStreamInterceptors(),
g.WithClientLogger(logger), g.WithClientTracer(tracer),
g.WithClientBreaker(), g.WithClientRetry(tcfg.GRPC.Retry),
g.WithClientMetrics(meter), g.WithClientUserAgent(tcfg.GRPC.UserAgent), sec,
)
if err != nil {
panic(err)
}
return conn
}