func()

in exporter/collector/metrics.go [238:276]


func (me *MetricsExporter) Start(ctx context.Context, _ component.Host) error {
	me.shutdownC = make(chan struct{})
	if me.cfg.MetricConfig.CumulativeNormalization {
		me.mapper.normalizer = normalization.NewStandardNormalizer(me.shutdownC, me.obs.log)
	}
	clientOpts, err := generateClientOptions(ctx, &me.cfg.MetricConfig.ClientConfig, &me.cfg, monitoring.DefaultAuthScopes(), me.obs.meterProvider)
	if err != nil {
		return err
	}

	client, err := monitoring.NewMetricClient(ctx, clientOpts...)
	if err != nil {
		return err
	}

	if me.cfg.MetricConfig.ClientConfig.Compression == gzip.Name {
		client.CallOptions.CreateMetricDescriptor = append(client.CallOptions.CreateMetricDescriptor,
			gax.WithGRPCOptions(grpc.UseCompressor(gzip.Name)))
		client.CallOptions.CreateTimeSeries = append(client.CallOptions.CreateTimeSeries,
			gax.WithGRPCOptions(grpc.UseCompressor(gzip.Name)))
		client.CallOptions.CreateServiceTimeSeries = append(client.CallOptions.CreateServiceTimeSeries,
			gax.WithGRPCOptions(grpc.UseCompressor(gzip.Name)))
	}
	me.client = client
	if me.cfg.MetricConfig.WALConfig != nil {
		_, _, err = me.setupWAL()
		if err != nil {
			return err
		}
		// start WAL popper routine
		me.goroutines.Add(1)
		go me.runWALReadAndExportLoop(ctx)
	}

	// Fire up the metric descriptor exporter.
	me.goroutines.Add(1)
	go me.exportMetricDescriptorRunner()
	return nil
}