Documentation
¶
Index ¶
- func ConsumerFromStringOrObject(consumer any) *common.Consumer
- func GetOrCreateInstanceUUID(clientID, env string) (string, func())
- func ResetApitallyClient()
- type ApitallyClient
- type ConsumerRegistry
- type ExceptionInfo
- type HubRequestStatus
- type LogCollector
- func (lc *LogCollector) Enabled(ctx context.Context, level slog.Level) bool
- func (lc *LogCollector) Handle(ctx context.Context, r slog.Record) error
- func (lc *LogCollector) StartCapture(ctx context.Context) *LogHandle
- func (lc *LogCollector) WithAttrs(attrs []slog.Attr) slog.Handler
- func (lc *LogCollector) WithGroup(name string) slog.Handler
- type LogHandle
- type LogRecord
- type RequestCounter
- type RequestLogItem
- type RequestLogger
- func (rl *RequestLogger) Clear() error
- func (rl *RequestLogger) Close() error
- func (rl *RequestLogger) GetFile() *TempGzipFile
- func (rl *RequestLogger) GetPendingWrites() []RequestLogItem
- func (rl *RequestLogger) IsEnabled() bool
- func (rl *RequestLogger) IsSupportedContentType(contentType string) bool
- func (rl *RequestLogger) IsSuspended() bool
- func (rl *RequestLogger) LogRequest(request *common.Request, response *common.Response, handlerError error, ...)
- func (rl *RequestLogger) RetryFileLater(file *TempGzipFile)
- func (rl *RequestLogger) StartMaintenance()
- func (rl *RequestLogger) SuspendFor(duration time.Duration)
- type RequestsItem
- type ResourceMonitor
- type ResourceUsage
- type ServerErrorCounter
- type ServerErrorsItem
- type SpanCollector
- func (sc *SpanCollector) ForceFlush(ctx context.Context) error
- func (sc *SpanCollector) IsEnabled() bool
- func (sc *SpanCollector) OnEnd(s sdktrace.ReadOnlySpan)
- func (sc *SpanCollector) OnStart(parent context.Context, s sdktrace.ReadWriteSpan)
- func (sc *SpanCollector) Shutdown(ctx context.Context) error
- func (sc *SpanCollector) StartSpan(ctx context.Context) *SpanHandle
- type SpanData
- type SpanHandle
- type StartupPayload
- type SyncPayload
- type TempGzipFile
- type ValidationErrorCounter
- type ValidationErrorsItem
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetOrCreateInstanceUUID ¶ added in v0.10.0
GetOrCreateInstanceUUID gets or creates a stable instance UUID using file-based locking.
Uses a slot-based approach where each process acquires an exclusive lock on a slot file. This ensures:
- Single process restarts reuse the same UUID (same slot)
- Multiple workers get different UUIDs (different slots)
- UUIDs persist across restarts and hot reloads
Returns a tuple of (uuid, release) where release is a function that releases the lock. The release function must be called when shutting down.
func ResetApitallyClient ¶ added in v0.2.0
func ResetApitallyClient()
Types ¶
type ApitallyClient ¶
type ApitallyClient struct {
Config common.Config
RequestCounter *RequestCounter
RequestLogger *RequestLogger
LogCollector *LogCollector
SpanCollector *SpanCollector
ValidationErrorCounter *ValidationErrorCounter
ServerErrorCounter *ServerErrorCounter
ConsumerRegistry *ConsumerRegistry
ResourceMonitor *ResourceMonitor
// contains filtered or unexported fields
}
func GetApitallyClient ¶ added in v0.2.0
func GetApitallyClient() *ApitallyClient
func InitApitallyClient ¶ added in v0.2.0
func InitApitallyClient(config common.Config) *ApitallyClient
func InitApitallyClientWithHTTPClient ¶ added in v0.2.0
func InitApitallyClientWithHTTPClient(config common.Config, httpClient *retryablehttp.Client) *ApitallyClient
func (*ApitallyClient) IsEnabled ¶
func (c *ApitallyClient) IsEnabled() bool
func (*ApitallyClient) SetStartupData ¶
func (*ApitallyClient) Shutdown ¶
func (c *ApitallyClient) Shutdown()
func (*ApitallyClient) StartSync ¶
func (c *ApitallyClient) StartSync()
type ConsumerRegistry ¶
type ConsumerRegistry struct {
// contains filtered or unexported fields
}
func NewConsumerRegistry ¶
func NewConsumerRegistry() *ConsumerRegistry
func (*ConsumerRegistry) AddOrUpdateConsumer ¶
func (r *ConsumerRegistry) AddOrUpdateConsumer(consumer *common.Consumer)
func (*ConsumerRegistry) GetAndResetUpdatedConsumers ¶
func (r *ConsumerRegistry) GetAndResetUpdatedConsumers() []*common.Consumer
type ExceptionInfo ¶
type HubRequestStatus ¶
type HubRequestStatus int
const ( HubRequestStatusOK HubRequestStatus = iota HubRequestStatusValidationError HubRequestStatusInvalidClientId HubRequestStatusPaymentRequired HubRequestStatusRetryableError )
type LogCollector ¶ added in v0.10.0
type LogCollector struct {
// contains filtered or unexported fields
}
func NewLogCollector ¶ added in v0.10.0
func NewLogCollector(enabled bool) *LogCollector
func (*LogCollector) StartCapture ¶ added in v0.10.0
func (lc *LogCollector) StartCapture(ctx context.Context) *LogHandle
type LogHandle ¶ added in v0.10.0
type LogHandle struct {
// contains filtered or unexported fields
}
type RequestCounter ¶
type RequestCounter struct {
// contains filtered or unexported fields
}
func NewRequestCounter ¶
func NewRequestCounter() *RequestCounter
func (*RequestCounter) AddRequest ¶
func (rc *RequestCounter) AddRequest(consumer, method, path string, statusCode int, responseTime float64, requestSize, responseSize int64)
func (*RequestCounter) GetAndResetRequests ¶
func (rc *RequestCounter) GetAndResetRequests() []RequestsItem
type RequestLogItem ¶
type RequestLogItem struct {
UUID string `json:"uuid"`
Request *common.Request `json:"request"`
Response *common.Response `json:"response"`
Exception *ExceptionInfo `json:"exception,omitempty"`
Logs []LogRecord `json:"logs,omitempty"`
Spans []SpanData `json:"spans,omitempty"`
TraceID string `json:"trace_id,omitempty"`
}
type RequestLogger ¶
type RequestLogger struct {
// contains filtered or unexported fields
}
func NewRequestLogger ¶
func NewRequestLogger(config *common.RequestLoggingConfig) *RequestLogger
func (*RequestLogger) Clear ¶
func (rl *RequestLogger) Clear() error
func (*RequestLogger) Close ¶
func (rl *RequestLogger) Close() error
func (*RequestLogger) GetFile ¶
func (rl *RequestLogger) GetFile() *TempGzipFile
func (*RequestLogger) GetPendingWrites ¶
func (rl *RequestLogger) GetPendingWrites() []RequestLogItem
For testing purposes
func (*RequestLogger) IsEnabled ¶
func (rl *RequestLogger) IsEnabled() bool
func (*RequestLogger) IsSupportedContentType ¶
func (rl *RequestLogger) IsSupportedContentType(contentType string) bool
func (*RequestLogger) IsSuspended ¶
func (rl *RequestLogger) IsSuspended() bool
func (*RequestLogger) LogRequest ¶
func (*RequestLogger) RetryFileLater ¶
func (rl *RequestLogger) RetryFileLater(file *TempGzipFile)
func (*RequestLogger) StartMaintenance ¶
func (rl *RequestLogger) StartMaintenance()
func (*RequestLogger) SuspendFor ¶
func (rl *RequestLogger) SuspendFor(duration time.Duration)
type RequestsItem ¶
type RequestsItem struct {
Consumer string `json:"consumer,omitempty"`
Method string `json:"method"`
Path string `json:"path"`
StatusCode int `json:"status_code"`
RequestCount int `json:"request_count"`
RequestSizeSum int64 `json:"request_size_sum"`
ResponseSizeSum int64 `json:"response_size_sum"`
ResponseTimes map[int]int `json:"response_times"`
RequestSizes map[int]int `json:"request_sizes"`
ResponseSizes map[int]int `json:"response_sizes"`
}
type ResourceMonitor ¶ added in v0.9.0
type ResourceMonitor struct {
// contains filtered or unexported fields
}
func NewResourceMonitor ¶ added in v0.9.0
func NewResourceMonitor() *ResourceMonitor
func (*ResourceMonitor) GetCpuMemoryUsage ¶ added in v0.9.0
func (r *ResourceMonitor) GetCpuMemoryUsage() *ResourceUsage
type ResourceUsage ¶ added in v0.9.0
type ServerErrorCounter ¶
type ServerErrorCounter struct {
// contains filtered or unexported fields
}
func NewServerErrorCounter ¶
func NewServerErrorCounter() *ServerErrorCounter
func (*ServerErrorCounter) AddServerError ¶
func (sc *ServerErrorCounter) AddServerError(consumer, method, path string, handlerError error, stackTrace string)
func (*ServerErrorCounter) GetAndResetServerErrors ¶
func (sc *ServerErrorCounter) GetAndResetServerErrors() []ServerErrorsItem
type ServerErrorsItem ¶
type ServerErrorsItem struct {
Consumer string `json:"consumer,omitempty"`
Method string `json:"method"`
Path string `json:"path"`
Type string `json:"type"`
Message string `json:"msg"`
StackTrace string `json:"traceback"`
SentryEventID *string `json:"sentry_event_id"`
ErrorCount int `json:"error_count"`
}
type SpanCollector ¶ added in v0.10.0
type SpanCollector struct {
// contains filtered or unexported fields
}
SpanCollector implements sdktrace.SpanProcessor to collect spans for request logging.
func NewSpanCollector ¶ added in v0.10.0
func NewSpanCollector(enabled bool) *SpanCollector
NewSpanCollector creates a new SpanCollector.
func (*SpanCollector) ForceFlush ¶ added in v0.10.0
func (sc *SpanCollector) ForceFlush(ctx context.Context) error
ForceFlush is called to force flush any pending spans. Implements sdktrace.SpanProcessor.
func (*SpanCollector) IsEnabled ¶ added in v0.10.0
func (sc *SpanCollector) IsEnabled() bool
IsEnabled returns whether span collection is enabled.
func (*SpanCollector) OnEnd ¶ added in v0.10.0
func (sc *SpanCollector) OnEnd(s sdktrace.ReadOnlySpan)
OnEnd is called when a span ends. Implements sdktrace.SpanProcessor.
func (*SpanCollector) OnStart ¶ added in v0.10.0
func (sc *SpanCollector) OnStart(parent context.Context, s sdktrace.ReadWriteSpan)
OnStart is called when a span starts. Implements sdktrace.SpanProcessor.
func (*SpanCollector) Shutdown ¶ added in v0.10.0
func (sc *SpanCollector) Shutdown(ctx context.Context) error
Shutdown is called when the SDK shuts down. Implements sdktrace.SpanProcessor.
func (*SpanCollector) StartSpan ¶ added in v0.10.0
func (sc *SpanCollector) StartSpan(ctx context.Context) *SpanHandle
StartSpan creates a root span and returns a SpanHandle.
type SpanData ¶ added in v0.10.0
type SpanData struct {
SpanID string `json:"span_id"`
ParentSpanID string `json:"parent_span_id,omitempty"`
Name string `json:"name"`
Kind string `json:"kind"`
StartTime int64 `json:"start_time"`
EndTime int64 `json:"end_time"`
Status string `json:"status,omitempty"`
Attributes map[string]any `json:"attributes,omitempty"`
}
SpanData represents a collected span for serialization.
type SpanHandle ¶ added in v0.10.0
type SpanHandle struct {
// contains filtered or unexported fields
}
SpanHandle provides context management for a root span.
func (*SpanHandle) Context ¶ added in v0.10.0
func (h *SpanHandle) Context() context.Context
Context returns the context with the span for injecting into the request. Returns the original context if disabled.
func (*SpanHandle) End ¶ added in v0.10.0
func (h *SpanHandle) End() []SpanData
End ends the root span and returns collected spans (nil if disabled).
func (*SpanHandle) SetName ¶ added in v0.10.0
func (h *SpanHandle) SetName(name string)
SetName updates the root span name (no-op if disabled).
func (*SpanHandle) TraceID ¶ added in v0.10.0
func (h *SpanHandle) TraceID() string
TraceID returns the trace ID as a hex string (empty if disabled).
type StartupPayload ¶
type SyncPayload ¶
type SyncPayload struct {
Timestamp float64 `json:"timestamp"`
InstanceUUID string `json:"instance_uuid"`
MessageUUID string `json:"message_uuid"`
Requests []RequestsItem `json:"requests"`
ValidationErrors []ValidationErrorsItem `json:"validation_errors,omitempty"`
ServerErrors []ServerErrorsItem `json:"server_errors,omitempty"`
Consumers []*common.Consumer `json:"consumers,omitempty"`
Resources *ResourceUsage `json:"resources,omitempty"`
}
type TempGzipFile ¶
type TempGzipFile struct {
// contains filtered or unexported fields
}
func NewTempGzipFile ¶
func NewTempGzipFile() (*TempGzipFile, error)
func (*TempGzipFile) Close ¶
func (t *TempGzipFile) Close() error
func (*TempGzipFile) Delete ¶
func (t *TempGzipFile) Delete() error
func (*TempGzipFile) GetContent ¶
func (t *TempGzipFile) GetContent() ([]byte, error)
func (*TempGzipFile) Size ¶
func (t *TempGzipFile) Size() int64
func (*TempGzipFile) WriteLine ¶
func (t *TempGzipFile) WriteLine(data []byte) error
type ValidationErrorCounter ¶
type ValidationErrorCounter struct {
// contains filtered or unexported fields
}
func NewValidationErrorCounter ¶
func NewValidationErrorCounter() *ValidationErrorCounter
func (*ValidationErrorCounter) AddValidationError ¶
func (vc *ValidationErrorCounter) AddValidationError(consumer, method, path string, loc, msg, errType string)
func (*ValidationErrorCounter) GetAndResetValidationErrors ¶
func (vc *ValidationErrorCounter) GetAndResetValidationErrors() []ValidationErrorsItem