| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- // Copyright The OpenTelemetry Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- package otlptrace // import "go.opentelemetry.io/otel/exporters/otlp/otlptrace"
- import (
- "context"
- "errors"
- "sync"
- "go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform"
- tracesdk "go.opentelemetry.io/otel/sdk/trace"
- )
- var (
- errAlreadyStarted = errors.New("already started")
- )
- // Exporter exports trace data in the OTLP wire format.
- type Exporter struct {
- client Client
- mu sync.RWMutex
- started bool
- startOnce sync.Once
- stopOnce sync.Once
- }
- // ExportSpans exports a batch of spans.
- func (e *Exporter) ExportSpans(ctx context.Context, ss []tracesdk.ReadOnlySpan) error {
- protoSpans := tracetransform.Spans(ss)
- if len(protoSpans) == 0 {
- return nil
- }
- //sendData := tracetransformData(ss)
- tracetransformData(ss)
- //err := e.client.UploadApmTraces(ctx, sendData)
- //if err != nil {
- // return fmt.Errorf("traces export: %w", err)
- //}
- return nil
- }
- // Start establishes a connection to the receiving endpoint.
- func (e *Exporter) Start(ctx context.Context) error {
- var err = errAlreadyStarted
- e.startOnce.Do(func() {
- e.mu.Lock()
- e.started = true
- e.mu.Unlock()
- err = e.client.Start(ctx)
- })
- return err
- }
- // Shutdown flushes all exports and closes all connections to the receiving endpoint.
- func (e *Exporter) Shutdown(ctx context.Context) error {
- e.mu.RLock()
- started := e.started
- e.mu.RUnlock()
- if !started {
- return nil
- }
- var err error
- e.stopOnce.Do(func() {
- err = e.client.Stop(ctx)
- e.mu.Lock()
- e.started = false
- e.mu.Unlock()
- })
- return err
- }
- var _ tracesdk.SpanExporter = (*Exporter)(nil)
- // New constructs a new Exporter and starts it.
- func New(ctx context.Context, client Client) (*Exporter, error) {
- exp := NewUnstarted(client)
- if err := exp.Start(ctx); err != nil {
- return nil, err
- }
- return exp, nil
- }
- // NewUnstarted constructs a new Exporter and does not start it.
- func NewUnstarted(client Client) *Exporter {
- return &Exporter{
- client: client,
- }
- }
- // MarshalLog is the marshaling function used by the logging system to represent this exporter.
- func (e *Exporter) MarshalLog() interface{} {
- return struct {
- Type string
- Client Client
- }{
- Type: "otlptrace",
- Client: e.client,
- }
- }
|