From 2de4e5af7b7dd5a699ffd2b8f4c00f2414494a79 Mon Sep 17 00:00:00 2001 From: Brian Goff Date: Wed, 31 Oct 2018 14:26:32 -0700 Subject: [PATCH] Add ocagent exporter ocagent allows users to send traces out of VK to a "standard" external forwarder (standard as in this is a format/protocol defined in the opencensus project). This allows uers to implement metrics for whatever backend they want without having to add it into VK directly. --- census_ocagent.go | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 census_ocagent.go diff --git a/census_ocagent.go b/census_ocagent.go new file mode 100644 index 0000000..6ad1558 --- /dev/null +++ b/census_ocagent.go @@ -0,0 +1,37 @@ +// +build !no_ocagent_exporter + +package cmd + +import ( + "os" + + "contrib.go.opencensus.io/exporter/ocagent" + "github.com/cpuguy83/strongerrors" + "github.com/pkg/errors" + "go.opencensus.io/trace" +) + +func init() { + RegisterTracingExporter("ocagent", NewOCAgentExporter) +} + +// NewOCAgentExporter creates a new opencensus tracing exporter using the opencensus agent forwarder. +func NewOCAgentExporter(opts TracingExporterOptions) (trace.Exporter, error) { + agentOpts := append([]ocagent.ExporterOption{}, ocagent.WithServiceName(opts.ServiceName)) + + if endpoint := os.Getenv("OCAGENT_ENDPOINT"); endpoint != "" { + agentOpts = append(agentOpts, ocagent.WithAddress(endpoint)) + } else { + return nil, strongerrors.InvalidArgument(errors.New("must set endpoint address in OCAGENT_ENDPOINT")) + } + + switch os.Getenv("OCAGENT_INSECURE") { + case "0", "no", "n", "off", "": + case "1", "yes", "y", "on": + agentOpts = append(agentOpts, ocagent.WithInsecure()) + default: + return nil, strongerrors.InvalidArgument(errors.New("invalid value for OCAGENT_INSECURE")) + } + + return ocagent.NewExporter(agentOpts...) +}