diff --git a/pkg/promotel/exporter.go b/pkg/promotel/exporter.go index bb571f2f4..bb681f861 100644 --- a/pkg/promotel/exporter.go +++ b/pkg/promotel/exporter.go @@ -7,6 +7,7 @@ import ( "go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/exporter" "go.opentelemetry.io/collector/exporter/otlpexporter" + "go.opentelemetry.io/collector/pdata/pmetric" "github.com/smartcontractkit/chainlink-common/pkg/logger" "github.com/smartcontractkit/chainlink-common/pkg/promotel/internal" @@ -15,6 +16,7 @@ import ( type MetricExporter interface { Runnable Consumer() consumer.Metrics + Export(ctx context.Context, md pmetric.Metrics) error } type metricExporter struct { @@ -23,6 +25,8 @@ type metricExporter struct { exporter exporter.Metrics } +type NextFunc consumer.ConsumeMetricsFunc + func (me *metricExporter) Start(ctx context.Context) error { return me.exporter.Start(ctx, me.host) } @@ -32,10 +36,13 @@ func (me *metricExporter) Close() error { } func (me *metricExporter) Consumer() consumer.Metrics { - // Writes metrics data to stdout return me.exporter } +func (me *metricExporter) Export(ctx context.Context, md pmetric.Metrics) error { + return me.exporter.ConsumeMetrics(ctx, md) +} + func NewMetricExporter(config ExporterConfig, logger logger.Logger) (MetricExporter, error) { factory := otlpexporter.NewFactory() // Creates a metrics receiver with the context, settings, config, and consumer diff --git a/pkg/promotel/promotel_test.go b/pkg/promotel/promotel_test.go index 0ebb073b9..b9aa57582 100644 --- a/pkg/promotel/promotel_test.go +++ b/pkg/promotel/promotel_test.go @@ -55,7 +55,7 @@ func TestExample(t *testing.T) { if findMetric(testCounterMetricName, md) { foundCh <- struct{}{} } - return exporter.Consumer().ConsumeMetrics(ctx, md) + return exporter.Export(ctx, md) } receiver := startMetricReceiver(g, r, logger, nextFunc) @@ -116,7 +116,7 @@ func startExporter(ctx context.Context, logger logger.Logger) promotel.MetricExp return exporter } -func startMetricReceiver(g prometheus.Gatherer, r prometheus.Registerer, logger logger.Logger, next consumer.ConsumeMetricsFunc) promotel.Runnable { +func startMetricReceiver(g prometheus.Gatherer, r prometheus.Registerer, logger logger.Logger, next promotel.NextFunc) promotel.Runnable { logger.Info("Starting promotel metric receiver") config, err := promotel.NewDefaultReceiverConfig() if err != nil { @@ -125,7 +125,7 @@ func startMetricReceiver(g prometheus.Gatherer, r prometheus.Registerer, logger // Gather metrics via promotel // MetricReceiver fetches metrics from prometheus.Gatherer, then converts it to OTel format and writes formatted metrics to stdout - receiver, err := promotel.NewMetricReceiver(config, g, r, next, logger) + receiver, err := promotel.NewMetricReceiver(config, g, r, consumer.ConsumeMetricsFunc(next), logger) if err != nil { logger.Fatal("Failed to create debug metric receiver", zap.Error(err)) }