Rename [Trace|Metrics]DataProcessor to [Trace|Metrics]Consumer, add TraceProcessor similar to receiver,exporter. (#473)
* Rename [Trace|Metrics]DataProcessor to [Trace|Metrics]Processor * Rename TraceProcessor to TraceConsumer as discussed. * Add empty_test for processor.
This commit is contained in:
parent
8f26866f24
commit
62b0ae5be7
|
@ -33,12 +33,13 @@ import (
|
|||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/internal/config"
|
||||
"github.com/census-instrumentation/opencensus-service/internal/config/viperutils"
|
||||
"github.com/census-instrumentation/opencensus-service/internal/pprofserver"
|
||||
"github.com/census-instrumentation/opencensus-service/internal/version"
|
||||
"github.com/census-instrumentation/opencensus-service/observability"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
"github.com/census-instrumentation/opencensus-service/processor/multiconsumer"
|
||||
"github.com/census-instrumentation/opencensus-service/receiver/jaegerreceiver"
|
||||
"github.com/census-instrumentation/opencensus-service/receiver/opencensusreceiver"
|
||||
"github.com/census-instrumentation/opencensus-service/receiver/prometheusreceiver"
|
||||
|
@ -117,8 +118,8 @@ func runOCAgent() {
|
|||
log.Fatalf("Config: failed to create exporters from YAML: %v", err)
|
||||
}
|
||||
|
||||
commonSpanSink := processor.NewMultiTraceDataProcessor(traceExporters)
|
||||
commonMetricsSink := processor.NewMultiMetricsDataProcessor(metricsExporters)
|
||||
commonSpanSink := multiconsumer.NewTraceProcessor(traceExporters)
|
||||
commonMetricsSink := multiconsumer.NewMetricsProcessor(metricsExporters)
|
||||
|
||||
// Add other receivers here as they are implemented
|
||||
ocReceiverDoneFn, err := runOCReceiver(logger, &agentConfig, commonSpanSink, commonMetricsSink)
|
||||
|
@ -213,7 +214,7 @@ func runZPages(port int) func() error {
|
|||
return srv.Close
|
||||
}
|
||||
|
||||
func runOCReceiver(logger *zap.Logger, acfg *config.Config, tdp processor.TraceDataProcessor, mdp processor.MetricsDataProcessor) (doneFn func() error, err error) {
|
||||
func runOCReceiver(logger *zap.Logger, acfg *config.Config, tdp consumer.TraceConsumer, mdp consumer.MetricsConsumer) (doneFn func() error, err error) {
|
||||
tlsCredsOption, hasTLSCreds, err := acfg.OpenCensusReceiverTLSCredentialsServerOption()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("OpenCensus receiver TLS Credentials: %v", err)
|
||||
|
@ -270,7 +271,7 @@ func runOCReceiver(logger *zap.Logger, acfg *config.Config, tdp processor.TraceD
|
|||
return doneFn, nil
|
||||
}
|
||||
|
||||
func runJaegerReceiver(collectorThriftPort, collectorHTTPPort int, next processor.TraceDataProcessor) (doneFn func() error, err error) {
|
||||
func runJaegerReceiver(collectorThriftPort, collectorHTTPPort int, next consumer.TraceConsumer) (doneFn func() error, err error) {
|
||||
jtr, err := jaegerreceiver.New(context.Background(), &jaegerreceiver.Configuration{
|
||||
CollectorThriftPort: collectorThriftPort,
|
||||
CollectorHTTPPort: collectorHTTPPort,
|
||||
|
@ -292,7 +293,7 @@ func runJaegerReceiver(collectorThriftPort, collectorHTTPPort int, next processo
|
|||
return doneFn, nil
|
||||
}
|
||||
|
||||
func runZipkinReceiver(addr string, next processor.TraceDataProcessor) (doneFn func() error, err error) {
|
||||
func runZipkinReceiver(addr string, next consumer.TraceConsumer) (doneFn func() error, err error) {
|
||||
zi, err := zipkinreceiver.New(addr)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create the Zipkin receiver: %v", err)
|
||||
|
@ -308,7 +309,7 @@ func runZipkinReceiver(addr string, next processor.TraceDataProcessor) (doneFn f
|
|||
return doneFn, nil
|
||||
}
|
||||
|
||||
func runZipkinScribeReceiver(config *config.ScribeReceiverConfig, next processor.TraceDataProcessor) (doneFn func() error, err error) {
|
||||
func runZipkinScribeReceiver(config *config.ScribeReceiverConfig, next consumer.TraceConsumer) (doneFn func() error, err error) {
|
||||
zs, err := scribe.NewReceiver(config.Address, config.Port, config.Category)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create the Zipkin Scribe receiver: %v", err)
|
||||
|
@ -324,7 +325,7 @@ func runZipkinScribeReceiver(config *config.ScribeReceiverConfig, next processor
|
|||
return doneFn, nil
|
||||
}
|
||||
|
||||
func runPrometheusReceiver(v *viper.Viper, next processor.MetricsDataProcessor) (doneFn func() error, err error) {
|
||||
func runPrometheusReceiver(v *viper.Viper, next consumer.MetricsConsumer) (doneFn func() error, err error) {
|
||||
pmr, err := prometheusreceiver.New(v.Sub("receivers.prometheus"))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -26,6 +26,7 @@ import (
|
|||
|
||||
"github.com/census-instrumentation/opencensus-service/cmd/occollector/app/builder"
|
||||
"github.com/census-instrumentation/opencensus-service/cmd/occollector/app/sender"
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/exporter/loggingexporter"
|
||||
"github.com/census-instrumentation/opencensus-service/internal/collector/processor"
|
||||
"github.com/census-instrumentation/opencensus-service/internal/collector/processor/nodebatcher"
|
||||
|
@ -33,10 +34,9 @@ import (
|
|||
"github.com/census-instrumentation/opencensus-service/internal/collector/processor/tailsampling"
|
||||
"github.com/census-instrumentation/opencensus-service/internal/collector/sampling"
|
||||
"github.com/census-instrumentation/opencensus-service/internal/config"
|
||||
mainprocessor "github.com/census-instrumentation/opencensus-service/processor"
|
||||
)
|
||||
|
||||
func createExporters(v *viper.Viper, logger *zap.Logger) ([]func(), []mainprocessor.TraceDataProcessor, []mainprocessor.MetricsDataProcessor) {
|
||||
func createExporters(v *viper.Viper, logger *zap.Logger) ([]func(), []consumer.TraceConsumer, []consumer.MetricsConsumer) {
|
||||
// TODO: (@pjanotti) this is slightly modified from agent but in the end duplication, need to consolidate style and visibility.
|
||||
traceExporters, metricsExporters, doneFns, err := config.ExportersFromViperConfig(logger, v)
|
||||
if err != nil {
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
// Copyright 2019, OpenCensus 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 consumer
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/data"
|
||||
)
|
||||
|
||||
// MetricsConsumer is an interface that receives data.MetricsData, process it as needed, and
|
||||
// sends it to the next processing node if any or to the destination.
|
||||
//
|
||||
// ConsumeMetricsData receives data.MetricsData for processing by the MetricsConsumer.
|
||||
type MetricsConsumer interface {
|
||||
ConsumeMetricsData(ctx context.Context, md data.MetricsData) error
|
||||
}
|
||||
|
||||
// TraceConsumer is an interface that receives data.TraceData, process it as needed, and
|
||||
// sends it to the next processing node if any or to the destination.
|
||||
//
|
||||
// ConsumeTraceData receives data.TraceData for processing by the TraceConsumer.
|
||||
type TraceConsumer interface {
|
||||
ConsumeTraceData(ctx context.Context, td data.TraceData) error
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
// Copyright 2019, OpenCensus 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 consumer
|
||||
|
||||
// Package with interface only.
|
|
@ -26,9 +26,9 @@ import (
|
|||
|
||||
"github.com/spf13/viper"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/data"
|
||||
"github.com/census-instrumentation/opencensus-service/exporter/exporterwrapper"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
)
|
||||
|
||||
const defaultVersionForAWSXRayApplications = "latest"
|
||||
|
@ -57,11 +57,11 @@ type awsXRayExporter struct {
|
|||
defaultOptions []xray.Option
|
||||
}
|
||||
|
||||
var _ processor.TraceDataProcessor = (*awsXRayExporter)(nil)
|
||||
var _ consumer.TraceConsumer = (*awsXRayExporter)(nil)
|
||||
|
||||
// AWSXRayTraceExportersFromViper unmarshals the viper and returns an processor.TraceDataProcessor targeting
|
||||
// AWSXRayTraceExportersFromViper unmarshals the viper and returns an consumer.TraceConsumer targeting
|
||||
// AWS X-Ray according to the configuration settings.
|
||||
func AWSXRayTraceExportersFromViper(v *viper.Viper) (tdps []processor.TraceDataProcessor, mdps []processor.MetricsDataProcessor, doneFns []func() error, err error) {
|
||||
func AWSXRayTraceExportersFromViper(v *viper.Viper) (tps []consumer.TraceConsumer, mps []consumer.MetricsConsumer, doneFns []func() error, err error) {
|
||||
var cfg struct {
|
||||
AWSXRay *awsXRayConfig `mapstructure:"aws-xray"`
|
||||
}
|
||||
|
@ -84,7 +84,7 @@ func AWSXRayTraceExportersFromViper(v *viper.Viper) (tdps []processor.TraceDataP
|
|||
defaultServiceName: xc.DefaultServiceName,
|
||||
}
|
||||
|
||||
tdps = append(tdps, axe)
|
||||
tps = append(tps, axe)
|
||||
doneFns = append(doneFns, func() error {
|
||||
axe.Flush()
|
||||
return nil
|
||||
|
@ -146,7 +146,7 @@ func transformConfigToXRayOptions(axrCfg *awsXRayConfig) (xopts []xray.Option, e
|
|||
|
||||
// ExportSpans is the method that translates OpenCensus-Proto Traces into AWS X-Ray spans.
|
||||
// It uniquely maintains
|
||||
func (axe *awsXRayExporter) ProcessTraceData(ctx context.Context, td data.TraceData) (xerr error) {
|
||||
func (axe *awsXRayExporter) ConsumeTraceData(ctx context.Context, td data.TraceData) (xerr error) {
|
||||
ctx, span := trace.StartSpan(ctx,
|
||||
"opencensus.service.exporter.aws_xray.ExportSpans",
|
||||
trace.WithSampler(trace.NeverSample()))
|
||||
|
|
|
@ -18,8 +18,8 @@ import (
|
|||
datadog "github.com/DataDog/opencensus-go-exporter-datadog"
|
||||
"github.com/spf13/viper"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/exporter/exporterwrapper"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
)
|
||||
|
||||
type datadogConfig struct {
|
||||
|
@ -43,7 +43,7 @@ type datadogConfig struct {
|
|||
|
||||
// DatadogTraceExportersFromViper unmarshals the viper and returns an exporter.TraceExporter targeting
|
||||
// Datadog according to the configuration settings.
|
||||
func DatadogTraceExportersFromViper(v *viper.Viper) (tdps []processor.TraceDataProcessor, mdps []processor.MetricsDataProcessor, doneFns []func() error, err error) {
|
||||
func DatadogTraceExportersFromViper(v *viper.Viper) (tps []consumer.TraceConsumer, mps []consumer.MetricsConsumer, doneFns []func() error, err error) {
|
||||
var cfg struct {
|
||||
Datadog *datadogConfig `mapstructure:"datadog,omitempty"`
|
||||
}
|
||||
|
@ -74,7 +74,7 @@ func DatadogTraceExportersFromViper(v *viper.Viper) (tdps []processor.TraceDataP
|
|||
// TODO: Examine the Datadog exporter to see
|
||||
// if trace.ExportSpan was constraining and if perhaps the
|
||||
// upload can use the context and information from the Node.
|
||||
tdps = append(tdps, exporterwrapper.NewExporterWrapper("datadog", de))
|
||||
tps = append(tps, exporterwrapper.NewExporterWrapper("datadog", de))
|
||||
|
||||
// TODO: (@odeke-em, @songya23) implement ExportMetrics for Datadog.
|
||||
// mes = append(mes, oexp)
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
// Copyright 2019, OpenCensus 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 exporter
|
||||
|
||||
import (
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
)
|
||||
|
||||
// TraceExporter composes TraceConsumer with some additional exporter-specific functions.
|
||||
type TraceExporter interface {
|
||||
consumer.TraceConsumer
|
||||
|
||||
// TraceExportFormat gets the name of the format in which this exporter sends its data.
|
||||
// For exporters that can export multiple signals it is recommended to encode the signal
|
||||
// as suffix (e.g. "oc_trace").
|
||||
TraceExportFormat() string
|
||||
}
|
||||
|
||||
// MetricsExporter composes MetricsConsumer with some additional exporter-specific functions.
|
||||
type MetricsExporter interface {
|
||||
consumer.MetricsConsumer
|
||||
|
||||
// MetricsExportFormat gets the name of the format in which this exporter sends its data.
|
||||
// For exporters that can export multiple signals it is recommended to encode the signal
|
||||
// as suffix (e.g. "oc_metrics").
|
||||
MetricsExportFormat() string
|
||||
}
|
|
@ -26,11 +26,11 @@ type nopExporter int
|
|||
var _ exporter.TraceExporter = (*nopExporter)(nil)
|
||||
var _ exporter.MetricsExporter = (*nopExporter)(nil)
|
||||
|
||||
func (ne *nopExporter) ProcessTraceData(ctx context.Context, td data.TraceData) error {
|
||||
func (ne *nopExporter) ConsumeTraceData(ctx context.Context, td data.TraceData) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ne *nopExporter) ProcessMetricsData(ctx context.Context, md data.MetricsData) error {
|
||||
func (ne *nopExporter) ConsumeMetricsData(ctx context.Context, md data.MetricsData) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ func TestNopTraceExporterNoErrors(t *testing.T) {
|
|||
td := data.TraceData{
|
||||
Spans: make([]*tracepb.Span, 7),
|
||||
}
|
||||
if err := nte.ProcessTraceData(context.Background(), td); err != nil {
|
||||
if err := nte.ConsumeTraceData(context.Background(), td); err != nil {
|
||||
t.Errorf("Wanted nil got error")
|
||||
return
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ func TestNoopMetricsExporterNoErrors(t *testing.T) {
|
|||
md := data.MetricsData{
|
||||
Metrics: make([]*metricspb.Metric, 7),
|
||||
}
|
||||
if err := nme.ProcessMetricsData(context.Background(), md); err != nil {
|
||||
if err := nme.ConsumeMetricsData(context.Background(), md); err != nil {
|
||||
t.Errorf("Wanted nil got error")
|
||||
return
|
||||
}
|
||||
|
|
|
@ -30,8 +30,8 @@ type SinkTraceExporter struct {
|
|||
|
||||
var _ exporter.TraceExporter = (*SinkTraceExporter)(nil)
|
||||
|
||||
// ProcessTraceData stores traces for tests.
|
||||
func (ste *SinkTraceExporter) ProcessTraceData(ctx context.Context, td data.TraceData) error {
|
||||
// ConsumeTraceData stores traces for tests.
|
||||
func (ste *SinkTraceExporter) ConsumeTraceData(ctx context.Context, td data.TraceData) error {
|
||||
ste.mu.Lock()
|
||||
defer ste.mu.Unlock()
|
||||
|
||||
|
@ -66,8 +66,8 @@ type SinkMetricsExporter struct {
|
|||
|
||||
var _ exporter.MetricsExporter = (*SinkMetricsExporter)(nil)
|
||||
|
||||
// ProcessMetricsData stores traces for tests.
|
||||
func (sme *SinkMetricsExporter) ProcessMetricsData(ctx context.Context, md data.MetricsData) error {
|
||||
// ConsumeMetricsData stores traces for tests.
|
||||
func (sme *SinkMetricsExporter) ConsumeMetricsData(ctx context.Context, md data.MetricsData) error {
|
||||
sme.mu.Lock()
|
||||
defer sme.mu.Unlock()
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ func TestSinkTraceExporter(t *testing.T) {
|
|||
}
|
||||
want := make([]data.TraceData, 0, 7)
|
||||
for i := 0; i < 7; i++ {
|
||||
if err := sink.ProcessTraceData(context.Background(), td); err != nil {
|
||||
if err := sink.ConsumeTraceData(context.Background(), td); err != nil {
|
||||
t.Errorf("Wanted nil got error")
|
||||
return
|
||||
}
|
||||
|
@ -53,7 +53,7 @@ func TestSinkMetricsExporter(t *testing.T) {
|
|||
}
|
||||
want := make([]data.MetricsData, 0, 7)
|
||||
for i := 0; i < 7; i++ {
|
||||
if err := sink.ProcessMetricsData(context.Background(), md); err != nil {
|
||||
if err := sink.ConsumeMetricsData(context.Background(), md); err != nil {
|
||||
t.Errorf("Wanted nil got error")
|
||||
return
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// limitations under the License.
|
||||
|
||||
// Package exporterwrapper provides support for wrapping OC go library trace.Exporter into a
|
||||
// processor.TraceDataProcessor.
|
||||
// consumer.TraceConsumer.
|
||||
// For now it currently only provides statically imported OpenCensus
|
||||
// exporters like:
|
||||
// * Stackdriver Tracing and Monitoring
|
||||
|
@ -27,13 +27,13 @@ import (
|
|||
"go.opencensus.io/trace"
|
||||
|
||||
tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1"
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/data"
|
||||
"github.com/census-instrumentation/opencensus-service/internal"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
spandatatranslator "github.com/census-instrumentation/opencensus-service/translator/trace/spandata"
|
||||
)
|
||||
|
||||
// NewExporterWrapper returns a processor.TraceDataProcessor that converts OpenCensus Proto TraceData
|
||||
// NewExporterWrapper returns a consumer.TraceConsumer that converts OpenCensus Proto TraceData
|
||||
// to OpenCensus-Go SpanData and calls into the given trace.Exporter.
|
||||
//
|
||||
// This is a bootstrapping mechanism for us to re-use as many of
|
||||
|
@ -41,7 +41,7 @@ import (
|
|||
// by various vendors and contributors. Eventually the goal is to
|
||||
// get those exporters converted to directly receive
|
||||
// OpenCensus Proto TraceData.
|
||||
func NewExporterWrapper(exporterName string, ocExporter trace.Exporter) processor.TraceDataProcessor {
|
||||
func NewExporterWrapper(exporterName string, ocExporter trace.Exporter) consumer.TraceConsumer {
|
||||
return &ocExporterWrapper{spanName: "opencensus.service.exporter." + exporterName + ".ExportTrace", ocExporter: ocExporter}
|
||||
}
|
||||
|
||||
|
@ -50,9 +50,9 @@ type ocExporterWrapper struct {
|
|||
ocExporter trace.Exporter
|
||||
}
|
||||
|
||||
var _ processor.TraceDataProcessor = (*ocExporterWrapper)(nil)
|
||||
var _ consumer.TraceConsumer = (*ocExporterWrapper)(nil)
|
||||
|
||||
func (octew *ocExporterWrapper) ProcessTraceData(ctx context.Context, td data.TraceData) (aerr error) {
|
||||
func (octew *ocExporterWrapper) ConsumeTraceData(ctx context.Context, td data.TraceData) (aerr error) {
|
||||
ctx, span := trace.StartSpan(ctx,
|
||||
octew.spanName, trace.WithSampler(trace.NeverSample()))
|
||||
|
||||
|
|
|
@ -16,23 +16,8 @@ package exporter
|
|||
|
||||
import (
|
||||
"github.com/spf13/viper"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
)
|
||||
|
||||
// TraceExporter composes TraceDataProcessor with some additional
|
||||
// exporter-specific functions. This helps the service core to identify which
|
||||
// TraceDataProcessors are Exporters and which are internal processing
|
||||
// components, so that better validation of pipelines can be done.
|
||||
type TraceExporter interface {
|
||||
processor.TraceDataProcessor
|
||||
|
||||
// TraceExportFormat gets the name of the format in which this exporter sends its data.
|
||||
// For exporters that can export multiple signals it is recommended to encode the signal
|
||||
// as suffix (e.g. "oc_trace").
|
||||
TraceExportFormat() string
|
||||
}
|
||||
|
||||
// TraceExporterFactory is an interface that builds a new TraceExporter based on
|
||||
// some viper.Viper configuration.
|
||||
type TraceExporterFactory interface {
|
||||
|
@ -45,19 +30,6 @@ type TraceExporterFactory interface {
|
|||
DefaultConfig() *viper.Viper
|
||||
}
|
||||
|
||||
// MetricsExporter composes MetricsDataProcessor with some additional
|
||||
// exporter-specific functions. This helps the service core to identify which
|
||||
// MetricsDataProcessors are Exporters and which are internal processing
|
||||
// components, so that better validation of pipelines can be done.
|
||||
type MetricsExporter interface {
|
||||
processor.MetricsDataProcessor
|
||||
|
||||
// MetricsExportFormat gets the name of the format in which this exporter sends its data.
|
||||
// For exporters that can export multiple signals it is recommended to encode the signal
|
||||
// as suffix (e.g. "oc_metrics").
|
||||
MetricsExportFormat() string
|
||||
}
|
||||
|
||||
// MetricsExporterFactory is an interface that builds a new MetricsExporter based on
|
||||
// some viper.Viper configuration.
|
||||
type MetricsExporterFactory interface {
|
||||
|
|
|
@ -21,8 +21,8 @@ import (
|
|||
"github.com/honeycombio/opencensus-exporter/honeycomb"
|
||||
"github.com/spf13/viper"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/exporter/exporterwrapper"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
)
|
||||
|
||||
type honeycombConfig struct {
|
||||
|
@ -32,7 +32,7 @@ type honeycombConfig struct {
|
|||
|
||||
// HoneycombTraceExportersFromViper unmarshals the viper and returns an exporter.TraceExporter
|
||||
// targeting Honeycomb according to the configuration settings.
|
||||
func HoneycombTraceExportersFromViper(v *viper.Viper) (tdps []processor.TraceDataProcessor, mdps []processor.MetricsDataProcessor, doneFns []func() error, err error) {
|
||||
func HoneycombTraceExportersFromViper(v *viper.Viper) (tps []consumer.TraceConsumer, mps []consumer.MetricsConsumer, doneFns []func() error, err error) {
|
||||
var cfg struct {
|
||||
Honeycomb *honeycombConfig `mapstructure:"honeycomb"`
|
||||
}
|
||||
|
@ -47,7 +47,7 @@ func HoneycombTraceExportersFromViper(v *viper.Viper) (tdps []processor.TraceDat
|
|||
|
||||
rawExp := honeycomb.NewExporter(hc.WriteKey, hc.DatasetName)
|
||||
|
||||
tdps = append(tdps, exporterwrapper.NewExporterWrapper("honeycomb", rawExp))
|
||||
tps = append(tps, exporterwrapper.NewExporterWrapper("honeycomb", rawExp))
|
||||
doneFns = append(doneFns, func() error {
|
||||
rawExp.Close()
|
||||
return nil
|
||||
|
|
|
@ -18,8 +18,8 @@ import (
|
|||
"github.com/spf13/viper"
|
||||
"go.opencensus.io/exporter/jaeger"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/exporter/exporterwrapper"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
)
|
||||
|
||||
// Slight modified version of go/src/go.opencensus.io/exporter/jaeger/jaeger.go
|
||||
|
@ -32,7 +32,7 @@ type jaegerConfig struct {
|
|||
|
||||
// JaegerExportersFromViper unmarshals the viper and returns exporter.TraceExporters targeting
|
||||
// Jaeger according to the configuration settings.
|
||||
func JaegerExportersFromViper(v *viper.Viper) (tdps []processor.TraceDataProcessor, mdps []processor.MetricsDataProcessor, doneFns []func() error, err error) {
|
||||
func JaegerExportersFromViper(v *viper.Viper) (tps []consumer.TraceConsumer, mps []consumer.MetricsConsumer, doneFns []func() error, err error) {
|
||||
var cfg struct {
|
||||
Jaeger *jaegerConfig `mapstructure:"jaeger"`
|
||||
}
|
||||
|
@ -64,6 +64,6 @@ func JaegerExportersFromViper(v *viper.Viper) (tdps []processor.TraceDataProcess
|
|||
// TODO: Examine "contrib.go.opencensus.io/exporter/jaeger" to see
|
||||
// if trace.ExportSpan was constraining and if perhaps the Jaeger
|
||||
// upload can use the context and information from the Node.
|
||||
tdps = append(tdps, exporterwrapper.NewExporterWrapper("jaeger", je))
|
||||
tps = append(tps, exporterwrapper.NewExporterWrapper("jaeger", je))
|
||||
return
|
||||
}
|
||||
|
|
|
@ -20,8 +20,8 @@ import (
|
|||
"github.com/spf13/viper"
|
||||
kafka "github.com/yancl/opencensus-go-exporter-kafka"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/exporter/exporterwrapper"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
)
|
||||
|
||||
type kafkaConfig struct {
|
||||
|
@ -29,9 +29,9 @@ type kafkaConfig struct {
|
|||
Topic string `mapstructure:"topic,omitempty"`
|
||||
}
|
||||
|
||||
// KafkaExportersFromViper unmarshals the viper and returns an processor.TraceDataProcessor targeting
|
||||
// KafkaExportersFromViper unmarshals the viper and returns an consumer.TraceConsumer targeting
|
||||
// Kafka according to the configuration settings.
|
||||
func KafkaExportersFromViper(v *viper.Viper) (tdps []processor.TraceDataProcessor, mdps []processor.MetricsDataProcessor, doneFns []func() error, err error) {
|
||||
func KafkaExportersFromViper(v *viper.Viper) (tps []consumer.TraceConsumer, mps []consumer.MetricsConsumer, doneFns []func() error, err error) {
|
||||
var cfg struct {
|
||||
Kafka *kafkaConfig `mapstructure:"kafka"`
|
||||
}
|
||||
|
@ -53,7 +53,7 @@ func KafkaExportersFromViper(v *viper.Viper) (tdps []processor.TraceDataProcesso
|
|||
return nil, nil, nil, fmt.Errorf("Cannot configure Kafka Trace exporter: %v", kerr)
|
||||
}
|
||||
|
||||
tdps = append(tdps, exporterwrapper.NewExporterWrapper("kafka", kde))
|
||||
tps = append(tps, exporterwrapper.NewExporterWrapper("kafka", kde))
|
||||
doneFns = append(doneFns, func() error {
|
||||
kde.Flush()
|
||||
return nil
|
||||
|
|
|
@ -34,7 +34,7 @@ type loggingExporter struct{ logger *zap.Logger }
|
|||
var _ exporter.TraceExporter = (*loggingExporter)(nil)
|
||||
var _ exporter.MetricsExporter = (*loggingExporter)(nil)
|
||||
|
||||
func (le *loggingExporter) ProcessTraceData(ctx context.Context, td data.TraceData) error {
|
||||
func (le *loggingExporter) ConsumeTraceData(ctx context.Context, td data.TraceData) error {
|
||||
le.logger.Debug("loggingTraceExporter", zap.Int("#spans", len(td.Spans)))
|
||||
// TODO: Add ability to record the received data
|
||||
|
||||
|
@ -43,7 +43,7 @@ func (le *loggingExporter) ProcessTraceData(ctx context.Context, td data.TraceDa
|
|||
return nil
|
||||
}
|
||||
|
||||
func (le *loggingExporter) ProcessMetricsData(ctx context.Context, md data.MetricsData) error {
|
||||
func (le *loggingExporter) ConsumeMetricsData(ctx context.Context, md data.MetricsData) error {
|
||||
le.logger.Debug("loggingMetricsExporter", zap.Int("#metrics", len(md.Metrics)))
|
||||
// TODO: Add ability to record the received data
|
||||
// TODO: Record metrics
|
||||
|
|
|
@ -29,7 +29,7 @@ func TestLoggingTraceExporterNoErrors(t *testing.T) {
|
|||
td := data.TraceData{
|
||||
Spans: make([]*tracepb.Span, 7),
|
||||
}
|
||||
if err := lte.ProcessTraceData(context.Background(), td); err != nil {
|
||||
if err := lte.ConsumeTraceData(context.Background(), td); err != nil {
|
||||
t.Errorf("Wanted nil got error")
|
||||
return
|
||||
}
|
||||
|
@ -48,7 +48,7 @@ func TestLoggingMetricsExporterNoErrors(t *testing.T) {
|
|||
md := data.MetricsData{
|
||||
Metrics: make([]*metricspb.Metric, 7),
|
||||
}
|
||||
if err := lme.ProcessMetricsData(context.Background(), md); err != nil {
|
||||
if err := lme.ConsumeMetricsData(context.Background(), md); err != nil {
|
||||
t.Errorf("Wanted nil got error")
|
||||
return
|
||||
}
|
||||
|
|
|
@ -25,11 +25,11 @@ import (
|
|||
"google.golang.org/grpc/credentials"
|
||||
|
||||
agenttracepb "github.com/census-instrumentation/opencensus-proto/gen-go/agent/trace/v1"
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/data"
|
||||
"github.com/census-instrumentation/opencensus-service/internal/compression"
|
||||
"github.com/census-instrumentation/opencensus-service/internal/compression/grpc"
|
||||
"github.com/census-instrumentation/opencensus-service/observability"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
)
|
||||
|
||||
type opencensusConfig struct {
|
||||
|
@ -60,11 +60,11 @@ var (
|
|||
ErrUnableToGetTLSCreds = errors.New("OpenCensus exporter unable to read TLS credentials")
|
||||
)
|
||||
|
||||
var _ processor.TraceDataProcessor = (*ocagentExporter)(nil)
|
||||
var _ consumer.TraceConsumer = (*ocagentExporter)(nil)
|
||||
|
||||
// OpenCensusTraceExportersFromViper unmarshals the viper and returns an processor.TraceDataProcessor targeting
|
||||
// OpenCensusTraceExportersFromViper unmarshals the viper and returns an consumer.TraceConsumer targeting
|
||||
// OpenCensus Agent/Collector according to the configuration settings.
|
||||
func OpenCensusTraceExportersFromViper(v *viper.Viper) (tdps []processor.TraceDataProcessor, mdps []processor.MetricsDataProcessor, doneFns []func() error, err error) {
|
||||
func OpenCensusTraceExportersFromViper(v *viper.Viper) (tps []consumer.TraceConsumer, mps []consumer.MetricsConsumer, doneFns []func() error, err error) {
|
||||
var cfg struct {
|
||||
OpenCensus *opencensusConfig `mapstructure:"opencensus"`
|
||||
}
|
||||
|
@ -120,16 +120,16 @@ func OpenCensusTraceExportersFromViper(v *viper.Viper) (tdps []processor.TraceDa
|
|||
}
|
||||
|
||||
oexp := &ocagentExporter{exporters: exporters}
|
||||
tdps = append(tdps, oexp)
|
||||
tps = append(tps, oexp)
|
||||
|
||||
// TODO: (@odeke-em, @songya23) implement ExportMetrics for OpenCensus.
|
||||
// mdps = append(mdps, oexp)
|
||||
// mps = append(mps, oexp)
|
||||
return
|
||||
}
|
||||
|
||||
const exporterTagValue = "oc_trace"
|
||||
|
||||
func (oce *ocagentExporter) ProcessTraceData(ctx context.Context, td data.TraceData) error {
|
||||
func (oce *ocagentExporter) ConsumeTraceData(ctx context.Context, td data.TraceData) error {
|
||||
// Get an exporter worker round-robin
|
||||
exporter := oce.exporters[atomic.AddUint32(&oce.counter, 1)%uint32(len(oce.exporters))]
|
||||
err := exporter.ExportTraceServiceRequest(
|
||||
|
|
|
@ -21,8 +21,8 @@ import (
|
|||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/data"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
"github.com/spf13/viper"
|
||||
|
||||
// TODO: once this repository has been transferred to the
|
||||
|
@ -45,10 +45,10 @@ type prometheusConfig struct {
|
|||
|
||||
var errBlankPrometheusAddress = errors.New("expecting a non-blank address to run the Prometheus metrics handler")
|
||||
|
||||
// PrometheusExportersFromViper unmarshals the viper and returns processor.MetricsDataProcessors
|
||||
// PrometheusExportersFromViper unmarshals the viper and returns consumer.MetricsConsumers
|
||||
// targeting Prometheus according to the configuration settings.
|
||||
// It allows HTTP clients to scrape it on endpoint path "/metrics".
|
||||
func PrometheusExportersFromViper(v *viper.Viper) (tdps []processor.TraceDataProcessor, mdps []processor.MetricsDataProcessor, doneFns []func() error, err error) {
|
||||
func PrometheusExportersFromViper(v *viper.Viper) (tps []consumer.TraceConsumer, mps []consumer.MetricsConsumer, doneFns []func() error, err error) {
|
||||
var cfg struct {
|
||||
Prometheus *prometheusConfig `mapstructure:"prometheus"`
|
||||
}
|
||||
|
@ -92,7 +92,7 @@ func PrometheusExportersFromViper(v *viper.Viper) (tdps []processor.TraceDataPro
|
|||
|
||||
doneFns = append(doneFns, ln.Close)
|
||||
pexp := &prometheusExporter{exporter: pe}
|
||||
mdps = append(mdps, pexp)
|
||||
mps = append(mps, pexp)
|
||||
|
||||
return
|
||||
}
|
||||
|
@ -101,9 +101,9 @@ type prometheusExporter struct {
|
|||
exporter *prometheus.Exporter
|
||||
}
|
||||
|
||||
var _ processor.MetricsDataProcessor = (*prometheusExporter)(nil)
|
||||
var _ consumer.MetricsConsumer = (*prometheusExporter)(nil)
|
||||
|
||||
func (pe *prometheusExporter) ProcessMetricsData(ctx context.Context, md data.MetricsData) error {
|
||||
func (pe *prometheusExporter) ConsumeMetricsData(ctx context.Context, md data.MetricsData) error {
|
||||
for _, metric := range md.Metrics {
|
||||
_ = pe.exporter.ExportMetric(ctx, md.Node, md.Resource, metric)
|
||||
}
|
||||
|
|
|
@ -156,7 +156,7 @@ prometheus:
|
|||
},
|
||||
}
|
||||
me := mes[0]
|
||||
me.ProcessMetricsData(context.Background(), data.MetricsData{Metrics: []*metricspb.Metric{metric1}})
|
||||
me.ConsumeMetricsData(context.Background(), data.MetricsData{Metrics: []*metricspb.Metric{metric1}})
|
||||
|
||||
res, err := http.Get("http://localhost:7777/metrics")
|
||||
if err != nil {
|
||||
|
|
|
@ -24,9 +24,9 @@ import (
|
|||
"github.com/spf13/viper"
|
||||
"go.opencensus.io/trace"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/data"
|
||||
"github.com/census-instrumentation/opencensus-service/exporter/exporterwrapper"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
)
|
||||
|
||||
type stackdriverConfig struct {
|
||||
|
@ -41,11 +41,11 @@ type stackdriverExporter struct {
|
|||
exporter *stackdriver.Exporter
|
||||
}
|
||||
|
||||
var _ processor.MetricsDataProcessor = (*stackdriverExporter)(nil)
|
||||
var _ consumer.MetricsConsumer = (*stackdriverExporter)(nil)
|
||||
|
||||
// StackdriverTraceExportersFromViper unmarshals the viper and returns an processor.TraceDataProcessor targeting
|
||||
// StackdriverTraceExportersFromViper unmarshals the viper and returns an consumer.TraceConsumer targeting
|
||||
// Stackdriver according to the configuration settings.
|
||||
func StackdriverTraceExportersFromViper(v *viper.Viper) (tdps []processor.TraceDataProcessor, mdps []processor.MetricsDataProcessor, doneFns []func() error, err error) {
|
||||
func StackdriverTraceExportersFromViper(v *viper.Viper) (tps []consumer.TraceConsumer, mps []consumer.MetricsConsumer, doneFns []func() error, err error) {
|
||||
var cfg struct {
|
||||
Stackdriver *stackdriverConfig `mapstructure:"stackdriver"`
|
||||
}
|
||||
|
@ -92,11 +92,11 @@ func StackdriverTraceExportersFromViper(v *viper.Viper) (tdps []processor.TraceD
|
|||
// if trace.ExportSpan was constraining and if perhaps the Stackdriver
|
||||
// upload can use the context and information from the Node.
|
||||
if sc.EnableTracing {
|
||||
tdps = append(tdps, exporterwrapper.NewExporterWrapper("stackdriver", sde))
|
||||
tps = append(tps, exporterwrapper.NewExporterWrapper("stackdriver", sde))
|
||||
}
|
||||
|
||||
if sc.EnableMetrics {
|
||||
mdps = append(mdps, exp)
|
||||
mps = append(mps, exp)
|
||||
}
|
||||
|
||||
doneFns = append(doneFns, func() error {
|
||||
|
@ -106,7 +106,7 @@ func StackdriverTraceExportersFromViper(v *viper.Viper) (tdps []processor.TraceD
|
|||
return
|
||||
}
|
||||
|
||||
func (sde *stackdriverExporter) ProcessMetricsData(ctx context.Context, md data.MetricsData) error {
|
||||
func (sde *stackdriverExporter) ConsumeMetricsData(ctx context.Context, md data.MetricsData) error {
|
||||
ctx, span := trace.StartSpan(ctx,
|
||||
"opencensus.service.exporter.stackdriver.ExportMetricsData",
|
||||
trace.WithSampler(trace.NeverSample()))
|
||||
|
|
|
@ -31,9 +31,9 @@ import (
|
|||
"go.opencensus.io/trace"
|
||||
|
||||
commonpb "github.com/census-instrumentation/opencensus-proto/gen-go/agent/common/v1"
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/data"
|
||||
"github.com/census-instrumentation/opencensus-service/observability"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
spandatatranslator "github.com/census-instrumentation/opencensus-service/translator/trace/spandata"
|
||||
)
|
||||
|
||||
|
@ -79,7 +79,7 @@ func (zc *ZipkinConfig) EndpointURL() string {
|
|||
|
||||
// ZipkinExportersFromViper unmarshals the viper and returns an exporter.TraceExporter targeting
|
||||
// Zipkin according to the configuration settings.
|
||||
func ZipkinExportersFromViper(v *viper.Viper) (tdps []processor.TraceDataProcessor, mdps []processor.MetricsDataProcessor, doneFns []func() error, err error) {
|
||||
func ZipkinExportersFromViper(v *viper.Viper) (tps []consumer.TraceConsumer, mps []consumer.MetricsConsumer, doneFns []func() error, err error) {
|
||||
var cfg struct {
|
||||
Zipkin *ZipkinConfig `mapstructure:"zipkin"`
|
||||
}
|
||||
|
@ -109,7 +109,7 @@ func ZipkinExportersFromViper(v *viper.Viper) (tdps []processor.TraceDataProcess
|
|||
if err != nil {
|
||||
return nil, nil, nil, fmt.Errorf("Cannot configure Zipkin exporter: %v", err)
|
||||
}
|
||||
tdps = append(tdps, zle)
|
||||
tps = append(tps, zle)
|
||||
doneFns = append(doneFns, zle.stop)
|
||||
return
|
||||
}
|
||||
|
@ -192,7 +192,7 @@ func (ze *zipkinExporter) stop() error {
|
|||
return ze.reporter.Close()
|
||||
}
|
||||
|
||||
func (ze *zipkinExporter) ProcessTraceData(ctx context.Context, td data.TraceData) (zerr error) {
|
||||
func (ze *zipkinExporter) ConsumeTraceData(ctx context.Context, td data.TraceData) (zerr error) {
|
||||
ctx, span := trace.StartSpan(ctx,
|
||||
"opencensus.service.exporter.zipkin.ExportTrace",
|
||||
trace.WithSampler(trace.NeverSample()))
|
||||
|
|
|
@ -34,7 +34,7 @@ import (
|
|||
|
||||
"github.com/census-instrumentation/opencensus-service/internal/config/viperutils"
|
||||
"github.com/census-instrumentation/opencensus-service/internal/testutils"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
"github.com/census-instrumentation/opencensus-service/processor/multiconsumer"
|
||||
"github.com/census-instrumentation/opencensus-service/receiver/zipkinreceiver"
|
||||
)
|
||||
|
||||
|
@ -173,7 +173,7 @@ zipkin:
|
|||
t.Fatalf("Failed to create a new Zipkin receiver: %v", err)
|
||||
}
|
||||
|
||||
zexp := processor.NewMultiTraceDataProcessor(tes)
|
||||
zexp := multiconsumer.NewTraceProcessor(tes)
|
||||
if err := zi.StartTraceReception(context.Background(), zexp); err != nil {
|
||||
t.Fatalf("Failed to start trace reception: %v", err)
|
||||
}
|
||||
|
|
|
@ -17,23 +17,25 @@ package processor
|
|||
import (
|
||||
"context"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/data"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
"github.com/census-instrumentation/opencensus-service/processor/multiconsumer"
|
||||
)
|
||||
|
||||
type exporterSpanProcessor struct {
|
||||
tdp processor.TraceDataProcessor
|
||||
tp processor.TraceProcessor
|
||||
}
|
||||
|
||||
var _ SpanProcessor = (*exporterSpanProcessor)(nil)
|
||||
|
||||
// NewTraceExporterProcessor creates processor that feeds SpanData to the given trace exporters.
|
||||
func NewTraceExporterProcessor(traceExporters ...processor.TraceDataProcessor) SpanProcessor {
|
||||
return &exporterSpanProcessor{tdp: processor.NewMultiTraceDataProcessor(traceExporters)}
|
||||
func NewTraceExporterProcessor(traceExporters ...consumer.TraceConsumer) SpanProcessor {
|
||||
return &exporterSpanProcessor{tp: multiconsumer.NewTraceProcessor(traceExporters)}
|
||||
}
|
||||
|
||||
func (sp *exporterSpanProcessor) ProcessSpans(td data.TraceData, spanFormat string) error {
|
||||
err := sp.tdp.ProcessTraceData(context.Background(), td)
|
||||
err := sp.tp.ConsumeTraceData(context.Background(), td)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -17,8 +17,8 @@ package processor
|
|||
import (
|
||||
"context"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/data"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
)
|
||||
|
||||
type protoProcessorSink struct {
|
||||
|
@ -26,16 +26,16 @@ type protoProcessorSink struct {
|
|||
protoProcessor SpanProcessor
|
||||
}
|
||||
|
||||
var _ (processor.TraceDataProcessor) = (*protoProcessorSink)(nil)
|
||||
var _ (consumer.TraceConsumer) = (*protoProcessorSink)(nil)
|
||||
|
||||
// WrapWithSpanSink wraps a processor to be used as a span sink by receivers.
|
||||
func WrapWithSpanSink(format string, p SpanProcessor) processor.TraceDataProcessor {
|
||||
func WrapWithSpanSink(format string, p SpanProcessor) consumer.TraceConsumer {
|
||||
return &protoProcessorSink{
|
||||
sourceFormat: format,
|
||||
protoProcessor: p,
|
||||
}
|
||||
}
|
||||
|
||||
func (ps *protoProcessorSink) ProcessTraceData(ctx context.Context, td data.TraceData) error {
|
||||
func (ps *protoProcessorSink) ConsumeTraceData(ctx context.Context, td data.TraceData) error {
|
||||
return ps.protoProcessor.ProcessSpans(td, ps.sourceFormat)
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ import (
|
|||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/credentials"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/exporter/awsexporter"
|
||||
"github.com/census-instrumentation/opencensus-service/exporter/datadogexporter"
|
||||
"github.com/census-instrumentation/opencensus-service/exporter/honeycombexporter"
|
||||
|
@ -35,7 +36,6 @@ import (
|
|||
"github.com/census-instrumentation/opencensus-service/exporter/prometheusexporter"
|
||||
"github.com/census-instrumentation/opencensus-service/exporter/stackdriverexporter"
|
||||
"github.com/census-instrumentation/opencensus-service/exporter/zipkinexporter"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
"github.com/census-instrumentation/opencensus-service/receiver/opencensusreceiver"
|
||||
"github.com/census-instrumentation/opencensus-service/receiver/prometheusreceiver"
|
||||
)
|
||||
|
@ -443,10 +443,10 @@ func eqLocalHost(host string) bool {
|
|||
// + prometheus
|
||||
// + aws-xray
|
||||
// + honeycomb
|
||||
func ExportersFromViperConfig(logger *zap.Logger, v *viper.Viper) ([]processor.TraceDataProcessor, []processor.MetricsDataProcessor, []func() error, error) {
|
||||
func ExportersFromViperConfig(logger *zap.Logger, v *viper.Viper) ([]consumer.TraceConsumer, []consumer.MetricsConsumer, []func() error, error) {
|
||||
parseFns := []struct {
|
||||
name string
|
||||
fn func(*viper.Viper) ([]processor.TraceDataProcessor, []processor.MetricsDataProcessor, []func() error, error)
|
||||
fn func(*viper.Viper) ([]consumer.TraceConsumer, []consumer.MetricsConsumer, []func() error, error)
|
||||
}{
|
||||
{name: "datadog", fn: datadogexporter.DatadogTraceExportersFromViper},
|
||||
{name: "stackdriver", fn: stackdriverexporter.StackdriverTraceExportersFromViper},
|
||||
|
@ -459,8 +459,8 @@ func ExportersFromViperConfig(logger *zap.Logger, v *viper.Viper) ([]processor.T
|
|||
{name: "honeycomb", fn: honeycombexporter.HoneycombTraceExportersFromViper},
|
||||
}
|
||||
|
||||
var traceExporters []processor.TraceDataProcessor
|
||||
var metricsExporters []processor.MetricsDataProcessor
|
||||
var traceExporters []consumer.TraceConsumer
|
||||
var metricsExporters []consumer.MetricsConsumer
|
||||
var doneFns []func() error
|
||||
exportersViper := v.Sub("exporters")
|
||||
if exportersViper == nil {
|
||||
|
|
|
@ -103,7 +103,7 @@ func CheckRecordedMetricsForTraceExporter(t *testing.T, te exporter.TraceExporte
|
|||
ctx := observability.ContextWithReceiverName(context.Background(), fakeReceiverName)
|
||||
const numBatches = 7
|
||||
for i := 0; i < numBatches; i++ {
|
||||
if err := te.ProcessTraceData(ctx, td); err != nil {
|
||||
if err := te.ConsumeTraceData(ctx, td); err != nil {
|
||||
t.Fatalf("Want nil got %v", err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
// Copyright 2019, OpenCensus 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 processor
|
||||
|
||||
// Package with interface only.
|
|
@ -16,28 +16,28 @@ package processor
|
|||
|
||||
import "github.com/spf13/viper"
|
||||
|
||||
// TraceDataProcessorFactory is an interface that builds a new TraceDataProcessor based on
|
||||
// TraceProcessorFactory is an interface that builds a new TraceProcessor based on
|
||||
// some viper.Viper configuration.
|
||||
type TraceDataProcessorFactory interface {
|
||||
// Type gets the type of the TraceDataProcessor created by this factory.
|
||||
type TraceProcessorFactory interface {
|
||||
// Type gets the type of the TraceProcessor created by this factory.
|
||||
Type() string
|
||||
// NewFromViper takes a viper.Viper config and creates a new TraceDataProcessor which uses next as
|
||||
// the next TraceDataProcessor in the pipeline.
|
||||
NewFromViper(cfg *viper.Viper, next TraceDataProcessor) (TraceDataProcessor, error)
|
||||
// DefaultConfig returns the default configuration for TraceDataProcessors
|
||||
// NewFromViper takes a viper.Viper config and creates a new TraceProcessor which uses next as
|
||||
// the next TraceProcessor in the pipeline.
|
||||
NewFromViper(cfg *viper.Viper, next TraceProcessor) (TraceProcessor, error)
|
||||
// DefaultConfig returns the default configuration for TraceProcessors
|
||||
// created by this factory.
|
||||
DefaultConfig() *viper.Viper
|
||||
}
|
||||
|
||||
// MetricsDataProcessorFactory is an interface that builds a new MetricsDataProcessor based on
|
||||
// MetricsProcessorFactory is an interface that builds a new MetricsProcessor based on
|
||||
// some viper.Viper configuration.
|
||||
type MetricsDataProcessorFactory interface {
|
||||
// Type gets the type of the MetricsDataProcessor created by this factory.
|
||||
type MetricsProcessorFactory interface {
|
||||
// Type gets the type of the MetricsProcessor created by this factory.
|
||||
Type() string
|
||||
// NewFromViper takes a viper.Viper config and creates a new MetricsDataProcessor which uses next as
|
||||
// the next MetricsDataProcessor in the pipeline.
|
||||
NewFromViper(cfg *viper.Viper, next MetricsDataProcessor) (MetricsDataProcessor, error)
|
||||
// DefaultConfig returns the default configuration for MetricsDataProcessors
|
||||
// NewFromViper takes a viper.Viper config and creates a new MetricsProcessor which uses next as
|
||||
// the next MetricsProcessor in the pipeline.
|
||||
NewFromViper(cfg *viper.Viper, next MetricsProcessor) (MetricsProcessor, error)
|
||||
// DefaultConfig returns the default configuration for MetricsProcessors
|
||||
// created by this factory.
|
||||
DefaultConfig() *viper.Viper
|
||||
}
|
||||
|
|
|
@ -1,62 +0,0 @@
|
|||
// Copyright 2019, OpenCensus 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 processor
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/data"
|
||||
"github.com/census-instrumentation/opencensus-service/internal"
|
||||
)
|
||||
|
||||
// NewMultiMetricsDataProcessor wraps multiple metrics exporters in a single one.
|
||||
func NewMultiMetricsDataProcessor(mdps []MetricsDataProcessor) MetricsDataProcessor {
|
||||
return metricsDataProcessors(mdps)
|
||||
}
|
||||
|
||||
type metricsDataProcessors []MetricsDataProcessor
|
||||
|
||||
var _ MetricsDataProcessor = (*metricsDataProcessors)(nil)
|
||||
|
||||
// ExportMetricsData exports the MetricsData to all exporters wrapped by the current one.
|
||||
func (mdps metricsDataProcessors) ProcessMetricsData(ctx context.Context, md data.MetricsData) error {
|
||||
var errs []error
|
||||
for _, mdp := range mdps {
|
||||
if err := mdp.ProcessMetricsData(ctx, md); err != nil {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
}
|
||||
return internal.CombineErrors(errs)
|
||||
}
|
||||
|
||||
// NewMultiTraceDataProcessor wraps multiple trace exporters in a single one.
|
||||
func NewMultiTraceDataProcessor(tdps []TraceDataProcessor) TraceDataProcessor {
|
||||
return traceDataProcessors(tdps)
|
||||
}
|
||||
|
||||
type traceDataProcessors []TraceDataProcessor
|
||||
|
||||
var _ TraceDataProcessor = (*traceDataProcessors)(nil)
|
||||
|
||||
// ExportSpans exports the span data to all trace exporters wrapped by the current one.
|
||||
func (tdps traceDataProcessors) ProcessTraceData(ctx context.Context, td data.TraceData) error {
|
||||
var errs []error
|
||||
for _, tdp := range tdps {
|
||||
if err := tdp.ProcessTraceData(ctx, td); err != nil {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
}
|
||||
return internal.CombineErrors(errs)
|
||||
}
|
|
@ -0,0 +1,64 @@
|
|||
// Copyright 2019, OpenCensus 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 multiconsumer
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/data"
|
||||
"github.com/census-instrumentation/opencensus-service/internal"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
)
|
||||
|
||||
// NewMetricsProcessor wraps multiple metrics consumers in a single one.
|
||||
func NewMetricsProcessor(mcs []consumer.MetricsConsumer) processor.MetricsProcessor {
|
||||
return metricsConsumers(mcs)
|
||||
}
|
||||
|
||||
type metricsConsumers []consumer.MetricsConsumer
|
||||
|
||||
var _ processor.MetricsProcessor = (*metricsConsumers)(nil)
|
||||
|
||||
// ConsumeMetricsData exports the MetricsData to all consumers wrapped by the current one.
|
||||
func (mcs metricsConsumers) ConsumeMetricsData(ctx context.Context, md data.MetricsData) error {
|
||||
var errs []error
|
||||
for _, mdp := range mcs {
|
||||
if err := mdp.ConsumeMetricsData(ctx, md); err != nil {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
}
|
||||
return internal.CombineErrors(errs)
|
||||
}
|
||||
|
||||
// NewTraceProcessor wraps multiple trace consumers in a single one.
|
||||
func NewTraceProcessor(tcs []consumer.TraceConsumer) processor.TraceProcessor {
|
||||
return traceConsumers(tcs)
|
||||
}
|
||||
|
||||
type traceConsumers []consumer.TraceConsumer
|
||||
|
||||
var _ processor.TraceProcessor = (*traceConsumers)(nil)
|
||||
|
||||
// ConsumeTraceData exports the span data to all trace consumers wrapped by the current one.
|
||||
func (tcs traceConsumers) ConsumeTraceData(ctx context.Context, td data.TraceData) error {
|
||||
var errs []error
|
||||
for _, tdp := range tcs {
|
||||
if err := tdp.ConsumeTraceData(ctx, td); err != nil {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
}
|
||||
return internal.CombineErrors(errs)
|
||||
}
|
|
@ -11,7 +11,7 @@
|
|||
// 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 processor
|
||||
package multiconsumer
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
@ -20,16 +20,17 @@ import (
|
|||
|
||||
metricspb "github.com/census-instrumentation/opencensus-proto/gen-go/metrics/v1"
|
||||
tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1"
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/data"
|
||||
)
|
||||
|
||||
func TestMultiTraceDataProcessorMultiplexing(t *testing.T) {
|
||||
processors := make([]TraceDataProcessor, 3)
|
||||
func TestTraceProcessorMultiplexing(t *testing.T) {
|
||||
processors := make([]consumer.TraceConsumer, 3)
|
||||
for i := range processors {
|
||||
processors[i] = &mockTraceDataProcessor{}
|
||||
processors[i] = &mockTraceConsumer{}
|
||||
}
|
||||
|
||||
mtdp := NewMultiTraceDataProcessor(processors)
|
||||
tdp := NewTraceProcessor(processors)
|
||||
td := data.TraceData{
|
||||
Spans: make([]*tracepb.Span, 7),
|
||||
}
|
||||
|
@ -37,7 +38,7 @@ func TestMultiTraceDataProcessorMultiplexing(t *testing.T) {
|
|||
var wantSpansCount = 0
|
||||
for i := 0; i < 2; i++ {
|
||||
wantSpansCount += len(td.Spans)
|
||||
err := mtdp.ProcessTraceData(context.Background(), td)
|
||||
err := tdp.ConsumeTraceData(context.Background(), td)
|
||||
if err != nil {
|
||||
t.Errorf("Wanted nil got error")
|
||||
return
|
||||
|
@ -45,7 +46,7 @@ func TestMultiTraceDataProcessorMultiplexing(t *testing.T) {
|
|||
}
|
||||
|
||||
for _, p := range processors {
|
||||
m := p.(*mockTraceDataProcessor)
|
||||
m := p.(*mockTraceConsumer)
|
||||
if m.TotalSpans != wantSpansCount {
|
||||
t.Errorf("Wanted %d spans for every processor but got %d", wantSpansCount, m.TotalSpans)
|
||||
return
|
||||
|
@ -53,16 +54,16 @@ func TestMultiTraceDataProcessorMultiplexing(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestMultiTraceDataProcessorWhenOneErrors(t *testing.T) {
|
||||
processors := make([]TraceDataProcessor, 3)
|
||||
func TestTraceProcessorWhenOneErrors(t *testing.T) {
|
||||
processors := make([]consumer.TraceConsumer, 3)
|
||||
for i := range processors {
|
||||
processors[i] = &mockTraceDataProcessor{}
|
||||
processors[i] = &mockTraceConsumer{}
|
||||
}
|
||||
|
||||
// Make one processor return error
|
||||
processors[1].(*mockTraceDataProcessor).MustFail = true
|
||||
processors[1].(*mockTraceConsumer).MustFail = true
|
||||
|
||||
mtdp := NewMultiTraceDataProcessor(processors)
|
||||
tdp := NewTraceProcessor(processors)
|
||||
td := data.TraceData{
|
||||
Spans: make([]*tracepb.Span, 5),
|
||||
}
|
||||
|
@ -70,7 +71,7 @@ func TestMultiTraceDataProcessorWhenOneErrors(t *testing.T) {
|
|||
var wantSpansCount = 0
|
||||
for i := 0; i < 2; i++ {
|
||||
wantSpansCount += len(td.Spans)
|
||||
err := mtdp.ProcessTraceData(context.Background(), td)
|
||||
err := tdp.ConsumeTraceData(context.Background(), td)
|
||||
if err == nil {
|
||||
t.Errorf("Wanted error got nil")
|
||||
return
|
||||
|
@ -78,7 +79,7 @@ func TestMultiTraceDataProcessorWhenOneErrors(t *testing.T) {
|
|||
}
|
||||
|
||||
for _, p := range processors {
|
||||
m := p.(*mockTraceDataProcessor)
|
||||
m := p.(*mockTraceConsumer)
|
||||
if m.TotalSpans != wantSpansCount {
|
||||
t.Errorf("Wanted %d spans for every processor but got %d", wantSpansCount, m.TotalSpans)
|
||||
return
|
||||
|
@ -86,13 +87,13 @@ func TestMultiTraceDataProcessorWhenOneErrors(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestMultiMetricsDataProcessorMultiplexing(t *testing.T) {
|
||||
processors := make([]MetricsDataProcessor, 3)
|
||||
func TestMetricsProcessorMultiplexing(t *testing.T) {
|
||||
processors := make([]consumer.MetricsConsumer, 3)
|
||||
for i := range processors {
|
||||
processors[i] = &mockMetricsDataProcessor{}
|
||||
processors[i] = &mockMetricsConsumer{}
|
||||
}
|
||||
|
||||
mmdp := NewMultiMetricsDataProcessor(processors)
|
||||
mdp := NewMetricsProcessor(processors)
|
||||
md := data.MetricsData{
|
||||
Metrics: make([]*metricspb.Metric, 7),
|
||||
}
|
||||
|
@ -100,7 +101,7 @@ func TestMultiMetricsDataProcessorMultiplexing(t *testing.T) {
|
|||
var wantMetricsCount = 0
|
||||
for i := 0; i < 2; i++ {
|
||||
wantMetricsCount += len(md.Metrics)
|
||||
err := mmdp.ProcessMetricsData(context.Background(), md)
|
||||
err := mdp.ConsumeMetricsData(context.Background(), md)
|
||||
if err != nil {
|
||||
t.Errorf("Wanted nil got error")
|
||||
return
|
||||
|
@ -108,7 +109,7 @@ func TestMultiMetricsDataProcessorMultiplexing(t *testing.T) {
|
|||
}
|
||||
|
||||
for _, p := range processors {
|
||||
m := p.(*mockMetricsDataProcessor)
|
||||
m := p.(*mockMetricsConsumer)
|
||||
if m.TotalMetrics != wantMetricsCount {
|
||||
t.Errorf("Wanted %d metrics for every processor but got %d", wantMetricsCount, m.TotalMetrics)
|
||||
return
|
||||
|
@ -116,16 +117,16 @@ func TestMultiMetricsDataProcessorMultiplexing(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestMultiMetricsDataProcessorWhenOneErrors(t *testing.T) {
|
||||
processors := make([]MetricsDataProcessor, 3)
|
||||
func TestMetricsProcessorWhenOneErrors(t *testing.T) {
|
||||
processors := make([]consumer.MetricsConsumer, 3)
|
||||
for i := range processors {
|
||||
processors[i] = &mockMetricsDataProcessor{}
|
||||
processors[i] = &mockMetricsConsumer{}
|
||||
}
|
||||
|
||||
// Make one processor return error
|
||||
processors[1].(*mockMetricsDataProcessor).MustFail = true
|
||||
processors[1].(*mockMetricsConsumer).MustFail = true
|
||||
|
||||
mmdp := NewMultiMetricsDataProcessor(processors)
|
||||
mdp := NewMetricsProcessor(processors)
|
||||
md := data.MetricsData{
|
||||
Metrics: make([]*metricspb.Metric, 5),
|
||||
}
|
||||
|
@ -133,7 +134,7 @@ func TestMultiMetricsDataProcessorWhenOneErrors(t *testing.T) {
|
|||
var wantMetricsCount = 0
|
||||
for i := 0; i < 2; i++ {
|
||||
wantMetricsCount += len(md.Metrics)
|
||||
err := mmdp.ProcessMetricsData(context.Background(), md)
|
||||
err := mdp.ConsumeMetricsData(context.Background(), md)
|
||||
if err == nil {
|
||||
t.Errorf("Wanted error got nil")
|
||||
return
|
||||
|
@ -141,7 +142,7 @@ func TestMultiMetricsDataProcessorWhenOneErrors(t *testing.T) {
|
|||
}
|
||||
|
||||
for _, p := range processors {
|
||||
m := p.(*mockMetricsDataProcessor)
|
||||
m := p.(*mockMetricsConsumer)
|
||||
if m.TotalMetrics != wantMetricsCount {
|
||||
t.Errorf("Wanted %d metrics for every processor but got %d", wantMetricsCount, m.TotalMetrics)
|
||||
return
|
||||
|
@ -149,14 +150,14 @@ func TestMultiMetricsDataProcessorWhenOneErrors(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
type mockTraceDataProcessor struct {
|
||||
type mockTraceConsumer struct {
|
||||
TotalSpans int
|
||||
MustFail bool
|
||||
}
|
||||
|
||||
var _ TraceDataProcessor = &mockTraceDataProcessor{}
|
||||
var _ consumer.TraceConsumer = &mockTraceConsumer{}
|
||||
|
||||
func (p *mockTraceDataProcessor) ProcessTraceData(ctx context.Context, td data.TraceData) error {
|
||||
func (p *mockTraceConsumer) ConsumeTraceData(ctx context.Context, td data.TraceData) error {
|
||||
p.TotalSpans += len(td.Spans)
|
||||
if p.MustFail {
|
||||
return fmt.Errorf("this processor must fail")
|
||||
|
@ -165,14 +166,14 @@ func (p *mockTraceDataProcessor) ProcessTraceData(ctx context.Context, td data.T
|
|||
return nil
|
||||
}
|
||||
|
||||
type mockMetricsDataProcessor struct {
|
||||
type mockMetricsConsumer struct {
|
||||
TotalMetrics int
|
||||
MustFail bool
|
||||
}
|
||||
|
||||
var _ MetricsDataProcessor = &mockMetricsDataProcessor{}
|
||||
var _ consumer.MetricsConsumer = &mockMetricsConsumer{}
|
||||
|
||||
func (p *mockMetricsDataProcessor) ProcessMetricsData(ctx context.Context, td data.MetricsData) error {
|
||||
func (p *mockMetricsConsumer) ConsumeMetricsData(ctx context.Context, td data.MetricsData) error {
|
||||
p.TotalMetrics += len(td.Metrics)
|
||||
if p.MustFail {
|
||||
return fmt.Errorf("this processor must fail")
|
|
@ -15,23 +15,19 @@
|
|||
package processor
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/data"
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
)
|
||||
|
||||
// MetricsDataProcessor is an interface that receives data.MetricsData, process it as needed, and
|
||||
// sends it to the next processing node if any or to the destination.
|
||||
//
|
||||
// ProcessMetricsData receives data.MetricsData for processing by the MetricsDataProcessor.
|
||||
type MetricsDataProcessor interface {
|
||||
ProcessMetricsData(ctx context.Context, md data.MetricsData) error
|
||||
// TraceProcessor composes TraceConsumer with some additional processor-specific functions.
|
||||
type TraceProcessor interface {
|
||||
consumer.TraceConsumer
|
||||
|
||||
// TODO: Add processor specific functions.
|
||||
}
|
||||
|
||||
// TraceDataProcessor is an interface that receives data.TraceData, process it as needed, and
|
||||
// sends it to the next processing node if any or to the destination.
|
||||
//
|
||||
// ProcessTraceData receives data.TraceData for processing by the TraceDataProcessor.
|
||||
type TraceDataProcessor interface {
|
||||
ProcessTraceData(ctx context.Context, td data.TraceData) error
|
||||
// MetricsProcessor composes MetricsConsumer with some additional processor-specific functions.
|
||||
type MetricsProcessor interface {
|
||||
consumer.MetricsConsumer
|
||||
|
||||
// TODO: Add processor specific functions.
|
||||
}
|
||||
|
|
|
@ -17,32 +17,33 @@ package processortest
|
|||
import (
|
||||
"context"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/data"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
)
|
||||
|
||||
type nopProcessor struct {
|
||||
nextTraceProcessor processor.TraceDataProcessor
|
||||
nextMetricsProcessor processor.MetricsDataProcessor
|
||||
nextTraceProcessor consumer.TraceConsumer
|
||||
nextMetricsProcessor consumer.MetricsConsumer
|
||||
}
|
||||
|
||||
var _ processor.TraceDataProcessor = (*nopProcessor)(nil)
|
||||
var _ processor.MetricsDataProcessor = (*nopProcessor)(nil)
|
||||
var _ processor.TraceProcessor = (*nopProcessor)(nil)
|
||||
var _ processor.MetricsProcessor = (*nopProcessor)(nil)
|
||||
|
||||
func (np *nopProcessor) ProcessTraceData(ctx context.Context, td data.TraceData) error {
|
||||
return np.nextTraceProcessor.ProcessTraceData(ctx, td)
|
||||
func (np *nopProcessor) ConsumeTraceData(ctx context.Context, td data.TraceData) error {
|
||||
return np.nextTraceProcessor.ConsumeTraceData(ctx, td)
|
||||
}
|
||||
|
||||
func (np *nopProcessor) ProcessMetricsData(ctx context.Context, md data.MetricsData) error {
|
||||
return np.nextMetricsProcessor.ProcessMetricsData(ctx, md)
|
||||
func (np *nopProcessor) ConsumeMetricsData(ctx context.Context, md data.MetricsData) error {
|
||||
return np.nextMetricsProcessor.ConsumeMetricsData(ctx, md)
|
||||
}
|
||||
|
||||
// NewNopTraceProcessor creates an TraceDataProcessor that just pass the received data to the nextTraceProcessor.
|
||||
func NewNopTraceProcessor(nextTraceProcessor processor.TraceDataProcessor) processor.TraceDataProcessor {
|
||||
// NewNopTraceProcessor creates an TraceProcessor that just pass the received data to the nextTraceProcessor.
|
||||
func NewNopTraceProcessor(nextTraceProcessor consumer.TraceConsumer) consumer.TraceConsumer {
|
||||
return &nopProcessor{nextTraceProcessor: nextTraceProcessor}
|
||||
}
|
||||
|
||||
// NewNopMetricsProcessor creates an MetricsDataProcessor that just pass the received data to the nextMetricsProcessor.
|
||||
func NewNopMetricsProcessor(nextMetricsProcessor processor.MetricsDataProcessor) processor.MetricsDataProcessor {
|
||||
// NewNopMetricsProcessor creates an MetricsProcessor that just pass the received data to the nextMetricsProcessor.
|
||||
func NewNopMetricsProcessor(nextMetricsProcessor consumer.MetricsConsumer) consumer.MetricsConsumer {
|
||||
return &nopProcessor{nextMetricsProcessor: nextMetricsProcessor}
|
||||
}
|
||||
|
|
|
@ -24,13 +24,13 @@ import (
|
|||
"github.com/census-instrumentation/opencensus-service/exporter/exportertest"
|
||||
)
|
||||
|
||||
func TestNopTraceDataProcessorNoErrors(t *testing.T) {
|
||||
func TestNopTraceProcessorNoErrors(t *testing.T) {
|
||||
sink := new(exportertest.SinkTraceExporter)
|
||||
ntp := NewNopTraceProcessor(sink)
|
||||
want := data.TraceData{
|
||||
Spans: make([]*tracepb.Span, 7),
|
||||
}
|
||||
if err := ntp.ProcessTraceData(context.Background(), want); err != nil {
|
||||
if err := ntp.ConsumeTraceData(context.Background(), want); err != nil {
|
||||
t.Errorf("Wanted nil got error")
|
||||
return
|
||||
}
|
||||
|
@ -40,13 +40,13 @@ func TestNopTraceDataProcessorNoErrors(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestNopMetricsDataProcessorNoErrors(t *testing.T) {
|
||||
func TestNopMetricsProcessorNoErrors(t *testing.T) {
|
||||
sink := new(exportertest.SinkMetricsExporter)
|
||||
nmp := NewNopMetricsProcessor(sink)
|
||||
want := data.MetricsData{
|
||||
Metrics: make([]*metricspb.Metric, 7),
|
||||
}
|
||||
if err := nmp.ProcessMetricsData(context.Background(), want); err != nil {
|
||||
if err := nmp.ConsumeMetricsData(context.Background(), want); err != nil {
|
||||
t.Errorf("Wanted nil got error")
|
||||
return
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
package receiver
|
||||
|
||||
import (
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
|
@ -25,8 +25,8 @@ type TraceReceiverFactory interface {
|
|||
// Type gets the type of the TraceReceiver created by this factory.
|
||||
Type() string
|
||||
// NewFromViper takes a viper.Viper config and creates a new TraceReceiver which uses next as the
|
||||
// next TraceDataProcessor in the pipeline.
|
||||
NewFromViper(cfg *viper.Viper, next processor.TraceDataProcessor) (TraceReceiver, error)
|
||||
// next TraceConsumer in the pipeline.
|
||||
NewFromViper(cfg *viper.Viper, next consumer.TraceConsumer) (TraceReceiver, error)
|
||||
// DefaultConfig returns the default configuration for TraceReceivers
|
||||
// created by this factory.
|
||||
DefaultConfig() *viper.Viper
|
||||
|
@ -38,8 +38,8 @@ type MetricsReceiverFactory interface {
|
|||
// Type gets the type of the MetricsReceiver created by this factory.
|
||||
Type() string
|
||||
// NewFromViper takes a viper.Viper config and creates a new MetricsReceiver which uses next as the
|
||||
// next MetricsDataProcessor in the pipeline.
|
||||
NewFromViper(cfg *viper.Viper, next processor.MetricsDataProcessor) (MetricsReceiver, error)
|
||||
// next MetricsConsumer in the pipeline.
|
||||
NewFromViper(cfg *viper.Viper, next consumer.MetricsConsumer) (MetricsReceiver, error)
|
||||
// DefaultConfig returns the default configuration for MetricsReceivers
|
||||
// created by this factory.
|
||||
DefaultConfig() *viper.Viper
|
||||
|
|
|
@ -37,8 +37,8 @@ import (
|
|||
"github.com/uber/tchannel-go/thrift"
|
||||
"go.uber.org/zap"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/observability"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
"github.com/census-instrumentation/opencensus-service/receiver"
|
||||
jaegertranslator "github.com/census-instrumentation/opencensus-service/translator/trace/jaeger"
|
||||
)
|
||||
|
@ -60,7 +60,7 @@ type jReceiver struct {
|
|||
// mu protects the fields of this type
|
||||
mu sync.Mutex
|
||||
|
||||
nextProcessor processor.TraceDataProcessor
|
||||
nextConsumer consumer.TraceConsumer
|
||||
|
||||
startOnce sync.Once
|
||||
stopOnce sync.Once
|
||||
|
@ -170,7 +170,7 @@ func (jr *jReceiver) TraceSource() string {
|
|||
return traceSource
|
||||
}
|
||||
|
||||
func (jr *jReceiver) StartTraceReception(ctx context.Context, nextProcessor processor.TraceDataProcessor) error {
|
||||
func (jr *jReceiver) StartTraceReception(ctx context.Context, nextConsumer consumer.TraceConsumer) error {
|
||||
jr.mu.Lock()
|
||||
defer jr.mu.Unlock()
|
||||
|
||||
|
@ -186,8 +186,8 @@ func (jr *jReceiver) StartTraceReception(ctx context.Context, nextProcessor proc
|
|||
return
|
||||
}
|
||||
|
||||
// Finally set the nextProcessor, since we never encountered an error.
|
||||
jr.nextProcessor = nextProcessor
|
||||
// Finally set the nextConsumer, since we never encountered an error.
|
||||
jr.nextConsumer = nextConsumer
|
||||
|
||||
err = nil
|
||||
})
|
||||
|
@ -249,7 +249,7 @@ func (jr *jReceiver) SubmitBatches(ctx thrift.Context, batches []*jaeger.Batch)
|
|||
|
||||
if err == nil {
|
||||
ok = true
|
||||
jr.nextProcessor.ProcessTraceData(ctx, td)
|
||||
jr.nextConsumer.ConsumeTraceData(ctx, td)
|
||||
// We MUST unconditionally record metrics from this reception.
|
||||
observability.RecordTraceReceiverMetrics(ctxWithReceiverName, len(batch.Spans), len(batch.Spans)-len(td.Spans))
|
||||
}
|
||||
|
@ -279,7 +279,7 @@ func (jr *jReceiver) EmitBatch(batch *jaeger.Batch) error {
|
|||
return err
|
||||
}
|
||||
|
||||
err = jr.nextProcessor.ProcessTraceData(jr.defaultAgentCtx, td)
|
||||
err = jr.nextConsumer.ConsumeTraceData(jr.defaultAgentCtx, td)
|
||||
observability.RecordTraceReceiverMetrics(jr.defaultAgentCtx, len(batch.Spans), len(batch.Spans)-len(td.Spans))
|
||||
|
||||
return err
|
||||
|
|
|
@ -27,24 +27,24 @@ import (
|
|||
agentmetricspb "github.com/census-instrumentation/opencensus-proto/gen-go/agent/metrics/v1"
|
||||
metricspb "github.com/census-instrumentation/opencensus-proto/gen-go/metrics/v1"
|
||||
resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1"
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/data"
|
||||
"github.com/census-instrumentation/opencensus-service/observability"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
)
|
||||
|
||||
// Receiver is the type used to handle metrics from OpenCensus exporters.
|
||||
type Receiver struct {
|
||||
nextProcessor processor.MetricsDataProcessor
|
||||
nextConsumer consumer.MetricsConsumer
|
||||
metricBufferPeriod time.Duration
|
||||
metricBufferCount int
|
||||
}
|
||||
|
||||
// New creates a new ocmetrics.Receiver reference.
|
||||
func New(nextProcessor processor.MetricsDataProcessor, opts ...Option) (*Receiver, error) {
|
||||
if nextProcessor == nil {
|
||||
return nil, errors.New("needs a non-nil processor.MetricsDataProcessor")
|
||||
func New(nextConsumer consumer.MetricsConsumer, opts ...Option) (*Receiver, error) {
|
||||
if nextConsumer == nil {
|
||||
return nil, errors.New("needs a non-nil consumer.MetricsConsumer")
|
||||
}
|
||||
ocr := &Receiver{nextProcessor: nextProcessor}
|
||||
ocr := &Receiver{nextConsumer: nextConsumer}
|
||||
for _, opt := range opts {
|
||||
opt.WithReceiver(ocr)
|
||||
}
|
||||
|
@ -142,7 +142,7 @@ func (ocr *Receiver) batchMetricExporting(longLivedRPCCtx context.Context, paylo
|
|||
|
||||
nMetrics := int64(0)
|
||||
for _, md := range mds {
|
||||
ocr.nextProcessor.ProcessMetricsData(ctx, *md)
|
||||
ocr.nextConsumer.ConsumeMetricsData(ctx, *md)
|
||||
nMetrics += int64(len(md.Metrics))
|
||||
}
|
||||
|
||||
|
|
|
@ -34,10 +34,10 @@ import (
|
|||
commonpb "github.com/census-instrumentation/opencensus-proto/gen-go/agent/common/v1"
|
||||
agentmetricspb "github.com/census-instrumentation/opencensus-proto/gen-go/agent/metrics/v1"
|
||||
metricspb "github.com/census-instrumentation/opencensus-proto/gen-go/metrics/v1"
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/data"
|
||||
"github.com/census-instrumentation/opencensus-service/internal"
|
||||
"github.com/census-instrumentation/opencensus-service/observability"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
)
|
||||
|
||||
// TODO: add E2E tests once ocagent implements metric service client.
|
||||
|
@ -330,9 +330,9 @@ func newMetricAppender() *metricAppender {
|
|||
return &metricAppender{metricsPerNode: make(map[*commonpb.Node][]*metricspb.Metric)}
|
||||
}
|
||||
|
||||
var _ processor.MetricsDataProcessor = (*metricAppender)(nil)
|
||||
var _ consumer.MetricsConsumer = (*metricAppender)(nil)
|
||||
|
||||
func (sa *metricAppender) ProcessMetricsData(ctx context.Context, md data.MetricsData) error {
|
||||
func (sa *metricAppender) ConsumeMetricsData(ctx context.Context, md data.MetricsData) error {
|
||||
sa.Lock()
|
||||
defer sa.Unlock()
|
||||
|
||||
|
@ -341,7 +341,7 @@ func (sa *metricAppender) ProcessMetricsData(ctx context.Context, md data.Metric
|
|||
return nil
|
||||
}
|
||||
|
||||
func ocReceiverOnGRPCServer(t *testing.T, sr processor.MetricsDataProcessor, opts ...Option) (oci *Receiver, port int, done func()) {
|
||||
func ocReceiverOnGRPCServer(t *testing.T, sr consumer.MetricsConsumer, opts ...Option) (oci *Receiver, port int, done func()) {
|
||||
ln, err := net.Listen("tcp", ":0")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to find an available address to run the gRPC server: %v", err)
|
||||
|
|
|
@ -24,9 +24,9 @@ import (
|
|||
commonpb "github.com/census-instrumentation/opencensus-proto/gen-go/agent/common/v1"
|
||||
agenttracepb "github.com/census-instrumentation/opencensus-proto/gen-go/agent/trace/v1"
|
||||
resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1"
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/data"
|
||||
"github.com/census-instrumentation/opencensus-service/observability"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -37,10 +37,10 @@ const (
|
|||
|
||||
// Receiver is the type used to handle spans from OpenCensus exporters.
|
||||
type Receiver struct {
|
||||
nextProcessor processor.TraceDataProcessor
|
||||
numWorkers int
|
||||
workers []*receiverWorker
|
||||
messageChan chan *traceDataWithCtx
|
||||
nextConsumer consumer.TraceConsumer
|
||||
numWorkers int
|
||||
workers []*receiverWorker
|
||||
messageChan chan *traceDataWithCtx
|
||||
}
|
||||
|
||||
type traceDataWithCtx struct {
|
||||
|
@ -49,16 +49,16 @@ type traceDataWithCtx struct {
|
|||
}
|
||||
|
||||
// New creates a new opencensus.Receiver reference.
|
||||
func New(nextProcessor processor.TraceDataProcessor, opts ...Option) (*Receiver, error) {
|
||||
if nextProcessor == nil {
|
||||
return nil, errors.New("needs a non-nil processor.TraceDataProcessor")
|
||||
func New(nextConsumer consumer.TraceConsumer, opts ...Option) (*Receiver, error) {
|
||||
if nextConsumer == nil {
|
||||
return nil, errors.New("needs a non-nil consumer.TraceConsumer")
|
||||
}
|
||||
|
||||
messageChan := make(chan *traceDataWithCtx, messageChannelSize)
|
||||
ocr := &Receiver{
|
||||
nextProcessor: nextProcessor,
|
||||
numWorkers: defaultNumWorkers,
|
||||
messageChan: messageChan,
|
||||
nextConsumer: nextConsumer,
|
||||
numWorkers: defaultNumWorkers,
|
||||
messageChan: messageChan,
|
||||
}
|
||||
for _, opt := range opts {
|
||||
opt(ocr)
|
||||
|
@ -199,7 +199,7 @@ func (rw *receiverWorker) export(longLivedCtx context.Context, tracedata *data.T
|
|||
// If the starting RPC has a parent span, then add it as a parent link.
|
||||
observability.SetParentLink(longLivedCtx, span)
|
||||
|
||||
rw.receiver.nextProcessor.ProcessTraceData(ctx, *tracedata)
|
||||
rw.receiver.nextConsumer.ConsumeTraceData(ctx, *tracedata)
|
||||
|
||||
span.Annotate([]trace.Attribute{
|
||||
trace.Int64Attribute("num_spans", int64(len(tracedata.Spans))),
|
||||
|
|
|
@ -36,10 +36,10 @@ import (
|
|||
commonpb "github.com/census-instrumentation/opencensus-proto/gen-go/agent/common/v1"
|
||||
agenttracepb "github.com/census-instrumentation/opencensus-proto/gen-go/agent/trace/v1"
|
||||
tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1"
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/data"
|
||||
"github.com/census-instrumentation/opencensus-service/internal"
|
||||
"github.com/census-instrumentation/opencensus-service/observability"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
"go.opencensus.io/trace"
|
||||
"go.opencensus.io/trace/tracestate"
|
||||
)
|
||||
|
@ -464,9 +464,9 @@ func newSpanAppender() *spanAppender {
|
|||
return &spanAppender{spansPerNode: make(map[*commonpb.Node][]*tracepb.Span)}
|
||||
}
|
||||
|
||||
var _ processor.TraceDataProcessor = (*spanAppender)(nil)
|
||||
var _ consumer.TraceConsumer = (*spanAppender)(nil)
|
||||
|
||||
func (sa *spanAppender) ProcessTraceData(ctx context.Context, td data.TraceData) error {
|
||||
func (sa *spanAppender) ConsumeTraceData(ctx context.Context, td data.TraceData) error {
|
||||
sa.Lock()
|
||||
defer sa.Unlock()
|
||||
|
||||
|
@ -474,7 +474,7 @@ func (sa *spanAppender) ProcessTraceData(ctx context.Context, td data.TraceData)
|
|||
return nil
|
||||
}
|
||||
|
||||
func ocReceiverOnGRPCServer(t *testing.T, sr processor.TraceDataProcessor, opts ...Option) (oci *Receiver, port int, done func()) {
|
||||
func ocReceiverOnGRPCServer(t *testing.T, sr consumer.TraceConsumer, opts ...Option) (oci *Receiver, port int, done func()) {
|
||||
ln, err := net.Listen("tcp", ":0")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to find an available address to run the gRPC server: %v", err)
|
||||
|
|
|
@ -25,8 +25,8 @@ import (
|
|||
|
||||
"google.golang.org/grpc"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/observability"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
"github.com/census-instrumentation/opencensus-service/receiver/opencensusreceiver/ocmetrics"
|
||||
"github.com/census-instrumentation/opencensus-service/receiver/opencensusreceiver/octrace"
|
||||
gatewayruntime "github.com/grpc-ecosystem/grpc-gateway/runtime"
|
||||
|
@ -96,15 +96,15 @@ func (ocr *Receiver) TraceSource() string {
|
|||
|
||||
// StartTraceReception exclusively runs the Trace receiver on the gRPC server.
|
||||
// To start both Trace and Metrics receivers/services, please use Start.
|
||||
func (ocr *Receiver) StartTraceReception(ctx context.Context, ts processor.TraceDataProcessor) error {
|
||||
err := ocr.registerTraceDataProcessor(ts)
|
||||
func (ocr *Receiver) StartTraceReception(ctx context.Context, ts consumer.TraceConsumer) error {
|
||||
err := ocr.registerTraceConsumer(ts)
|
||||
if err != nil && err != errAlreadyStarted {
|
||||
return err
|
||||
}
|
||||
return ocr.startServer()
|
||||
}
|
||||
|
||||
func (ocr *Receiver) registerTraceDataProcessor(ts processor.TraceDataProcessor) error {
|
||||
func (ocr *Receiver) registerTraceConsumer(ts consumer.TraceConsumer) error {
|
||||
var err = errAlreadyStarted
|
||||
|
||||
ocr.startTraceReceiverOnce.Do(func() {
|
||||
|
@ -125,15 +125,15 @@ func (ocr *Receiver) MetricsSource() string {
|
|||
|
||||
// StartMetricsReception exclusively runs the Metrics receiver on the gRPC server.
|
||||
// To start both Trace and Metrics receivers/services, please use Start.
|
||||
func (ocr *Receiver) StartMetricsReception(ctx context.Context, ms processor.MetricsDataProcessor) error {
|
||||
err := ocr.registerMetricsDataProcessor(ms)
|
||||
func (ocr *Receiver) StartMetricsReception(ctx context.Context, ms consumer.MetricsConsumer) error {
|
||||
err := ocr.registerMetricsConsumer(ms)
|
||||
if err != nil && err != errAlreadyStarted {
|
||||
return err
|
||||
}
|
||||
return ocr.startServer()
|
||||
}
|
||||
|
||||
func (ocr *Receiver) registerMetricsDataProcessor(ms processor.MetricsDataProcessor) error {
|
||||
func (ocr *Receiver) registerMetricsConsumer(ms consumer.MetricsConsumer) error {
|
||||
var err = errAlreadyStarted
|
||||
|
||||
ocr.startMetricsReceiverOnce.Do(func() {
|
||||
|
@ -179,11 +179,11 @@ func (ocr *Receiver) StopMetricsReception(ctx context.Context) error {
|
|||
}
|
||||
|
||||
// Start runs all the receivers/services namely, Trace and Metrics services.
|
||||
func (ocr *Receiver) Start(ctx context.Context, ts processor.TraceDataProcessor, ms processor.MetricsDataProcessor) error {
|
||||
if err := ocr.registerTraceDataProcessor(ts); err != nil && err != errAlreadyStarted {
|
||||
func (ocr *Receiver) Start(ctx context.Context, tc consumer.TraceConsumer, mc consumer.MetricsConsumer) error {
|
||||
if err := ocr.registerTraceConsumer(tc); err != nil && err != errAlreadyStarted {
|
||||
return err
|
||||
}
|
||||
if err := ocr.registerMetricsDataProcessor(ms); err != nil && err != errAlreadyStarted {
|
||||
if err := ocr.registerMetricsConsumer(mc); err != nil && err != errAlreadyStarted {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
|
@ -25,8 +25,8 @@ import (
|
|||
"gopkg.in/yaml.v2"
|
||||
|
||||
agentmetricspb "github.com/census-instrumentation/opencensus-proto/gen-go/agent/metrics/v1"
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/data"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
"github.com/census-instrumentation/opencensus-service/receiver"
|
||||
"github.com/orijtech/promreceiver"
|
||||
"github.com/prometheus/prometheus/config"
|
||||
|
@ -97,15 +97,15 @@ func (pr *Preceiver) MetricsSource() string {
|
|||
|
||||
// StartMetricsReception is the method that starts Prometheus scraping and it
|
||||
// is controlled by having previously defined a Configuration using perhaps New.
|
||||
func (pr *Preceiver) StartMetricsReception(ctx context.Context, nextProcessor processor.MetricsDataProcessor) error {
|
||||
func (pr *Preceiver) StartMetricsReception(ctx context.Context, nextConsumer consumer.MetricsConsumer) error {
|
||||
var err = errAlreadyStarted
|
||||
pr.startOnce.Do(func() {
|
||||
if nextProcessor == nil {
|
||||
if nextConsumer == nil {
|
||||
err = errNilMetricsReceiverSink
|
||||
return
|
||||
}
|
||||
|
||||
tms := &promMetricsReceiverToOpenCensusMetricsReceiver{nextProcessor: nextProcessor}
|
||||
tms := &promMetricsReceiverToOpenCensusMetricsReceiver{nextConsumer: nextConsumer}
|
||||
cfg := pr.cfg
|
||||
pr.recv, err = promreceiver.ReceiverFromConfig(
|
||||
context.Background(),
|
||||
|
@ -118,7 +118,7 @@ func (pr *Preceiver) StartMetricsReception(ctx context.Context, nextProcessor pr
|
|||
}
|
||||
|
||||
// Flush triggers the Flush method on the underlying Prometheus scrapers and instructs
|
||||
// them to immediately sned over the metrics they've collected, to the MetricsDataProcessor.
|
||||
// them to immediately sned over the metrics they've collected, to the MetricsConsumer.
|
||||
func (pr *Preceiver) Flush() {
|
||||
pr.recv.Flush()
|
||||
}
|
||||
|
@ -130,7 +130,7 @@ func (pr *Preceiver) StopMetricsReception(ctx context.Context) error {
|
|||
}
|
||||
|
||||
type promMetricsReceiverToOpenCensusMetricsReceiver struct {
|
||||
nextProcessor processor.MetricsDataProcessor
|
||||
nextConsumer consumer.MetricsConsumer
|
||||
}
|
||||
|
||||
var _ promreceiver.MetricsSink = (*promMetricsReceiverToOpenCensusMetricsReceiver)(nil)
|
||||
|
@ -143,7 +143,7 @@ func (pmrtomr *promMetricsReceiverToOpenCensusMetricsReceiver) ReceiveMetrics(ct
|
|||
return errNilRequest
|
||||
}
|
||||
|
||||
err := pmrtomr.nextProcessor.ProcessMetricsData(ctx, data.MetricsData{
|
||||
err := pmrtomr.nextConsumer.ConsumeMetricsData(ctx, data.MetricsData{
|
||||
Node: ereq.Node,
|
||||
Resource: ereq.Resource,
|
||||
Metrics: ereq.Metrics,
|
||||
|
|
|
@ -17,14 +17,14 @@ package receiver
|
|||
import (
|
||||
"context"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
_ "github.com/census-instrumentation/opencensus-service/internal/compression/grpc" // load in supported grpc compression encodings
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
)
|
||||
|
||||
// A TraceReceiver is an "arbitrary data"-to-"trace proto span" converter.
|
||||
// Its purpose is to translate data from the wild into trace proto accompanied
|
||||
// by a *commonpb.Node to uniquely identify where that data comes from.
|
||||
// TraceReceiver feeds a processor.TraceDataProcessor with data.
|
||||
// TraceReceiver feeds a consumer.TraceConsumer with data.
|
||||
//
|
||||
// For example it could be Zipkin data source which translates
|
||||
// Zipkin spans into *tracepb.Span-s.
|
||||
|
@ -33,7 +33,7 @@ type TraceReceiver interface {
|
|||
TraceSource() string
|
||||
|
||||
// StartTraceReception tells the receiver to start its processing.
|
||||
StartTraceReception(ctx context.Context, nextProcessor processor.TraceDataProcessor) error
|
||||
StartTraceReception(ctx context.Context, nextConsumer consumer.TraceConsumer) error
|
||||
|
||||
// StopTraceReception tells the receiver that should stop reception,
|
||||
// giving it a chance to perform any necessary clean-up.
|
||||
|
@ -43,7 +43,7 @@ type TraceReceiver interface {
|
|||
// A MetricsReceiver is an "arbitrary data"-to-"metric proto" converter.
|
||||
// Its purpose is to translate data from the wild into metric proto accompanied
|
||||
// by a *commonpb.Node to uniquely identify where that data comes from.
|
||||
// MetricsReceiver feeds a processor.MetricsDataProcessor with data.
|
||||
// MetricsReceiver feeds a consumer.MetricsConsumer with data.
|
||||
//
|
||||
// For example it could be Prometheus data source which translates
|
||||
// Prometheus metrics into *metricpb.Metric-s.
|
||||
|
@ -52,7 +52,7 @@ type MetricsReceiver interface {
|
|||
MetricsSource() string
|
||||
|
||||
// StartMetricsReception tells the receiver to start its processing.
|
||||
StartMetricsReception(ctx context.Context, nextProcessor processor.MetricsDataProcessor) error
|
||||
StartMetricsReception(ctx context.Context, nextConsumer consumer.MetricsConsumer) error
|
||||
|
||||
// StopMetricsReception tells the receiver that should stop reception,
|
||||
// giving it a chance to perform any necessary clean-up.
|
||||
|
|
|
@ -26,8 +26,8 @@ import (
|
|||
"github.com/jaegertracing/jaeger/thrift-gen/zipkincore"
|
||||
"github.com/omnition/scribe-go/if/scribe/gen-go/scribe"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/observability"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
"github.com/census-instrumentation/opencensus-service/receiver"
|
||||
zipkintranslator "github.com/census-instrumentation/opencensus-service/translator/trace/zipkin"
|
||||
)
|
||||
|
@ -73,18 +73,18 @@ func (r *scribeReceiver) TraceSource() string {
|
|||
return traceSource
|
||||
}
|
||||
|
||||
func (r *scribeReceiver) StartTraceReception(ctx context.Context, nextProcessor processor.TraceDataProcessor) error {
|
||||
func (r *scribeReceiver) StartTraceReception(ctx context.Context, nextConsumer consumer.TraceConsumer) error {
|
||||
r.Lock()
|
||||
defer r.Unlock()
|
||||
|
||||
if nextProcessor == nil {
|
||||
if nextConsumer == nil {
|
||||
return errors.New("trace reception requires a non-nil destination")
|
||||
}
|
||||
|
||||
err := errAlreadyStarted
|
||||
r.startOnce.Do(func() {
|
||||
err = nil
|
||||
r.collector.nextProcessor = nextProcessor
|
||||
r.collector.nextConsumer = nextConsumer
|
||||
serverSocket, sockErr := thrift.NewTServerSocket(r.addr + ":" + strconv.Itoa(int(r.port)))
|
||||
if sockErr != nil {
|
||||
err = sockErr
|
||||
|
@ -128,7 +128,7 @@ type scribeCollector struct {
|
|||
category string
|
||||
msgDecoder *base64.Encoding
|
||||
tBinProtocolFactory *thrift.TBinaryProtocolFactory
|
||||
nextProcessor processor.TraceDataProcessor
|
||||
nextConsumer consumer.TraceConsumer
|
||||
defaultCtx context.Context
|
||||
}
|
||||
|
||||
|
@ -174,7 +174,7 @@ func (sc *scribeCollector) Log(messages []*scribe.LogEntry) (r scribe.ResultCode
|
|||
|
||||
tdsSize := 0
|
||||
for _, td := range tds {
|
||||
sc.nextProcessor.ProcessTraceData(sc.defaultCtx, td)
|
||||
sc.nextConsumer.ConsumeTraceData(sc.defaultCtx, td)
|
||||
tdsSize += len(td.Spans)
|
||||
}
|
||||
|
||||
|
|
|
@ -29,8 +29,8 @@ import (
|
|||
"github.com/golang/protobuf/ptypes/timestamp"
|
||||
"github.com/omnition/scribe-go/if/scribe/gen-go/scribe"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/data"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
)
|
||||
|
||||
func TestNonEqualCategoryIsIgnored(t *testing.T) {
|
||||
|
@ -154,9 +154,9 @@ func newMockTraceSink(numReceiveTraceDataCount int) *mockTraceSink {
|
|||
}
|
||||
}
|
||||
|
||||
var _ processor.TraceDataProcessor = (*mockTraceSink)(nil)
|
||||
var _ consumer.TraceConsumer = (*mockTraceSink)(nil)
|
||||
|
||||
func (m *mockTraceSink) ProcessTraceData(ctx context.Context, td data.TraceData) error {
|
||||
func (m *mockTraceSink) ConsumeTraceData(ctx context.Context, td data.TraceData) error {
|
||||
m.receivedData = append(m.receivedData, td)
|
||||
m.wg.Done()
|
||||
return nil
|
||||
|
|
|
@ -37,10 +37,10 @@ import (
|
|||
zipkinproto "github.com/openzipkin/zipkin-go/proto/v2"
|
||||
"go.opencensus.io/trace"
|
||||
|
||||
"github.com/census-instrumentation/opencensus-service/consumer"
|
||||
"github.com/census-instrumentation/opencensus-service/data"
|
||||
"github.com/census-instrumentation/opencensus-service/internal"
|
||||
"github.com/census-instrumentation/opencensus-service/observability"
|
||||
"github.com/census-instrumentation/opencensus-service/processor"
|
||||
"github.com/census-instrumentation/opencensus-service/receiver"
|
||||
tracetranslator "github.com/census-instrumentation/opencensus-service/translator/trace"
|
||||
zipkintranslator "github.com/census-instrumentation/opencensus-service/translator/trace/zipkin"
|
||||
|
@ -54,7 +54,7 @@ type ZipkinReceiver struct {
|
|||
// addr is the address onto which the HTTP server will be bound
|
||||
addr string
|
||||
|
||||
nextProcessor processor.TraceDataProcessor
|
||||
nextConsumer consumer.TraceConsumer
|
||||
|
||||
startOnce sync.Once
|
||||
stopOnce sync.Once
|
||||
|
@ -93,7 +93,7 @@ func (zr *ZipkinReceiver) TraceSource() string {
|
|||
}
|
||||
|
||||
// StartTraceReception spins up the receiver's HTTP server and makes the receiver start its processing.
|
||||
func (zr *ZipkinReceiver) StartTraceReception(ctx context.Context, nextProcessor processor.TraceDataProcessor) error {
|
||||
func (zr *ZipkinReceiver) StartTraceReception(ctx context.Context, nextConsumer consumer.TraceConsumer) error {
|
||||
zr.mu.Lock()
|
||||
defer zr.mu.Unlock()
|
||||
|
||||
|
@ -111,7 +111,7 @@ func (zr *ZipkinReceiver) StartTraceReception(ctx context.Context, nextProcessor
|
|||
_ = server.Serve(ln)
|
||||
}()
|
||||
|
||||
zr.nextProcessor = nextProcessor
|
||||
zr.nextConsumer = nextConsumer
|
||||
zr.server = server
|
||||
|
||||
err = nil
|
||||
|
@ -278,7 +278,7 @@ const (
|
|||
)
|
||||
|
||||
// The ZipkinReceiver receives spans from endpoint /api/v2 as JSON,
|
||||
// unmarshals them and sends them along to the nextProcessor.
|
||||
// unmarshals them and sends them along to the nextConsumer.
|
||||
func (zr *ZipkinReceiver) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
// Trace this method
|
||||
ctx, span := trace.StartSpan(context.Background(), "ZipkinReceiver.Export")
|
||||
|
@ -322,7 +322,7 @@ func (zr *ZipkinReceiver) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||
ctxWithReceiverName := observability.ContextWithReceiverName(ctx, receiverTagValue)
|
||||
tdsSize := 0
|
||||
for _, td := range tds {
|
||||
zr.nextProcessor.ProcessTraceData(ctxWithReceiverName, td)
|
||||
zr.nextConsumer.ConsumeTraceData(ctxWithReceiverName, td)
|
||||
tdsSize += len(td.Spans)
|
||||
}
|
||||
|
||||
|
|
|
@ -225,7 +225,7 @@ func TestConversionRoundtrip(t *testing.T) {
|
|||
}
|
||||
}]`)
|
||||
|
||||
zi := &ZipkinReceiver{nextProcessor: exportertest.NewNopTraceExporter()}
|
||||
zi := &ZipkinReceiver{nextConsumer: exportertest.NewNopTraceExporter()}
|
||||
ereqs, err := zi.v2ToTraceSpans(receiverInputJSON, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to parse and convert receiver JSON: %v", err)
|
||||
|
|
Loading…
Reference in New Issue