You've already forked opentelemetry-go
							
							
				mirror of
				https://github.com/open-telemetry/opentelemetry-go.git
				synced 2025-10-31 00:07:40 +02:00 
			
		
		
		
	revent end-users from implementing some interfaces (#1575)
"otel/exporters/otlp/otlphttp".Option "otel/exporters/stdout".Option "otel/oteltest".Option "otel/trace".TracerOption "otel/trace".SpanOption "otel/trace".EventOption "otel/trace".LifeCycleOption "otel/trace".InstrumentationOption "otel/sdk/resource".Option "otel/sdk/trace".ParentBasedSamplerOption "otel/sdk/trace".ReadOnlySpan "otel/sdk/trace".ReadWriteSpan Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
This commit is contained in:
		
							
								
								
									
										15
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -24,6 +24,21 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm | ||||
| - Renamed the `otel/label` package to `otel/attribute`. (#1541) | ||||
| - Vendor the Jaeger exporter's dependency on Apache Thrift. (#1551) | ||||
| - Stagger timestamps in exact aggregator tests. (#1569) | ||||
| - Prevent end-users from implementing some interfaces (#1575) | ||||
| ``` | ||||
|       "otel/exporters/otlp/otlphttp".Option | ||||
|       "otel/exporters/stdout".Option | ||||
|       "otel/oteltest".Option | ||||
|       "otel/trace".TracerOption | ||||
|       "otel/trace".SpanOption | ||||
|       "otel/trace".EventOption | ||||
|       "otel/trace".LifeCycleOption | ||||
|       "otel/trace".InstrumentationOption | ||||
|       "otel/sdk/resource".Option | ||||
|       "otel/sdk/trace".ParentBasedSamplerOption | ||||
|       "otel/sdk/trace".ReadOnlySpan | ||||
|       "otel/sdk/trace".ReadWriteSpan | ||||
| ``` | ||||
|  | ||||
| ### Removed | ||||
|  | ||||
|   | ||||
| @@ -63,6 +63,11 @@ type config struct { | ||||
| // Option applies an option to the HTTP driver. | ||||
| type Option interface { | ||||
| 	Apply(*config) | ||||
|  | ||||
| 	// A private method to prevent users implementing the | ||||
| 	// interface and so future additions to it will not | ||||
| 	// violate compatibility. | ||||
| 	private() | ||||
| } | ||||
|  | ||||
| type endpointOption string | ||||
| @@ -71,6 +76,8 @@ func (o endpointOption) Apply(cfg *config) { | ||||
| 	cfg.endpoint = (string)(o) | ||||
| } | ||||
|  | ||||
| func (endpointOption) private() {} | ||||
|  | ||||
| // WithEndpoint allows one to set the address of the collector | ||||
| // endpoint that the driver will use to send metrics and spans. If | ||||
| // unset, it will instead try to use | ||||
| @@ -86,6 +93,8 @@ func (o compressionOption) Apply(cfg *config) { | ||||
| 	cfg.compression = (Compression)(o) | ||||
| } | ||||
|  | ||||
| func (compressionOption) private() {} | ||||
|  | ||||
| // WithCompression tells the driver to compress the sent data. | ||||
| func WithCompression(compression Compression) Option { | ||||
| 	return (compressionOption)(compression) | ||||
| @@ -97,6 +106,8 @@ func (o tracesURLPathOption) Apply(cfg *config) { | ||||
| 	cfg.tracesURLPath = (string)(o) | ||||
| } | ||||
|  | ||||
| func (tracesURLPathOption) private() {} | ||||
|  | ||||
| // WithTracesURLPath allows one to override the default URL path used | ||||
| // for sending traces. If unset, DefaultTracesPath will be used. | ||||
| func WithTracesURLPath(urlPath string) Option { | ||||
| @@ -109,6 +120,8 @@ func (o metricsURLPathOption) Apply(cfg *config) { | ||||
| 	cfg.metricsURLPath = (string)(o) | ||||
| } | ||||
|  | ||||
| func (metricsURLPathOption) private() {} | ||||
|  | ||||
| // WithMetricsURLPath allows one to override the default URL path used | ||||
| // for sending metrics. If unset, DefaultMetricsPath will be used. | ||||
| func WithMetricsURLPath(urlPath string) Option { | ||||
| @@ -121,6 +134,8 @@ func (o maxAttemptsOption) Apply(cfg *config) { | ||||
| 	cfg.maxAttempts = (int)(o) | ||||
| } | ||||
|  | ||||
| func (maxAttemptsOption) private() {} | ||||
|  | ||||
| // WithMaxAttempts allows one to override how many times the driver | ||||
| // will try to send the payload in case of retryable errors. If unset, | ||||
| // DefaultMaxAttempts will be used. | ||||
| @@ -134,6 +149,8 @@ func (o backoffOption) Apply(cfg *config) { | ||||
| 	cfg.backoff = (time.Duration)(o) | ||||
| } | ||||
|  | ||||
| func (backoffOption) private() {} | ||||
|  | ||||
| // WithBackoff tells the driver to use the duration as a base of the | ||||
| // exponential backoff strategy. If unset, DefaultBackoff will be | ||||
| // used. | ||||
| @@ -147,6 +164,8 @@ func (o *tlsClientConfigOption) Apply(cfg *config) { | ||||
| 	cfg.tlsCfg = (*tls.Config)(o) | ||||
| } | ||||
|  | ||||
| func (*tlsClientConfigOption) private() {} | ||||
|  | ||||
| // WithTLSClientConfig can be used to set up a custom TLS | ||||
| // configuration for the client used to send payloads to the | ||||
| // collector. Use it if you want to use a custom certificate. | ||||
| @@ -160,6 +179,8 @@ func (insecureOption) Apply(cfg *config) { | ||||
| 	cfg.insecure = true | ||||
| } | ||||
|  | ||||
| func (insecureOption) private() {} | ||||
|  | ||||
| // WithInsecure tells the driver to connect to the collector using the | ||||
| // HTTP scheme, instead of HTTPS. | ||||
| func WithInsecure() Option { | ||||
| @@ -172,6 +193,8 @@ func (o headersOption) Apply(cfg *config) { | ||||
| 	cfg.headers = (map[string]string)(o) | ||||
| } | ||||
|  | ||||
| func (headersOption) private() {} | ||||
|  | ||||
| // WithHeaders allows one to tell the driver to send additional HTTP | ||||
| // headers with the payloads. Specifying headers like Content-Length, | ||||
| // Content-Encoding and Content-Type may result in a broken driver. | ||||
|   | ||||
| @@ -74,6 +74,11 @@ func NewConfig(options ...Option) (Config, error) { | ||||
| type Option interface { | ||||
| 	// Apply option value to Config. | ||||
| 	Apply(*Config) | ||||
|  | ||||
| 	// A private method to prevent users implementing the | ||||
| 	// interface and so future additions to it will not | ||||
| 	// violate compatibility. | ||||
| 	private() | ||||
| } | ||||
|  | ||||
| // WithWriter sets the export stream destination. | ||||
| @@ -89,6 +94,8 @@ func (o writerOption) Apply(config *Config) { | ||||
| 	config.Writer = o.W | ||||
| } | ||||
|  | ||||
| func (writerOption) private() {} | ||||
|  | ||||
| // WithPrettyPrint sets the export stream format to use JSON. | ||||
| func WithPrettyPrint() Option { | ||||
| 	return prettyPrintOption(true) | ||||
| @@ -100,6 +107,8 @@ func (o prettyPrintOption) Apply(config *Config) { | ||||
| 	config.PrettyPrint = bool(o) | ||||
| } | ||||
|  | ||||
| func (prettyPrintOption) private() {} | ||||
|  | ||||
| // WithoutTimestamps sets the export stream to not include timestamps. | ||||
| func WithoutTimestamps() Option { | ||||
| 	return timestampsOption(false) | ||||
| @@ -111,6 +120,8 @@ func (o timestampsOption) Apply(config *Config) { | ||||
| 	config.Timestamps = bool(o) | ||||
| } | ||||
|  | ||||
| func (timestampsOption) private() {} | ||||
|  | ||||
| // WithLabelEncoder sets the label encoder used in export. | ||||
| func WithLabelEncoder(enc attribute.Encoder) Option { | ||||
| 	return labelEncoderOption{enc} | ||||
| @@ -124,6 +135,8 @@ func (o labelEncoderOption) Apply(config *Config) { | ||||
| 	config.LabelEncoder = o.LabelEncoder | ||||
| } | ||||
|  | ||||
| func (labelEncoderOption) private() {} | ||||
|  | ||||
| // WithoutTraceExport disables all trace exporting. | ||||
| func WithoutTraceExport() Option { | ||||
| 	return disableTraceExportOption(true) | ||||
| @@ -135,6 +148,8 @@ func (o disableTraceExportOption) Apply(config *Config) { | ||||
| 	config.DisableTraceExport = bool(o) | ||||
| } | ||||
|  | ||||
| func (disableTraceExportOption) private() {} | ||||
|  | ||||
| // WithoutMetricExport disables all metric exporting. | ||||
| func WithoutMetricExport() Option { | ||||
| 	return disableMetricExportOption(true) | ||||
| @@ -145,3 +160,5 @@ type disableMetricExportOption bool | ||||
| func (o disableMetricExportOption) Apply(config *Config) { | ||||
| 	config.DisableMetricExport = bool(o) | ||||
| } | ||||
|  | ||||
| func (disableMetricExportOption) private() {} | ||||
|   | ||||
| @@ -540,7 +540,6 @@ golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7w | ||||
| golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210113181707-4bcb84eeeb78 h1:nVuTkr9L6Bq62qpUqKo/RnZCFfzDBL0bYo6w9OJUqZY= | ||||
| golang.org/x/sys v0.0.0-20210113181707-4bcb84eeeb78/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k= | ||||
| golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| @@ -604,7 +603,6 @@ golang.org/x/tools v0.0.0-20201118003311-bd56c0adb394/go.mod h1:emZCQorbCU4vsT4f | ||||
| golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||
| golang.org/x/tools v0.0.0-20210101214203-2dba1e4ea05c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||
| golang.org/x/tools v0.0.0-20210102185154-773b96fafca2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||
| golang.org/x/tools v0.0.0-20210106214847-113979e3529a h1:CB3a9Nez8M13wwlr/E2YtwoU+qYHKfC+JrDa45RXXoQ= | ||||
| golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||
| golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY= | ||||
| golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= | ||||
|   | ||||
| @@ -63,9 +63,19 @@ func newConfig(opts ...Option) config { | ||||
| // Option applies an option to a config. | ||||
| type Option interface { | ||||
| 	Apply(*config) | ||||
|  | ||||
| 	// A private method to prevent users implementing the | ||||
| 	// interface and so future additions to it will not | ||||
| 	// violate compatibility. | ||||
| 	private() | ||||
| } | ||||
|  | ||||
| type option struct{} | ||||
|  | ||||
| func (option) private() {} | ||||
|  | ||||
| type spanContextFuncOption struct { | ||||
| 	option | ||||
| 	SpanContextFunc func(context.Context) trace.SpanContext | ||||
| } | ||||
|  | ||||
| @@ -76,10 +86,11 @@ func (o spanContextFuncOption) Apply(c *config) { | ||||
| // WithSpanContextFunc sets the SpanContextFunc used to generate a new Spans | ||||
| // context from a parent SpanContext. | ||||
| func WithSpanContextFunc(f func(context.Context) trace.SpanContext) Option { | ||||
| 	return spanContextFuncOption{f} | ||||
| 	return spanContextFuncOption{SpanContextFunc: f} | ||||
| } | ||||
|  | ||||
| type spanRecorderOption struct { | ||||
| 	option | ||||
| 	SpanRecorder *SpanRecorder | ||||
| } | ||||
|  | ||||
| @@ -90,7 +101,7 @@ func (o spanRecorderOption) Apply(c *config) { | ||||
| // WithSpanRecorder sets the SpanRecorder to use with the TracerProvider for | ||||
| // testing. | ||||
| func WithSpanRecorder(sr *SpanRecorder) Option { | ||||
| 	return spanRecorderOption{sr} | ||||
| 	return spanRecorderOption{SpanRecorder: sr} | ||||
| } | ||||
|  | ||||
| // SpanRecorder performs operations to record a span as it starts and ends. | ||||
|   | ||||
| @@ -42,8 +42,17 @@ type config struct { | ||||
| type Option interface { | ||||
| 	// Apply sets the Option value of a config. | ||||
| 	Apply(*config) | ||||
|  | ||||
| 	// A private method to prevent users implementing the | ||||
| 	// interface and so future additions to it will not | ||||
| 	// violate compatibility. | ||||
| 	private() | ||||
| } | ||||
|  | ||||
| type option struct{} | ||||
|  | ||||
| func (option) private() {} | ||||
|  | ||||
| // WithAttributes adds attributes to the configured Resource. | ||||
| func WithAttributes(attributes ...attribute.KeyValue) Option { | ||||
| 	return WithDetectors(detectAttributes{attributes}) | ||||
| @@ -59,10 +68,11 @@ func (d detectAttributes) Detect(context.Context) (*Resource, error) { | ||||
|  | ||||
| // WithDetectors adds detectors to be evaluated for the configured resource. | ||||
| func WithDetectors(detectors ...Detector) Option { | ||||
| 	return detectorsOption{detectors} | ||||
| 	return detectorsOption{detectors: detectors} | ||||
| } | ||||
|  | ||||
| type detectorsOption struct { | ||||
| 	option | ||||
| 	detectors []Detector | ||||
| } | ||||
|  | ||||
| @@ -74,10 +84,11 @@ func (o detectorsOption) Apply(cfg *config) { | ||||
| // WithTelemetrySDK overrides the builtin `telemetry.sdk.*` | ||||
| // attributes.  Use nil to disable these attributes entirely. | ||||
| func WithTelemetrySDK(d Detector) Option { | ||||
| 	return telemetrySDKOption{d} | ||||
| 	return telemetrySDKOption{Detector: d} | ||||
| } | ||||
|  | ||||
| type telemetrySDKOption struct { | ||||
| 	option | ||||
| 	Detector | ||||
| } | ||||
|  | ||||
| @@ -89,10 +100,11 @@ func (o telemetrySDKOption) Apply(cfg *config) { | ||||
| // WithHost overrides the builtin `host.*` attributes.  Use nil to | ||||
| // disable these attributes entirely. | ||||
| func WithHost(d Detector) Option { | ||||
| 	return hostOption{d} | ||||
| 	return hostOption{Detector: d} | ||||
| } | ||||
|  | ||||
| type hostOption struct { | ||||
| 	option | ||||
| 	Detector | ||||
| } | ||||
|  | ||||
| @@ -104,10 +116,11 @@ func (o hostOption) Apply(cfg *config) { | ||||
| // WithFromEnv overrides the builtin detector for | ||||
| // OTEL_RESOURCE_ATTRIBUTES.  Use nil to disable environment checking. | ||||
| func WithFromEnv(d Detector) Option { | ||||
| 	return fromEnvOption{d} | ||||
| 	return fromEnvOption{Detector: d} | ||||
| } | ||||
|  | ||||
| type fromEnvOption struct { | ||||
| 	option | ||||
| 	Detector | ||||
| } | ||||
|  | ||||
| @@ -122,7 +135,9 @@ func WithoutBuiltin() Option { | ||||
| 	return noBuiltinOption{} | ||||
| } | ||||
|  | ||||
| type noBuiltinOption struct{} | ||||
| type noBuiltinOption struct { | ||||
| 	option | ||||
| } | ||||
|  | ||||
| // Apply implements Option. | ||||
| func (o noBuiltinOption) Apply(cfg *config) { | ||||
|   | ||||
| @@ -190,6 +190,11 @@ type config struct { | ||||
| // ParentBasedSamplerOption configures the sampler for a particular sampling case. | ||||
| type ParentBasedSamplerOption interface { | ||||
| 	Apply(*config) | ||||
|  | ||||
| 	// A private method to prevent users implementing the | ||||
| 	// interface and so future additions to it will not | ||||
| 	// violate compatibility. | ||||
| 	private() | ||||
| } | ||||
|  | ||||
| // WithRemoteParentSampled sets the sampler for the case of sampled remote parent. | ||||
| @@ -205,6 +210,8 @@ func (o remoteParentSampledOption) Apply(config *config) { | ||||
| 	config.remoteParentSampled = o.s | ||||
| } | ||||
|  | ||||
| func (remoteParentSampledOption) private() {} | ||||
|  | ||||
| // WithRemoteParentNotSampled sets the sampler for the case of remote parent | ||||
| // which is not sampled. | ||||
| func WithRemoteParentNotSampled(s Sampler) ParentBasedSamplerOption { | ||||
| @@ -219,6 +226,8 @@ func (o remoteParentNotSampledOption) Apply(config *config) { | ||||
| 	config.remoteParentNotSampled = o.s | ||||
| } | ||||
|  | ||||
| func (remoteParentNotSampledOption) private() {} | ||||
|  | ||||
| // WithLocalParentSampled sets the sampler for the case of sampled local parent. | ||||
| func WithLocalParentSampled(s Sampler) ParentBasedSamplerOption { | ||||
| 	return localParentSampledOption{s} | ||||
| @@ -232,6 +241,8 @@ func (o localParentSampledOption) Apply(config *config) { | ||||
| 	config.localParentSampled = o.s | ||||
| } | ||||
|  | ||||
| func (localParentSampledOption) private() {} | ||||
|  | ||||
| // WithLocalParentNotSampled sets the sampler for the case of local parent | ||||
| // which is not sampled. | ||||
| func WithLocalParentNotSampled(s Sampler) ParentBasedSamplerOption { | ||||
| @@ -246,6 +257,8 @@ func (o localParentNotSampledOption) Apply(config *config) { | ||||
| 	config.localParentNotSampled = o.s | ||||
| } | ||||
|  | ||||
| func (localParentNotSampledOption) private() {} | ||||
|  | ||||
| func (pb parentBased) ShouldSample(p SamplingParameters) SamplingResult { | ||||
| 	if p.ParentContext.IsValid() { | ||||
| 		if p.HasRemoteParent { | ||||
|   | ||||
| @@ -60,6 +60,11 @@ type ReadOnlySpan interface { | ||||
| 	InstrumentationLibrary() instrumentation.Library | ||||
| 	Resource() *resource.Resource | ||||
| 	Snapshot() *export.SpanSnapshot | ||||
|  | ||||
| 	// A private method to prevent users implementing the | ||||
| 	// interface and so future additions to it will not | ||||
| 	// violate compatibility. | ||||
| 	private() | ||||
| } | ||||
|  | ||||
| // ReadWriteSpan exposes the same methods as trace.Span and in addition allows | ||||
| @@ -505,6 +510,8 @@ func (s *span) addDroppedAttributeCount(delta int) { | ||||
| 	atomic.AddInt64(&s.droppedAttributeCount, int64(delta)) | ||||
| } | ||||
|  | ||||
| func (*span) private() {} | ||||
|  | ||||
| func startSpanInternal(ctx context.Context, tr *tracer, name string, parent trace.SpanContext, remoteParent bool, o *trace.SpanConfig) *span { | ||||
| 	span := &span{} | ||||
| 	span.spanContext = parent | ||||
|   | ||||
| @@ -39,6 +39,11 @@ func NewTracerConfig(options ...TracerOption) *TracerConfig { | ||||
| // TracerOption applies an option to a TracerConfig. | ||||
| type TracerOption interface { | ||||
| 	ApplyTracer(*TracerConfig) | ||||
|  | ||||
| 	// A private method to prevent users implementing the | ||||
| 	// interface and so future additions to it will not | ||||
| 	// violate compatibility. | ||||
| 	private() | ||||
| } | ||||
|  | ||||
| // SpanConfig is a group of options for a Span. | ||||
| @@ -74,6 +79,11 @@ func NewSpanConfig(options ...SpanOption) *SpanConfig { | ||||
| // SpanOption applies an option to a SpanConfig. | ||||
| type SpanOption interface { | ||||
| 	ApplySpan(*SpanConfig) | ||||
|  | ||||
| 	// A private method to prevent users implementing the | ||||
| 	// interface and so future additions to it will not | ||||
| 	// violate compatibility. | ||||
| 	private() | ||||
| } | ||||
|  | ||||
| // NewEventConfig applies all the EventOptions to a returned SpanConfig. If no | ||||
| @@ -94,6 +104,11 @@ func NewEventConfig(options ...EventOption) *SpanConfig { | ||||
| // EventOption applies span event options to a SpanConfig. | ||||
| type EventOption interface { | ||||
| 	ApplyEvent(*SpanConfig) | ||||
|  | ||||
| 	// A private method to prevent users implementing the | ||||
| 	// interface and so future additions to it will not | ||||
| 	// violate compatibility. | ||||
| 	private() | ||||
| } | ||||
|  | ||||
| // LifeCycleOption applies span life-cycle options to a SpanConfig. These | ||||
| @@ -108,6 +123,7 @@ type attributeSpanOption []attribute.KeyValue | ||||
|  | ||||
| func (o attributeSpanOption) ApplySpan(c *SpanConfig)  { o.apply(c) } | ||||
| func (o attributeSpanOption) ApplyEvent(c *SpanConfig) { o.apply(c) } | ||||
| func (attributeSpanOption) private()                   {} | ||||
| func (o attributeSpanOption) apply(c *SpanConfig) { | ||||
| 	c.Attributes = append(c.Attributes, []attribute.KeyValue(o)...) | ||||
| } | ||||
| @@ -129,6 +145,7 @@ type timestampSpanOption time.Time | ||||
|  | ||||
| func (o timestampSpanOption) ApplySpan(c *SpanConfig)  { o.apply(c) } | ||||
| func (o timestampSpanOption) ApplyEvent(c *SpanConfig) { o.apply(c) } | ||||
| func (timestampSpanOption) private()                   {} | ||||
| func (o timestampSpanOption) apply(c *SpanConfig)      { c.Timestamp = time.Time(o) } | ||||
|  | ||||
| // WithTimestamp sets the time of a Span life-cycle moment (e.g. started, | ||||
| @@ -140,6 +157,7 @@ func WithTimestamp(t time.Time) LifeCycleOption { | ||||
| type linksSpanOption []Link | ||||
|  | ||||
| func (o linksSpanOption) ApplySpan(c *SpanConfig) { c.Links = append(c.Links, []Link(o)...) } | ||||
| func (linksSpanOption) private()                  {} | ||||
|  | ||||
| // WithLinks adds links to a Span. The links are added to the existing Span | ||||
| // links, i.e. this does not overwrite. | ||||
| @@ -150,6 +168,7 @@ func WithLinks(links ...Link) SpanOption { | ||||
| type recordSpanOption bool | ||||
|  | ||||
| func (o recordSpanOption) ApplySpan(c *SpanConfig) { c.Record = bool(o) } | ||||
| func (recordSpanOption) private()                  {} | ||||
|  | ||||
| // WithRecord specifies that the span should be recorded. It is important to | ||||
| // note that implementations may override this option, i.e. if the span is a | ||||
| @@ -161,6 +180,7 @@ func WithRecord() SpanOption { | ||||
| type newRootSpanOption bool | ||||
|  | ||||
| func (o newRootSpanOption) ApplySpan(c *SpanConfig) { c.NewRoot = bool(o) } | ||||
| func (newRootSpanOption) private()                  {} | ||||
|  | ||||
| // WithNewRoot specifies that the Span should be treated as a root Span. Any | ||||
| // existing parent span context will be ignored when defining the Span's trace | ||||
| @@ -172,6 +192,7 @@ func WithNewRoot() SpanOption { | ||||
| type spanKindSpanOption SpanKind | ||||
|  | ||||
| func (o spanKindSpanOption) ApplySpan(c *SpanConfig) { c.SpanKind = SpanKind(o) } | ||||
| func (o spanKindSpanOption) private()                {} | ||||
|  | ||||
| // WithSpanKind sets the SpanKind of a Span. | ||||
| func WithSpanKind(kind SpanKind) SpanOption { | ||||
| @@ -194,3 +215,5 @@ type instrumentationVersionOption string | ||||
| func (i instrumentationVersionOption) ApplyTracer(config *TracerConfig) { | ||||
| 	config.InstrumentationVersion = string(i) | ||||
| } | ||||
|  | ||||
| func (instrumentationVersionOption) private() {} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user