rename exporterhelper obsreport method (#8499)

This aligns better with the other new methods in the various helper
modules.

Signed-off-by: Alex Boten <aboten@lightstep.com>
This commit is contained in:
Alex Boten 2023-09-20 16:28:49 -07:00 committed by GitHub
parent b80683375c
commit f9e0f1c836
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 69 additions and 72 deletions

View File

@ -17,9 +17,9 @@ issues: [8492]
# Use pipe (|) for multiline entries.
subtext: |
These deprecated methods/structs have been moved to exporterhelper:
- `obsreport.Exporter` -> `exporterhelper.Exporter`
- `obsreport.ExporterSettings` -> `exporterhelper.Settings`
- `obsreport.NewExporter` -> `exporterhelper.New`
- `obsreport.Exporter` -> `exporterhelper.ObsReport`
- `obsreport.ExporterSettings` -> `exporterhelper.ObsReportSettings`
- `obsreport.NewExporter` -> `exporterhelper.NewObsReport`
# Optional: The change log or logs in which this entry should be included.
# e.g. '[user]' or '[user, api]'

View File

@ -168,7 +168,7 @@ type baseExporter struct {
func newBaseExporter(set exporter.CreateSettings, signal component.DataType, requestExporter bool, marshaler internal.RequestMarshaler,
unmarshaler internal.RequestUnmarshaler, osf obsrepSenderFactory, options ...Option) (*baseExporter, error) {
obsrep, err := newObsExporter(Settings{ExporterID: set.ID, ExporterCreateSettings: set}, globalInstruments)
obsrep, err := newObsExporter(ObsReportSettings{ExporterID: set.ID, ExporterCreateSettings: set}, globalInstruments)
if err != nil {
return nil, err
}

View File

@ -34,8 +34,8 @@ const (
nameSep = "/"
)
// Exporter is a helper to add observability to an exporter.
type Exporter struct {
// ObsReport is a helper to add observability to an exporter.
type ObsReport struct {
level configtelemetry.Level
spanNamePrefix string
mutators []tag.Mutator
@ -52,19 +52,19 @@ type Exporter struct {
failedToSendLogRecords metric.Int64Counter
}
// Settings are settings for creating an Exporter.
type Settings struct {
// ObsReportSettings are settings for creating an ObsReport.
type ObsReportSettings struct {
ExporterID component.ID
ExporterCreateSettings exporter.CreateSettings
}
// New creates a new Exporter.
func New(cfg Settings) (*Exporter, error) {
// NewObsReport creates a new Exporter.
func NewObsReport(cfg ObsReportSettings) (*ObsReport, error) {
return newExporter(cfg, obsreportconfig.UseOtelForInternalMetricsfeatureGate.IsEnabled())
}
func newExporter(cfg Settings, useOtel bool) (*Exporter, error) {
exp := &Exporter{
func newExporter(cfg ObsReportSettings, useOtel bool) (*ObsReport, error) {
exp := &ObsReport{
level: cfg.ExporterCreateSettings.TelemetrySettings.MetricsLevel,
spanNamePrefix: obsmetrics.ExporterPrefix + cfg.ExporterID.String(),
mutators: []tag.Mutator{tag.Upsert(obsmetrics.TagKeyExporter, cfg.ExporterID.String(), tag.WithTTL(tag.TTLNoPropagation))},
@ -88,45 +88,45 @@ func newExporter(cfg Settings, useOtel bool) (*Exporter, error) {
return exp, nil
}
func (exp *Exporter) createOtelMetrics(cfg Settings) error {
if !exp.useOtelForMetrics {
func (or *ObsReport) createOtelMetrics(cfg ObsReportSettings) error {
if !or.useOtelForMetrics {
return nil
}
meter := cfg.ExporterCreateSettings.MeterProvider.Meter(exporterScope)
var errors, err error
exp.sentSpans, err = meter.Int64Counter(
or.sentSpans, err = meter.Int64Counter(
obsmetrics.ExporterPrefix+obsmetrics.SentSpansKey,
metric.WithDescription("Number of spans successfully sent to destination."),
metric.WithUnit("1"))
errors = multierr.Append(errors, err)
exp.failedToSendSpans, err = meter.Int64Counter(
or.failedToSendSpans, err = meter.Int64Counter(
obsmetrics.ExporterPrefix+obsmetrics.FailedToSendSpansKey,
metric.WithDescription("Number of spans in failed attempts to send to destination."),
metric.WithUnit("1"))
errors = multierr.Append(errors, err)
exp.sentMetricPoints, err = meter.Int64Counter(
or.sentMetricPoints, err = meter.Int64Counter(
obsmetrics.ExporterPrefix+obsmetrics.SentMetricPointsKey,
metric.WithDescription("Number of metric points successfully sent to destination."),
metric.WithUnit("1"))
errors = multierr.Append(errors, err)
exp.failedToSendMetricPoints, err = meter.Int64Counter(
or.failedToSendMetricPoints, err = meter.Int64Counter(
obsmetrics.ExporterPrefix+obsmetrics.FailedToSendMetricPointsKey,
metric.WithDescription("Number of metric points in failed attempts to send to destination."),
metric.WithUnit("1"))
errors = multierr.Append(errors, err)
exp.sentLogRecords, err = meter.Int64Counter(
or.sentLogRecords, err = meter.Int64Counter(
obsmetrics.ExporterPrefix+obsmetrics.SentLogRecordsKey,
metric.WithDescription("Number of log record successfully sent to destination."),
metric.WithUnit("1"))
errors = multierr.Append(errors, err)
exp.failedToSendLogRecords, err = meter.Int64Counter(
or.failedToSendLogRecords, err = meter.Int64Counter(
obsmetrics.ExporterPrefix+obsmetrics.FailedToSendLogRecordsKey,
metric.WithDescription("Number of log records in failed attempts to send to destination."),
metric.WithUnit("1"))
@ -138,84 +138,84 @@ func (exp *Exporter) createOtelMetrics(cfg Settings) error {
// StartTracesOp is called at the start of an Export operation.
// The returned context should be used in other calls to the Exporter functions
// dealing with the same export operation.
func (exp *Exporter) StartTracesOp(ctx context.Context) context.Context {
return exp.startOp(ctx, obsmetrics.ExportTraceDataOperationSuffix)
func (or *ObsReport) StartTracesOp(ctx context.Context) context.Context {
return or.startOp(ctx, obsmetrics.ExportTraceDataOperationSuffix)
}
// EndTracesOp completes the export operation that was started with StartTracesOp.
func (exp *Exporter) EndTracesOp(ctx context.Context, numSpans int, err error) {
func (or *ObsReport) EndTracesOp(ctx context.Context, numSpans int, err error) {
numSent, numFailedToSend := toNumItems(numSpans, err)
exp.recordMetrics(ctx, component.DataTypeTraces, numSent, numFailedToSend)
or.recordMetrics(ctx, component.DataTypeTraces, numSent, numFailedToSend)
endSpan(ctx, err, numSent, numFailedToSend, obsmetrics.SentSpansKey, obsmetrics.FailedToSendSpansKey)
}
// StartMetricsOp is called at the start of an Export operation.
// The returned context should be used in other calls to the Exporter functions
// dealing with the same export operation.
func (exp *Exporter) StartMetricsOp(ctx context.Context) context.Context {
return exp.startOp(ctx, obsmetrics.ExportMetricsOperationSuffix)
func (or *ObsReport) StartMetricsOp(ctx context.Context) context.Context {
return or.startOp(ctx, obsmetrics.ExportMetricsOperationSuffix)
}
// EndMetricsOp completes the export operation that was started with
// StartMetricsOp.
func (exp *Exporter) EndMetricsOp(ctx context.Context, numMetricPoints int, err error) {
func (or *ObsReport) EndMetricsOp(ctx context.Context, numMetricPoints int, err error) {
numSent, numFailedToSend := toNumItems(numMetricPoints, err)
exp.recordMetrics(ctx, component.DataTypeMetrics, numSent, numFailedToSend)
or.recordMetrics(ctx, component.DataTypeMetrics, numSent, numFailedToSend)
endSpan(ctx, err, numSent, numFailedToSend, obsmetrics.SentMetricPointsKey, obsmetrics.FailedToSendMetricPointsKey)
}
// StartLogsOp is called at the start of an Export operation.
// The returned context should be used in other calls to the Exporter functions
// dealing with the same export operation.
func (exp *Exporter) StartLogsOp(ctx context.Context) context.Context {
return exp.startOp(ctx, obsmetrics.ExportLogsOperationSuffix)
func (or *ObsReport) StartLogsOp(ctx context.Context) context.Context {
return or.startOp(ctx, obsmetrics.ExportLogsOperationSuffix)
}
// EndLogsOp completes the export operation that was started with StartLogsOp.
func (exp *Exporter) EndLogsOp(ctx context.Context, numLogRecords int, err error) {
func (or *ObsReport) EndLogsOp(ctx context.Context, numLogRecords int, err error) {
numSent, numFailedToSend := toNumItems(numLogRecords, err)
exp.recordMetrics(ctx, component.DataTypeLogs, numSent, numFailedToSend)
or.recordMetrics(ctx, component.DataTypeLogs, numSent, numFailedToSend)
endSpan(ctx, err, numSent, numFailedToSend, obsmetrics.SentLogRecordsKey, obsmetrics.FailedToSendLogRecordsKey)
}
// startOp creates the span used to trace the operation. Returning
// the updated context and the created span.
func (exp *Exporter) startOp(ctx context.Context, operationSuffix string) context.Context {
spanName := exp.spanNamePrefix + operationSuffix
ctx, _ = exp.tracer.Start(ctx, spanName)
func (or *ObsReport) startOp(ctx context.Context, operationSuffix string) context.Context {
spanName := or.spanNamePrefix + operationSuffix
ctx, _ = or.tracer.Start(ctx, spanName)
return ctx
}
func (exp *Exporter) recordMetrics(ctx context.Context, dataType component.DataType, numSent, numFailed int64) {
if exp.level == configtelemetry.LevelNone {
func (or *ObsReport) recordMetrics(ctx context.Context, dataType component.DataType, numSent, numFailed int64) {
if or.level == configtelemetry.LevelNone {
return
}
if exp.useOtelForMetrics {
exp.recordWithOtel(ctx, dataType, numSent, numFailed)
if or.useOtelForMetrics {
or.recordWithOtel(ctx, dataType, numSent, numFailed)
} else {
exp.recordWithOC(ctx, dataType, numSent, numFailed)
or.recordWithOC(ctx, dataType, numSent, numFailed)
}
}
func (exp *Exporter) recordWithOtel(ctx context.Context, dataType component.DataType, sent int64, failed int64) {
func (or *ObsReport) recordWithOtel(ctx context.Context, dataType component.DataType, sent int64, failed int64) {
var sentMeasure, failedMeasure metric.Int64Counter
switch dataType {
case component.DataTypeTraces:
sentMeasure = exp.sentSpans
failedMeasure = exp.failedToSendSpans
sentMeasure = or.sentSpans
failedMeasure = or.failedToSendSpans
case component.DataTypeMetrics:
sentMeasure = exp.sentMetricPoints
failedMeasure = exp.failedToSendMetricPoints
sentMeasure = or.sentMetricPoints
failedMeasure = or.failedToSendMetricPoints
case component.DataTypeLogs:
sentMeasure = exp.sentLogRecords
failedMeasure = exp.failedToSendLogRecords
sentMeasure = or.sentLogRecords
failedMeasure = or.failedToSendLogRecords
}
sentMeasure.Add(ctx, sent, metric.WithAttributes(exp.otelAttrs...))
failedMeasure.Add(ctx, failed, metric.WithAttributes(exp.otelAttrs...))
sentMeasure.Add(ctx, sent, metric.WithAttributes(or.otelAttrs...))
failedMeasure.Add(ctx, failed, metric.WithAttributes(or.otelAttrs...))
}
func (exp *Exporter) recordWithOC(ctx context.Context, dataType component.DataType, sent int64, failed int64) {
func (or *ObsReport) recordWithOC(ctx context.Context, dataType component.DataType, sent int64, failed int64) {
var sentMeasure, failedMeasure *stats.Int64Measure
switch dataType {
case component.DataTypeTraces:
@ -232,13 +232,13 @@ func (exp *Exporter) recordWithOC(ctx context.Context, dataType component.DataTy
if failed > 0 {
_ = stats.RecordWithTags(
ctx,
exp.mutators,
or.mutators,
sentMeasure.M(sent),
failedMeasure.M(failed))
} else {
_ = stats.RecordWithTags(
ctx,
exp.mutators,
or.mutators,
sentMeasure.M(sent))
}
}

View File

@ -29,7 +29,7 @@ func TestExportTraceDataOp(t *testing.T) {
parentCtx, parentSpan := tt.TracerProvider.Tracer("test").Start(context.Background(), t.Name())
defer parentSpan.End()
obsrep, err := newExporter(Settings{
obsrep, err := newExporter(ObsReportSettings{
ExporterID: exporterID,
ExporterCreateSettings: tt.ToExporterCreateSettings(),
}, useOtel)
@ -77,7 +77,7 @@ func TestExportMetricsOp(t *testing.T) {
parentCtx, parentSpan := tt.TracerProvider.Tracer("test").Start(context.Background(), t.Name())
defer parentSpan.End()
obsrep, err := newExporter(Settings{
obsrep, err := newExporter(ObsReportSettings{
ExporterID: exporterID,
ExporterCreateSettings: tt.ToExporterCreateSettings(),
}, useOtel)
@ -126,7 +126,7 @@ func TestExportLogsOp(t *testing.T) {
parentCtx, parentSpan := tt.TracerProvider.Tracer("test").Start(context.Background(), t.Name())
defer parentSpan.End()
obsrep, err := newExporter(Settings{
obsrep, err := newExporter(ObsReportSettings{
ExporterID: exporterID,
ExporterCreateSettings: tt.ToExporterCreateSettings(),
}, useOtel)

View File

@ -73,26 +73,26 @@ func newInstruments(registry *metric.Registry) *instruments {
// obsExporter is a helper to add observability to an exporter.
type obsExporter struct {
*Exporter
*ObsReport
failedToEnqueueTraceSpansEntry *metric.Int64CumulativeEntry
failedToEnqueueMetricPointsEntry *metric.Int64CumulativeEntry
failedToEnqueueLogRecordsEntry *metric.Int64CumulativeEntry
}
// newObsExporter creates a new observability exporter.
func newObsExporter(cfg Settings, insts *instruments) (*obsExporter, error) {
func newObsExporter(cfg ObsReportSettings, insts *instruments) (*obsExporter, error) {
labelValue := metricdata.NewLabelValue(cfg.ExporterID.String())
failedToEnqueueTraceSpansEntry, _ := insts.failedToEnqueueTraceSpans.GetEntry(labelValue)
failedToEnqueueMetricPointsEntry, _ := insts.failedToEnqueueMetricPoints.GetEntry(labelValue)
failedToEnqueueLogRecordsEntry, _ := insts.failedToEnqueueLogRecords.GetEntry(labelValue)
exp, err := New(cfg)
exp, err := NewObsReport(cfg)
if err != nil {
return nil, err
}
return &obsExporter{
Exporter: exp,
ObsReport: exp,
failedToEnqueueTraceSpansEntry: failedToEnqueueTraceSpansEntry,
failedToEnqueueMetricPointsEntry: failedToEnqueueMetricPointsEntry,
failedToEnqueueLogRecordsEntry: failedToEnqueueLogRecordsEntry,

View File

@ -22,7 +22,7 @@ func TestExportEnqueueFailure(t *testing.T) {
t.Cleanup(func() { require.NoError(t, tt.Shutdown(context.Background())) })
insts := newInstruments(metric.NewRegistry())
obsrep, err := newObsExporter(Settings{
obsrep, err := newObsExporter(ObsReportSettings{
ExporterID: exporter,
ExporterCreateSettings: tt.ToExporterCreateSettings(),
}, insts)

View File

@ -7,20 +7,17 @@ import "go.opentelemetry.io/collector/exporter/exporterhelper"
// Exporter is a helper to add observability to an exporter.
//
// Deprecated: [0.85.0] Use exporterhelper.Exporter instead.
type Exporter = exporterhelper.Exporter
// Deprecated: [0.85.0] Use exporterhelper.ObsReport instead.
type Exporter = exporterhelper.ObsReport
// ExporterSettings are settings for creating an Exporter.
//
// Deprecated: [0.85.0] Use exporterhelper.Settings instead.
type ExporterSettings = exporterhelper.Settings
// Deprecated: [0.85.0] Use exporterhelper.ObsReportSettings instead.
type ExporterSettings = exporterhelper.ObsReportSettings
// NewExporter creates a new Exporter.
//
// Deprecated: [0.85.0] Use exporterhelper.New instead.
func NewExporter(cfg ExporterSettings) (*exporterhelper.Exporter, error) {
return exporterhelper.New(exporterhelper.Settings{
ExporterID: cfg.ExporterID,
ExporterCreateSettings: cfg.ExporterCreateSettings,
})
func NewExporter(cfg ExporterSettings) (*exporterhelper.ObsReport, error) {
return exporterhelper.NewObsReport(cfg)
}

View File

@ -192,7 +192,7 @@ func TestCheckExporterTracesViews(t *testing.T) {
require.NoError(t, err)
t.Cleanup(func() { require.NoError(t, tt.Shutdown(context.Background())) })
obsrep, err := exporterhelper.New(exporterhelper.Settings{
obsrep, err := exporterhelper.NewObsReport(exporterhelper.ObsReportSettings{
ExporterID: exporter,
ExporterCreateSettings: tt.ToExporterCreateSettings(),
})
@ -212,7 +212,7 @@ func TestCheckExporterMetricsViews(t *testing.T) {
require.NoError(t, err)
t.Cleanup(func() { require.NoError(t, tt.Shutdown(context.Background())) })
obsrep, err := exporterhelper.New(exporterhelper.Settings{
obsrep, err := exporterhelper.NewObsReport(exporterhelper.ObsReportSettings{
ExporterID: exporter,
ExporterCreateSettings: tt.ToExporterCreateSettings(),
})
@ -232,7 +232,7 @@ func TestCheckExporterLogsViews(t *testing.T) {
require.NoError(t, err)
t.Cleanup(func() { require.NoError(t, tt.Shutdown(context.Background())) })
obsrep, err := exporterhelper.New(exporterhelper.Settings{
obsrep, err := exporterhelper.NewObsReport(exporterhelper.ObsReportSettings{
ExporterID: exporter,
ExporterCreateSettings: tt.ToExporterCreateSettings(),
})