@@ -12,68 +12,72 @@ import (
1212 " context"
1313 " strings"
1414
15- exp " go.opencensus.io/examples/exporter "
16- " github.com/nicksrandall/dataloader "
15+ " github.com/graph-gophers/dataloader/v7 "
16+ exp " go.opencensus.io/examples/exporter "
1717 " go.opencensus.io/trace"
1818)
1919
20+ type User struct {
21+ ID string
22+ }
23+
2024// OpenCensusTracer Tracer implements a tracer that can be used with the Open Tracing standard.
2125type OpenCensusTracer struct {}
2226
2327// TraceLoad will trace a call to dataloader.LoadMany with Open Tracing
24- func (OpenCensusTracer ) TraceLoad (ctx context .Context , key dataloader . Key ) (context .Context , dataloader .TraceLoadFinishFunc ) {
28+ func (OpenCensusTracer ) TraceLoad (ctx context .Context , key string ) (context .Context , dataloader .TraceLoadFinishFunc [* User ] ) {
2529 cCtx , cSpan := trace.StartSpan (ctx, " Dataloader: load" )
2630 cSpan.AddAttributes (
27- trace.StringAttribute (" dataloader.key" , key. String () ),
31+ trace.StringAttribute (" dataloader.key" , key),
2832 )
29- return cCtx, func (thunk dataloader.Thunk ) {
33+ return cCtx, func (thunk dataloader.Thunk [*User] ) {
3034 // TODO: is there anything we should do with the results?
3135 cSpan.End ()
3236 }
3337}
3438
3539// TraceLoadMany will trace a call to dataloader.LoadMany with Open Tracing
36- func (OpenCensusTracer ) TraceLoadMany (ctx context .Context , keys dataloader . Keys ) (context .Context , dataloader .TraceLoadManyFinishFunc ) {
40+ func (OpenCensusTracer ) TraceLoadMany (ctx context .Context , keys [] string ) (context .Context , dataloader .TraceLoadManyFinishFunc [* User ] ) {
3741 cCtx , cSpan := trace.StartSpan (ctx, " Dataloader: loadmany" )
3842 cSpan.AddAttributes (
39- trace.StringAttribute (" dataloader.keys" , strings.Join (keys. Keys () , " ," )),
43+ trace.StringAttribute (" dataloader.keys" , strings.Join (keys, " ," )),
4044 )
41- return cCtx, func (thunk dataloader.ThunkMany ) {
45+ return cCtx, func (thunk dataloader.ThunkMany [*User] ) {
4246 // TODO: is there anything we should do with the results?
4347 cSpan.End ()
4448 }
4549}
4650
4751// TraceBatch will trace a call to dataloader.LoadMany with Open Tracing
48- func (OpenCensusTracer ) TraceBatch (ctx context .Context , keys dataloader . Keys ) (context .Context , dataloader .TraceBatchFinishFunc ) {
52+ func (OpenCensusTracer ) TraceBatch (ctx context .Context , keys [] string ) (context .Context , dataloader .TraceBatchFinishFunc [* User ] ) {
4953 cCtx , cSpan := trace.StartSpan (ctx, " Dataloader: batch" )
5054 cSpan.AddAttributes (
51- trace.StringAttribute (" dataloader.keys" , strings.Join (keys. Keys () , " ," )),
55+ trace.StringAttribute (" dataloader.keys" , strings.Join (keys, " ," )),
5256 )
53- return cCtx, func (results []*dataloader.Result ) {
57+ return cCtx, func (results []*dataloader.Result [*User] ) {
5458 // TODO: is there anything we should do with the results?
5559 cSpan.End ()
5660 }
5761}
5862
59- func batchFunc (ctx context .Context , keys dataloader . Keys ) []*dataloader .Result {
60- // ...loader logic goes here
63+ func batchFunc (ctx context .Context , keys [] string ) []*dataloader .Result [* User ] {
64+ // ...loader logic goes here
6165}
6266
63- func main (){
64- // initialize an example exporter that just logs to the console
65- trace.ApplyConfig (trace.Config {
67+ func main () {
68+ // initialize an example exporter that just logs to the console
69+ trace.ApplyConfig (trace.Config {
6670 DefaultSampler: trace.AlwaysSample (),
6771 })
68- trace.RegisterExporter (&exp.PrintExporter {})
69- // initialize the dataloader with your new tracer backend
70- loader := dataloader.NewBatchedLoader (batchFunc, dataloader.WithTracer (OpenCensusTracer{}))
71- // initialize a context since it's not receiving one from anywhere else.
72- ctx , span := trace.StartSpan (context.TODO (), " Span Name" )
73- defer span.End ()
74- // request from the dataloader as usual
75- value , err := loader.Load (ctx, dataloader. StringKey ( SomeID) )()
76- // ...
72+ trace.RegisterExporter (&exp.PrintExporter {})
73+ // initialize the dataloader with your new tracer backend
74+ loader := dataloader.NewBatchedLoader (batchFunc, dataloader.WithTracer [ string , *User] (OpenCensusTracer{}))
75+ // initialize a context since it's not receiving one from anywhere else.
76+ ctx , span := trace.StartSpan (context.TODO (), " Span Name" )
77+ defer span.End ()
78+ // request from the dataloader as usual
79+ value , err := loader.Load (ctx, SomeID)()
80+ // ...
7781}
7882```
7983
0 commit comments