mirror of
https://github.com/pomerium/pomerium.git
synced 2025-05-02 11:56:02 +02:00
82 lines
2.4 KiB
Go
82 lines
2.4 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"net/url"
|
|
|
|
"github.com/pomerium/pomerium/internal/telemetry"
|
|
"github.com/pomerium/pomerium/internal/urlutil"
|
|
)
|
|
|
|
const (
|
|
// JaegerTracingProviderName is the name of the tracing provider Jaeger.
|
|
JaegerTracingProviderName = "jaeger"
|
|
// ZipkinTracingProviderName is the name of the tracing provider Zipkin.
|
|
ZipkinTracingProviderName = "zipkin"
|
|
)
|
|
|
|
// TracingOptions contains the configurations settings for a http server.
|
|
type TracingOptions struct {
|
|
// Shared
|
|
Provider string
|
|
Service string
|
|
Debug bool
|
|
|
|
// Jaeger
|
|
|
|
// CollectorEndpoint is the full url to the Jaeger HTTP Thrift collector.
|
|
// For example, http://localhost:14268/api/traces
|
|
JaegerCollectorEndpoint *url.URL
|
|
// AgentEndpoint instructs exporter to send spans to jaeger-agent at this address.
|
|
// For example, localhost:6831.
|
|
JaegerAgentEndpoint string
|
|
|
|
// Zipkin
|
|
|
|
// ZipkinEndpoint configures the zipkin collector URI
|
|
// Example: http://zipkin:9411/api/v2/spans
|
|
ZipkinEndpoint *url.URL
|
|
|
|
// SampleRate is percentage of requests which are sampled
|
|
SampleRate float64
|
|
}
|
|
|
|
// NewTracingOptions builds a new TracingOptions from core Options
|
|
func NewTracingOptions(o *Options) (*TracingOptions, error) {
|
|
tracingOpts := TracingOptions{
|
|
Provider: o.TracingProvider,
|
|
Service: telemetry.ServiceName(o.Services),
|
|
JaegerAgentEndpoint: o.TracingJaegerAgentEndpoint,
|
|
SampleRate: o.TracingSampleRate,
|
|
}
|
|
|
|
switch o.TracingProvider {
|
|
case JaegerTracingProviderName:
|
|
if o.TracingJaegerCollectorEndpoint != "" {
|
|
jaegerCollectorEndpoint, err := urlutil.ParseAndValidateURL(o.TracingJaegerCollectorEndpoint)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("config: invalid jaeger endpoint url: %w", err)
|
|
}
|
|
tracingOpts.JaegerCollectorEndpoint = jaegerCollectorEndpoint
|
|
tracingOpts.JaegerAgentEndpoint = o.TracingJaegerAgentEndpoint
|
|
}
|
|
case ZipkinTracingProviderName:
|
|
zipkinEndpoint, err := urlutil.ParseAndValidateURL(o.ZipkinEndpoint)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("config: invalid zipkin endpoint url: %w", err)
|
|
}
|
|
tracingOpts.ZipkinEndpoint = zipkinEndpoint
|
|
case "":
|
|
return &TracingOptions{}, nil
|
|
default:
|
|
return nil, fmt.Errorf("config: provider %s unknown", o.TracingProvider)
|
|
}
|
|
|
|
return &tracingOpts, nil
|
|
|
|
}
|
|
|
|
// Enabled indicates whether tracing is enabled on a given TracingOptions
|
|
func (t *TracingOptions) Enabled() bool {
|
|
return t.Provider != ""
|
|
}
|