@@ -2,35 +2,45 @@ package main
2
2
3
3
import (
4
4
"context"
5
- "log"
6
5
"sync"
7
- "time"
8
6
9
7
"github.com/go-redis/redis/extra/redisotel/v8"
10
8
"github.com/go-redis/redis/v8"
11
9
"go.opentelemetry.io/otel"
10
+ "go.opentelemetry.io/otel/codes"
12
11
"go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
13
12
sdktrace "go.opentelemetry.io/otel/sdk/trace"
14
13
)
15
14
15
+ var tracer = otel .Tracer ("redisexample" )
16
+
16
17
func main () {
17
18
ctx := context .Background ()
18
19
19
- stop := runExporter (ctx )
20
- defer stop (ctx )
20
+ stop := configureOpentelemetry (ctx )
21
+ defer stop ()
21
22
22
23
rdb := redis .NewClient (& redis.Options {
23
24
Addr : ":6379" ,
24
25
})
25
-
26
26
rdb .AddHook (redisotel.TracingHook {})
27
27
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 ( )
30
30
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
+ }
32
36
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
+ }
34
44
35
45
var group sync.WaitGroup
36
46
@@ -40,35 +50,38 @@ func main() {
40
50
defer group .Done ()
41
51
val := rdb .Get (ctx , "Second value" ).Val ()
42
52
if val != "value_2" {
43
- log . Fatalf ( "val was not set. expected: %s but got: %s" , "value_2" , val )
53
+ panic ( err )
44
54
}
45
55
}()
46
56
}
57
+
47
58
group .Wait ()
48
59
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
+ }
51
66
52
- // Wait some time to allow spans to export
53
- <- time .After (5 * time .Second )
54
- span .End ()
67
+ return nil
55
68
}
56
69
57
- func runExporter (ctx context.Context ) func (context. Context ) {
70
+ func configureOpentelemetry (ctx context.Context ) func () {
58
71
provider := sdktrace .NewTracerProvider ()
59
72
otel .SetTracerProvider (provider )
60
73
61
74
exp , err := stdouttrace .New (stdouttrace .WithPrettyPrint ())
62
75
if err != nil {
63
- log . Fatal (err )
76
+ panic (err )
64
77
}
65
78
66
79
bsp := sdktrace .NewBatchSpanProcessor (exp )
67
80
provider .RegisterSpanProcessor (bsp )
68
81
69
82
return func (ctx context.Context ) {
70
83
if err := provider .Shutdown (ctx ); err != nil {
71
- log . Printf ( "Shutdown failed: %s" , err )
84
+ panic ( err )
72
85
}
73
86
}
74
87
}
0 commit comments