dubbo.apache.org/dubbo-go/v3@v3.1.1/otel/trace/jaeger/exporter.go (about)

     1  /*
     2   * Licensed to the Apache Software Foundation (ASF) under one or more
     3   * contributor license agreements.  See the NOTICE file distributed with
     4   * this work for additional information regarding copyright ownership.
     5   * The ASF licenses this file to You under the Apache License, Version 2.0
     6   * (the "License"); you may not use this file except in compliance with
     7   * the License.  You may obtain a copy of the License at
     8   *
     9   *     http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   */
    17  
    18  package jaeger
    19  
    20  import (
    21  	"sync"
    22  )
    23  
    24  import (
    25  	"go.opentelemetry.io/otel/exporters/jaeger"
    26  
    27  	sdktrace "go.opentelemetry.io/otel/sdk/trace"
    28  )
    29  
    30  import (
    31  	"dubbo.apache.org/dubbo-go/v3/common/extension"
    32  	"dubbo.apache.org/dubbo-go/v3/otel/trace"
    33  )
    34  
    35  var (
    36  	initOnce sync.Once
    37  	instance *Exporter
    38  )
    39  
    40  func init() {
    41  	extension.SetTraceExporter("jaeger", newJaegerExporter)
    42  }
    43  
    44  type Exporter struct {
    45  	*trace.DefaultExporter
    46  }
    47  
    48  func newJaegerExporter(config *trace.ExporterConfig) (trace.Exporter, error) {
    49  	var initError error
    50  	if instance == nil {
    51  		initOnce.Do(func() {
    52  			customFunc := func() (sdktrace.SpanExporter, error) {
    53  				return jaeger.New(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint(config.Endpoint)))
    54  			}
    55  
    56  			tracerProvider, propagator, err := trace.NewExporter(config, customFunc)
    57  			if err != nil {
    58  				initError = err
    59  				return
    60  			}
    61  
    62  			instance = &Exporter{
    63  				DefaultExporter: &trace.DefaultExporter{
    64  					TracerProvider: tracerProvider,
    65  					Propagator:     propagator,
    66  				},
    67  			}
    68  		})
    69  	}
    70  	return instance, initError
    71  }