func NewOpenTelemetry()

in cassandra-bigtable-migration-tools/cassandra-bigtable-proxy/otel/otel.go [98:158]


func NewOpenTelemetry(ctx context.Context, config *OTelConfig, logger *zap.Logger) (*OpenTelemetry, func(context.Context) error, error) {
	otelInst := &OpenTelemetry{Config: config, logger: logger}
	var err error
	otelInst.Config.OTELEnabled = config.OTELEnabled
	if !config.OTELEnabled {
		return otelInst, nil, nil
	}

	if config.HealthCheckEnabled {
		resp, err := http.Get("http://" + config.HealthCheckEp)
		if err != nil {
			return nil, nil, err
		}
		if resp.StatusCode != 200 {
			return nil, nil, errors.New("OTEL collector service is not up and running")
		}
		logger.Info("OTEL health check complete")
	}
	var shutdownFuncs []func(context.Context) error
	otelResource := buildOtelResource(ctx, config)

	// Initialize tracerProvider
	tracerProvider, err := InitTracerProvider(ctx, config, otelResource)
	if err != nil {
		logger.Error("error while initializing the tracer provider", zap.Error(err))
		return nil, nil, err
	}
	otel.SetTracerProvider(tracerProvider)
	otelInst.tracer = tracerProvider.Tracer(config.ServiceName)
	shutdownFuncs = append(shutdownFuncs, tracerProvider.Shutdown)

	// Initialize MeterProvider
	meterProvider, err := InitMeterProvider(ctx, config, otelResource)
	if err != nil {
		logger.Error("error while initializing the meter provider", zap.Error(err))
		return nil, nil, err
	}
	otel.SetMeterProvider(meterProvider)
	meter := meterProvider.Meter(config.ServiceName)
	shutdownFuncs = append(shutdownFuncs, meterProvider.Shutdown)
	shutdown := shutdownOpenTelemetryComponents(shutdownFuncs)
	otelInst.requestCount, err = meter.Int64Counter(requestCountMetric, metric.WithDescription("Records metric for number of query requests coming in"), metric.WithUnit("1"))
	if err != nil {
		logger.Error("error during registering instrument for metric bigtable/cassandra_adapter/request_count", zap.Error(err))
		return nil, nil, err
	}
	otelInst.requestLatency, err = meter.Int64Histogram(latencyMetric,
		metric.WithDescription("Records latency for all query operations"),
		metric.WithExplicitBucketBoundaries(0.0, 0.0010, 0.0013, 0.0016, 0.0020, 0.0024, 0.0031, 0.0038, 0.0048, 0.0060,
			0.0075, 0.0093, 0.0116, 0.0146, 0.0182, 0.0227, 0.0284, 0.0355, 0.0444, 0.0555, 0.0694, 0.0867,
			0.1084, 0.1355, 0.1694, 0.2118, 0.2647, 0.3309, 0.4136, 0.5170, 0.6462, 0.8078, 1.0097, 1.2622,
			1.5777, 1.9722, 2.4652, 3.0815, 3.8519, 4.8148, 6.0185, 7.5232, 9.4040, 11.7549, 14.6937, 18.3671,
			22.9589, 28.6986, 35.8732, 44.8416, 56.0519, 70.0649, 87.5812, 109.4764, 136.8456, 171.0569, 213.8212,
			267.2765, 334.0956, 417.6195, 522.0244, 652.5304),
		metric.WithUnit("ms"))
	if err != nil {
		logger.Error("error during registering instrument for metric bigtable/cassandra_adapter/roundtrip_latencies", zap.Error(err))
		return nil, nil, err
	}
	return otelInst, shutdown, nil
}