func NewMetricRecorder()

in internal/tel/v2/tel.go [126:216]


func NewMetricRecorder(ctx context.Context, l debug.ContextLogger, cfg Config, opts ...option.ClientOption) MetricRecorder {
	if !cfg.Enabled {
		l.Debugf(ctx, "disabling built-in metrics")
		return NullMetricRecorder{}
	}
	eopts := []cmexporter.Option{
		cmexporter.WithCreateServiceTimeSeries(),
		cmexporter.WithProjectID(cfg.ProjectID),
		cmexporter.WithMonitoringClientOptions(opts...),
		cmexporter.WithMetricDescriptorTypeFormatter(func(m metricdata.Metrics) string {
			return "alloydb.googleapis.com/client/connector/" + m.Name
		}),
		cmexporter.WithMonitoredResourceDescription(monitoredResource, []string{
			ProjectID, Location, Cluster, Instance, ClientID,
		}),
	}
	exp, err := cmexporter.New(eopts...)
	if err != nil {
		l.Debugf(ctx, "built-in metrics exporter failed to initialize: %v", err)
		return NullMetricRecorder{}
	}

	res := resource.NewWithAttributes(monitoredResource,
		// The gcp.resource_type is a special attribute that the exporter
		// transforms into the MonitoredResource field.
		attribute.String("gcp.resource_type", monitoredResource),
		attribute.String(ProjectID, cfg.ProjectID),
		attribute.String(Location, cfg.Location),
		attribute.String(Cluster, cfg.Cluster),
		attribute.String(Instance, cfg.Instance),
		attribute.String(ClientID, cfg.ClientID),
	)
	p := sdkmetric.NewMeterProvider(
		sdkmetric.WithReader(sdkmetric.NewPeriodicReader(
			exp,
			// The periodic reader runs every 60 seconds by default, but set
			// the value anyway to be defensive.
			sdkmetric.WithInterval(DefaultExportInterval),
		)),
		sdkmetric.WithResource(res),
	)
	m := p.Meter(meterName, metric.WithInstrumentationVersion(cfg.Version))

	mDialCount, err := m.Int64Counter(dialCount)
	if err != nil {
		_ = exp.Shutdown(ctx)
		l.Debugf(ctx, "built-in metrics exporter failed to initialize dial count metric: %v", err)
		return NullMetricRecorder{}
	}
	mDialLatency, err := m.Float64Histogram(dialLatency)
	if err != nil {
		_ = exp.Shutdown(ctx)
		l.Debugf(ctx, "built-in metrics exporter failed to initialize dial latency metric: %v", err)
		return NullMetricRecorder{}
	}
	mOpenConns, err := m.Int64UpDownCounter(openConnections)
	if err != nil {
		_ = exp.Shutdown(ctx)
		l.Debugf(ctx, "built-in metrics exporter failed to initialize open connections metric: %v", err)
		return NullMetricRecorder{}
	}
	mBytesTx, err := m.Int64Counter(bytesSent)
	if err != nil {
		_ = exp.Shutdown(ctx)
		l.Debugf(ctx, "built-in metrics exporter failed to initialize bytes sent metric: %v", err)
		return NullMetricRecorder{}
	}
	mBytesRx, err := m.Int64Counter(bytesReceived)
	if err != nil {
		_ = exp.Shutdown(ctx)
		l.Debugf(ctx, "built-in metrics exporter failed to initialize bytes received metric: %v", err)
		return NullMetricRecorder{}
	}
	mRefreshCount, err := m.Int64Counter(refreshCount)
	if err != nil {
		_ = exp.Shutdown(ctx)
		l.Debugf(ctx, "built-in metrics exporter failed to initialize refresh count metric: %v", err)
		return NullMetricRecorder{}
	}
	return &metricRecorder{
		exporter:      exp,
		provider:      p,
		dialerID:      cfg.ClientID,
		mDialCount:    mDialCount,
		mDialLatency:  mDialLatency,
		mOpenConns:    mOpenConns,
		mBytesTx:      mBytesTx,
		mBytesRx:      mBytesRx,
		mRefreshCount: mRefreshCount,
	}
}