|  | // Package tracing consolidates the setup logic for using opencensus tracing and exporting the | 
|  | // metrics to https://cloud.google.com/trace. In order to authenticate to the correct API, any | 
|  | // service account that uses this package must have the Cloud Trace Agent Role in gcp. | 
|  | package tracing | 
|  |  | 
|  | import ( | 
|  | "time" | 
|  |  | 
|  | "contrib.go.opencensus.io/exporter/stackdriver" | 
|  | "go.opencensus.io/trace" | 
|  | "go.skia.org/infra/go/skerr" | 
|  | ) | 
|  |  | 
|  | // Initialize sets up trace options and exporting for this application. It will sample the given | 
|  | // proportion of traces. All traces will have the given key-value pairs attached. | 
|  | func Initialize(traceSampleProportion float64, projectID string, defaultAttrs map[string]interface{}) error { | 
|  | exporter, err := stackdriver.NewExporter(stackdriver.Options{ | 
|  | ProjectID: projectID, | 
|  | // Use 10 times the default | 
|  | TraceSpansBufferMaxBytes: 80_000_000, | 
|  | // It is not clear what the default interval is. One minute seems to be a good value since | 
|  | // that is the same as our Prometheus metrics are reported. | 
|  | ReportingInterval:      time.Minute, | 
|  | DefaultTraceAttributes: defaultAttrs, | 
|  | }) | 
|  | if err != nil { | 
|  | return skerr.Wrap(err) | 
|  | } | 
|  |  | 
|  | trace.RegisterExporter(exporter) | 
|  | sampler := trace.ProbabilitySampler(traceSampleProportion) | 
|  | trace.ApplyConfig(trace.Config{DefaultSampler: sampler}) | 
|  | return nil | 
|  | } |