// Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 package logs // import "go.opentelemetry.io/collector/receiver/otlpreceiver/internal/logs" import ( "context" "go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/obsreport" "go.opentelemetry.io/collector/pdata/plog/plogotlp" ) const dataFormatProtobuf = "protobuf" // Receiver is the type used to handle logs from OpenTelemetry exporters. type Receiver struct { plogotlp.UnimplementedGRPCServer nextConsumer consumer.Logs obsrecv *obsreport.Receiver } // New creates a new Receiver reference. func New(nextConsumer consumer.Logs, obsrecv *obsreport.Receiver) *Receiver { return &Receiver{ nextConsumer: nextConsumer, obsrecv: obsrecv, } } // Export implements the service Export logs func. func (r *Receiver) Export(ctx context.Context, req plogotlp.ExportRequest) (plogotlp.ExportResponse, error) { ld := req.Logs() numSpans := ld.LogRecordCount() if numSpans == 0 { return plogotlp.NewExportResponse(), nil } ctx = r.obsrecv.StartLogsOp(ctx) err := r.nextConsumer.ConsumeLogs(ctx, ld) r.obsrecv.EndLogsOp(ctx, dataFormatProtobuf, numSpans, err) return plogotlp.NewExportResponse(), err }