collector/exporter/googlemanagedprometheusexporter/factory.go (56 lines of code) (raw):
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
//go:generate mdatagen metadata.yaml
package googlemanagedprometheusexporter // import "exporter/googlemanagedprometheusexporter"
import (
"context"
"time"
"github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector"
"github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector/googlemanagedprometheus"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"github.com/GoogleCloudPlatform/run-gmp-sidecar/collector/exporter/googlemanagedprometheusexporter/internal/metadata"
)
const (
defaultTimeout = 12 * time.Second // Consistent with Cloud Monitoring's timeout
)
// NewFactory creates a factory for the googlemanagedprometheus exporter
func NewFactory() exporter.Factory {
return exporter.NewFactory(
metadata.Type,
createDefaultConfig,
exporter.WithMetrics(createMetricsExporter, metadata.MetricsStability),
)
}
// createDefaultConfig creates the default configuration for exporter.
func createDefaultConfig() component.Config {
return &Config{
TimeoutSettings: exporterhelper.TimeoutConfig{Timeout: defaultTimeout},
QueueSettings: exporterhelper.NewDefaultQueueConfig(),
GMPConfig: GMPConfig{
MetricConfig: MetricConfig{
Config: googlemanagedprometheus.DefaultConfig(),
},
},
}
}
// createMetricsExporter creates a metrics exporter based on this config.
func createMetricsExporter(
ctx context.Context,
params exporter.Settings,
cfg component.Config) (exporter.Metrics, error) {
eCfg := cfg.(*Config)
collectorConfig := eCfg.GMPConfig.toCollectorConfig()
collectorConfig.MetricConfig.CumulativeNormalization = false
mExp, err := collector.NewGoogleCloudMetricsExporter(ctx, collectorConfig, params.TelemetrySettings.Logger, params.TelemetrySettings.MeterProvider, params.BuildInfo.Version, eCfg.TimeoutSettings.Timeout)
if err != nil {
return nil, err
}
return exporterhelper.NewMetrics(
ctx,
params,
cfg,
mExp.PushMetrics,
exporterhelper.WithStart(mExp.Start),
exporterhelper.WithShutdown(mExp.Shutdown),
// Disable exporterhelper Timeout, since we are using a custom mechanism
// within exporter itself
exporterhelper.WithTimeout(exporterhelper.TimeoutConfig{Timeout: 0}),
exporterhelper.WithQueue(eCfg.QueueSettings),
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: true}),
)
}