performance

package
v1.8.3 Latest Latest
Warning

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

Go to latest
Published: Jul 25, 2025 License: MIT Imports: 17 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GetPerformanceHandler

func GetPerformanceHandler(monitor *Monitor) gin.HandlerFunc

GetPerformanceHandler returns a handler for performance metrics endpoint

func Middleware

func Middleware(monitor *Monitor) gin.HandlerFunc

Middleware creates performance monitoring middleware for Gin

Types

type CircuitBreaker

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

CircuitBreaker implements the circuit breaker pattern

func NewCircuitBreaker

func NewCircuitBreaker(name string, config CircuitBreakerConfig) *CircuitBreaker

NewCircuitBreaker creates a new circuit breaker

func (*CircuitBreaker) Allow

func (cb *CircuitBreaker) Allow() bool

Allow checks if a request should be allowed

func (*CircuitBreaker) GetState

func (cb *CircuitBreaker) GetState() CircuitState

GetState returns the current state

func (*CircuitBreaker) GetStats

func (cb *CircuitBreaker) GetStats() map[string]interface{}

GetStats returns circuit breaker statistics

func (*CircuitBreaker) IsClosed

func (cb *CircuitBreaker) IsClosed() bool

IsClosed returns true if the circuit is closed

func (*CircuitBreaker) IsHalfOpen

func (cb *CircuitBreaker) IsHalfOpen() bool

IsHalfOpen returns true if the circuit is half-open

func (*CircuitBreaker) IsOpen

func (cb *CircuitBreaker) IsOpen() bool

IsOpen returns true if the circuit is open

func (*CircuitBreaker) Record

func (cb *CircuitBreaker) Record(success bool)

Record records the result of a request

func (*CircuitBreaker) Reset

func (cb *CircuitBreaker) Reset()

Reset resets the circuit breaker

type CircuitBreakerConfig

type CircuitBreakerConfig struct {
	Enabled             bool          `json:"enabled"`
	ErrorThreshold      float64       `json:"error_threshold"`
	ConsecutiveFailures int           `json:"consecutive_failures"`
	OpenDuration        time.Duration `json:"open_duration"`
	HalfOpenMaxRequests int           `json:"half_open_max_requests"`
}

CircuitBreakerConfig defines circuit breaker configuration

type CircuitState

type CircuitState int

CircuitState represents the state of a circuit breaker

const (
	// StateClosed means requests are allowed
	StateClosed CircuitState = iota
	// StateOpen means requests are blocked
	StateOpen
	// StateHalfOpen means limited requests are allowed for testing
	StateHalfOpen
)

type LatencyPercentiles

type LatencyPercentiles struct {
	Average time.Duration `json:"average"`
	P50     time.Duration `json:"p50"`
	P95     time.Duration `json:"p95"`
	P99     time.Duration `json:"p99"`
	Min     time.Duration `json:"min"`
	Max     time.Duration `json:"max"`
}

LatencyPercentiles represents latency percentiles

type LatencyTracker

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

LatencyTracker tracks request latencies and calculates percentiles

func NewLatencyTracker

func NewLatencyTracker() *LatencyTracker

NewLatencyTracker creates a new latency tracker

func (*LatencyTracker) GetHistogram

func (lt *LatencyTracker) GetHistogram(buckets []time.Duration) map[string]int

GetHistogram returns a histogram of latencies

func (*LatencyTracker) GetPercentiles

func (lt *LatencyTracker) GetPercentiles() LatencyPercentiles

GetPercentiles calculates and returns latency percentiles

func (*LatencyTracker) GetSampleCount

func (lt *LatencyTracker) GetSampleCount() int

GetSampleCount returns the current number of samples

func (*LatencyTracker) Record

func (lt *LatencyTracker) Record(latency time.Duration)

Record records a latency sample

func (*LatencyTracker) Reset

func (lt *LatencyTracker) Reset()

Reset clears all samples

type Metrics

type Metrics struct {
	// Request metrics
	TotalRequests      int64         `json:"total_requests"`
	SuccessfulRequests int64         `json:"successful_requests"`
	FailedRequests     int64         `json:"failed_requests"`
	AverageLatency     time.Duration `json:"average_latency"`
	P50Latency         time.Duration `json:"p50_latency"`
	P95Latency         time.Duration `json:"p95_latency"`
	P99Latency         time.Duration `json:"p99_latency"`

	// Provider metrics
	ProviderMetrics map[string]*ProviderMetrics `json:"provider_metrics"`

	// Resource metrics
	MemoryUsage     uint64  `json:"memory_usage_bytes"`
	GoroutineCount  int     `json:"goroutine_count"`
	CPUUsagePercent float64 `json:"cpu_usage_percent"`

	// Rate limiting
	RateLimitHits int64 `json:"rate_limit_hits"`

	// Time window
	StartTime time.Time `json:"start_time"`
	EndTime   time.Time `json:"end_time"`
}

Metrics represents performance metrics for the proxy

type Monitor

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

Monitor tracks performance metrics and enforces resource limits

func NewMonitor

func NewMonitor(config *PerformanceConfig) *Monitor

NewMonitor creates a new performance monitor

func (*Monitor) CheckCircuitBreaker

func (m *Monitor) CheckCircuitBreaker(provider string) bool

CheckCircuitBreaker checks if requests to a provider should be allowed

func (*Monitor) CheckRateLimit

func (m *Monitor) CheckRateLimit(key string) bool

CheckRateLimit checks if a request should be rate limited

func (*Monitor) CheckResourceLimits

func (m *Monitor) CheckResourceLimits() error

CheckResourceLimits checks if resource limits are exceeded

func (*Monitor) ForceGC

func (m *Monitor) ForceGC()

ForceGC forces a garbage collection cycle

func (*Monitor) GetMetrics

func (m *Monitor) GetMetrics() *Metrics

GetMetrics returns current performance metrics

func (*Monitor) GetResourceMonitor

func (m *Monitor) GetResourceMonitor() *ResourceMonitor

GetResourceMonitor returns the resource monitor

func (*Monitor) RecordProviderError

func (m *Monitor) RecordProviderError(provider string, success bool)

RecordProviderError records an error for circuit breaker tracking

func (*Monitor) RecordRequest

func (m *Monitor) RecordRequest(metrics RequestMetrics)

RecordRequest records metrics for a request

func (*Monitor) ResetMetrics

func (m *Monitor) ResetMetrics()

ResetMetrics resets all metrics

func (*Monitor) Start

func (m *Monitor) Start()

Start begins monitoring

func (*Monitor) Stop

func (m *Monitor) Stop()

Stop stops monitoring

type PerformanceConfig

type PerformanceConfig struct {
	ResourceLimits  ResourceLimits       `json:"resource_limits"`
	RateLimit       RateLimitConfig      `json:"rate_limit"`
	CircuitBreaker  CircuitBreakerConfig `json:"circuit_breaker"`
	MetricsEnabled  bool                 `json:"metrics_enabled"`
	MetricsInterval time.Duration        `json:"metrics_interval"`
	ProfilerEnabled bool                 `json:"profiler_enabled"`
}

PerformanceConfig combines all performance-related configurations

func DefaultPerformanceConfig

func DefaultPerformanceConfig() *PerformanceConfig

DefaultPerformanceConfig returns default performance configuration

type ProviderMetrics

type ProviderMetrics struct {
	Name               string        `json:"name"`
	TotalRequests      int64         `json:"total_requests"`
	SuccessfulRequests int64         `json:"successful_requests"`
	FailedRequests     int64         `json:"failed_requests"`
	AverageLatency     time.Duration `json:"average_latency"`
	TokensProcessed    int64         `json:"tokens_processed"`
	ErrorRate          float64       `json:"error_rate"`
	HealthStatus       string        `json:"health_status"`
}

ProviderMetrics represents metrics for a specific provider

type RateLimitConfig

type RateLimitConfig struct {
	Enabled         bool          `json:"enabled"`
	RequestsPerMin  int           `json:"requests_per_min"`
	BurstSize       int           `json:"burst_size"`
	PerProvider     bool          `json:"per_provider"`
	PerAPIKey       bool          `json:"per_api_key"`
	CleanupInterval time.Duration `json:"cleanup_interval"`
}

RateLimitConfig defines rate limiting configuration

type RateLimiter

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

RateLimiter implements rate limiting for requests

func NewRateLimiter

func NewRateLimiter(config RateLimitConfig) *RateLimiter

NewRateLimiter creates a new rate limiter

func (*RateLimiter) Allow

func (rl *RateLimiter) Allow(key string) bool

Allow checks if a request is allowed

func (*RateLimiter) AllowN

func (rl *RateLimiter) AllowN(key string, n int) bool

AllowN checks if n requests are allowed

func (*RateLimiter) GetConfig

func (rl *RateLimiter) GetConfig() RateLimitConfig

GetConfig returns the current configuration

func (*RateLimiter) GetHits

func (rl *RateLimiter) GetHits() int64

GetHits returns the number of rate limit hits

func (*RateLimiter) GetLimiterCount

func (rl *RateLimiter) GetLimiterCount() int

GetLimiterCount returns the number of active limiters

func (*RateLimiter) ResetHits

func (rl *RateLimiter) ResetHits()

ResetHits resets the hit counter

func (*RateLimiter) UpdateConfig

func (rl *RateLimiter) UpdateConfig(config RateLimitConfig)

UpdateConfig updates the rate limiter configuration

func (*RateLimiter) Wait

func (rl *RateLimiter) Wait(key string) error

Wait blocks until a request is allowed

type RequestMetrics

type RequestMetrics struct {
	Provider     string
	Model        string
	StartTime    time.Time
	EndTime      time.Time
	Latency      time.Duration
	TokensIn     int
	TokensOut    int
	Success      bool
	Error        error
	StatusCode   int
	RequestSize  int64
	ResponseSize int64
}

RequestMetrics represents metrics for a single request

type ResourceLimits

type ResourceLimits struct {
	MaxMemoryMB       uint64        `json:"max_memory_mb"`
	MaxGoroutines     int           `json:"max_goroutines"`
	MaxCPUPercent     float64       `json:"max_cpu_percent"`
	RequestTimeout    time.Duration `json:"request_timeout"`
	MaxRequestBodyMB  int           `json:"max_request_body_mb"`
	MaxResponseBodyMB int           `json:"max_response_body_mb"`
}

ResourceLimits defines resource limits for the proxy

type ResourceMetrics

type ResourceMetrics struct {
	MemoryUsage     uint64  `json:"memory_usage"`
	MemoryLimit     uint64  `json:"memory_limit"`
	GoroutineCount  int     `json:"goroutine_count"`
	GoroutineLimit  int     `json:"goroutine_limit"`
	CPUUsagePercent float64 `json:"cpu_usage_percent"`
	CPULimit        float64 `json:"cpu_limit"`
}

ResourceMetrics represents current resource usage

type ResourceMonitor

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

ResourceMonitor monitors system resource usage

func NewResourceMonitor

func NewResourceMonitor(limits ResourceLimits) *ResourceMonitor

NewResourceMonitor creates a new resource monitor

func (*ResourceMonitor) CheckLimits

func (rm *ResourceMonitor) CheckLimits() error

CheckLimits checks if any resource limits are exceeded

func (*ResourceMonitor) CheckRequestSize

func (rm *ResourceMonitor) CheckRequestSize(size int64) error

CheckRequestSize checks if a request body size is within limits

func (*ResourceMonitor) CheckResponseSize

func (rm *ResourceMonitor) CheckResponseSize(size int64) error

CheckResponseSize checks if a response body size is within limits

func (*ResourceMonitor) GetLimits

func (rm *ResourceMonitor) GetLimits() ResourceLimits

GetLimits returns the configured resource limits

func (*ResourceMonitor) GetMemoryStats

func (rm *ResourceMonitor) GetMemoryStats() runtime.MemStats

GetMemoryStats returns detailed memory statistics

func (*ResourceMonitor) GetMetrics

func (rm *ResourceMonitor) GetMetrics() ResourceMetrics

GetMetrics returns current resource metrics

func (*ResourceMonitor) SetLimits

func (rm *ResourceMonitor) SetLimits(limits ResourceLimits)

SetLimits updates resource limits

Jump to

Keyboard shortcuts

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