Skip to content

Commit 3aac7c1

Browse files
Build receivers based on new configuration (#25)
- Build receivers and plug them into pipelines. - Added tests to verify that single pipeline and multiple pipeline (fan out) per receiver work correctly. - Disable -v flag in go test to reduce unnecessary noise in output, we have too many tests to use -v flag. Errors are still properly printed. This makes finding the cause of test failures easier. - Add logging to various application startup steps. - Changed logging from %q to %s in multiple places to make it more human readable when output in json format. Testing done: 1. make && all unit tests pass. 2. make otelsvc and produce otelsvc_linux executable. 3. Manually verify that otelsvc_linux runs and correctly forwards trace data received via jaeger receiver and exported via opencensus exporter. This is the first successful run of unified OpenTelemetry Service.
1 parent 2a40f54 commit 3aac7c1

File tree

16 files changed

+765
-42
lines changed

16 files changed

+765
-42
lines changed

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ ALL_SRC := $(shell find . -name '*.go' \
77
# ALL_PKGS is used with 'go cover'
88
ALL_PKGS := $(shell go list $(sort $(dir $(ALL_SRC))))
99

10-
GOTEST_OPT?=-v -race -timeout 30s
10+
GOTEST_OPT?= -race -timeout 30s
1111
GOTEST_OPT_WITH_COVERAGE = $(GOTEST_OPT) -coverprofile=coverage.txt -covermode=atomic
1212
GOTEST=go test
1313
GOFMT=gofmt

cmd/occollector/app/builder/exporters_builder.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ func (eb *ExportersBuilder) buildExporter(
174174
// Could not create because this exporter does not support this data type.
175175
return nil, typeMismatchErr(config, requirement.requiredBy, configmodels.TracesDataType)
176176
}
177-
return nil, fmt.Errorf("error creating %q exporter: %v", config.Name(), err)
177+
return nil, fmt.Errorf("error creating %s exporter: %v", config.Name(), err)
178178
}
179179

180180
exporter.tc = tc
@@ -189,13 +189,15 @@ func (eb *ExportersBuilder) buildExporter(
189189
// Could not create because this exporter does not support this data type.
190190
return nil, typeMismatchErr(config, requirement.requiredBy, configmodels.MetricsDataType)
191191
}
192-
return nil, fmt.Errorf("error creating %q exporter: %v", config.Name(), err)
192+
return nil, fmt.Errorf("error creating %s exporter: %v", config.Name(), err)
193193
}
194194

195195
exporter.mc = mc
196196
exporter.stop = combineStopFunc(exporter.stop, stopFunc)
197197
}
198198

199+
eb.logger.Info("Exporter is enabled.", zap.String("exporter", config.Name()))
200+
199201
return exporter, nil
200202
}
201203

@@ -204,10 +206,8 @@ func typeMismatchErr(
204206
requiredByPipeline *configmodels.Pipeline,
205207
dataType configmodels.DataType,
206208
) error {
207-
return fmt.Errorf(
208-
"pipeline %q produces %q to exporter %s which does not support %q "+
209-
"telemetry data. exporter will be detached from pipeline",
210-
requiredByPipeline.Name, dataType.GetDataTypeStr(),
211-
config.Name(), dataType.GetDataTypeStr(),
209+
return fmt.Errorf("%s is a %s pipeline but has a %s which does not support %s",
210+
requiredByPipeline.Name, dataType.GetString(),
211+
config.Name(), dataType.GetString(),
212212
)
213213
}

cmd/occollector/app/builder/pipelines_builder.go

+15-13
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,11 @@ func NewPipelinesBuilder(
5454
}
5555

5656
// Build pipeline processors from config.
57-
func (eb *PipelinesBuilder) Build() (PipelineProcessors, error) {
57+
func (pb *PipelinesBuilder) Build() (PipelineProcessors, error) {
5858
pipelineProcessors := make(PipelineProcessors)
5959

60-
for _, pipeline := range eb.config.Pipelines {
61-
firstProcessor, err := eb.buildPipeline(pipeline)
60+
for _, pipeline := range pb.config.Pipelines {
61+
firstProcessor, err := pb.buildPipeline(pipeline)
6262
if err != nil {
6363
return nil, err
6464
}
@@ -71,7 +71,7 @@ func (eb *PipelinesBuilder) Build() (PipelineProcessors, error) {
7171
// Builds a pipeline of processors. Returns the first processor in the pipeline.
7272
// The last processor in the pipeline will be plugged to fan out the data into exporters
7373
// that are configured for this pipeline.
74-
func (eb *PipelinesBuilder) buildPipeline(
74+
func (pb *PipelinesBuilder) buildPipeline(
7575
pipelineCfg *configmodels.Pipeline,
7676
) (*builtProcessor, error) {
7777

@@ -83,9 +83,9 @@ func (eb *PipelinesBuilder) buildPipeline(
8383

8484
switch pipelineCfg.InputType {
8585
case configmodels.TracesDataType:
86-
tc = eb.buildFanoutExportersTraceConsumer(pipelineCfg.Exporters)
86+
tc = pb.buildFanoutExportersTraceConsumer(pipelineCfg.Exporters)
8787
case configmodels.MetricsDataType:
88-
mc = eb.buildFanoutExportersMetricsConsumer(pipelineCfg.Exporters)
88+
mc = pb.buildFanoutExportersMetricsConsumer(pipelineCfg.Exporters)
8989
}
9090

9191
// Now build the processors backwards, starting from the last one.
@@ -94,7 +94,7 @@ func (eb *PipelinesBuilder) buildPipeline(
9494
// in the pipeline and so on.
9595
for i := len(pipelineCfg.Processors) - 1; i >= 0; i-- {
9696
procName := pipelineCfg.Processors[i]
97-
procCfg := eb.config.Processors[procName]
97+
procCfg := pb.config.Processors[procName]
9898

9999
factory := factories.GetProcessorFactory(procCfg.Type())
100100

@@ -115,22 +115,24 @@ func (eb *PipelinesBuilder) buildPipeline(
115115
}
116116
}
117117

118+
pb.logger.Info("Pipeline is enabled.", zap.String("pipelines", pipelineCfg.Name))
119+
118120
return &builtProcessor{tc, mc}, nil
119121
}
120122

121123
// Converts the list of exporter names to a list of corresponding builtExporters.
122-
func (eb *PipelinesBuilder) getBuiltExportersByNames(exporterNames []string) []*builtExporter {
124+
func (pb *PipelinesBuilder) getBuiltExportersByNames(exporterNames []string) []*builtExporter {
123125
var result []*builtExporter
124126
for _, name := range exporterNames {
125-
exporter := eb.exporters[eb.config.Exporters[name]]
127+
exporter := pb.exporters[pb.config.Exporters[name]]
126128
result = append(result, exporter)
127129
}
128130

129131
return result
130132
}
131133

132-
func (eb *PipelinesBuilder) buildFanoutExportersTraceConsumer(exporterNames []string) consumer.TraceConsumer {
133-
builtExporters := eb.getBuiltExportersByNames(exporterNames)
134+
func (pb *PipelinesBuilder) buildFanoutExportersTraceConsumer(exporterNames []string) consumer.TraceConsumer {
135+
builtExporters := pb.getBuiltExportersByNames(exporterNames)
134136

135137
// Optimize for the case when there is only one exporter, no need to create junction point.
136138
if len(builtExporters) == 1 {
@@ -146,8 +148,8 @@ func (eb *PipelinesBuilder) buildFanoutExportersTraceConsumer(exporterNames []st
146148
return multiconsumer.NewTraceProcessor(exporters)
147149
}
148150

149-
func (eb *PipelinesBuilder) buildFanoutExportersMetricsConsumer(exporterNames []string) consumer.MetricsConsumer {
150-
builtExporters := eb.getBuiltExportersByNames(exporterNames)
151+
func (pb *PipelinesBuilder) buildFanoutExportersMetricsConsumer(exporterNames []string) consumer.MetricsConsumer {
152+
builtExporters := pb.getBuiltExportersByNames(exporterNames)
151153

152154
// Optimize for the case when there is only one exporter, no need to create junction point.
153155
if len(builtExporters) == 1 {

0 commit comments

Comments
 (0)