func CollectOpsAgentSelfMetrics()

in internal/self_metrics/self_metrics.go [189:257]


func CollectOpsAgentSelfMetrics(ctx context.Context, userUc, mergedUc *confgenerator.UnifiedConfig) (err error) {

	// Resource for GCP and SDK detectors
	res, err := resource.New(ctx,
		resource.WithDetectors(gcp.NewDetector()),
		resource.WithTelemetrySDK(),
	)
	if err != nil {
		return fmt.Errorf("failed to create resource: %w", err)
	}

	// Create exporter pipeline
	exporter, err := mexporter.New(
		mexporter.WithMetricDescriptorTypeFormatter(agentMetricsPrefixFormatter),
		mexporter.WithDisableCreateMetricDescriptors(),
	)
	if err != nil {
		return fmt.Errorf("failed to create exporter: %w", err)
	}

	featureTrackingProvider := CreateFeatureTrackingMeterProvider(exporter, res)
	err = InstrumentFeatureTrackingMetric(ctx, userUc, mergedUc, featureTrackingProvider.Meter("ops_agent/feature_tracking"))
	if err != nil {
		return fmt.Errorf("failed to instrument feature tracking: %w", err)
	}

	enabledReceiversProvider := CreateEnabledReceiversMeterProvider(exporter, res)
	err = InstrumentEnabledReceiversMetric(ctx, mergedUc, enabledReceiversProvider.Meter("ops_agent/self_metrics"))
	if err != nil {
		return fmt.Errorf("failed to instrument enabled receivers: %w", err)
	}

	defer func() {
		if serr := featureTrackingProvider.Shutdown(ctx); serr != nil {
			myStatus, ok := status.FromError(serr)
			if !ok && myStatus.Code() == codes.Unknown {
				log.Print(serr)
			} else if err == nil {
				err = fmt.Errorf("failed to shutdown meter provider: %w", serr)
			}
		}
		if serr := enabledReceiversProvider.Shutdown(ctx); serr != nil {
			myStatus, ok := status.FromError(serr)
			if !ok && myStatus.Code() == codes.Unknown {
				log.Print(serr)
			} else if err == nil {
				err = fmt.Errorf("failed to shutdown meter provider: %w", serr)
			}
		}
	}()

	timer := time.NewTimer(10 * time.Second)

	for {
		select {
		case <-timer.C:
			err := featureTrackingProvider.ForceFlush(ctx)
			if err != nil {
				log.Print(err)
			}
			err = enabledReceiversProvider.ForceFlush(ctx)
			if err != nil {
				log.Print(err)
			}
		case <-ctx.Done():
			return nil
		}
	}
}