func SendIntakeV2()

in pkg/metricgen/intake.go [37:78]


func SendIntakeV2(_ context.Context, opts ...ConfigOption) (EventStats, error) {
	cfg := newConfig(opts...)
	if err := cfg.Validate(); err != nil {
		return EventStats{}, fmt.Errorf("cannot validate IntakeV2 Metrics configuration: %w", err)
	}

	// disable builtin metrics entirely to have predictable metrics value.
	os.Setenv("ELASTIC_APM_DISABLE_METRICS", "system.*, *cpu*, *golang*")
	os.Setenv("ELASTIC_APM_VERIFY_SERVER_CERT", strconv.FormatBool(cfg.verifyServerCert))

	stats := EventStats{}

	tracer, err := apm.NewTracer(cfg.apmServiceName, "0.0.1")
	if err != nil {
		return EventStats{}, fmt.Errorf("cannot setup a tracer: %w", err)
	}

	// setup apmotel bridge to test metrics coming from OTLP
	exporter, err := apmotel.NewGatherer()
	if err != nil {
		return EventStats{}, fmt.Errorf("cannot init gatherer: %w", err)
	}

	provider := metric.NewMeterProvider(metric.WithReader(exporter))
	o := tracer.RegisterMetricsGatherer(exporter)
	defer o()

	d := tracer.RegisterMetricsGatherer(Gatherer{})
	defer d()

	meter := provider.Meter("metricgen")
	counter, _ := meter.Float64Counter("apmotel")
	counter.Add(context.Background(), 1)
	stats.Add(1)

	tracer.SendMetrics(nil)
	stats.Add(1)

	tracer.Flush(nil)

	return stats, nil
}