Merged in HipsterShop master

This commit is contained in:
asamanta 2019-07-09 15:52:45 -04:00
commit e0fd3088d5
11 changed files with 75 additions and 64 deletions

View file

@ -272,6 +272,7 @@ resources.
- [Day 3 Keynote](https://youtu.be/JQPOPV_VH5w?t=815) showing Stackdriver - [Day 3 Keynote](https://youtu.be/JQPOPV_VH5w?t=815) showing Stackdriver
APM (Tracing, Code Search, Profiler, Google Cloud Build) APM (Tracing, Code Search, Profiler, Google Cloud Build)
- [Introduction to Service Management with Istio](https://www.youtube.com/watch?v=wCJrdKdD6UM&feature=youtu.be&t=586) - [Introduction to Service Management with Istio](https://www.youtube.com/watch?v=wCJrdKdD6UM&feature=youtu.be&t=586)
- [KubeCon EU 2019 - Reinventing Networking: A Deep Dive into Istio's Multicluster Gateways - Steve Dake, Independent](https://youtu.be/-t2BfT59zJA?t=982)
--- ---

View file

@ -1 +1 @@
{"builds":[{"imageName":"gcr.io/lesser-weevil/emailservice","tag":"gcr.io/lesser-weevil/emailservice:v0.1.0-50-g60a1fc4@sha256:b5642298862ce0852e6038cf029ed75df6a08530c3ca9b86cd2ad4b50d5cff00"},{"imageName":"gcr.io/lesser-weevil/productcatalogservice","tag":"gcr.io/lesser-weevil/productcatalogservice:v0.1.0-50-g60a1fc4@sha256:74288be0207731ee0f846273da3486638777cf8d4077bddd45e0aeac75bb3559"},{"imageName":"gcr.io/lesser-weevil/recommendationservice","tag":"gcr.io/lesser-weevil/recommendationservice:v0.1.0-50-g60a1fc4-dirty@sha256:761fcf9065618d1edf9739c5a99e0b85e85a00ea79831d9cd14ceef281bfcb96"},{"imageName":"gcr.io/lesser-weevil/shippingservice","tag":"gcr.io/lesser-weevil/shippingservice:v0.1.0-50-g60a1fc4@sha256:6625a1e45b63c32585248a51d32b1b5137c16c7fb0f622ee9efbd08ef0cfed42"},{"imageName":"gcr.io/lesser-weevil/checkoutservice","tag":"gcr.io/lesser-weevil/checkoutservice:v0.1.0-50-g60a1fc4@sha256:cab8d517f524609837c7c70d357d7ba4aeb836dc417414d726079ed811928804"},{"imageName":"gcr.io/lesser-weevil/paymentservice","tag":"gcr.io/lesser-weevil/paymentservice:v0.1.0-50-g60a1fc4@sha256:1d65c32c95fbf5fe7348e8d4975bf15a305279f78264f342734afc3d1273a7cb"},{"imageName":"gcr.io/lesser-weevil/currencyservice","tag":"gcr.io/lesser-weevil/currencyservice:v0.1.0-50-g60a1fc4@sha256:dcbf4a09a2b7961ad00496c70ebb33b125d40b3a2c28e92dc18e44ad15ff9139"},{"imageName":"gcr.io/lesser-weevil/cartservice","tag":"gcr.io/lesser-weevil/cartservice:v0.1.0-50-g60a1fc4@sha256:2d6b7b6422669a0850f3743c734d300cbcf247fe850127ea99f695e831e32374"},{"imageName":"gcr.io/lesser-weevil/frontend","tag":"gcr.io/lesser-weevil/frontend:v0.1.0-50-g60a1fc4@sha256:119a11554f457f3a4df05672de4f51050f305fba67482b242543ec6fb4ed1f05"},{"imageName":"gcr.io/lesser-weevil/loadgenerator","tag":"gcr.io/lesser-weevil/loadgenerator:v0.1.0-50-g60a1fc4@sha256:de90c5ce3bef7e118183a82b6a5de5f994045727b66462c2bffd4f57749f40c1"},{"imageName":"gcr.io/lesser-weevil/adservice","tag":"gcr.io/lesser-weevil/adservice:v0.1.0-50-g60a1fc4@sha256:39a383bafca249864cd67a8eac66e67a19dc107b46566d7e16501c4f15ee0935"},{"imageName":"gcr.io/lesser-weevil/pingjob","tag":"gcr.io/lesser-weevil/pingjob:v0.1.0-50-g60a1fc4-dirty@sha256:708fc0f27f2c950c9f5a3478c1b7d4d32b82165f5b323acca9b53abba8409ca5"}]} {"builds":[{"imageName":"gcr.io/lesser-weevil/emailservice","tag":"gcr.io/lesser-weevil/emailservice:v0.1.0-53-g334f50b@sha256:b5642298862ce0852e6038cf029ed75df6a08530c3ca9b86cd2ad4b50d5cff00"},{"imageName":"gcr.io/lesser-weevil/productcatalogservice","tag":"gcr.io/lesser-weevil/productcatalogservice:v0.1.0-53-g334f50b@sha256:74288be0207731ee0f846273da3486638777cf8d4077bddd45e0aeac75bb3559"},{"imageName":"gcr.io/lesser-weevil/recommendationservice","tag":"gcr.io/lesser-weevil/recommendationservice:v0.1.0-53-g334f50b-dirty@sha256:761fcf9065618d1edf9739c5a99e0b85e85a00ea79831d9cd14ceef281bfcb96"},{"imageName":"gcr.io/lesser-weevil/shippingservice","tag":"gcr.io/lesser-weevil/shippingservice:v0.1.0-53-g334f50b@sha256:6625a1e45b63c32585248a51d32b1b5137c16c7fb0f622ee9efbd08ef0cfed42"},{"imageName":"gcr.io/lesser-weevil/checkoutservice","tag":"gcr.io/lesser-weevil/checkoutservice:v0.1.0-53-g334f50b@sha256:cab8d517f524609837c7c70d357d7ba4aeb836dc417414d726079ed811928804"},{"imageName":"gcr.io/lesser-weevil/paymentservice","tag":"gcr.io/lesser-weevil/paymentservice:v0.1.0-53-g334f50b@sha256:1d65c32c95fbf5fe7348e8d4975bf15a305279f78264f342734afc3d1273a7cb"},{"imageName":"gcr.io/lesser-weevil/currencyservice","tag":"gcr.io/lesser-weevil/currencyservice:v0.1.0-53-g334f50b@sha256:dcbf4a09a2b7961ad00496c70ebb33b125d40b3a2c28e92dc18e44ad15ff9139"},{"imageName":"gcr.io/lesser-weevil/cartservice","tag":"gcr.io/lesser-weevil/cartservice:v0.1.0-53-g334f50b@sha256:2d6b7b6422669a0850f3743c734d300cbcf247fe850127ea99f695e831e32374"},{"imageName":"gcr.io/lesser-weevil/frontend","tag":"gcr.io/lesser-weevil/frontend:v0.1.0-53-g334f50b@sha256:119a11554f457f3a4df05672de4f51050f305fba67482b242543ec6fb4ed1f05"},{"imageName":"gcr.io/lesser-weevil/loadgenerator","tag":"gcr.io/lesser-weevil/loadgenerator:v0.1.0-53-g334f50b@sha256:de90c5ce3bef7e118183a82b6a5de5f994045727b66462c2bffd4f57749f40c1"},{"imageName":"gcr.io/lesser-weevil/adservice","tag":"gcr.io/lesser-weevil/adservice:v0.1.0-53-g334f50b@sha256:39a383bafca249864cd67a8eac66e67a19dc107b46566d7e16501c4f15ee0935"},{"imageName":"gcr.io/lesser-weevil/pingjob","tag":"gcr.io/lesser-weevil/pingjob:v0.1.0-53-g334f50b-dirty@sha256:e55b195ae794a48ec045ee4652dc5feb40166c99edb58f78b7e4e59e572979af"}]}

View file

@ -48,21 +48,6 @@ spec:
number: 80 number: 80
--- ---
apiVersion: networking.istio.io/v1alpha3 apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: currency-provider-external
spec:
hosts:
- www.ecb.europa.eu
ports:
- number: 80
name: http
protocol: HTTP
- number: 443
name: https
protocol: HTTPS
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService kind: VirtualService
metadata: metadata:
name: frontend name: frontend

View file

@ -32,9 +32,12 @@ spec:
terminationGracePeriodSeconds: 5 terminationGracePeriodSeconds: 5
containers: containers:
- name: server - name: server
image: gcr.io/google-samples/microservices-demo/emailservice:v0.1.0 image: gcr.io/google-samples/microservices-demo/emailservice:v0.1.1
ports: ports:
- containerPort: 8080 - containerPort: 8080
env:
- name: PORT
value: "8080"
readinessProbe: readinessProbe:
periodSeconds: 5 periodSeconds: 5
exec: exec:
@ -43,6 +46,9 @@ spec:
periodSeconds: 5 periodSeconds: 5
exec: exec:
command: ["/bin/grpc_health_probe", "-addr=:8080"] command: ["/bin/grpc_health_probe", "-addr=:8080"]
env:
- name: ENABLE_PROFILER
value: "0"
resources: resources:
requests: requests:
cpu: 100m cpu: 100m
@ -79,7 +85,7 @@ spec:
spec: spec:
containers: containers:
- name: server - name: server
image: gcr.io/google-samples/microservices-demo/checkoutservice:v0.1.0 image: gcr.io/google-samples/microservices-demo/checkoutservice:v0.1.1
ports: ports:
- containerPort: 5050 - containerPort: 5050
readinessProbe: readinessProbe:
@ -89,6 +95,8 @@ spec:
exec: exec:
command: ["/bin/grpc_health_probe", "-addr=:5050"] command: ["/bin/grpc_health_probe", "-addr=:5050"]
env: env:
- name: PORT
value: "5050"
- name: PRODUCT_CATALOG_SERVICE_ADDR - name: PRODUCT_CATALOG_SERVICE_ADDR
value: "productcatalogservice:3550" value: "productcatalogservice:3550"
- name: SHIPPING_SERVICE_ADDR - name: SHIPPING_SERVICE_ADDR
@ -140,7 +148,7 @@ spec:
terminationGracePeriodSeconds: 5 terminationGracePeriodSeconds: 5
containers: containers:
- name: server - name: server
image: gcr.io/google-samples/microservices-demo/recommendationservice:v0.1.0 image: gcr.io/google-samples/microservices-demo/recommendationservice:v0.1.1
ports: ports:
- containerPort: 8080 - containerPort: 8080
readinessProbe: readinessProbe:
@ -152,8 +160,12 @@ spec:
exec: exec:
command: ["/bin/grpc_health_probe", "-addr=:8080"] command: ["/bin/grpc_health_probe", "-addr=:8080"]
env: env:
- name: PORT
value: "8080"
- name: PRODUCT_CATALOG_SERVICE_ADDR - name: PRODUCT_CATALOG_SERVICE_ADDR
value: "productcatalogservice:3550" value: "productcatalogservice:3550"
- name: ENABLE_PROFILER
value: "0"
resources: resources:
requests: requests:
cpu: 100m cpu: 100m
@ -190,7 +202,7 @@ spec:
spec: spec:
containers: containers:
- name: server - name: server
image: gcr.io/google-samples/microservices-demo/frontend:v0.1.0 image: gcr.io/google-samples/microservices-demo/frontend:v0.1.1
ports: ports:
- containerPort: 8080 - containerPort: 8080
readinessProbe: readinessProbe:
@ -210,6 +222,8 @@ spec:
- name: "Cookie" - name: "Cookie"
value: "shop_session-id=x-liveness-probe" value: "shop_session-id=x-liveness-probe"
env: env:
- name: PORT
value: "8080"
- name: PRODUCT_CATALOG_SERVICE_ADDR - name: PRODUCT_CATALOG_SERVICE_ADDR
value: "productcatalogservice:3550" value: "productcatalogservice:3550"
- name: CURRENCY_SERVICE_ADDR - name: CURRENCY_SERVICE_ADDR
@ -276,9 +290,12 @@ spec:
terminationGracePeriodSeconds: 5 terminationGracePeriodSeconds: 5
containers: containers:
- name: server - name: server
image: gcr.io/google-samples/microservices-demo/paymentservice:v0.1.0 image: gcr.io/google-samples/microservices-demo/paymentservice:v0.1.1
ports: ports:
- containerPort: 50051 - containerPort: 50051
env:
- name: PORT
value: "50051"
readinessProbe: readinessProbe:
exec: exec:
command: ["/bin/grpc_health_probe", "-addr=:50051"] command: ["/bin/grpc_health_probe", "-addr=:50051"]
@ -322,9 +339,12 @@ spec:
terminationGracePeriodSeconds: 5 terminationGracePeriodSeconds: 5
containers: containers:
- name: server - name: server
image: gcr.io/google-samples/microservices-demo/productcatalogservice:v0.1.0 image: gcr.io/google-samples/microservices-demo/productcatalogservice:v0.1.1
ports: ports:
- containerPort: 3550 - containerPort: 3550
env:
- name: PORT
value: "3550"
readinessProbe: readinessProbe:
exec: exec:
command: ["/bin/grpc_health_probe", "-addr=:3550"] command: ["/bin/grpc_health_probe", "-addr=:3550"]
@ -371,7 +391,7 @@ spec:
terminationGracePeriodSeconds: 5 terminationGracePeriodSeconds: 5
containers: containers:
- name: server - name: server
image: gcr.io/google-samples/microservices-demo/cartservice:v0.1.0 image: gcr.io/google-samples/microservices-demo/cartservice:v0.1.1
ports: ports:
- containerPort: 7070 - containerPort: 7070
env: env:
@ -440,7 +460,7 @@ spec:
value: "frontend:80" value: "frontend:80"
containers: containers:
- name: main - name: main
image: gcr.io/google-samples/microservices-demo/loadgenerator:v0.1.0 image: gcr.io/google-samples/microservices-demo/loadgenerator:v0.1.1
env: env:
- name: FRONTEND_ADDR - name: FRONTEND_ADDR
value: "frontend:80" value: "frontend:80"
@ -470,10 +490,13 @@ spec:
terminationGracePeriodSeconds: 5 terminationGracePeriodSeconds: 5
containers: containers:
- name: server - name: server
image: gcr.io/google-samples/microservices-demo/currencyservice:v0.1.0 image: gcr.io/google-samples/microservices-demo/currencyservice:v0.1.1
ports: ports:
- name: grpc - name: grpc
containerPort: 7000 containerPort: 7000
env:
- name: PORT
value: "7000"
readinessProbe: readinessProbe:
exec: exec:
command: ["/bin/grpc_health_probe", "-addr=:7000"] command: ["/bin/grpc_health_probe", "-addr=:7000"]
@ -516,9 +539,12 @@ spec:
spec: spec:
containers: containers:
- name: server - name: server
image: gcr.io/google-samples/microservices-demo/shippingservice:v0.1.0 image: gcr.io/google-samples/microservices-demo/shippingservice:v0.1.1
ports: ports:
- containerPort: 50051 - containerPort: 50051
env:
- name: PORT
value: "50051"
readinessProbe: readinessProbe:
periodSeconds: 5 periodSeconds: 5
exec: exec:
@ -619,7 +645,7 @@ spec:
terminationGracePeriodSeconds: 5 terminationGracePeriodSeconds: 5
containers: containers:
- name: server - name: server
image: gcr.io/google-samples/microservices-demo/adservice:v0.1.0 image: gcr.io/google-samples/microservices-demo/adservice:v0.1.1
ports: ports:
- containerPort: 9555 - containerPort: 9555
env: env:

View file

@ -214,7 +214,7 @@ public final class AdService {
} }
private static void initStackdriver() { private static void initStackdriver() {
logger.info("Initialize StackDriver"); logger.info("Initialize Stackdriver");
long sleepTime = 10; /* seconds */ long sleepTime = 10; /* seconds */
int maxAttempts = 5; int maxAttempts = 5;
@ -252,7 +252,7 @@ public final class AdService {
} }
} }
} }
logger.info("StackDriver initialization complete."); logger.info("Stackdriver initialization complete.");
} }
private static void initJaeger() { private static void initJaeger() {

View file

@ -131,7 +131,7 @@ func initStats(exporter *stackdriver.Exporter) {
} }
} }
func initStackDriverTracing() { func initStackdriverTracing() {
// TODO(ahmetb) this method is duplicated in other microservices using Go // TODO(ahmetb) this method is duplicated in other microservices using Go
// since they are not sharing packages. // since they are not sharing packages.
for i := 1; i <= 3; i++ { for i := 1; i <= 3; i++ {
@ -140,22 +140,22 @@ func initStackDriverTracing() {
log.Infof("failed to initialize stackdriver exporter: %+v", err) log.Infof("failed to initialize stackdriver exporter: %+v", err)
} else { } else {
trace.RegisterExporter(exporter) trace.RegisterExporter(exporter)
log.Info("registered stackdriver tracing") log.Info("registered Stackdriver tracing")
// Register the views to collect server stats. // Register the views to collect server stats.
initStats(exporter) initStats(exporter)
return return
} }
d := time.Second * 10 * time.Duration(i) d := time.Second * 10 * time.Duration(i)
log.Infof("sleeping %v to retry initializing stackdriver exporter", d) log.Infof("sleeping %v to retry initializing Stackdriver exporter", d)
time.Sleep(d) time.Sleep(d)
} }
log.Warn("could not initialize stackdriver exporter after retrying, giving up") log.Warn("could not initialize Stackdriver exporter after retrying, giving up")
} }
func initTracing() { func initTracing() {
initJaegerTracing() initJaegerTracing()
initStackDriverTracing() initStackdriverTracing()
} }
func initProfiling(service, version string) { func initProfiling(service, version string) {
@ -170,14 +170,14 @@ func initProfiling(service, version string) {
}); err != nil { }); err != nil {
log.Warnf("failed to start profiler: %+v", err) log.Warnf("failed to start profiler: %+v", err)
} else { } else {
log.Info("started stackdriver profiler") log.Info("started Stackdriver profiler")
return return
} }
d := time.Second * 10 * time.Duration(i) d := time.Second * 10 * time.Duration(i)
log.Infof("sleeping %v to retry initializing stackdriver profiler", d) log.Infof("sleeping %v to retry initializing Stackdriver profiler", d)
time.Sleep(d) time.Sleep(d)
} }
log.Warn("could not initialize stackdriver profiler after retrying, giving up") log.Warn("could not initialize Stackdriver profiler after retrying, giving up")
} }
func mustMapEnv(target *string, envKey string) { func mustMapEnv(target *string, envKey string) {

View file

@ -46,7 +46,7 @@ const request = {
}; };
function _moneyToString (m) { function _moneyToString (m) {
return `${m.units}.${leftPad(m.nanos, 9, '0')} ${m.currency_code}`; return `${m.units}.${m.nanos.toString().padStart(9, '0')} ${m.currency_code}`;
} }
client.getSupportedCurrencies({}, (err, response) => { client.getSupportedCurrencies({}, (err, response) => {

View file

@ -16,7 +16,6 @@
"async": "^1.5.2", "async": "^1.5.2",
"google-protobuf": "^3.0.0", "google-protobuf": "^3.0.0",
"grpc": "^1.0.0", "grpc": "^1.0.0",
"left-pad": "^1.3.0",
"pino": "^5.6.2", "pino": "^5.6.2",
"request": "^2.87.0", "request": "^2.87.0",
"xml2js": "^0.4.19" "xml2js": "^0.4.19"

View file

@ -191,20 +191,20 @@ func initStackdriverTracing(log logrus.FieldLogger) {
// log.Warnf is used since there are multiple backends (stackdriver & jaeger) // log.Warnf is used since there are multiple backends (stackdriver & jaeger)
// to store the traces. In production setup most likely you would use only one backend. // to store the traces. In production setup most likely you would use only one backend.
// In that case you should use log.Fatalf. // In that case you should use log.Fatalf.
log.Warnf("failed to initialize stackdriver exporter: %+v", err) log.Warnf("failed to initialize Stackdriver exporter: %+v", err)
} else { } else {
trace.RegisterExporter(exporter) trace.RegisterExporter(exporter)
log.Info("registered stackdriver tracing") log.Info("registered Stackdriver tracing")
// Register the views to collect server stats. // Register the views to collect server stats.
initStats(log, exporter) initStats(log, exporter)
return return
} }
d := time.Second * 20 * time.Duration(i) d := time.Second * 20 * time.Duration(i)
log.Debugf("sleeping %v to retry initializing stackdriver exporter", d) log.Debugf("sleeping %v to retry initializing Stackdriver exporter", d)
time.Sleep(d) time.Sleep(d)
} }
log.Warn("could not initialize stackdriver exporter after retrying, giving up") log.Warn("could not initialize Stackdriver exporter after retrying, giving up")
} }
func initTracing(log logrus.FieldLogger) { func initTracing(log logrus.FieldLogger) {
@ -232,14 +232,14 @@ func initProfiling(log logrus.FieldLogger, service, version string) {
}); err != nil { }); err != nil {
log.Warnf("warn: failed to start profiler: %+v", err) log.Warnf("warn: failed to start profiler: %+v", err)
} else { } else {
log.Info("started stackdriver profiler") log.Info("started Stackdriver profiler")
return return
} }
d := time.Second * 10 * time.Duration(i) d := time.Second * 10 * time.Duration(i)
log.Debugf("sleeping %v to retry initializing stackdriver profiler", d) log.Debugf("sleeping %v to retry initializing Stackdriver profiler", d)
time.Sleep(d) time.Sleep(d)
} }
log.Warn("warning: could not initialize stackdriver profiler after retrying, giving up") log.Warn("warning: could not initialize Stackdriver profiler after retrying, giving up")
} }
func mustMapEnv(target *string, envKey string) { func mustMapEnv(target *string, envKey string) {

View file

@ -158,32 +158,32 @@ func initStats(exporter *stackdriver.Exporter) {
} }
} }
func initStackDriverTracing() { func initStackdriverTracing() {
// TODO(ahmetb) this method is duplicated in other microservices using Go // TODO(ahmetb) this method is duplicated in other microservices using Go
// since they are not sharing packages. // since they are not sharing packages.
for i := 1; i <= 3; i++ { for i := 1; i <= 3; i++ {
exporter, err := stackdriver.NewExporter(stackdriver.Options{}) exporter, err := stackdriver.NewExporter(stackdriver.Options{})
if err != nil { if err != nil {
log.Warnf("failed to initialize stackdriver exporter: %+v", err) log.Warnf("failed to initialize Stackdriver exporter: %+v", err)
} else { } else {
trace.RegisterExporter(exporter) trace.RegisterExporter(exporter)
trace.ApplyConfig(trace.Config{DefaultSampler: trace.AlwaysSample()}) trace.ApplyConfig(trace.Config{DefaultSampler: trace.AlwaysSample()})
log.Info("registered stackdriver tracing") log.Info("registered Stackdriver tracing")
// Register the views to collect server stats. // Register the views to collect server stats.
initStats(exporter) initStats(exporter)
return return
} }
d := time.Second * 10 * time.Duration(i) d := time.Second * 10 * time.Duration(i)
log.Infof("sleeping %v to retry initializing stackdriver exporter", d) log.Infof("sleeping %v to retry initializing Stackdriver exporter", d)
time.Sleep(d) time.Sleep(d)
} }
log.Warn("could not initialize stackdriver exporter after retrying, giving up") log.Warn("could not initialize Stackdriver exporter after retrying, giving up")
} }
func initTracing() { func initTracing() {
initJaegerTracing() initJaegerTracing()
initStackDriverTracing() initStackdriverTracing()
} }
func initProfiling(service, version string) { func initProfiling(service, version string) {
@ -198,14 +198,14 @@ func initProfiling(service, version string) {
}); err != nil { }); err != nil {
log.Warnf("failed to start profiler: %+v", err) log.Warnf("failed to start profiler: %+v", err)
} else { } else {
log.Info("started stackdriver profiler") log.Info("started Stackdriver profiler")
return return
} }
d := time.Second * 10 * time.Duration(i) d := time.Second * 10 * time.Duration(i)
log.Infof("sleeping %v to retry initializing stackdriver profiler", d) log.Infof("sleeping %v to retry initializing Stackdriver profiler", d)
time.Sleep(d) time.Sleep(d)
} }
log.Warn("could not initialize stackdriver profiler after retrying, giving up") log.Warn("could not initialize Stackdriver profiler after retrying, giving up")
} }
type productCatalog struct{} type productCatalog struct{}

View file

@ -161,32 +161,32 @@ func initStats(exporter *stackdriver.Exporter) {
} }
} }
func initStackDriverTracing() { func initStackdriverTracing() {
// TODO(ahmetb) this method is duplicated in other microservices using Go // TODO(ahmetb) this method is duplicated in other microservices using Go
// since they are not sharing packages. // since they are not sharing packages.
for i := 1; i <= 3; i++ { for i := 1; i <= 3; i++ {
exporter, err := stackdriver.NewExporter(stackdriver.Options{}) exporter, err := stackdriver.NewExporter(stackdriver.Options{})
if err != nil { if err != nil {
log.Warnf("failed to initialize stackdriver exporter: %+v", err) log.Warnf("failed to initialize Stackdriver exporter: %+v", err)
} else { } else {
trace.RegisterExporter(exporter) trace.RegisterExporter(exporter)
trace.ApplyConfig(trace.Config{DefaultSampler: trace.AlwaysSample()}) trace.ApplyConfig(trace.Config{DefaultSampler: trace.AlwaysSample()})
log.Info("registered stackdriver tracing") log.Info("registered Stackdriver tracing")
// Register the views to collect server stats. // Register the views to collect server stats.
initStats(exporter) initStats(exporter)
return return
} }
d := time.Second * 10 * time.Duration(i) d := time.Second * 10 * time.Duration(i)
log.Infof("sleeping %v to retry initializing stackdriver exporter", d) log.Infof("sleeping %v to retry initializing Stackdriver exporter", d)
time.Sleep(d) time.Sleep(d)
} }
log.Warn("could not initialize stackdriver exporter after retrying, giving up") log.Warn("could not initialize Stackdriver exporter after retrying, giving up")
} }
func initTracing() { func initTracing() {
initJaegerTracing() initJaegerTracing()
initStackDriverTracing() initStackdriverTracing()
} }
func initProfiling(service, version string) { func initProfiling(service, version string) {
@ -201,12 +201,12 @@ func initProfiling(service, version string) {
}); err != nil { }); err != nil {
log.Warnf("failed to start profiler: %+v", err) log.Warnf("failed to start profiler: %+v", err)
} else { } else {
log.Info("started stackdriver profiler") log.Info("started Stackdriver profiler")
return return
} }
d := time.Second * 10 * time.Duration(i) d := time.Second * 10 * time.Duration(i)
log.Infof("sleeping %v to retry initializing stackdriver profiler", d) log.Infof("sleeping %v to retry initializing Stackdriver profiler", d)
time.Sleep(d) time.Sleep(d)
} }
log.Warn("could not initialize stackdriver profiler after retrying, giving up") log.Warn("could not initialize Stackdriver profiler after retrying, giving up")
} }