add opencensus option for go services

This commit is contained in:
Megan O'Keefe 2020-02-15 16:47:59 -05:00
parent 595bd21d38
commit 8bc3a86b97
6 changed files with 216 additions and 11 deletions

17
src/adservice/.project Normal file
View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>adservice</name>
<comment>Project adservice created by Buildship.</comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
</natures>
</projectDescription>

View file

@ -0,0 +1,2 @@
connection.project.dir=
eclipse.preferences.version=1

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}