@@ -16,11 +16,13 @@ package opencensusexporter
1616
1717import (
1818 "context"
19+ "errors"
1920 "fmt"
2021 "sync/atomic"
2122
2223 "contrib.go.opencensus.io/exporter/ocagent"
2324 "github.com/spf13/viper"
25+ "google.golang.org/grpc/credentials"
2426
2527 agenttracepb "github.com/census-instrumentation/opencensus-proto/gen-go/agent/trace/v1"
2628 "github.com/census-instrumentation/opencensus-service/data"
@@ -34,8 +36,10 @@ type opencensusConfig struct {
3436 Endpoint string `mapstructure:"endpoint,omitempty"`
3537 Compression string `mapstructure:"compression,omitempty"`
3638 Headers map [string ]string `mapstructure:"headers,omitempty"`
39+ NumWorkers int `mapstructure:"num-workers,omitempty"`
40+ CertPemFile string `mapstructure:"cert-pem-file,omitempty"`
41+
3742 // TODO: add insecure, service name options.
38- NumWorkers int `mapstructure:"num-workers,omitempty"`
3943}
4044
4145type ocagentExporter struct {
@@ -47,6 +51,15 @@ const (
4751 defaultNumWorkers int = 2
4852)
4953
54+ var (
55+ // ErrEndpointRequired indicates that this exporter was not provided with an endpoint in its config.
56+ ErrEndpointRequired = errors .New ("OpenCensus exporter config requires an Endpoint" )
57+ // ErrUnsupportedCompressionType indicates that this exporter was provided with a compression protocol it does not support.
58+ ErrUnsupportedCompressionType = errors .New ("OpenCensus exporter unsupported compression type" )
59+ // ErrUnableToGetTLSCreds indicates that this exporter could not read the provided TLS credentials.
60+ ErrUnableToGetTLSCreds = errors .New ("OpenCensus exporter unable to read TLS credentials" )
61+ )
62+
5063var _ processor.TraceDataProcessor = (* ocagentExporter )(nil )
5164
5265// OpenCensusTraceExportersFromViper unmarshals the viper and returns an processor.TraceDataProcessor targeting
@@ -64,16 +77,25 @@ func OpenCensusTraceExportersFromViper(v *viper.Viper) (tdps []processor.TraceDa
6477 }
6578
6679 if ocac .Endpoint == "" {
67- return nil , nil , nil , fmt . Errorf ( "openCensus config requires an Endpoint" )
80+ return nil , nil , nil , ErrEndpointRequired
6881 }
6982
70- opts := []ocagent.ExporterOption {ocagent .WithAddress (ocac .Endpoint ), ocagent . WithInsecure () }
83+ opts := []ocagent.ExporterOption {ocagent .WithAddress (ocac .Endpoint )}
7184 if ocac .Compression != "" {
7285 if compressionKey := grpc .GetGRPCCompressionKey (ocac .Compression ); compressionKey != compression .Unsupported {
7386 opts = append (opts , ocagent .UseCompressor (compressionKey ))
7487 } else {
75- return nil , nil , nil , fmt .Errorf ("unsupported compression type: %s" , ocac .Compression )
88+ return nil , nil , nil , ErrUnsupportedCompressionType
89+ }
90+ }
91+ if ocac .CertPemFile != "" {
92+ creds , err := credentials .NewClientTLSFromFile (ocac .CertPemFile , "" )
93+ if err != nil {
94+ return nil , nil , nil , ErrUnableToGetTLSCreds
7695 }
96+ opts = append (opts , ocagent .WithTLSCredentials (creds ))
97+ } else {
98+ opts = append (opts , ocagent .WithInsecure ())
7799 }
78100 if len (ocac .Headers ) > 0 {
79101 opts = append (opts , ocagent .WithHeaders (ocac .Headers ))
0 commit comments