internal

package
v0.10.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 23, 2026 License: MIT Imports: 33 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ConsumerFromStringOrObject

func ConsumerFromStringOrObject(consumer any) *common.Consumer

func GetOrCreateInstanceUUID added in v0.10.0

func GetOrCreateInstanceUUID(clientID, env string) (string, func())

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 (c *ApitallyClient) SetStartupData(paths []common.PathInfo, versions map[string]string, client string)

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 ExceptionInfo struct {
	Type       string `json:"type"`
	Message    string `json:"message"`
	StackTrace string `json:"stacktrace"`
}

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) Enabled added in v0.10.0

func (lc *LogCollector) Enabled(ctx context.Context, level slog.Level) bool

Enabled implements slog.Handler.

func (*LogCollector) Handle added in v0.10.0

func (lc *LogCollector) Handle(ctx context.Context, r slog.Record) error

Handle implements slog.Handler.

func (*LogCollector) StartCapture added in v0.10.0

func (lc *LogCollector) StartCapture(ctx context.Context) *LogHandle

func (*LogCollector) WithAttrs added in v0.10.0

func (lc *LogCollector) WithAttrs(attrs []slog.Attr) slog.Handler

WithAttrs implements slog.Handler.

func (*LogCollector) WithGroup added in v0.10.0

func (lc *LogCollector) WithGroup(name string) slog.Handler

WithGroup implements slog.Handler.

type LogHandle added in v0.10.0

type LogHandle struct {
	// contains filtered or unexported fields
}

func (*LogHandle) Context added in v0.10.0

func (h *LogHandle) Context() context.Context

func (*LogHandle) End added in v0.10.0

func (h *LogHandle) End() []LogRecord

type LogRecord added in v0.10.0

type LogRecord struct {
	Timestamp float64 `json:"timestamp"`
	Logger    string  `json:"logger"`
	Level     string  `json:"level"`
	Message   string  `json:"message"`
	File      string  `json:"file,omitempty"`
	Line      int     `json:"line,omitempty"`
}

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 (rl *RequestLogger) LogRequest(request *common.Request, response *common.Response, handlerError error, stackTrace string, logs []LogRecord, spans []SpanData, traceID string)

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 ResourceUsage struct {
	CpuPercent float64 `json:"cpu_percent"`
	MemoryRss  int64   `json:"memory_rss"`
}

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 StartupPayload struct {
	InstanceUUID string            `json:"instance_uuid"`
	MessageUUID  string            `json:"message_uuid"`
	Paths        []common.PathInfo `json:"paths"`
	Versions     map[string]string `json:"versions"`
	Client       string            `json:"client"`
}

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) GetReader

func (t *TempGzipFile) GetReader() (*os.File, 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

type ValidationErrorsItem

type ValidationErrorsItem struct {
	Consumer   string   `json:"consumer,omitempty"`
	Method     string   `json:"method"`
	Path       string   `json:"path"`
	Loc        []string `json:"loc"`
	Msg        string   `json:"msg"`
	Type       string   `json:"type"`
	ErrorCount int      `json:"error_count"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL