From 8bc3a86b973d953eb504c17df182123d80f9fb87 Mon Sep 17 00:00:00 2001 From: Megan O'Keefe Date: Sat, 15 Feb 2020 16:47:59 -0500 Subject: [PATCH] add opencensus option for go services --- src/adservice/.project | 17 ++++++ .../org.eclipse.buildship.core.prefs | 2 + src/checkoutservice/main.go | 55 +++++++++++++++++- src/frontend/main.go | 41 ++++++++++++- src/productcatalogservice/server.go | 57 ++++++++++++++++++- src/shippingservice/main.go | 55 +++++++++++++++++- 6 files changed, 216 insertions(+), 11 deletions(-) create mode 100644 src/adservice/.project create mode 100644 src/adservice/.settings/org.eclipse.buildship.core.prefs diff --git a/src/adservice/.project b/src/adservice/.project new file mode 100644 index 0000000..de481f2 --- /dev/null +++ b/src/adservice/.project @@ -0,0 +1,17 @@ + + + adservice + Project adservice created by Buildship. + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + org.eclipse.buildship.core.gradleprojectnature + + diff --git a/src/adservice/.settings/org.eclipse.buildship.core.prefs b/src/adservice/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..e889521 --- /dev/null +++ b/src/adservice/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,2 @@ +connection.project.dir= +eclipse.preferences.version=1 diff --git a/src/checkoutservice/main.go b/src/checkoutservice/main.go index 8ba4b8b..e02866e 100644 --- a/src/checkoutservice/main.go +++ b/src/checkoutservice/main.go @@ -19,6 +19,7 @@ import ( "fmt" "net" "os" + "strconv" "time" "cloud.google.com/go/profiler" @@ -69,8 +70,30 @@ type checkoutService struct { } func main() { - go initTracing() - go initProfiling("checkoutservice", "1.0.0") + ocStats, err := getenvBool("OC_STATS") + if err != nil { + log.Error(err) + } + ocStats = false + + ocTrace, err := getenvBool("OC_TRACE") + if err != nil { + log.Error(err) + } + ocTrace = false + + ocProfiling, err := getenvBool("OC_PROFILING") + if err != nil { + log.Error(err) + } + ocProfiling = false + + if ocTrace == true { + go initTracing() + } + if ocProfiling == true { + go initProfiling("checkoutservice", "1.0.0") + } port := listenPort if os.Getenv("PORT") != "" { @@ -91,7 +114,13 @@ func main() { if err != nil { log.Fatal(err) } - srv := grpc.NewServer(grpc.StatsHandler(&ocgrpc.ServerHandler{})) + + var srv *grpc.Server + if ocStats == true { + srv = grpc.NewServer(grpc.StatsHandler(&ocgrpc.ServerHandler{})) + } else { + srv = grpc.NewServer() + } pb.RegisterCheckoutServiceServer(srv, svc) healthpb.RegisterHealthServer(srv, svc) log.Infof("starting to listen on tcp: %q", lis.Addr().String()) @@ -409,3 +438,23 @@ func (cs *checkoutService) shipOrder(ctx context.Context, address *pb.Address, i } // TODO: Dial and create client once, reuse. + +func getenvBool(key string) (bool, error) { + s, err := getenvStr(key) + if err != nil { + return false, err + } + v, err := strconv.ParseBool(s) + if err != nil { + return false, err + } + return v, nil +} + +func getenvStr(key string) (string, error) { + v := os.Getenv(key) + if v == "" { + return v, fmt.Errorf("empty var") + } + return v, nil +} diff --git a/src/frontend/main.go b/src/frontend/main.go index 5ba9577..429da9a 100644 --- a/src/frontend/main.go +++ b/src/frontend/main.go @@ -19,6 +19,7 @@ import ( "fmt" "net/http" "os" + "strconv" "time" "cloud.google.com/go/profiler" @@ -94,8 +95,24 @@ func main() { } log.Out = os.Stdout - go initProfiling(log, "frontend", "1.0.0") - go initTracing(log) + ocTrace, err := getenvBool("OC_TRACE") + if err != nil { + log.Error(err) + } + ocTrace = false + + ocProfiling, err := getenvBool("OC_PROFILING") + if err != nil { + log.Error(err) + } + ocProfiling = false + + if ocTrace == true { + go initTracing(log) + } + if ocProfiling == true { + go initProfiling(log, "frontend", "1.0.0") + } srvPort := port if os.Getenv("PORT") != "" { @@ -260,3 +277,23 @@ func mustConnGRPC(ctx context.Context, conn **grpc.ClientConn, addr string) { panic(errors.Wrapf(err, "grpc: failed to connect %s", addr)) } } + +func getenvBool(key string) (bool, error) { + s, err := getenvStr(key) + if err != nil { + return false, err + } + v, err := strconv.ParseBool(s) + if err != nil { + return false, err + } + return v, nil +} + +func getenvStr(key string) (string, error) { + v := os.Getenv(key) + if v == "" { + return v, fmt.Errorf("empty var") + } + return v, nil +} diff --git a/src/productcatalogservice/server.go b/src/productcatalogservice/server.go index ab39d70..3a41e0f 100644 --- a/src/productcatalogservice/server.go +++ b/src/productcatalogservice/server.go @@ -74,8 +74,32 @@ func init() { } func main() { - go initTracing() - go initProfiling("productcatalogservice", "1.0.0") + var err error + ocStats, err = getenvBool("OC_STATS") + if err != nil { + log.Error(err) + } + ocStats = false + + ocTrace, err := getenvBool("OC_TRACE") + if err != nil { + log.Error(err) + } + ocTrace = false + + ocProfiling, err := getenvBool("OC_PROFILING") + if err != nil { + log.Error(err) + } + ocProfiling = false + + if ocTrace == true { + go initTracing() + } + if ocProfiling == true { + go initProfiling("productcatalogservice", "1.0.0") + } + flag.Parse() // set injected latency @@ -119,8 +143,15 @@ func run(port string) string { if err != nil { log.Fatal(err) } - srv := grpc.NewServer(grpc.StatsHandler(&ocgrpc.ServerHandler{})) + var srv *grpc.Server + if ocStats == true { + srv = grpc.NewServer(grpc.StatsHandler(&ocgrpc.ServerHandler{})) + } else { + srv = grpc.NewServer() + } + svc := &productCatalog{} + pb.RegisterProductCatalogServiceServer(srv, svc) healthpb.RegisterHealthServer(srv, svc) go srv.Serve(l) @@ -275,3 +306,23 @@ func (p *productCatalog) SearchProducts(ctx context.Context, req *pb.SearchProdu } return &pb.SearchProductsResponse{Results: ps}, nil } + +func getenvBool(key string) (bool, error) { + s, err := getenvStr(key) + if err != nil { + return false, err + } + v, err := strconv.ParseBool(s) + if err != nil { + return false, err + } + return v, nil +} + +func getenvStr(key string) (string, error) { + v := os.Getenv(key) + if v == "" { + return v, fmt.Errorf("empty var") + } + return v, nil +} diff --git a/src/shippingservice/main.go b/src/shippingservice/main.go index 29a93d5..0440229 100644 --- a/src/shippingservice/main.go +++ b/src/shippingservice/main.go @@ -18,6 +18,7 @@ import ( "fmt" "net" "os" + "strconv" "time" "cloud.google.com/go/profiler" @@ -58,8 +59,30 @@ func init() { } func main() { - go initTracing() - go initProfiling("shippingservice", "1.0.0") + ocStats, err := getenvBool("OC_STATS") + if err != nil { + log.Error(err) + } + ocStats = false + + ocTrace, err := getenvBool("OC_TRACE") + if err != nil { + log.Error(err) + } + ocTrace = false + + ocProfiling, err := getenvBool("OC_PROFILING") + if err != nil { + log.Error(err) + } + ocProfiling = false + + if ocTrace == true { + go initTracing() + } + if ocProfiling == true { + go initProfiling("shippingservice", "1.0.0") + } port := defaultPort if value, ok := os.LookupEnv("PORT"); ok { @@ -71,7 +94,13 @@ func main() { if err != nil { log.Fatalf("failed to listen: %v", err) } - srv := grpc.NewServer(grpc.StatsHandler(&ocgrpc.ServerHandler{})) + + var srv *grpc.Server + if ocStats == true { + srv = grpc.NewServer(grpc.StatsHandler(&ocgrpc.ServerHandler{})) + } else { + srv = grpc.NewServer() + } svc := &server{} pb.RegisterShippingServiceServer(srv, svc) healthpb.RegisterHealthServer(srv, svc) @@ -216,3 +245,23 @@ func initProfiling(service, version string) { } log.Warn("could not initialize Stackdriver profiler after retrying, giving up") } + +func getenvBool(key string) (bool, error) { + s, err := getenvStr(key) + if err != nil { + return false, err + } + v, err := strconv.ParseBool(s) + if err != nil { + return false, err + } + return v, nil +} + +func getenvStr(key string) (string, error) { + v := os.Getenv(key) + if v == "" { + return v, fmt.Errorf("empty var") + } + return v, nil +}