github.com/matiasanaya/gqlgen@v0.6.0/example/dataloader/server/server.go (about) 1 package main 2 3 import ( 4 "log" 5 "net/http" 6 "net/url" 7 "time" 8 9 "github.com/99designs/gqlgen/example/dataloader" 10 "github.com/99designs/gqlgen/handler" 11 gqlopentracing "github.com/99designs/gqlgen/opentracing" 12 "github.com/go-chi/chi" 13 "github.com/opentracing-contrib/go-stdlib/nethttp" 14 "github.com/opentracing/opentracing-go" 15 "sourcegraph.com/sourcegraph/appdash" 16 appdashtracer "sourcegraph.com/sourcegraph/appdash/opentracing" 17 "sourcegraph.com/sourcegraph/appdash/traceapp" 18 ) 19 20 func main() { 21 tracer := startAppdashServer() 22 23 router := chi.NewRouter() 24 router.Use(Opentracing(tracer)) 25 router.Use(dataloader.LoaderMiddleware) 26 27 router.Handle("/", handler.Playground("Dataloader", "/query")) 28 router.Handle("/query", handler.GraphQL( 29 dataloader.NewExecutableSchema(dataloader.Config{Resolvers: &dataloader.Resolver{}}), 30 handler.ResolverMiddleware(gqlopentracing.ResolverMiddleware()), 31 handler.RequestMiddleware(gqlopentracing.RequestMiddleware()), 32 )) 33 34 log.Println("connect to http://localhost:8082/ for graphql playground") 35 log.Fatal(http.ListenAndServe(":8082", router)) 36 } 37 38 func Opentracing(tracer opentracing.Tracer) func(next http.Handler) http.Handler { 39 return func(next http.Handler) http.Handler { 40 return nethttp.Middleware(tracer, next) 41 } 42 } 43 44 func startAppdashServer() opentracing.Tracer { 45 memStore := appdash.NewMemoryStore() 46 store := &appdash.RecentStore{ 47 MinEvictAge: 5 * time.Minute, 48 DeleteStore: memStore, 49 } 50 51 url, err := url.Parse("http://localhost:8700") 52 if err != nil { 53 log.Fatal(err) 54 } 55 tapp, err := traceapp.New(nil, url) 56 if err != nil { 57 log.Fatal(err) 58 } 59 tapp.Store = store 60 tapp.Queryer = memStore 61 62 go func() { 63 log.Fatal(http.ListenAndServe(":8700", tapp)) 64 }() 65 tapp.Store = store 66 tapp.Queryer = memStore 67 68 collector := appdash.NewLocalCollector(store) 69 tracer := appdashtracer.NewTracer(collector) 70 opentracing.InitGlobalTracer(tracer) 71 72 log.Println("Appdash web UI running on HTTP :8700") 73 return tracer 74 }