@@ -2,35 +2,46 @@ package main
22
33import (
44 "context"
5- "log"
65 "sync"
7- "time"
86
9- "github.com/go-redis/redis/extra/redisotel/v8"
10- "github.com/go-redis/redis/v8"
117 "go.opentelemetry.io/otel"
8+ "go.opentelemetry.io/otel/codes"
129 "go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
1310 sdktrace "go.opentelemetry.io/otel/sdk/trace"
11+
12+ "github.com/go-redis/redis/extra/redisotel/v8"
13+ "github.com/go-redis/redis/v8"
1414)
1515
16+ var tracer = otel .Tracer ("redisexample" )
17+
1618func main () {
1719 ctx := context .Background ()
1820
19- stop := runExporter (ctx )
20- defer stop (ctx )
21+ stop := configureOpentelemetry (ctx )
22+ defer stop ()
2123
2224 rdb := redis .NewClient (& redis.Options {
2325 Addr : ":6379" ,
2426 })
25-
2627 rdb .AddHook (redisotel.TracingHook {})
2728
28- tracer := otel . Tracer ( "Example tracer " )
29- ctx , span := tracer . Start ( ctx , "start-test-span" )
29+ ctx , span := tracer . Start ( ctx , "handleRequest " )
30+ defer span . End ( )
3031
31- rdb .Set (ctx , "First value" , "value_1" , 0 )
32+ if err := handleRequest (ctx ); err != nil {
33+ span .RecordError (err )
34+ span .SetStatus (codes .Error , err .Error ())
35+ }
36+ }
3237
33- rdb .Set (ctx , "Second value" , "value_2" , 0 )
38+ func handleRequest (ctx context.Context ) error {
39+ if err := rdb .Set (ctx , "First value" , "value_1" , 0 ).Err (); err != nil {
40+ return err
41+ }
42+ if err := rdb .Set (ctx , "Second value" , "value_2" , 0 ).Err (); err != nil {
43+ return err
44+ }
3445
3546 var group sync.WaitGroup
3647
@@ -40,35 +51,38 @@ func main() {
4051 defer group .Done ()
4152 val := rdb .Get (ctx , "Second value" ).Val ()
4253 if val != "value_2" {
43- log . Fatalf ( "val was not set. expected: %s but got: %s" , "value_2" , val )
54+ panic ( err )
4455 }
4556 }()
4657 }
58+
4759 group .Wait ()
4860
49- rdb .Del (ctx , "First value" )
50- rdb .Del (ctx , "Second value" )
61+ if err := rdb .Del (ctx , "First value" ).Err (); err != nil {
62+ return err
63+ }
64+ if err := rdb .Del (ctx , "Second value" ).Err (); err != nil {
65+ return err
66+ }
5167
52- // Wait some time to allow spans to export
53- <- time .After (5 * time .Second )
54- span .End ()
68+ return nil
5569}
5670
57- func runExporter (ctx context.Context ) func (context. Context ) {
71+ func configureOpentelemetry (ctx context.Context ) func () {
5872 provider := sdktrace .NewTracerProvider ()
5973 otel .SetTracerProvider (provider )
6074
6175 exp , err := stdouttrace .New (stdouttrace .WithPrettyPrint ())
6276 if err != nil {
63- log . Fatal (err )
77+ panic (err )
6478 }
6579
6680 bsp := sdktrace .NewBatchSpanProcessor (exp )
6781 provider .RegisterSpanProcessor (bsp )
6882
6983 return func (ctx context.Context ) {
7084 if err := provider .Shutdown (ctx ); err != nil {
71- log . Printf ( "Shutdown failed: %s" , err )
85+ panic ( err )
7286 }
7387 }
7488}
0 commit comments