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
HTTP Server Package
Production-grade HTTP server management for Go with lifecycle control, TLS support, pool orchestration, and integrated monitoring.
Table of Contents
- Overview
- Key Features
- Installation
- Architecture
- Quick Start
- Performance
- Use Cases
- Core Package
- Subpackages
- Best Practices
- Testing
- Contributing
- Future Enhancements
- License
Overview
The httpserver package provides a robust abstraction layer for managing HTTP/HTTPS servers in Go applications. It emphasizes production readiness with comprehensive lifecycle management, configuration validation, TLS support, and the ability to orchestrate multiple servers through a unified pool interface.
Design Philosophy
- Lifecycle Management: Full control over server start, stop, and restart operations
- Configuration-Driven: Declarative configuration with validation
- Thread-Safe: Atomic operations and proper synchronization for concurrent use
- Production-Ready: Monitoring, logging, and error handling built-in
- Composable: Pool management for coordinating multiple server instances
Key Features
- Complete Lifecycle Control: Start, stop, restart servers with context-aware operations
- Configuration Validation: Built-in validation with detailed error reporting
- TLS/HTTPS Support: Integrated certificate management with optional/mandatory modes
- Pool Management: Coordinate multiple servers with unified operations and filtering
- Handler Management: Dynamic handler registration with key-based routing
- Monitoring Integration: Built-in health checks and metrics collection
- Thread-Safe Operations: Atomic values and mutex protection for concurrent access
- Port Conflict Detection: Automatic port availability checking before binding
- Graceful Shutdown: Context-aware shutdown with configurable timeouts
Installation
go get github.com/nabbar/golib/httpserver
Architecture
Package Structure
The package is organized into three main components:
httpserver/
├── httpserver # Core server implementation
│ ├── config.go # Configuration and validation
│ ├── server.go # Server lifecycle management
│ ├── run.go # Start/stop execution logic
│ ├── handler.go # Handler registration
│ ├── monitor.go # Monitoring integration
│ └── interface.go # Public interfaces
├── pool/ # Multi-server orchestration
│ ├── interface.go # Pool interfaces
│ ├── server.go # Pool operations
│ ├── list.go # Filtering and listing
│ └── config.go # Pool configuration
└── types/ # Shared type definitions
├── handler.go # Handler types
├── fields.go # Field type constants
└── const.go # Package constants
Component Diagram
┌─────────────────────────────────────────────────────┐
│ Application Layer │
│ (Your HTTP Handlers & Routes) │
└──────────────────┬──────────────────────────────────┘
│
┌─────────▼─────────┐
│ httpserver │
│ Package API │
└─────────┬─────────┘
│
┌──────────────┼──────────────┐
│ │ │
┌───▼───┐ ┌────▼────┐ ┌───▼────┐
│Server │ │ Pool │ │ Types │
│ │ │ │ │ │
│Config │◄───┤ Manager │ │Handler │
│Run │ │ Filter │ │Fields │
│Monitor│ │ Clone │ │Const │
└───┬───┘ └────┬────┘ └────────┘
│ │
└──────┬──────┘
│
┌──────▼──────┐
│ Go stdlib │
│ http.Server │
└─────────────┘
Thread Safety Architecture
| Component | Mechanism | Concurrency Model |
|---|---|---|
| Server State | atomic.Value |
Lock-free reads, atomic writes |
| Pool Map | sync.RWMutex |
Multiple readers, exclusive writers |
| Handler Registry | atomic.Value |
Lock-free handler swapping |
| Logger | atomic.Value |
Thread-safe logging |
| Runner | atomic.Value + sync.WaitGroup |
Lifecycle synchronization |
Performance
Server Operations
| Operation | Time | Memory | Notes |
|---|---|---|---|
| Config Validation | ~100ns | O(1) | Field validation only |
| Server Creation | <1ms | ~5KB | Includes initialization |
| Start Server | 1-5ms | ~10KB | Port binding overhead |
| Stop Server | <5s | O(1) | Graceful shutdown timeout |
| Pool Operations | O(n) | ~1KB/server | Linear scaling |
Throughput
- HTTP Requests: Limited by Go's
http.Server(typically 50k+ req/s) - HTTPS/TLS: ~20-30k req/s depending on cipher suite
- Pool Management: Negligible overhead (<1% per server)
Memory Usage
- Single Server: ~10-15KB baseline + handler memory
- Pool with 10 Servers: ~150KB baseline
- Scale: Linear growth with server count
Use Cases
This package is designed for applications requiring robust HTTP server management:
Microservices Architecture
- Run multiple API versions simultaneously (v1, v2, v3)
- Separate admin and public endpoints on different ports
- Blue-green deployments with gradual traffic shifting
Multi-Tenant Systems
- Dedicated server per tenant with isolated configuration
- Different TLS certificates per customer domain
- Per-tenant rate limiting and monitoring
Development & Testing
- Start/stop servers dynamically in integration tests
- Multiple test environments on different ports
- Mock servers with configurable behavior
API Gateways
- Route traffic to multiple backend servers
- Health checking and automatic failover
- Centralized monitoring and logging
Production Deployments
- Graceful shutdown during rolling updates
- TLS certificate rotation without downtime
- Structured logging and monitoring integration
Quick Start
Single Server
package main
import (
"context"
"net/http"
"github.com/nabbar/golib/httpserver"
)
func main() {
// Create server configuration
cfg := httpserver.Config{
Name: "api-server",
Listen: "127.0.0.1:8080",
Expose: "http://localhost:8080",
}
// Register handler (required)
cfg.RegisterHandlerFunc(func() map[string]http.Handler {
mux := http.NewServeMux()
mux.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
w.Write([]byte("OK"))
})
return map[string]http.Handler{
"": mux, // Default handler
}
})
// Validate configuration
if err := cfg.Validate(); err != nil {
panic(err)
}
// Create and start server
srv, err := httpserver.New(cfg, nil)
if err != nil {
panic(err)
}
ctx := context.Background()
if err := srv.Start(ctx); err != nil {
panic(err)
}
// Server is now running...
// Graceful shutdown
defer srv.Stop(ctx)
}
Server Pool
package main
import (
"context"
"net/http"
"github.com/nabbar/golib/httpserver"
"github.com/nabbar/golib/httpserver/pool"
)
func main() {
// Create handler function
handlerFunc := func() map[string]http.Handler {
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello from pool!"))
})
return map[string]http.Handler{"": mux}
}
// Create pool with handler
p := pool.New(nil, handlerFunc)
// Add multiple servers
configs := []httpserver.Config{
{Name: "api-v1", Listen: "127.0.0.1:8080", Expose: "http://localhost:8080"},
{Name: "api-v2", Listen: "127.0.0.1:8081", Expose: "http://localhost:8081"},
{Name: "admin", Listen: "127.0.0.1:8082", Expose: "http://localhost:8082"},
}
for _, cfg := range configs {
if err := p.StoreNew(cfg, nil); err != nil {
panic(err)
}
}
// Start all servers
ctx := context.Background()
if err := p.Start(ctx); err != nil {
panic(err)
}
// All servers running...
// Stop all servers gracefully
defer p.Stop(ctx)
}
Core Package: httpserver
The core package provides the foundational server abstraction with configuration, lifecycle management, and monitoring.
Configuration
The Config struct defines all server parameters with validation:
type Config struct {
// Name identifies the server instance (required)
Name string `validate:"required"`
// Listen is the bind address - format: "ip:port" or "host:port" (required)
// Examples: "127.0.0.1:8080", "0.0.0.0:443", "localhost:3000"
Listen string `validate:"required,hostname_port"`
// Expose is the public-facing URL for this server (required)
// Used for generating URLs, monitoring, and service discovery
// Examples: "http://localhost:8080", "https://api.example.com"
Expose string `validate:"required,url"`
// HandlerKey associates this server with a specific handler from the handler map
// Allows multiple servers to use different handlers from a shared registry
HandlerKey string
// Disabled allows disabling a server without removing its configuration
// Useful for maintenance mode or gradual rollout
Disabled bool
// Monitor configuration for health checks and metrics
Monitor moncfg.Config
// TLSMandatory requires valid TLS configuration to start the server
// If true, server will fail to start without proper TLS setup
TLSMandatory bool
// TLS certificate configuration (optional)
// If InheritDefault is true, uses default TLS config
TLS libtls.Config
// Additional HTTP/2 and timeout configuration...
}
Configuration Methods:
// Validate performs comprehensive validation on all fields
func (c Config) Validate() error
// Clone creates a deep copy of the configuration
func (c Config) Clone() Config
// RegisterHandlerFunc sets the handler function for this server
func (c *Config) RegisterHandlerFunc(f FuncHandler)
// SetDefaultTLS sets the default TLS configuration provider
func (c *Config) SetDefaultTLS(f FctTLSDefault)
// SetContext sets the parent context provider
func (c *Config) SetContext(f FuncContext)
// Server creates a new server instance from this configuration
func (c Config) Server(defLog FuncLog) (Server, error)
Server Interface
The Server interface provides full lifecycle and configuration control:
type Server interface {
// Lifecycle Management
Start(ctx context.Context) error // Start the HTTP server
Stop(ctx context.Context) error // Gracefully stop the server
Restart(ctx context.Context) error // Stop then start the server
IsRunning() bool // Check if server is running
Uptime() time.Duration // Get server uptime
// Server Information
GetName() string // Get server name
GetBindable() string // Get bind address (Listen)
GetExpose() string // Get expose URL
IsDisable() bool // Check if server is disabled
IsTLS() bool // Check if TLS is configured
// Configuration Management
GetConfig() *Config // Get current configuration
SetConfig(cfg Config, defLog FuncLog) error // Update configuration
// Handler Management
Handler(h FuncHandler) // Set handler function
Merge(s Server, def FuncLog) error // Merge another server's config
// Monitoring
Monitor(vrs Version) (Monitor, error) // Get monitoring data
MonitorName() string // Get monitor identifier
}
Usage Examples
Basic HTTP Server
package main
import (
"context"
"net/http"
"github.com/nabbar/golib/httpserver"
)
func main() {
// Configure server
cfg := httpserver.Config{
Name: "web-server",
Listen: "0.0.0.0:8080",
Expose: "http://api.example.com",
}
// Register HTTP handler
cfg.RegisterHandlerFunc(func() map[string]http.Handler {
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello World"))
})
mux.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
})
return map[string]http.Handler{"": mux}
})
// Create and start server
srv, _ := httpserver.New(cfg, nil)
srv.Start(context.Background())
}
HTTPS Server with TLS
package main
import (
"context"
"github.com/nabbar/golib/certificates"
"github.com/nabbar/golib/httpserver"
)
func main() {
cfg := httpserver.Config{
Name: "secure-server",
Listen: "0.0.0.0:8443",
Expose: "https://secure.example.com",
TLSMandatory: true,
TLS: certificates.Config{
CertPEM: "/path/to/cert.pem",
KeyPEM: "/path/to/key.pem",
// Additional TLS configuration...
},
}
cfg.RegisterHandlerFunc(func() map[string]http.Handler {
// Your HTTPS handler
return map[string]http.Handler{"": yourHandler}
})
srv, _ := httpserver.New(cfg, nil)
srv.Start(context.Background())
}
Multiple Handlers with Keys
package main
import (
"context"
"net/http"
"github.com/nabbar/golib/httpserver"
)
func main() {
// Create handler registry
handlerFunc := func() map[string]http.Handler {
return map[string]http.Handler{
"api-v1": createAPIv1Handler(),
"api-v2": createAPIv2Handler(),
"admin": createAdminHandler(),
"default": createDefaultHandler(),
}
}
// Server using api-v1 handler
cfg := httpserver.Config{
Name: "api-v1-server",
Listen: "127.0.0.1:8080",
Expose: "http://localhost:8080",
HandlerKey: "api-v1", // Select specific handler
}
cfg.RegisterHandlerFunc(handlerFunc)
srv, _ := httpserver.New(cfg, nil)
srv.Start(context.Background())
}
Disabled Server (Maintenance Mode)
cfg := httpserver.Config{
Name: "maintenance-server",
Listen: "127.0.0.1:8080",
Expose: "http://localhost:8080",
Disabled: true, // Server won't start, but config is preserved
}
srv, _ := httpserver.New(cfg, nil)
// Server will not start due to Disabled flag
srv.Start(context.Background()) // Returns immediately without error
Dynamic Restart with New Configuration
package main
import (
"context"
"github.com/nabbar/golib/httpserver"
)
func main() {
// Initial configuration
cfg1 := httpserver.Config{
Name: "dynamic-server",
Listen: "127.0.0.1:8080",
Expose: "http://localhost:8080",
}
cfg1.RegisterHandlerFunc(handlerFunc)
srv, _ := httpserver.New(cfg1, nil)
srv.Start(context.Background())
// Later: update configuration (e.g., enable TLS)
cfg2 := cfg1.Clone()
cfg2.TLSMandatory = true
cfg2.TLS = newTLSConfig
cfg2.Expose = "https://localhost:8443"
// Update and restart
srv.SetConfig(cfg2, nil)
srv.Restart(context.Background())
}
Subpackages
pool Subpackage
Multi-server orchestration with unified lifecycle management and advanced filtering capabilities.
Purpose: Coordinate multiple HTTP servers as a single unit with shared handlers, monitoring, and control operations.
Features
- Unified Lifecycle: Start, stop, restart all servers with a single call
- Dynamic Management: Add/remove servers at runtime
- Advanced Filtering: Query servers by name, bind address, or expose URL
- Pattern Matching: Support for glob patterns and regex filtering
- Pool Operations: Clone, merge, and walk through server collections
- Shared Handlers: Register handlers once for all servers
- Aggregated Monitoring: Collect metrics from all servers
- Thread-Safe: RWMutex protection for concurrent access
Pool Interface
type Pool interface {
// Lifecycle Management (inherited from libsrv.Server)
Start(ctx context.Context) error
Stop(ctx context.Context) error
Restart(ctx context.Context) error
IsRunning() bool
Uptime() time.Duration
// Management Operations
Walk(fct FuncWalk) bool // Iterate over all servers
WalkLimit(fct FuncWalk, onlyBindAddress ...string) bool // Iterate over specific servers
Clean() // Remove all servers
Load(bindAddress string) Server // Get server by bind address
Store(srv Server) // Add/update server
Delete(bindAddress string) // Remove server
StoreNew(cfg Config, defLog FuncLog) error // Add new server from config
LoadAndDelete(bindAddress string) (Server, bool) // Atomic load-and-delete
MonitorNames() []string // List all monitor names
// Filtering Operations
Has(bindAddress string) bool // Check if server exists
Len() int // Get server count
List(fieldFilter, fieldReturn FieldType, pattern, regex string) []string
Filter(field FieldType, pattern, regex string) Pool // Create filtered view
// Advanced Operations
Clone(ctx context.Context) Pool // Deep copy pool
Merge(p Pool, def FuncLog) error // Merge another pool
Handler(fct FuncHandler) // Set global handler
Monitor(vrs Version) ([]Monitor, error) // Get all monitors
}
Config Type
Pool configuration as a slice of server configs:
type Config []httpserver.Config
// Set global handler for all servers
func (p Config) SetHandlerFunc(hdl FuncHandler)
// Set global TLS configuration
func (p Config) SetDefaultTLS(f FctTLSDefault)
// Set global context provider
func (p Config) SetContext(f FuncContext)
// Validate all configurations
func (p Config) Validate() error
// Create pool from configurations
func (p Config) Pool(ctx FuncContext, hdl FuncHandler, defLog FuncLog) (Pool, error)
// Iterate over configurations
func (p Config) Walk(fct FuncWalkConfig)
Usage Examples
Basic Pool Management:
package main
import (
"context"
"net/http"
"github.com/nabbar/golib/httpserver"
"github.com/nabbar/golib/httpserver/pool"
)
func main() {
// Create shared handler
handler := func() map[string]http.Handler {
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello from pool"))
})
return map[string]http.Handler{"": mux}
}
// Create pool
p := pool.New(nil, handler)
// Add servers dynamically
servers := []httpserver.Config{
{Name: "api-v1", Listen: "127.0.0.1:8080", Expose: "http://localhost:8080"},
{Name: "api-v2", Listen: "127.0.0.1:8081", Expose: "http://localhost:8081"},
{Name: "admin", Listen: "127.0.0.1:9000", Expose: "http://localhost:9000"},
}
for _, cfg := range servers {
if err := p.StoreNew(cfg, nil); err != nil {
panic(err)
}
}
// Start all servers
ctx := context.Background()
if err := p.Start(ctx); err != nil {
panic(err)
}
// Check status
println("Running servers:", p.Len())
println("All running:", p.IsRunning())
// Stop all
defer p.Stop(ctx)
}
Pool from Configuration:
package main
import (
"context"
"github.com/nabbar/golib/httpserver"
"github.com/nabbar/golib/httpserver/pool"
)
func main() {
// Define configurations
configs := pool.Config{
httpserver.Config{
Name: "web-frontend",
Listen: "0.0.0.0:8080",
Expose: "http://example.com",
},
httpserver.Config{
Name: "api-backend",
Listen: "0.0.0.0:8081",
Expose: "http://api.example.com",
},
}
// Set global handler
configs.SetHandlerFunc(createHandler)
// Validate all configurations
if err := configs.Validate(); err != nil {
panic(err)
}
// Create pool
p, err := configs.Pool(nil, nil, nil)
if err != nil {
panic(err)
}
// Start all
p.Start(context.Background())
defer p.Stop(context.Background())
}
Advanced Filtering:
package main
import (
"github.com/nabbar/golib/httpserver/pool"
"github.com/nabbar/golib/httpserver/types"
)
func main() {
p := pool.New(nil, handler)
// ... add servers ...
// Filter by name pattern
apiServers := p.Filter(types.FieldName, "api-*", "")
// Filter by bind address
localServers := p.Filter(types.FieldBind, "127.0.0.1:*", "")
// Filter by expose URL with regex
httpsServers := p.Filter(types.FieldExpose, "", `^https://`)
// List server names
names := p.List(types.FieldName, types.FieldName, "*", "")
for _, name := range names {
println("Server:", name)
}
// Walk through servers
p.Walk(func(bindAddr string, srv httpserver.Server) bool {
println(srv.GetName(), "at", bindAddr)
return true // continue iteration
})
}
Pool Cloning and Merging:
package main
import (
"context"
"github.com/nabbar/golib/httpserver/pool"
)
func main() {
// Original pool
p1 := pool.New(nil, handler)
// ... add servers ...
// Clone for different context
ctx2 := context.Background()
p2 := p1.Clone(ctx2) // Independent copy
// Create another pool
p3 := pool.New(nil, handler)
// ... add different servers ...
// Merge p3 into p1
if err := p1.Merge(p3, nil); err != nil {
panic(err)
}
// p1 now contains servers from both pools
}
types Subpackage
Shared type definitions and constants used across the package.
Handler Types
// FuncHandler is the function signature for handler registration
// Returns a map of handler keys to http.Handler instances
type FuncHandler func() map[string]http.Handler
// BadHandler is a default handler that returns 500 Internal Server Error
type BadHandler struct{}
// NewBadHandler creates a new BadHandler instance
func NewBadHandler() http.Handler
Field Types
// FieldType identifies server fields for filtering operations
type FieldType uint8
const (
FieldName FieldType = iota // Server name field
FieldBind // Bind address field
FieldExpose // Expose URL field
)
Constants
const (
// HandlerDefault is the default handler key
HandlerDefault = "default"
// BadHandlerName is the identifier for the bad handler
BadHandlerName = "no handler"
// TimeoutWaitingPortFreeing is the timeout for port availability checks
TimeoutWaitingPortFreeing = 250 * time.Microsecond
// TimeoutWaitingStop is the default graceful shutdown timeout
TimeoutWaitingStop = 5 * time.Second
)
Best Practices
Configuration Management
// ✅ Good: Validate before use
cfg := httpserver.Config{
Name: "production-api",
Listen: "0.0.0.0:8080",
Expose: "https://api.production.com",
}
if err := cfg.Validate(); err != nil {
log.Fatalf("Invalid config: %v", err)
}
srv, err := httpserver.New(cfg, logger.Default)
if err != nil {
log.Fatalf("Failed to create server: %v", err)
}
// ❌ Bad: Skip validation
srv, _ := httpserver.New(cfg, nil) // May fail at runtime
Graceful Shutdown
// ✅ Good: Context with timeout
func main() {
srv, _ := httpserver.New(cfg, nil)
srv.Start(context.Background())
// Wait for signal
<-shutdownChan
// Graceful shutdown with timeout
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
if err := srv.Stop(ctx); err != nil {
log.Printf("Error stopping server: %v", err)
}
}
// ❌ Bad: Abrupt termination
srv.Stop(context.Background()) // No timeout, may hang
os.Exit(0) // Abrupt exit without cleanup
Error Handling
// ✅ Good: Check all errors
if err := srv.Start(ctx); err != nil {
log.Printf("Failed to start: %v", err)
return err
}
if srv.IsError() {
log.Printf("Server error: %v", srv.GetError())
}
// ❌ Bad: Ignore errors
srv.Start(ctx) // Silent failure
Pool Management
// ✅ Good: Centralized error handling
if err := pool.Start(ctx); err != nil {
// Aggregated errors from all servers
log.Fatalf("Pool start failed: %v", err)
}
// ✅ Good: Check individual servers
pool.Walk(func(bind string, srv httpserver.Server) bool {
if !srv.IsRunning() {
log.Printf("Server %s not running", srv.GetName())
}
return true
})
// ❌ Bad: Assume all started
pool.Start(ctx)
// No verification
Handler Registration
// ✅ Good: Register before creation
cfg.RegisterHandlerFunc(handlerFunc)
srv, _ := httpserver.New(cfg, nil)
// ✅ Good: Register after creation
srv.Handler(handlerFunc)
// ❌ Bad: No handler registered
srv, _ := httpserver.New(cfg, nil)
srv.Start(ctx) // Will use BadHandler (returns 500)
Testing
The package includes comprehensive test coverage using Ginkgo v2 and Gomega.
Test Statistics
| Package | Tests | Coverage | Status |
|---|---|---|---|
| httpserver | 83/84 | 53.8% | ✅ 98.8% Pass (1 skipped) |
| httpserver/pool | 79/79 | 63.7% | ✅ All Pass |
| httpserver/types | 32/32 | 100.0% | ✅ All Pass |
| Total | 194/195 | ~60% | ✅ 99.5% Pass |
Test Categories
- Configuration Tests: Validation, cloning, edge cases
- Server Tests: Lifecycle, info methods, TLS detection
- Handler Tests: Registration, execution, replacement
- Pool Tests: CRUD operations, filtering, merging
- Integration Tests: Actual HTTP servers (build tag:
integration)
Running Tests
# Run all unit tests
go test -v ./...
# With coverage
go test -v -cover ./...
# Generate coverage report
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.out
# Run integration tests (starts actual servers)
go test -tags=integration -v -timeout 120s ./...
# Using Ginkgo CLI
ginkgo -v -r
# With race detection
go test -race -v ./...
# Ginkgo with integration tests
ginkgo -v -r --tags=integration --timeout=2m
See TESTING.md for detailed testing documentation.
Monitoring
Single Server Monitoring
// Basic server information
monitorName := srv.MonitorName() // Unique monitor identifier
name := srv.GetName() // Server name
bind := srv.GetBindable() // Bind address
expose := srv.GetExpose() // Expose URL
isRunning := srv.IsRunning() // Running state
uptime := srv.Uptime() // Time since start
// Monitor interface (requires version info)
monitor, err := srv.Monitor(version)
if err != nil {
log.Printf("Monitor error: %v", err)
}
Pool Monitoring
// Aggregate pool information
names := pool.MonitorNames() // All monitor names
isRunning := pool.IsRunning() // True if any server running
maxUptime := pool.Uptime() // Maximum uptime across servers
poolSize := pool.Len() // Number of servers
// Iterate through servers
pool.Walk(func(bindAddr string, srv httpserver.Server) bool {
log.Printf("Server: %s, Running: %v, Uptime: %v",
srv.GetName(), srv.IsRunning(), srv.Uptime())
return true // continue
})
// Get all monitoring data
monitors, err := pool.Monitor(version)
if err != nil {
log.Printf("Pool monitor error: %v", err)
}
Error Handling
The package uses typed errors with diagnostic codes:
Error Types
| Error Code | Description | Context |
|---|---|---|
ErrorParamEmpty |
Required parameter missing | Configuration |
ErrorHTTP2Configure |
HTTP/2 setup failed | Server initialization |
ErrorServerValidate |
Invalid server configuration | Validation |
ErrorServerStart |
Failed to start server | Startup |
ErrorPortUse |
Port already in use | Port binding |
ErrorPoolAdd |
Failed to add server to pool | Pool management |
ErrorPoolValidate |
Pool configuration invalid | Validation |
ErrorPoolStart |
Pool start failed | Startup |
ErrorPoolStop |
Pool stop failed | Shutdown |
ErrorPoolRestart |
Pool restart failed | Restart |
ErrorPoolMonitor |
Monitoring failed | Monitoring |
Error Handling Examples
// Check specific error types
if err := srv.Start(ctx); err != nil {
if errors.Is(err, ErrorPortUse) {
log.Println("Port already in use")
} else if errors.Is(err, ErrorServerValidate) {
log.Println("Configuration invalid")
}
return err
}
// Pool error aggregation
if err := pool.Start(ctx); err != nil {
// err contains all individual server errors
log.Printf("Pool start errors: %v", err)
}
// Check server error state
if srv.IsError() {
log.Printf("Server error: %v", srv.GetError())
}
Troubleshooting
Server Won't Start
// Check disabled flag
if srv.IsDisable() {
log.Println("Server is disabled in configuration")
}
// Check TLS configuration
if cfg.TLSMandatory && !srv.IsTLS() {
log.Println("TLS is mandatory but not properly configured")
}
// Check port availability
if err := srv.PortInUse(ctx, cfg.Listen); err == nil {
log.Println("Port is already in use")
}
// Check if already running
if srv.IsRunning() {
log.Println("Server is already running")
}
Pool Issues
// Check pool state
log.Printf("Pool size: %d servers", pool.Len())
// Verify server exists
if !pool.Has("127.0.0.1:8080") {
log.Println("Server not found at this address")
}
// List all servers
names := pool.List(types.FieldName, types.FieldName, "*", "")
for _, name := range names {
log.Printf("Found server: %s", name)
}
// Check individual server status
pool.Walk(func(bind string, srv httpserver.Server) bool {
if !srv.IsRunning() {
log.Printf("Server %s at %s is not running", srv.GetName(), bind)
}
return true
})
Configuration Errors
cfg := httpserver.Config{
Name: "test-server",
// Missing required fields: Listen, Expose
}
if err := cfg.Validate(); err != nil {
// err contains detailed validation failures
log.Printf("Configuration errors: %v", err)
// Example output: "Listen: required field missing"
}
Contributing
Contributions are welcome! Please follow these guidelines:
Code Contributions
- Do not use AI to generate package implementation code
- AI may assist with tests, documentation, and bug fixing
- All contributions must be thread-safe
- Pass all tests including race detection:
go test -race ./... - Maintain or improve test coverage (≥40%)
- Follow existing code style and patterns
Documentation
- Update README.md for new features
- Add code examples for common use cases
- Keep TESTING.md synchronized with test changes
- Include GoDoc comments for all public APIs
Testing
- Write tests for all new features (Ginkgo/Gomega)
- Test edge cases and error conditions
- Verify thread safety with race detector
- Add integration tests with
integrationbuild tag when appropriate
Pull Requests
- Provide clear description of changes
- Reference related issues
- Include test results (unit + integration + race)
- Update documentation
Future Enhancements
Potential improvements for future versions:
Protocol Support
- HTTP/3 (QUIC) support
- WebSocket upgrade handling
- Server-Sent Events (SSE)
Advanced Features
- Hot reload configuration without restart
- Dynamic TLS certificate rotation
- Request/response middleware chain
- Rate limiting per server
- Automatic Let's Encrypt integration
Monitoring & Observability
- Prometheus metrics endpoint
- Distributed tracing integration (OpenTelemetry)
- Structured access logs
- Performance profiling endpoints
High Availability
- Health check probes (liveness, readiness)
- Circuit breaker integration
- Automatic failover in pool
- Load balancing across pool members
Developer Experience
- Configuration hot-reload watcher
- CLI tool for server management
- Web UI for pool visualization
- More integration test helpers
Suggestions are welcome via GitHub issues.
AI Transparency Notice
In accordance with Article 50.4 of the EU AI Act, AI assistance has been used for testing, documentation, and bug fixing under human supervision.
License
MIT License - See LICENSE file for details.
Resources
- Package Documentation: GoDoc
- Testing Guide: TESTING.md
- Issues: GitHub Issues
- Contributing: CONTRIBUTING.md