@@ -6,8 +6,10 @@ package api
66
77import (
88 "github.com/go-kit/kit/endpoint"
9+ "github.com/go-kit/kit/tracing/opentracing"
910 "github.com/microservices-demo/user/db"
1011 "github.com/microservices-demo/user/users"
12+ stdopentracing "github.com/opentracing/opentracing-go"
1113 "golang.org/x/net/context"
1214)
1315
@@ -27,24 +29,28 @@ type Endpoints struct {
2729
2830// MakeEndpoints returns an Endpoints structure, where each endpoint is
2931// backed by the given service.
30- func MakeEndpoints (s Service ) Endpoints {
32+ func MakeEndpoints (s Service , tracer stdopentracing. Tracer ) Endpoints {
3133 return Endpoints {
32- LoginEndpoint : MakeLoginEndpoint (s ),
33- RegisterEndpoint : MakeRegisterEndpoint (s ),
34- HealthEndpoint : MakeHealthEndpoint (s ),
35- UserGetEndpoint : MakeUserGetEndpoint (s ),
36- UserPostEndpoint : MakeUserPostEndpoint (s ),
37- AddressGetEndpoint : MakeAddressGetEndpoint (s ),
38- AddressPostEndpoint : MakeAddressPostEndpoint (s ),
39- CardGetEndpoint : MakeCardGetEndpoint (s ),
40- DeleteEndpoint : MakeDeleteEndpoint (s ),
41- CardPostEndpoint : MakeCardPostEndpoint (s ),
34+ LoginEndpoint : opentracing . TraceServer ( tracer , "GET /login" )( MakeLoginEndpoint (s ) ),
35+ RegisterEndpoint : opentracing . TraceServer ( tracer , "POST /register" )( MakeRegisterEndpoint (s ) ),
36+ HealthEndpoint : opentracing . TraceServer ( tracer , "GET /health" )( MakeHealthEndpoint (s ) ),
37+ UserGetEndpoint : opentracing . TraceServer ( tracer , "GET /customers" )( MakeUserGetEndpoint (s ) ),
38+ UserPostEndpoint : opentracing . TraceServer ( tracer , "POST /customers" )( MakeUserPostEndpoint (s ) ),
39+ AddressGetEndpoint : opentracing . TraceServer ( tracer , "GET /addresses" )( MakeAddressGetEndpoint (s ) ),
40+ AddressPostEndpoint : opentracing . TraceServer ( tracer , "POST /addresses" )( MakeAddressPostEndpoint (s ) ),
41+ CardGetEndpoint : opentracing . TraceServer ( tracer , "GET /cards" )( MakeCardGetEndpoint (s ) ),
42+ DeleteEndpoint : opentracing . TraceServer ( tracer , "DELETE /" )( MakeDeleteEndpoint (s ) ),
43+ CardPostEndpoint : opentracing . TraceServer ( tracer , "POST /cards" )( MakeCardPostEndpoint (s ) ),
4244 }
4345}
4446
4547// MakeLoginEndpoint returns an endpoint via the given service.
4648func MakeLoginEndpoint (s Service ) endpoint.Endpoint {
4749 return func (ctx context.Context , request interface {}) (response interface {}, err error ) {
50+ var span stdopentracing.Span
51+ span , ctx = stdopentracing .StartSpanFromContext (ctx , "login user" )
52+ span .SetTag ("service" , "user" )
53+ defer span .Finish ()
4854 req := request .(loginRequest )
4955 u , err := s .Login (req .Username , req .Password )
5056 return userResponse {User : u }, err
@@ -54,6 +60,10 @@ func MakeLoginEndpoint(s Service) endpoint.Endpoint {
5460// MakeRegisterEndpoint returns an endpoint via the given service.
5561func MakeRegisterEndpoint (s Service ) endpoint.Endpoint {
5662 return func (ctx context.Context , request interface {}) (response interface {}, err error ) {
63+ var span stdopentracing.Span
64+ span , ctx = stdopentracing .StartSpanFromContext (ctx , "register user" )
65+ span .SetTag ("service" , "user" )
66+ defer span .Finish ()
5767 req := request .(registerRequest )
5868 id , err := s .Register (req .Username , req .Password , req .Email , req .FirstName , req .LastName )
5969 return postResponse {ID : id }, err
@@ -63,8 +73,16 @@ func MakeRegisterEndpoint(s Service) endpoint.Endpoint {
6373// MakeUserGetEndpoint returns an endpoint via the given service.
6474func MakeUserGetEndpoint (s Service ) endpoint.Endpoint {
6575 return func (ctx context.Context , request interface {}) (response interface {}, err error ) {
76+ var span stdopentracing.Span
77+ span , ctx = stdopentracing .StartSpanFromContext (ctx , "get users" )
78+ span .SetTag ("service" , "user" )
79+ defer span .Finish ()
80+
6681 req := request .(GetRequest )
82+
83+ userspan := stdopentracing .StartSpan ("users from db" , stdopentracing .ChildOf (span .Context ()))
6784 usrs , err := s .GetUsers (req .ID )
85+ userspan .Finish ()
6886 if req .ID == "" {
6987 return EmbedStruct {usersResponse {Users : usrs }}, err
7088 }
@@ -78,7 +96,9 @@ func MakeUserGetEndpoint(s Service) endpoint.Endpoint {
7896 return users.User {}, err
7997 }
8098 user := usrs [0 ]
99+ attrspan := stdopentracing .StartSpan ("attributes from db" , stdopentracing .ChildOf (span .Context ()))
81100 db .GetUserAttributes (& user )
101+ attrspan .Finish ()
82102 if req .Attr == "addresses" {
83103 return EmbedStruct {addressesResponse {Addresses : user .Addresses }}, err
84104 }
@@ -92,6 +112,10 @@ func MakeUserGetEndpoint(s Service) endpoint.Endpoint {
92112// MakeUserPostEndpoint returns an endpoint via the given service.
93113func MakeUserPostEndpoint (s Service ) endpoint.Endpoint {
94114 return func (ctx context.Context , request interface {}) (response interface {}, err error ) {
115+ var span stdopentracing.Span
116+ span , ctx = stdopentracing .StartSpanFromContext (ctx , "post user" )
117+ span .SetTag ("service" , "user" )
118+ defer span .Finish ()
95119 req := request .(users.User )
96120 id , err := s .PostUser (req )
97121 return postResponse {ID : id }, err
@@ -101,8 +125,14 @@ func MakeUserPostEndpoint(s Service) endpoint.Endpoint {
101125// MakeAddressGetEndpoint returns an endpoint via the given service.
102126func MakeAddressGetEndpoint (s Service ) endpoint.Endpoint {
103127 return func (ctx context.Context , request interface {}) (response interface {}, err error ) {
128+ var span stdopentracing.Span
129+ span , ctx = stdopentracing .StartSpanFromContext (ctx , "get users" )
130+ span .SetTag ("service" , "user" )
131+ defer span .Finish ()
104132 req := request .(GetRequest )
133+ addrspan := stdopentracing .StartSpan ("addresses from db" , stdopentracing .ChildOf (span .Context ()))
105134 adds , err := s .GetAddresses (req .ID )
135+ addrspan .Finish ()
106136 if req .ID == "" {
107137 return EmbedStruct {addressesResponse {Addresses : adds }}, err
108138 }
@@ -116,6 +146,10 @@ func MakeAddressGetEndpoint(s Service) endpoint.Endpoint {
116146// MakeAddressPostEndpoint returns an endpoint via the given service.
117147func MakeAddressPostEndpoint (s Service ) endpoint.Endpoint {
118148 return func (ctx context.Context , request interface {}) (response interface {}, err error ) {
149+ var span stdopentracing.Span
150+ span , ctx = stdopentracing .StartSpanFromContext (ctx , "post address" )
151+ span .SetTag ("service" , "user" )
152+ defer span .Finish ()
119153 req := request .(addressPostRequest )
120154 id , err := s .PostAddress (req .Address , req .UserID )
121155 return postResponse {ID : id }, err
@@ -125,8 +159,14 @@ func MakeAddressPostEndpoint(s Service) endpoint.Endpoint {
125159// MakeUserGetEndpoint returns an endpoint via the given service.
126160func MakeCardGetEndpoint (s Service ) endpoint.Endpoint {
127161 return func (ctx context.Context , request interface {}) (response interface {}, err error ) {
162+ var span stdopentracing.Span
163+ span , ctx = stdopentracing .StartSpanFromContext (ctx , "get cards" )
164+ span .SetTag ("service" , "user" )
165+ defer span .Finish ()
128166 req := request .(GetRequest )
167+ cardspan := stdopentracing .StartSpan ("addresses from db" , stdopentracing .ChildOf (span .Context ()))
129168 cards , err := s .GetCards (req .ID )
169+ cardspan .Finish ()
130170 if req .ID == "" {
131171 return EmbedStruct {cardsResponse {Cards : cards }}, err
132172 }
@@ -140,6 +180,10 @@ func MakeCardGetEndpoint(s Service) endpoint.Endpoint {
140180// MakeCardPostEndpoint returns an endpoint via the given service.
141181func MakeCardPostEndpoint (s Service ) endpoint.Endpoint {
142182 return func (ctx context.Context , request interface {}) (response interface {}, err error ) {
183+ var span stdopentracing.Span
184+ span , ctx = stdopentracing .StartSpanFromContext (ctx , "post card" )
185+ span .SetTag ("service" , "user" )
186+ defer span .Finish ()
143187 req := request .(cardPostRequest )
144188 id , err := s .PostCard (req .Card , req .UserID )
145189 return postResponse {ID : id }, err
@@ -149,6 +193,10 @@ func MakeCardPostEndpoint(s Service) endpoint.Endpoint {
149193// MakeLoginEndpoint returns an endpoint via the given service.
150194func MakeDeleteEndpoint (s Service ) endpoint.Endpoint {
151195 return func (ctx context.Context , request interface {}) (response interface {}, err error ) {
196+ var span stdopentracing.Span
197+ span , ctx = stdopentracing .StartSpanFromContext (ctx , "delete entity" )
198+ span .SetTag ("service" , "user" )
199+ defer span .Finish ()
152200 req := request .(deleteRequest )
153201 err = s .Delete (req .Entity , req .ID )
154202 if err == nil {
@@ -161,6 +209,10 @@ func MakeDeleteEndpoint(s Service) endpoint.Endpoint {
161209// MakeHealthEndpoint returns current health of the given service.
162210func MakeHealthEndpoint (s Service ) endpoint.Endpoint {
163211 return func (ctx context.Context , request interface {}) (response interface {}, err error ) {
212+ var span stdopentracing.Span
213+ span , ctx = stdopentracing .StartSpanFromContext (ctx , "health check" )
214+ span .SetTag ("service" , "user" )
215+ defer span .Finish ()
164216 health := s .Health ()
165217 return healthResponse {Health : health }, nil
166218 }
0 commit comments