@@ -12,7 +12,9 @@ import (
1212
1313 "github.com/prometheus/client_golang/prometheus"
1414 "github.com/prometheus/client_golang/prometheus/promhttp"
15+ "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
1516 "go.opentelemetry.io/otel"
17+ "go.opentelemetry.io/otel/attribute"
1618 "go.opentelemetry.io/otel/codes"
1719 "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
1820 sdktrace "go.opentelemetry.io/otel/sdk/trace"
@@ -71,23 +73,24 @@ func main() {
7173 }
7274
7375 mux := http .NewServeMux ()
74- mux .HandleFunc ("GET /rolldice" , func (w http.ResponseWriter , r * http.Request ) {
75- var span trace.Span
76- ctx , span := tracer .Start (r .Context (), "rolldice" )
77- defer span .End ()
76+
77+ const path = "GET /rolldice"
78+ mux .Handle (path , otelhttp .NewMiddleware (path )(http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
7879 player := "Anonymous player"
7980 if p := r .URL .Query ().Get ("player" ); p != "" {
8081 player = p
8182 }
83+
84+ trace .SpanFromContext (r .Context ()).AddEvent ("determine player" , trace .WithAttributes (attribute .String ("player.name" , player )))
8285 max := 8
8386 if fmt .Sprintf ("%x" , sha256 .Sum256 ([]byte (player ))) == "f4b7c19317c929d2a34297d6229defe5262fa556ef654b600fc98f02c6d87fdc" {
8487 max = 8
8588 } else {
8689 max = 6
8790 }
88- result := doRoll (ctx , max )
89- causeDelay (ctx , rateDelay )
90- if err := causeError (ctx , rateError ); err != nil {
91+ result := doRoll (r . Context () , max )
92+ causeDelay (r . Context () , rateDelay )
93+ if err := causeError (r . Context () , rateError ); err != nil {
9194 w .WriteHeader (http .StatusInternalServerError )
9295 return
9396 }
@@ -98,7 +101,8 @@ func main() {
98101 w .WriteHeader (http .StatusInternalServerError )
99102 }
100103
101- })
104+ })))
105+
102106 mux .HandleFunc ("GET /metrics" , promhttp .Handler ().ServeHTTP )
103107 srv := & http.Server {
104108 Addr : "0.0.0.0:5165" ,
@@ -111,14 +115,13 @@ func main() {
111115}
112116
113117func causeError (ctx context.Context , rate int ) error {
114- var span trace.Span
115- _ , span = tracer .Start (ctx , "causeError" )
118+ _ , span := tracer .Start (ctx , "causeError" )
116119 defer span .End ()
117120
118121 randomNumber := rand .Intn (100 )
119- span .AddEvent (fmt . Sprintf ( "random nr: %d " , randomNumber ))
122+ span .AddEvent ("roll" , trace . WithAttributes ( attribute . Int ( "number " , randomNumber ) ))
120123 if randomNumber < rate {
121- err := fmt .Errorf ("internal server error" )
124+ err := fmt .Errorf ("number(%d)) < rate(%d)" , randomNumber , rate )
122125 span .RecordError (err )
123126 span .SetStatus (codes .Error , "some error occured" )
124127 return err
@@ -127,11 +130,10 @@ func causeError(ctx context.Context, rate int) error {
127130}
128131
129132func causeDelay (ctx context.Context , rate int ) {
130- var span trace.Span
131- _ , span = tracer .Start (ctx , "causeDelay" )
133+ _ , span := tracer .Start (ctx , "causeDelay" )
132134 defer span .End ()
133135 randomNumber := rand .Intn (100 )
134- span .AddEvent (fmt . Sprintf ( "random nr: %d " , randomNumber ))
136+ span .AddEvent ("roll" , trace . WithAttributes ( attribute . Int ( "number " , randomNumber ) ))
135137 if randomNumber < rate {
136138 time .Sleep (time .Duration (2 + rand .Intn (3 )) * time .Second )
137139 }
0 commit comments