Documentation
¶
Index ¶
- func GetPerformanceHandler(monitor *Monitor) gin.HandlerFunc
- func Middleware(monitor *Monitor) gin.HandlerFunc
- type CircuitBreaker
- func (cb *CircuitBreaker) Allow() bool
- func (cb *CircuitBreaker) GetState() CircuitState
- func (cb *CircuitBreaker) GetStats() map[string]interface{}
- func (cb *CircuitBreaker) IsClosed() bool
- func (cb *CircuitBreaker) IsHalfOpen() bool
- func (cb *CircuitBreaker) IsOpen() bool
- func (cb *CircuitBreaker) Record(success bool)
- func (cb *CircuitBreaker) Reset()
- type CircuitBreakerConfig
- type CircuitState
- type LatencyPercentiles
- type LatencyTracker
- type Metrics
- type Monitor
- func (m *Monitor) CheckCircuitBreaker(provider string) bool
- func (m *Monitor) CheckRateLimit(key string) bool
- func (m *Monitor) CheckResourceLimits() error
- func (m *Monitor) ForceGC()
- func (m *Monitor) GetMetrics() *Metrics
- func (m *Monitor) GetResourceMonitor() *ResourceMonitor
- func (m *Monitor) RecordProviderError(provider string, success bool)
- func (m *Monitor) RecordRequest(metrics RequestMetrics)
- func (m *Monitor) ResetMetrics()
- func (m *Monitor) Start()
- func (m *Monitor) Stop()
- type PerformanceConfig
- type ProviderMetrics
- type RateLimitConfig
- type RateLimiter
- func (rl *RateLimiter) Allow(key string) bool
- func (rl *RateLimiter) AllowN(key string, n int) bool
- func (rl *RateLimiter) GetConfig() RateLimitConfig
- func (rl *RateLimiter) GetHits() int64
- func (rl *RateLimiter) GetLimiterCount() int
- func (rl *RateLimiter) ResetHits()
- func (rl *RateLimiter) UpdateConfig(config RateLimitConfig)
- func (rl *RateLimiter) Wait(key string) error
- type RequestMetrics
- type ResourceLimits
- type ResourceMetrics
- type ResourceMonitor
- func (rm *ResourceMonitor) CheckLimits() error
- func (rm *ResourceMonitor) CheckRequestSize(size int64) error
- func (rm *ResourceMonitor) CheckResponseSize(size int64) error
- func (rm *ResourceMonitor) GetLimits() ResourceLimits
- func (rm *ResourceMonitor) GetMemoryStats() runtime.MemStats
- func (rm *ResourceMonitor) GetMetrics() ResourceMetrics
- func (rm *ResourceMonitor) SetLimits(limits ResourceLimits)
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
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
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 ¶
CheckCircuitBreaker checks if requests to a provider should be allowed
func (*Monitor) CheckRateLimit ¶
CheckRateLimit checks if a request should be rate limited
func (*Monitor) CheckResourceLimits ¶
CheckResourceLimits checks if resource limits are exceeded
func (*Monitor) GetMetrics ¶
GetMetrics returns current performance metrics
func (*Monitor) GetResourceMonitor ¶
func (m *Monitor) GetResourceMonitor() *ResourceMonitor
GetResourceMonitor returns the resource monitor
func (*Monitor) RecordProviderError ¶
RecordProviderError records an error for circuit breaker tracking
func (*Monitor) RecordRequest ¶
func (m *Monitor) RecordRequest(metrics RequestMetrics)
RecordRequest records metrics for a request
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) 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