@@ -2,35 +2,45 @@ package main
22
33import (
44 "context"
5- "log"
65 "sync"
7- "time"
86
97 "github.com/go-redis/redis/extra/redisotel/v8"
108 "github.com/go-redis/redis/v8"
119 "go.opentelemetry.io/otel"
10+ "go.opentelemetry.io/otel/codes"
1211 "go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
1312 sdktrace "go.opentelemetry.io/otel/sdk/trace"
1413)
1514
15+ var tracer = otel .Tracer ("redisexample" )
16+
1617func main () {
1718 ctx := context .Background ()
1819
19- stop := runExporter (ctx )
20- defer stop (ctx )
20+ stop := configureOpentelemetry (ctx )
21+ defer stop ()
2122
2223 rdb := redis .NewClient (& redis.Options {
2324 Addr : ":6379" ,
2425 })
25-
2626 rdb .AddHook (redisotel.TracingHook {})
2727
28- tracer := otel . Tracer ( "Example tracer " )
29- ctx , span := tracer . Start ( ctx , "start-test-span" )
28+ ctx , span := tracer . Start ( ctx , "handleRequest " )
29+ defer span . End ( )
3030
31- rdb .Set (ctx , "First value" , "value_1" , 0 )
31+ if err := handleRequest (ctx ); err != nil {
32+ span .RecordError (err )
33+ span .SetStatus (codes .Error , err .Error ())
34+ }
35+ }
3236
33- rdb .Set (ctx , "Second value" , "value_2" , 0 )
37+ func handleRequest (ctx context.Context ) error {
38+ if err := rdb .Set (ctx , "First value" , "value_1" , 0 ).Err (); err != nil {
39+ return err
40+ }
41+ if err := rdb .Set (ctx , "Second value" , "value_2" , 0 ).Err (); err != nil {
42+ return err
43+ }
3444
3545 var group sync.WaitGroup
3646
@@ -40,35 +50,38 @@ func main() {
4050 defer group .Done ()
4151 val := rdb .Get (ctx , "Second value" ).Val ()
4252 if val != "value_2" {
43- log . Fatalf ( "val was not set. expected: %s but got: %s" , "value_2" , val )
53+ panic ( err )
4454 }
4555 }()
4656 }
57+
4758 group .Wait ()
4859
49- rdb .Del (ctx , "First value" )
50- rdb .Del (ctx , "Second value" )
60+ if err := rdb .Del (ctx , "First value" ).Err (); err != nil {
61+ return err
62+ }
63+ if err := rdb .Del (ctx , "Second value" ).Err (); err != nil {
64+ return err
65+ }
5166
52- // Wait some time to allow spans to export
53- <- time .After (5 * time .Second )
54- span .End ()
67+ return nil
5568}
5669
57- func runExporter (ctx context.Context ) func (context. Context ) {
70+ func configureOpentelemetry (ctx context.Context ) func () {
5871 provider := sdktrace .NewTracerProvider ()
5972 otel .SetTracerProvider (provider )
6073
6174 exp , err := stdouttrace .New (stdouttrace .WithPrettyPrint ())
6275 if err != nil {
63- log . Fatal (err )
76+ panic (err )
6477 }
6578
6679 bsp := sdktrace .NewBatchSpanProcessor (exp )
6780 provider .RegisterSpanProcessor (bsp )
6881
6982 return func (ctx context.Context ) {
7083 if err := provider .Shutdown (ctx ); err != nil {
71- log . Printf ( "Shutdown failed: %s" , err )
84+ panic ( err )
7285 }
7386 }
7487}
0 commit comments