Source File
stackdriver.go
Belonging Package
contrib.go.opencensus.io/exporter/stackdriver
package stackdriver // import "contrib.go.opencensus.io/exporter/stackdriver"
import (
metadataapi
traceapi
opencensus
monitoredrespb
commonpb
metricspb
resourcepb
)
GetMetricDisplayName func(view *view.View) string
GetMetricType func(view *view.View) string
GetMetricPrefix func(name string) string
DefaultTraceAttributes map[string]interface{}
ResourceByDescriptor func(*metricdata.Descriptor, map[string]string) (map[string]string, monitoredresource.Interface)
UserAgent string
}
const defaultTimeout = 5 * time.Second
var defaultDomain = path.Join("custom.googleapis.com", "opencensus")
var defaultUserAgent = fmt.Sprintf("opencensus-go %s; stackdriver-exporter %s", opencensus.Version(), version)
type Exporter struct {
traceExporter *traceExporter
statsExporter *statsExporter
}
func ( Options) (*Exporter, error) {
if .ProjectID == "" {
:= .Context
if == nil {
= context.Background()
}
, := google.FindDefaultCredentials(, traceapi.DefaultAuthScopes()...)
if != nil {
return nil, fmt.Errorf("stackdriver: %v", )
}
if .ProjectID == "" {
return nil, errors.New("stackdriver: no project found with application default credentials")
}
.ProjectID = .ProjectID
}
if .Location == "" {
if metadataapi.OnGCE() {
, := metadataapi.Zone()
= fmt.Errorf("setting Stackdriver default location failed: %s", )
if .OnError != nil {
.OnError()
} else {
log.Print()
}
} else {
.Location =
}
}
}
if .MonitoredResource != nil {
.Resource = convertMonitoredResourceToPB(.MonitoredResource)
}
if .MapResource == nil {
.MapResource = DefaultMapResource
}
if .Labels == nil {
.Labels = make(map[string]string)
}
.Labels[stackdriverProjectID] = .ProjectID
.Labels[resourcekeys.CloudKeyZone] = .Location
.Labels[stackdriverGenericTaskNamespace] = "default"
.Labels[stackdriverGenericTaskJob] = path.Base(os.Args[0])
.Labels[stackdriverGenericTaskID] = getTaskValue()
log.Printf("OpenCensus detected resource: %v", )
.Resource = .MapResource()
log.Printf("OpenCensus using monitored resource: %v", .Resource)
}
if .MetricPrefix != "" && !strings.HasSuffix(.MetricPrefix, "/") {
.MetricPrefix = .MetricPrefix + "/"
}
if .UserAgent == "" {
.UserAgent = defaultUserAgent
}
, := newStatsExporter()
if != nil {
return nil,
}
, := newTraceExporter()
if != nil {
return nil,
}
return &Exporter{
statsExporter: ,
traceExporter: ,
}, nil
}
func ( *Exporter) ( *view.Data) {
.statsExporter.ExportView()
}
func ( *Exporter) ( context.Context, *commonpb.Node, *resourcepb.Resource, []*metricspb.Metric) error {
, := .statsExporter.PushMetricsProto(, , , )
return
}
func ( *Exporter) ( context.Context, *commonpb.Node, *resourcepb.Resource, []*metricspb.Metric) (int, error) {
return .statsExporter.PushMetricsProto(, , , )
}
func ( *Exporter) ( context.Context, []*metricdata.Metric) error {
return .statsExporter.ExportMetrics(, )
}
func ( *Exporter) () error {
return .statsExporter.startMetricsReader()
}
func ( *Exporter) () {
.statsExporter.stopMetricsReader()
}
func ( *Exporter) ( *trace.SpanData) {
if len(.traceExporter.o.DefaultTraceAttributes) > 0 {
= .sdWithDefaultTraceAttributes()
}
.traceExporter.ExportSpan()
}
func ( *Exporter) ( context.Context, *commonpb.Node, *resourcepb.Resource, []*trace.SpanData) (int, error) {
return .traceExporter.pushTraceSpans(, , , )
}
func ( *Exporter) ( *trace.SpanData) *trace.SpanData {
:= *
.Attributes = make(map[string]interface{})
for , := range .traceExporter.o.DefaultTraceAttributes {
.Attributes[] =
}
for , := range .Attributes {
.Attributes[] =
}
return &
}
func ( *Exporter) () {
.statsExporter.Flush()
.traceExporter.Flush()
}
func ( Options) ( error) {
if .OnError != nil {
.OnError()
return
}
log.Printf("Failed to export to Stackdriver: %v", )
}
func ( context.Context, time.Duration) (context.Context, func()) {
if == nil {
= context.Background()
}
if <= 0 {
= defaultTimeout
}
return context.WithTimeout(, )
}
func ( monitoredresource.Interface) *monitoredrespb.MonitoredResource {
:= new(monitoredrespb.MonitoredResource)
var map[string]string
.Type, = .MonitoredResource()
.Labels = make(map[string]string)
for , := range {
.Labels[] =
}
return
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |