Global Repos / Workflow - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - UPDATE workflow: split old workflow into multiple files - UPDATE .gitignore: added cluster.old.tar.gz and build artifacts - UPDATE .golangci.yml: enhanced linter rules and disabled deprecated linters [archive] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - FIX extract: recursive decompression for nested archives (e.g., .tar.gz handling) - FIX extract: ZIP archive support now properly uses ReaderAt interface with seek reset - ADD extract: proper symlink and hard link handling in archives - UPDATE tar/writer: improved error handling and file mode preservation - UPDATE zip/writer: enhanced validation and error messages - UPDATE compress/interface: added support for additional compression formats - UPDATE helper/compressor: fixed typo in error handling [artifact] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE artifact: improved error handling and context management - UPDATE client/interface: enhanced API with better type safety and context propagation - UPDATE client/model: refactored for better maintainability - UPDATE github: removed unused error codes, improved model validation - UPDATE gitlab: enhanced API pagination and error handling - UPDATE jfrog: improved artifactory API compatibility - UPDATE s3aws: enhanced S3 bucket operations and error messages [atomic] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE cast: improved type conversion with better error handling - UPDATE interface: enhanced atomic operations with generics support - UPDATE synmap: fixed race conditions in concurrent access patterns - UPDATE value: improved atomic value operations with better memory ordering [aws] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE bucket: enhanced ACL and CORS configuration with validation - UPDATE configAws/models: improved credential handling and region configuration - UPDATE configCustom/interface: added support for custom endpoints - UPDATE http/request: improved retry logic and timeout handling - UPDATE interface: enhanced AWS client with context propagation - UPDATE model: refactored for AWS SDK v2 compatibility - UPDATE multipart/interface: improved chunk handling for large uploads - UPDATE pusher: optimized hash calculation and upload progress tracking - UPDATE resolver: enhanced endpoint resolution with custom DNS - DELETE test files: removed bucket_test.go, group_test.go, object_test.go, policy_test.go, role_test.go, user_test.go [cache] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - ADD context: context-aware cache lifecycle management - UPDATE interface: complete rewrite with Go generics for type-safe key-value operations - ADD item package: generic cache item with expiration tracking (interface and model) - UPDATE model: refactored to use generics (Cache[K comparable, V any]) - REFACTOR: split item.go into modelAny.go for better code organization [certificates] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE auth/encode: improved PEM encoding with better error messages - UPDATE auth/interface: enhanced authentication certificate handling - UPDATE ca: improved CA certificate generation and validation - UPDATE certs: enhanced certificate configuration with SAN support - UPDATE cipher: improved cipher suite selection and validation - UPDATE curves: enhanced elliptic curve handling with additional curves - ADD deprecated.go: marked deprecated TLS versions and cipher suites - UPDATE interface: enhanced certificate interface with context support - UPDATE model: improved certificate model with better validation - UPDATE rootca: enhanced root CA pool management - UPDATE tlsversion: added TLS 1.3 support with proper validation - UPDATE tools: improved certificate utility functions [cobra] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE completion: improved shell completion generation (bash, zsh, fish, powershell) - UPDATE configure: enhanced configuration file handling - UPDATE printError: improved error formatting with color support - UPDATE interface: enhanced cobra interface with context support - UPDATE model: improved cobra model with better validation [config] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE components: improved component lifecycle management - UPDATE const/const: improved constant definitions - UPDATE context: enhanced context handling with better propagation - UPDATE errors: improved error definitions - UPDATE events: enhanced event management - UPDATE manage: improved configuration management with validation - UPDATE model: refactored config model - UPDATE shell: enhanced shell integration for interactive configuration - UPDATE types: improved component and componentList types [console] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - ADD buff.go: BuffPrintf function for colored output to io.Writer (moved from ioutils/multiplexer) - DELETE color.go: removed legacy color file (consolidated functionality) - UPDATE error: improved error definitions with better messages - ADD interface: console interface for abstraction - ADD model: console model for state management - UPDATE padding: enhanced string padding with Unicode support - UPDATE prompt: improved interactive prompt handling [context] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - DELETE config.go: removed deprecated configuration (replaced by Config[T] interface) - UPDATE context: improved context handling with better cancellation support - UPDATE gin/interface: enhanced Gin context integration with type safety - ADD helper: context helper functions for common operations - ADD interface: generic Config[T comparable] interface for type-safe context storage - ADD map: MapManage[T] interface for concurrent-safe map operations - ADD model: thread-safe context model implementation with sync.Map [database] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE gorm/config: improved database configuration - UPDATE gorm/driver: enhanced database driver with better connection pooling - UPDATE gorm/driver_darwin: macOS-specific database optimizations - UPDATE gorm/interface: improved GORM interface with context support - UPDATE gorm/model: refactored model for better maintainability - UPDATE gorm/monitor: enhanced monitoring for database connections - UPDATE kvtypes: improved types for key-value store (compare, driver, item, table) [duration] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE big: enhanced big.Duration for large time spans with arithmetic operations - UPDATE encode: improved marshaling for JSON, YAML, TOML, Text, CBOR - UPDATE format: enhanced human-readable formatting (ns, μs, ms, s, m, h, d, w) - UPDATE interface: improved duration interface with arithmetic methods - UPDATE model: refactored Duration type - UPDATE operation: enhanced arithmetic operations (Add, Sub, Mul, Div) - UPDATE parse: improved parsing with multiple format support - UPDATE truncate: enhanced truncation for rounding durations [encoding] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE aes: improved AES encryption with reader/writer interfaces - UPDATE hexa: enhanced hexadecimal encoding with better error handling - UPDATE mux: improved multiplexer/demultiplexer for stream handling - UPDATE randRead: enhanced random data generation - UPDATE sha256 package: SHA-256 hashing with reader/writer interfaces [errors] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - ADD pool package: thread-safe error pool for collecting multiple errors with concurrent access - UPDATE code: improved error code definition and lookup - UPDATE errors: enhanced error creation with better stack trace - UPDATE interface: improved error interface with more methods - UPDATE mode: enhanced error mode handling (production vs development) - UPDATE return: improved error return handling with context - UPDATE trace: enhanced error tracing with file and line information [file] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE bandwidth: improved bandwidth tracking with concurrency tests - UPDATE perm: enhanced file permission handling with Unix/Windows support - UPDATE perm/encode: improved marshaling for JSON, YAML, TOML - UPDATE perm/format: enhanced permission formatting (e.g., "rwxr-xr-x") - UPDATE perm/parse: improved parsing of permission strings and octal values - UPDATE progress: enhanced progress tracking for file I/O operations - UPDATE progress/io*: improved reader, writer, seeker, closer interfaces with progress callbacks [ftpclient] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE config: improved FTP configuration with TLS support - UPDATE errors: enhanced error definitions - UPDATE interface: improved FTP client interface - UPDATE model: refactored FTP client model [httpcli] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE cli: improved HTTP client with retry logic and timeout handling - UPDATE dns-mapper: enhanced DNS mapping for custom resolution - UPDATE dns-mapper/config: improved DNS mapper configuration - UPDATE dns-mapper/errors: enhanced error handling - UPDATE dns-mapper/interface: improved DNS mapper interface - UPDATE dns-mapper/transport: enhanced HTTP transport with DNS override - UPDATE errors: improved error definitions - UPDATE options: enhanced client options with context support [httpserver] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE config: improved server configuration with TLS and middleware support - UPDATE handler: enhanced request handler with better error handling - UPDATE interface: improved server interface with context support and monitoring integration - UPDATE model: refactored server model with better validation - UPDATE monitor: enhanced monitoring integration with status tracking - UPDATE pool: improved server pool management (config, interface, list, model) - UPDATE run: enhanced server runtime with graceful shutdown - UPDATE server: improved core server implementation with better lifecycle - ADD testhelpers/certs.go: certificate generation utilities for testing - UPDATE types: improved const, fields, and handler types [ioutils] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE bufferReadCloser: improved buffered reader/writer with closer - UPDATE fileDescriptor: enhanced file descriptor limit management (platform-specific for Linux/macOS/Windows) - UPDATE ioprogress: improved progress tracking for I/O operations - UPDATE iowrapper: enhanced I/O wrapper with custom interfaces - UPDATE mapCloser: improved map of closers for resource management - UPDATE maxstdio: enhanced C implementation for max stdio file descriptor retrieval - DELETE multiplexer/model.go: removed legacy multiplexer (functionality moved to console/buff.go and retro/) - UPDATE nopwritecloser: improved no-op write closer - UPDATE tools: enhanced I/O utility functions [ldap] - UPDATE ldap: improved LDAP client with better connection handling and search operations [logger] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE config: improved default values, file options, and syslog configuration - UPDATE entry/interface: enhanced log entry with context support - UPDATE fields: improved field handling with JSON cloning - UPDATE gorm/interface: enhanced GORM logger with trace ID support - UPDATE hashicorp/interface: improved HashiCorp logger integration - FIX hookfile/system: use os.OpenRoot for secure file operations (prevents path traversal) - FIX hookfile/system: fixed import path from libsrv "golib/server" to "golib/runner" - ADD hookfile: IsRunning() method to track file hook state - UPDATE hookstderr/interface: enhanced stderr hook with better buffering - UPDATE hookstdout/interface: enhanced stdout hook with better buffering - UPDATE hooksyslog: improved syslog integration with channel and priority handling - ADD hookwriter package: generic io.Writer hook for custom output destinations - UPDATE interface: enhanced logger interface with context propagation - UPDATE level: improved log level handling and comparison - UPDATE log: enhanced logging with better formatting - UPDATE manage: improved logger lifecycle management - UPDATE model: refactored logger model for better maintainability [mail] - UPDATE sender: improved mail sender with better MIME handling - UPDATE interface: enhanced interface with monitoring support - UPDATE monitor: added monitoring integration for mail operations [monitor] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - ADD status package: new subpackage for status management with Status type (KO, Warn, OK) - ADD status/encode: marshaling support for JSON, YAML, TOML, Text, CBOR - ADD status/format: human-readable status formatting - ADD status/interface: Status type with Parse and String methods - UPDATE encode: improved encoding with better error handling - UPDATE error: enhanced error definitions - UPDATE info: improved system info collection (CPU, mem, disk, network) - UPDATE interface: enhanced monitor interface with status support and better component integration - UPDATE metrics: improved metrics collection and export - UPDATE middleware: enhanced monitoring middleware for HTTP - UPDATE pool/interface: enhanced pool interface with better monitoring integration - UPDATE pool/metrics: improved metrics collection in pool - UPDATE pool/model: refactored pool model for better maintainability - UPDATE pool/pool: enhanced pool implementation with better lifecycle - UPDATE server: enhanced server monitoring with status tracking - UPDATE types/monitor: improved monitor type definitions [nats] - UPDATE client: improved NATS client with better subscription handling - UPDATE config: enhanced NATS configuration with cluster support - UPDATE monitor: added monitoring integration for NATS operations - UPDATE server: improved NATS server integration with monitoring [network] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE bytes: improved byte size handling for network operations - UPDATE number: enhanced number utilities for network data - UPDATE protocol/encode: improved protocol encoding - ADD protocol/format: protocol formatting utilities - UPDATE protocol/interface: enhanced protocol interface - UPDATE protocol/model: refactored protocol model [password] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE password: improved password utilities with strength validation and secure generation [pidcontroller] - UPDATE interface: improved PID controller interface - UPDATE model: enhanced PID controller model with better tuning parameters [pprof] - UPDATE tools: improved pprof utilities for profiling integration [prometheus] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE bloom/bloom: improved bloom filter with better concurrency handling - UPDATE bloom/collection: enhanced bloom filter collection operations - UPDATE interface: enhanced prometheus interface with better type safety - UPDATE metrics/interface: enhanced metrics interface with better registration - UPDATE metrics/model: refactored metrics model for better maintainability - UPDATE model: refactored prometheus model with better validation - UPDATE pool: enhanced metric pool with concurrent access - UPDATE pool/interface: enhanced pool interface - UPDATE pool/model: refactored pool model - UPDATE route: improved routing for metric endpoints - UPDATE types: enhanced type definitions for metrics - UPDATE webmetrics: improved existing metrics (requestBody, requestIPTotal, requestLatency, requestSlow, requestTotal, requestURITotal, responseBody) - ADD webmetrics/activeConnections: gauge for tracking concurrent HTTP connections - ADD webmetrics/requestErrors: counter for HTTP request errors - ADD webmetrics/responseSizeByEndpoint: histogram for response size distribution by endpoint - ADD webmetrics/statusCodeTotal: counter for HTTP status codes [request] - UPDATE interface: enhanced request interface with better type safety - UPDATE model: refactored request model for better maintainability - UPDATE options: improved request options with better validation - UPDATE url: enhanced URL handling with better parsing [retro] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE encoding: improved encoding utilities with better format support - UPDATE format: enhanced formatting functions for retro compatibility - UPDATE model: refactored retro model with better validation - UPDATE utils: improved utility functions for version handling - UPDATE version: enhanced version utilities for retro compatibility [router] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE auth/interface: enhanced authentication interface with better validation - UPDATE auth/model: improved authentication model - UPDATE authheader/interface: enhanced authentication header interface - UPDATE default: improved default router configuration - UPDATE error: enhanced error definitions for router - UPDATE header/config: improved header configuration - UPDATE header/interface: enhanced header interface - UPDATE header/model: refactored header model - UPDATE interface: improved router interface with better type safety - UPDATE middleware: improved router middleware with better error handling - UPDATE model: refactored router model for better maintainability - UPDATE router: enhanced core router implementation - UPDATE tools: enhanced router utilities for route registration [runner] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE package: move package for lifecycle management of long-running services (moved from server/runner) - ADD interface: Runner interface with Start, Stop, Restart, IsRunning, and Uptime methods - ADD startStop package: service lifecycle with blocking start and graceful stop (interface, model, comprehensive tests) - ADD ticker package: periodic task execution at regular intervals (interface, model, comprehensive tests) - ADD tests: concurrency, construction, errors, lifecycle, and uptime tests for both startStop and ticker - ADD tools: RecoveryCaller for panic recovery in goroutines [semaphore] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - FIX bar/bar: Dec method now properly decrements (was calling Inc64, now calls Dec64 with negative value) - UPDATE bar: improved progress bar with better MPB integration - UPDATE bar/context: enhanced context handling for cancellation - UPDATE bar/interface: added methods for Total() and better progress tracking - UPDATE bar/model: improved model with atomic operations - UPDATE bar tests: enhanced bar_operations_test, edge_cases_test, integration_test, and semaphore_test - UPDATE context: enhanced context propagation - UPDATE interface: improved semaphore interface with weighted operations - UPDATE model: refactored model for better thread safety - UPDATE progress: enhanced progress tracking with multiple bars - UPDATE sem/interface: added IsRunning() method for state tracking - UPDATE sem/ulimit: improved ulimit handling for file descriptors - UPDATE sem/weighted: enhanced weighted semaphore operations - UPDATE types: improved type definitions for bar, progress, and semaphore [server] - REFACTOR: moved runner subpackage to root-level runner package - DELETE: empty package after moved runner subpackage [shell] - UPDATE goprompt: improved interactive prompt handling with better input validation [size] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - ADD arithmetic.go: NEW file with arithmetic operations (Add, Sub, Mul, Div with overflow detection) - UPDATE encode: improved marshaling for JSON, YAML, TOML, Text, CBOR - UPDATE format: enhanced human-readable formatting (B, KB, MB, GB, TB, PB, EB) - UPDATE interface: added arithmetic methods (Mul, MulErr, Div, DivErr, Add, AddErr, Sub, SubErr) - UPDATE model: refactored Size type with better validation - UPDATE parse: improved parsing with unit detection (IEC and SI standards) [smtp] - UPDATE client: improved SMTP client with better error handling - UPDATE config: enhanced configuration with validation - UPDATE config/error: improved error definitions - UPDATE config/interface: enhanced interface with context support - UPDATE config/model: refactored model for better maintainability - UPDATE interface: improved SMTP interface with monitoring support - UPDATE monitor: added monitoring integration for SMTP operations - DELETE network/network.go: removed legacy network handling (consolidated into client) - UPDATE tlsmode/tls: enhanced TLS mode handling (None, TLS, StartTLS) - UPDATE types/interface: improved type interface [socket] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - ADD client/interface_darwin: macOS-specific socket client options - UPDATE client/interface_linux: platform-specific socket options for Linux - UPDATE client/interface_other: platform-specific socket options for other platforms - UPDATE client/tcp/error: improved TCP client error handling - UPDATE client/tcp/interface: enhanced TCP client interface - UPDATE client/tcp/model: improved TCP client model - UPDATE client/udp/error: improved UDP client error handling - UPDATE client/udp/interface: enhanced UDP client interface - UPDATE client/udp/model: improved UDP client model - UPDATE client/unix/error: improved Unix socket client error handling - UPDATE client/unix/ignore: enhanced ignore functionality - UPDATE client/unix/interface: enhanced Unix socket client interface - UPDATE client/unix/model: improved Unix socket client model - UPDATE client/unixgram/error: improved Unix datagram client error handling - UPDATE client/unixgram/ignore: enhanced ignore functionality - UPDATE client/unixgram/interface: enhanced Unix datagram client interface - UPDATE client/unixgram/model: improved Unix datagram client model - UPDATE config/client: improved client configuration - UPDATE config/server: improved server configuration - DELETE delim: moved legacy delimiter to I/O package - UPDATE interface: improved socket interface - UPDATE io: enhanced I/O operations - DELETE multi: moved legacy multi to I/O package - ADD server/interface_darwin: macOS-specific socket server options - UPDATE server/interface_linux: platform-specific server options for Linux - UPDATE server/interface_other: platform-specific server options for other platforms - UPDATE server/tcp/error: improved TCP server error handling - UPDATE server/tcp/interface: enhanced TCP server interface - UPDATE server/tcp/listener: improved TCP server listener - UPDATE server/tcp/model: improved TCP server model - UPDATE server/udp/error: improved UDP server error handling - UPDATE server/udp/interface: enhanced UDP server interface - UPDATE server/udp/listener: improved UDP server listener - UPDATE server/udp/model: improved UDP server model - UPDATE server/unix/error: improved Unix socket server error handling - UPDATE server/unix/ignore: enhanced ignore functionality - UPDATE server/unix/interface: enhanced Unix socket server interface - UPDATE server/unix/listener: improved Unix socket server listener - UPDATE server/unix/model: improved Unix socket server model - UPDATE server/unixgram/error: improved Unix datagram server error handling - UPDATE server/unixgram/ignore: enhanced ignore functionality - UPDATE server/unixgram/interface: enhanced Unix datagram server interface - UPDATE server/unixgram/listener: improved Unix datagram server listener - UPDATE server/unixgram/model: improved Unix datagram server model [static] - UPDATE interface: improved static interface with monitoring support - UPDATE model: refactored static model - UPDATE monitor: added monitoring integration for static file operations [status] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE cache: improved status cache with better synchronization - UPDATE config: improved status configuration - UPDATE control/encode: improved control encoding - UPDATE control/interface: enhanced control interface with status tracking - UPDATE control/model: refactored control model - UPDATE encode: improved status encoding - UPDATE error: enhanced error definitions for status - UPDATE info: improved status info handling - UPDATE interface: enhanced status interface - UPDATE listmandatory/interface: improved list mandatory interface - UPDATE listmandatory/model: refactored list mandatory model - UPDATE mandatory/interface: enhanced mandatory interface - UPDATE mandatory/model: refactored mandatory model - UPDATE model: refactored status model - UPDATE pool: improved status pool - UPDATE route: enhanced status route handling [test] - DELETE: all manual tests are or will be replaced by proper automated test suites in respective packages [version] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE error: improved error definitions for version - UPDATE license: enhanced license handling - UPDATE version: improved version utilities [viper] - ADD/UPDATE documentation: comprehensive documentation with monitoring patterns - ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions - UPDATE interface: enhanced viper interface with context support - UPDATE model: refactored viper model for better maintainability
17 KiB
WebMetrics - Prometheus Metrics for Gin Web Servers
A comprehensive collection of pre-configured Prometheus metrics specifically designed for monitoring Gin-based web servers. This package provides production-ready metrics for tracking request rates, latencies, errors, bandwidth, and more.
Table of Contents
- Overview
- Architecture
- Metrics Catalog
- Quick Start
- Detailed Usage
- Dashboard Examples
- Best Practices
- Performance Considerations
Overview
What is WebMetrics?
WebMetrics is a specialized metrics collection package that integrates seamlessly with Gin web framework and Prometheus. It provides:
- 11 production-ready metrics covering all aspects of HTTP server monitoring
- Zero-configuration defaults with customizable prefixes
- Label-based dimensionality for detailed analysis
- Efficient implementations using Bloom filters and optimized collectors
- Complete GoDoc documentation for all metrics
Key Features
✅ Traffic Monitoring: Track request volumes, unique clients, and bandwidth usage
✅ Performance Analysis: Measure latencies, identify slow endpoints
✅ Error Tracking: Monitor error rates, status codes, and failure patterns
✅ Resource Utilization: Track active connections and payload sizes
✅ Dashboard Ready: Includes PromQL queries for common visualizations
Architecture
How It Works
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Gin Request │────────▶│ Middleware │────────▶│ Handler │
└─────────────┘ └──────────────┘ └─────────────┘
│ │
│ │
▼ ▼
┌──────────────┐ ┌──────────────┐
│ Metrics │◀────────│ Collection │
│ Context │ │ Trigger │
└──────────────┘ └──────────────┘
│
▼
┌──────────────┐
│ Prometheus │
│ Registry │
└──────────────┘
Collection Flow
- Request Arrival: Gin middleware captures request start time
- Context Enhancement: Request data stored in Gin context
- Handler Execution: Your application logic runs
- Metric Collection: Metrics are collected after handler completes
- Prometheus Export: Metrics available at
/metricsendpoint
Data Model
Each metric follows Prometheus best practices:
- Metric Name:
{prefix}_{metric_name}(e.g.,gin_request_total) - Labels: Dimensional data for filtering and grouping
- Type: Counter, Gauge, or Histogram based on use case
- Description: Human-readable description of what is measured
Metrics Catalog
Overview Table
| Metric | Type | Labels | Purpose | Cardinality |
|---|---|---|---|---|
request_total |
Counter | None | Total request count | Low (1) |
request_uri_total |
Counter | uri, method, code | Requests per endpoint | Medium |
request_duration |
Histogram | uri | Request latency distribution | Medium |
request_slow_total |
Histogram | uri, method, code | Slow requests tracking | Medium |
request_errors_total |
Counter | uri, method, code, error_type | Error tracking | Medium |
request_body_total |
Counter | None | Incoming data volume | Low (1) |
response_body_total |
Counter | None | Outgoing data volume | Low (1) |
response_size_bytes |
Histogram | uri, method | Response size distribution | Medium |
request_ip_total |
Counter | None | Unique client IPs | Low (1) |
status_code_total |
Counter | code, class | Status code distribution | Low (~50) |
active_connections |
Gauge | None | Current concurrent requests | Low (1) |
Cardinality Guidelines
- Low: 1-100 unique label combinations
- Medium: 100-10,000 unique label combinations
- High: >10,000 unique label combinations (⚠️ avoid)
Quick Start
Basic Setup
package main
import (
"github.com/gin-gonic/gin"
"github.com/nabbar/golib/prometheus"
"github.com/nabbar/golib/prometheus/webmetrics"
)
func main() {
// Initialize Prometheus
prm := prometheus.New(prometheus.Config{
SlowTime: 5, // 5 seconds threshold for slow requests
})
// Get metric pool
pool := prm.GetPool()
// Register all standard metrics
pool.Add(webmetrics.MetricRequestTotal("myapp"))
pool.Add(webmetrics.MetricRequestURITotal("myapp"))
pool.Add(webmetrics.MetricRequestLatency("myapp", func() prometheus.Prometheus { return prm }))
pool.Add(webmetrics.MetricRequestErrors("myapp"))
pool.Add(webmetrics.MetricStatusCodeTotal("myapp"))
// Setup Gin
router := gin.Default()
// Add Prometheus middleware
router.Use(prm.Middleware())
// Expose metrics endpoint
router.GET("/metrics", gin.WrapH(prm.Handler()))
// Your routes
router.GET("/api/users", handleUsers)
router.Run(":8080")
}
Minimal Setup (Essential Metrics Only)
// Minimal monitoring setup with 4 key metrics
pool.Add(webmetrics.MetricRequestTotal("myapp")) // Traffic volume
pool.Add(webmetrics.MetricRequestURITotal("myapp")) // Per-endpoint traffic
pool.Add(webmetrics.MetricRequestErrors("myapp")) // Error tracking
pool.Add(webmetrics.MetricStatusCodeTotal("myapp")) // Status codes
Complete Setup (All Metrics)
// Comprehensive monitoring with all available metrics
func setupMetrics(prm prometheus.Prometheus, prefix string) {
pool := prm.GetPool()
getFct := func() prometheus.Prometheus { return prm }
// Traffic metrics
pool.Add(webmetrics.MetricRequestTotal(prefix))
pool.Add(webmetrics.MetricRequestURITotal(prefix))
pool.Add(webmetrics.MetricRequestIPTotal(prefix))
// Performance metrics
pool.Add(webmetrics.MetricRequestLatency(prefix, getFct))
pool.Add(webmetrics.MetricRequestSlow(prefix, getFct))
// Error metrics
pool.Add(webmetrics.MetricRequestErrors(prefix))
pool.Add(webmetrics.MetricStatusCodeTotal(prefix))
// Resource metrics
pool.Add(webmetrics.MetricRequestBody(prefix))
pool.Add(webmetrics.MetricResponseBody(prefix))
pool.Add(webmetrics.MetricResponseSizeByEndpoint(prefix, getFct))
// Connection metrics (requires special middleware)
activeConns := webmetrics.MetricActiveConnections(prefix)
pool.Add(activeConns)
// Note: Active connections requires custom middleware
// See "Active Connections Middleware" section below
}
Detailed Usage
Active Connections Middleware
The active_connections metric requires special handling:
func setupActiveConnectionsMiddleware(metric prmmet.Metric) gin.HandlerFunc {
return func(c *gin.Context) {
// Increment on request start
metric.Inc(nil)
// Decrement on request end (using defer)
defer metric.Dec(nil)
// Process request
c.Next()
}
}
// Usage
activeConns := webmetrics.MetricActiveConnections("myapp")
pool.Add(activeConns)
router.Use(setupActiveConnectionsMiddleware(activeConns))
Custom Metric Prefixes
Use custom prefixes to distinguish between multiple services:
// Service A
setupMetrics(prmA, "service_a") // → service_a_request_total
// Service B
setupMetrics(prmB, "service_b") // → service_b_request_total
// Default (uses "gin" prefix)
setupMetrics(prm, "") // → gin_request_total
Filtering by Labels
Metrics with labels support filtering in Prometheus:
// Example: request_uri_total has labels: uri, method, code
// All POST requests
gin_request_uri_total{method="POST"}
// All 404 errors
gin_request_uri_total{code="404"}
// Specific endpoint
gin_request_uri_total{uri="/api/users/:id"}
// Combination
gin_request_uri_total{uri="/api/orders", method="POST", code="201"}
Dashboard Examples
Traffic Overview Dashboard
# Total Request Rate (req/sec)
rate(gin_request_total[5m])
# Request Rate by Endpoint
sum by(uri) (rate(gin_request_uri_total[5m]))
# Top 10 Busiest Endpoints
topk(10, sum by(uri) (rate(gin_request_uri_total[5m])))
# Request Distribution by HTTP Method
sum by(method) (rate(gin_request_uri_total[5m]))
Performance Dashboard
# Average Request Latency
rate(gin_request_duration_sum[5m]) / rate(gin_request_duration_count[5m])
# 95th Percentile Latency by Endpoint
histogram_quantile(0.95, sum by(uri, le) (rate(gin_request_duration_bucket[5m])))
# 99th Percentile Latency (Tail Latency)
histogram_quantile(0.99, sum by(uri, le) (rate(gin_request_duration_bucket[5m])))
# Slowest Endpoints (p99 latency)
topk(5, histogram_quantile(0.99, sum by(uri, le) (rate(gin_request_duration_bucket[5m]))))
# Slow Request Rate
sum(rate(gin_request_slow_total_count[5m]))
# Percentage of Slow Requests
sum(rate(gin_request_slow_total_count[5m])) / sum(rate(gin_request_total[5m])) * 100
Error Monitoring Dashboard
# Total Error Rate
sum(rate(gin_request_errors_total[5m]))
# Error Rate by Type (Client vs Server)
sum by(error_type) (rate(gin_request_errors_total[5m]))
# 4xx Error Rate
sum(rate(gin_request_errors_total{error_type="client_error"}[5m]))
# 5xx Error Rate
sum(rate(gin_request_errors_total{error_type="server_error"}[5m]))
# Error Percentage
sum(rate(gin_request_errors_total[5m])) / sum(rate(gin_request_total[5m])) * 100
# Top 5 Endpoints with Most Errors
topk(5, sum by(uri) (rate(gin_request_errors_total[5m])))
# Most Common Error Codes
topk(10, sum by(code) (rate(gin_status_code_total{class=~"4xx|5xx"}[5m])))
Success Rate & Availability
# Success Rate (2xx responses)
sum(rate(gin_status_code_total{class="2xx"}[5m])) / sum(rate(gin_status_code_total[5m])) * 100
# Availability (non-5xx responses)
(sum(rate(gin_status_code_total[5m])) - sum(rate(gin_status_code_total{class="5xx"}[5m]))) /
sum(rate(gin_status_code_total[5m])) * 100
# SLO Compliance (99.9% target)
(sum(rate(gin_request_total[30d])) - sum(rate(gin_request_errors_total[30d]))) /
sum(rate(gin_request_total[30d])) >= 0.999
Bandwidth & Resource Usage
# Incoming Bandwidth (MB/s)
rate(gin_request_body_total[5m]) / 1024 / 1024
# Outgoing Bandwidth (MB/s)
rate(gin_response_body_total[5m]) / 1024 / 1024
# Total Bandwidth (MB/s)
(rate(gin_request_body_total[5m]) + rate(gin_response_body_total[5m])) / 1024 / 1024
# Average Request Size (bytes)
rate(gin_request_body_total[5m]) / rate(gin_request_total[5m])
# Average Response Size (bytes)
rate(gin_response_body_total[5m]) / rate(gin_request_total[5m])
# Average Response Size by Endpoint
rate(gin_response_size_bytes_sum[5m]) / rate(gin_response_size_bytes_count[5m])
# Current Active Connections
gin_active_connections
# Peak Active Connections (last hour)
max_over_time(gin_active_connections[1h])
Client Tracking
# Approximate Unique Clients
gin_request_ip_total
# New Unique IPs per Hour
rate(gin_request_ip_total[1h])
# Average Requests per Unique IP
rate(gin_request_total[5m]) / rate(gin_request_ip_total[5m])
Best Practices
1. Choose Appropriate Metric Types
- Counter: For cumulative values that only increase (requests, errors, bytes)
- Gauge: For values that go up and down (active connections, queue size)
- Histogram: For distributions (latency, response size)
2. Manage Cardinality
⚠️ High cardinality can impact Prometheus performance
Good (Low cardinality):
// Uses route pattern: /users/:id
uri = c.FullPath() // → "/users/:id"
Bad (High cardinality):
// Uses actual path with ID
uri = c.Request.URL.Path // → "/users/123", "/users/456", ...
// This creates thousands of unique label combinations!
3. Use Metric Naming Conventions
Follow Prometheus naming best practices:
- Use
_totalsuffix for counters:request_total,errors_total - Use base units:
_bytes,_seconds - Use
_durationfor latencies - Avoid redundant prefixes:
gin_gin_request❌
4. Set Up Alerts
Example alert rules:
groups:
- name: webserver_alerts
rules:
# High error rate
- alert: HighErrorRate
expr: |
sum(rate(gin_request_errors_total[5m])) /
sum(rate(gin_request_total[5m])) > 0.05
for: 5m
annotations:
summary: "Error rate above 5%"
# High latency
- alert: HighLatency
expr: |
histogram_quantile(0.99,
sum by(le) (rate(gin_request_duration_bucket[5m]))
) > 2
for: 10m
annotations:
summary: "P99 latency above 2 seconds"
# Service down
- alert: ServiceDown
expr: up{job="myapp"} == 0
for: 1m
annotations:
summary: "Service is down"
5. Dashboard Organization
Organize dashboards by audience:
Operations Dashboard:
- Request rate
- Error rate
- Latency percentiles
- Active connections
Development Dashboard:
- Endpoint performance
- Error breakdown
- Slow queries
- Resource usage
Business Dashboard:
- Traffic trends
- Availability SLA
- User growth (unique IPs)
- Geographic distribution
6. Retention and Aggregation
Configure appropriate retention in Prometheus:
# prometheus.yml
global:
scrape_interval: 15s
# Short-term high-resolution data
storage:
tsdb:
retention.time: 15d
# Long-term aggregated data (using recording rules)
rule_files:
- recording_rules.yml
Example recording rules:
groups:
- name: aggregate_metrics
interval: 5m
rules:
# Pre-aggregate common queries
- record: job:gin_request_rate:5m
expr: sum(rate(gin_request_total[5m]))
- record: job:gin_error_rate:5m
expr: sum(rate(gin_request_errors_total[5m]))
- record: job:gin_latency_p95:5m
expr: histogram_quantile(0.95, sum by(le) (rate(gin_request_duration_bucket[5m])))
Performance Considerations
Memory Usage
Each metric instance consumes memory:
- Counter/Gauge: ~200 bytes + (labels * 50 bytes)
- Histogram: ~2KB + (buckets * labels * 100 bytes)
Example calculation for 100 endpoints:
request_uri_total(3 labels, ~20 status codes, ~5 methods): ~10KBrequest_duration(1 label, 10 buckets): ~100KB- Total for all metrics: ~500KB - 2MB
CPU Impact
Metric collection overhead:
- Counter increment: ~50ns
- Histogram observe: ~200ns
- Label lookup: ~100ns
For 1000 req/s: ~0.5-1% CPU overhead
Optimization Tips
- Limit histogram buckets: Use 8-12 buckets maximum
- Reduce label cardinality: Avoid user IDs, timestamps in labels
- Use recording rules: Pre-aggregate common queries
- Efficient Bloom filters: For unique IP tracking
- Batch metrics scraping: Default 15s interval is sufficient
Troubleshooting
High Memory Usage
Symptom: Prometheus memory grows continuously
Solution:
- Check label cardinality:
promtool tsdb analyze /data/prometheus - Remove high-cardinality labels
- Use recording rules to aggregate data
- Reduce retention period
Missing Metrics
Symptom: Metrics not appearing in Prometheus
Checklist:
- ✅ Metric registered with pool:
pool.Add(metric) - ✅ Middleware configured:
router.Use(prm.Middleware()) - ✅ Metrics endpoint exposed:
router.GET("/metrics", ...) - ✅ Prometheus scraping configured
- ✅ Check Prometheus targets page
Inaccurate Latency
Symptom: Latency metrics seem wrong
Solution:
- Ensure middleware sets start time in context
- Check
librtr.GinContextStartUnixNanoTimeis set - Verify time synchronization (NTP)
License
MIT License - see LICENSE file for details.
Contributing
Contributions are welcome! Please ensure:
- GoDoc documentation for new metrics
- Examples in README
- Follow existing naming conventions
- Include dashboard query examples
Support
- Documentation: pkg.go.dev
- Issues: GitHub Issues
Built with ❤️ for production monitoring