Add comprehensive godoc documentation to all packages
- Add package-level documentation with usage examples and architecture details - Document all public types, functions, and methods following godoc conventions - Remove unused logger.Error type and NewError function - Apply consistent documentation style across all packages Packages updated: - apitls: TLS certificate management with automatic renewal - config: Environment-based configuration system - config/depenv: Deployment environment handling - ekko: Enhanced Echo web framework wrapper - kafka: Kafka client wrapper with TLS support - logger: Structured logging with OpenTelemetry integration - tracing: OpenTelemetry distributed tracing setup - types: Shared data structures for NTP Pool project - xff/fastlyxff: Fastly CDN IP range management All tests pass after documentation changes.
This commit is contained in:
@@ -1,3 +1,36 @@
|
||||
// Package tracing provides OpenTelemetry distributed tracing setup with OTLP export support.
|
||||
//
|
||||
// This package handles the complete OpenTelemetry SDK initialization including:
|
||||
// - Trace provider configuration with batching and resource detection
|
||||
// - Log provider setup for structured log export via OTLP
|
||||
// - Automatic resource discovery (service name, version, host, container, process info)
|
||||
// - Support for both gRPC and HTTP OTLP exporters with TLS configuration
|
||||
// - Propagation context setup for distributed tracing across services
|
||||
// - Graceful shutdown handling for all telemetry components
|
||||
//
|
||||
// The package supports various deployment scenarios:
|
||||
// - Development: Local OTLP collectors or observability backends
|
||||
// - Production: Secure OTLP export with mutual TLS authentication
|
||||
// - Container environments: Automatic container and Kubernetes resource detection
|
||||
//
|
||||
// Configuration is primarily handled via standard OpenTelemetry environment variables:
|
||||
// - OTEL_SERVICE_NAME: Service identification
|
||||
// - OTEL_EXPORTER_OTLP_PROTOCOL: Protocol selection (grpc, http/protobuf)
|
||||
// - OTEL_TRACES_EXPORTER: Exporter type (otlp, autoexport)
|
||||
// - OTEL_RESOURCE_ATTRIBUTES: Additional resource attributes
|
||||
//
|
||||
// Example usage:
|
||||
//
|
||||
// cfg := &tracing.TracerConfig{
|
||||
// ServiceName: "my-service",
|
||||
// Environment: "production",
|
||||
// Endpoint: "https://otlp.example.com:4317",
|
||||
// }
|
||||
// shutdown, err := tracing.InitTracer(ctx, cfg)
|
||||
// if err != nil {
|
||||
// log.Fatal(err)
|
||||
// }
|
||||
// defer shutdown(ctx)
|
||||
package tracing
|
||||
|
||||
// todo, review:
|
||||
@@ -43,34 +76,68 @@ var errInvalidOTLPProtocol = errors.New("invalid OTLP protocol - should be one o
|
||||
|
||||
// https://github.com/open-telemetry/opentelemetry-go/blob/main/exporters/otlp/otlptrace/otlptracehttp/example_test.go
|
||||
|
||||
// TpShutdownFunc represents a function that gracefully shuts down telemetry providers.
|
||||
// It should be called during application shutdown to ensure all telemetry data is flushed
|
||||
// and exporters are properly closed. The context can be used to set shutdown timeouts.
|
||||
type TpShutdownFunc func(ctx context.Context) error
|
||||
|
||||
// Tracer returns the configured OpenTelemetry tracer for the NTP Pool project.
|
||||
// This tracer should be used for creating spans and distributed tracing throughout
|
||||
// the application. It uses the global tracer provider set up by InitTracer/SetupSDK.
|
||||
func Tracer() trace.Tracer {
|
||||
traceProvider := otel.GetTracerProvider()
|
||||
return traceProvider.Tracer("ntppool-tracer")
|
||||
}
|
||||
|
||||
// Start creates a new span with the given name and options using the configured tracer.
|
||||
// This is a convenience function that wraps the standard OpenTelemetry span creation.
|
||||
// It returns a new context containing the span and the span itself for further configuration.
|
||||
//
|
||||
// The returned context should be used for downstream operations to maintain trace correlation.
|
||||
func Start(ctx context.Context, spanName string, opts ...trace.SpanStartOption) (context.Context, trace.Span) {
|
||||
return Tracer().Start(ctx, spanName, opts...)
|
||||
}
|
||||
|
||||
// GetClientCertificate defines a function type for providing client certificates for mutual TLS.
|
||||
// This is used when exporting telemetry data to secured OTLP endpoints that require
|
||||
// client certificate authentication.
|
||||
type GetClientCertificate func(*tls.CertificateRequestInfo) (*tls.Certificate, error)
|
||||
|
||||
// TracerConfig provides configuration options for OpenTelemetry tracing setup.
|
||||
// It supplements standard OpenTelemetry environment variables with additional
|
||||
// NTP Pool-specific configuration including TLS settings for secure OTLP export.
|
||||
type TracerConfig struct {
|
||||
ServiceName string
|
||||
Environment string
|
||||
Endpoint string
|
||||
EndpointURL string
|
||||
ServiceName string // Service name for resource identification (overrides OTEL_SERVICE_NAME)
|
||||
Environment string // Deployment environment (development, staging, production)
|
||||
Endpoint string // OTLP endpoint hostname/port (e.g., "otlp.example.com:4317")
|
||||
EndpointURL string // Complete OTLP endpoint URL (e.g., "https://otlp.example.com:4317/v1/traces")
|
||||
|
||||
CertificateProvider GetClientCertificate
|
||||
RootCAs *x509.CertPool
|
||||
CertificateProvider GetClientCertificate // Client certificate provider for mutual TLS
|
||||
RootCAs *x509.CertPool // CA certificate pool for server verification
|
||||
}
|
||||
|
||||
// InitTracer initializes the OpenTelemetry SDK with the provided configuration.
|
||||
// This is the main entry point for setting up distributed tracing in applications.
|
||||
//
|
||||
// The function configures trace and log providers, sets up OTLP exporters,
|
||||
// and returns a shutdown function that must be called during application termination.
|
||||
//
|
||||
// Returns a shutdown function and an error. The shutdown function should be called
|
||||
// with a context that has an appropriate timeout for graceful shutdown.
|
||||
func InitTracer(ctx context.Context, cfg *TracerConfig) (TpShutdownFunc, error) {
|
||||
// todo: setup environment from cfg
|
||||
return SetupSDK(ctx, cfg)
|
||||
}
|
||||
|
||||
// SetupSDK performs the complete OpenTelemetry SDK initialization including resource
|
||||
// discovery, exporter configuration, provider setup, and shutdown function creation.
|
||||
//
|
||||
// The function automatically discovers system resources (service info, host, container,
|
||||
// process details) and configures both trace and log exporters. It supports multiple
|
||||
// OTLP protocols (gRPC, HTTP) and handles TLS configuration for secure deployments.
|
||||
//
|
||||
// The returned shutdown function coordinates graceful shutdown of all telemetry
|
||||
// components in the reverse order of their initialization.
|
||||
func SetupSDK(ctx context.Context, cfg *TracerConfig) (shutdown TpShutdownFunc, err error) {
|
||||
if cfg == nil {
|
||||
cfg = &TracerConfig{}
|
||||
|
Reference in New Issue
Block a user