@@ -27,8 +27,9 @@ import (
2727 "go.opencensus.io/trace"
2828
2929 tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1"
30- "github.com/census-instrumentation/opencensus-service/consumer"
3130 "github.com/census-instrumentation/opencensus-service/data"
31+ "github.com/census-instrumentation/opencensus-service/exporter"
32+ "github.com/census-instrumentation/opencensus-service/exporter/exporterhelper"
3233 "github.com/census-instrumentation/opencensus-service/internal"
3334 spandatatranslator "github.com/census-instrumentation/opencensus-service/translator/trace/spandata"
3435)
@@ -41,42 +42,22 @@ import (
4142// by various vendors and contributors. Eventually the goal is to
4243// get those exporters converted to directly receive
4344// OpenCensus Proto TraceData.
44- func NewExporterWrapper (exporterName string , ocExporter trace.Exporter ) consumer.TraceConsumer {
45- return & ocExporterWrapper {spanName : "opencensus.service.exporter." + exporterName + ".ExportTrace" , ocExporter : ocExporter }
46- }
47-
48- type ocExporterWrapper struct {
49- spanName string
50- ocExporter trace.Exporter
51- }
52-
53- var _ consumer.TraceConsumer = (* ocExporterWrapper )(nil )
54-
55- func (octew * ocExporterWrapper ) ConsumeTraceData (ctx context.Context , td data.TraceData ) (aerr error ) {
56- ctx , span := trace .StartSpan (ctx ,
57- octew .spanName , trace .WithSampler (trace .NeverSample ()))
58-
59- if span .IsRecordingEvents () {
60- span .Annotate ([]trace.Attribute {
61- trace .Int64Attribute ("n_spans" , int64 (len (td .Spans ))),
62- }, "" )
63- }
64-
65- defer func () {
66- if aerr != nil && span .IsRecordingEvents () {
67- span .SetStatus (trace.Status {Code : trace .StatusCodeInternal , Message : aerr .Error ()})
68- }
69- span .End ()
70- }()
71-
72- return PushOcProtoSpansToOCTraceExporter (octew .ocExporter , td )
45+ func NewExporterWrapper (exporterName string , spanName string , ocExporter trace.Exporter ) (exporter.TraceExporter , error ) {
46+ return exporterhelper .NewTraceExporter (
47+ exporterName ,
48+ func (ctx context.Context , td data.TraceData ) (int , error ) {
49+ return PushOcProtoSpansToOCTraceExporter (ocExporter , td )
50+ },
51+ exporterhelper .WithSpanName (spanName ),
52+ exporterhelper .WithRecordMetrics (true ),
53+ )
7354}
7455
7556// TODO: Remove PushOcProtoSpansToOCTraceExporter after aws-xray is changed to ExporterWrapper.
7657
7758// PushOcProtoSpansToOCTraceExporter pushes TraceData to the given trace.Exporter by converting the
7859// protos to trace.SpanData.
79- func PushOcProtoSpansToOCTraceExporter (ocExporter trace.Exporter , td data.TraceData ) error {
60+ func PushOcProtoSpansToOCTraceExporter (ocExporter trace.Exporter , td data.TraceData ) ( int , error ) {
8061 var errs []error
8162 var goodSpans []* tracepb.Span
8263 for _ , span := range td .Spans {
@@ -89,5 +70,5 @@ func PushOcProtoSpansToOCTraceExporter(ocExporter trace.Exporter, td data.TraceD
8970 }
9071 }
9172
92- return internal .CombineErrors (errs )
73+ return len ( td . Spans ) - len ( goodSpans ), internal .CombineErrors (errs )
9374}
0 commit comments