📝 docs: consolidate documentation and add comprehensive ADRs\n\n## Summary\nMajor documentation restructuring to improve clarity, reduce redundancy,
and preserve complete architectural context for AI/developer reference.\n\n## Changes\n\n### Documentation Consolidation 🗂️\n- Simplified README.md by ~100 lines (25% reduction)\n- Removed redundant sections (project structure, configuration, API docs)\n- Added strategic cross-references between README.md and AGENTS.md\n- README.md now focused on user onboarding and basic usage\n- AGENTS.md maintained as complete technical reference\n\n### Architecture Decision Records ✅\n- Added comprehensive ADR directory with 9 decision records:\n * 0001-go-1.26.1-standard.md\n * 0002-chi-router.md\n * 0003-zerolog-logging.md (enhanced with Zap analysis)\n * 0004-interface-based-design.md\n * 0005-graceful-shutdown.md\n * 0006-configuration-management.md\n * 0007-opentelemetry-integration.md\n * 0008-bdd-testing.md\n * 0009-hybrid-testing-approach.md\n- Added adr/README.md with guidelines and template\n- Enhanced Zerolog ADR with detailed performance benchmarking vs Zap\n\n### Content Organization 📝\n- README.md: User-focused guide with quick start and basic examples\n- AGENTS.md: Developer/AI-focused complete technical reference\n- ADR directory: Architectural decision history and rationale\n\n## Impact\n- ✅ Better user onboarding experience\n- ✅ Preserved complete technical context for AI agents\n- ✅ Reduced maintenance burden through consolidation\n- ✅ Improved discoverability of advanced documentation\n- ✅ Established ADR process for future decisions\n\n## Related\n- Resolves documentation redundancy issues\n- Prepares for BDD implementation with clear context\n- Supports future Swagger integration decisions\n- Maintains project history for new contributors\n\nGenerated by Mistral Vibe.\nCo-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
228
AGENTS.md
228
AGENTS.md
@@ -46,6 +46,38 @@ This file documents the AI agents, tools, and development workflow for the Dance
|
||||
- Configuration validation and logging
|
||||
- Example configuration file
|
||||
|
||||
### Phase 6: Graceful Shutdown (Completed ✅)
|
||||
- Context-aware server initialization
|
||||
- Signal-based termination (SIGINT, SIGTERM)
|
||||
- Configurable shutdown timeout
|
||||
- Readiness endpoint for Kubernetes/service mesh integration
|
||||
- Proper resource cleanup during shutdown
|
||||
- Health endpoint remains healthy during graceful shutdown
|
||||
|
||||
### Phase 7: OpenTelemetry Integration (Completed ✅)
|
||||
- OpenTelemetry Go libraries integration
|
||||
- Jaeger compatibility for distributed tracing
|
||||
- Middleware-only approach using otelhttp.NewHandler
|
||||
- Configurable sampling strategies
|
||||
- Graceful shutdown of tracer provider
|
||||
- OTLP exporter with gRPC support
|
||||
|
||||
### Phase 8: Build System & Documentation (Completed ✅)
|
||||
- Build script for binary compilation
|
||||
- Binary output to `bin/` directory
|
||||
- Comprehensive commit conventions with gitmoji reference
|
||||
- Updated documentation with Jaeger integration guide
|
||||
- Cleaned up configuration files
|
||||
- Enhanced logging configuration with file output support
|
||||
|
||||
### Phase 9: Final Refinements (Completed ✅)
|
||||
- Removed unnecessary time.Sleep for log flushing
|
||||
- Changed server operational logs from Info to Trace level
|
||||
- Moved all logging setup logic to config package
|
||||
- Simplified server entrypoint to 27 lines
|
||||
- Verified all functionality with comprehensive testing
|
||||
- Updated documentation to reflect final architecture
|
||||
|
||||
## 🛠️ Tools & Technologies
|
||||
|
||||
| Component | Technology | Version |
|
||||
@@ -56,11 +88,24 @@ This file documents the AI agents, tools, and development workflow for the Dance
|
||||
| Configuration | Viper | v1.21.0 |
|
||||
| Testing | Standard Library | - |
|
||||
| Dependency Management | Go Modules | - |
|
||||
| Telemetry | OpenTelemetry | v1.43.0 |
|
||||
| Tracing | Jaeger | Compatible |
|
||||
|
||||
## 🗺️ Project Structure
|
||||
|
||||
```
|
||||
DanceLessonsCoach/
|
||||
├── adr/ # Architecture Decision Records
|
||||
│ ├── README.md # ADR guidelines and index
|
||||
│ ├── 0001-go-1.26.1-standard.md
|
||||
│ ├── 0002-chi-router.md
|
||||
│ ├── 0003-zerolog-logging.md
|
||||
│ ├── 0004-interface-based-design.md
|
||||
│ ├── 0005-graceful-shutdown.md
|
||||
│ ├── 0006-configuration-management.md
|
||||
│ ├── 0007-opentelemetry-integration.md
|
||||
│ ├── 0008-bdd-testing.md
|
||||
│ └── 0009-hybrid-testing-approach.md
|
||||
├── cmd/
|
||||
│ ├── greet/ # CLI application
|
||||
│ │ └── main.go
|
||||
@@ -73,11 +118,17 @@ DanceLessonsCoach/
|
||||
│ │ ├── api_v1.go # API handlers
|
||||
│ │ ├── greet.go # Service implementation
|
||||
│ │ └── greet_test.go # Unit tests
|
||||
│ └── server/ # HTTP server
|
||||
│ └── server.go
|
||||
│ ├── server/ # HTTP server
|
||||
│ │ └── server.go
|
||||
│ └── telemetry/ # OpenTelemetry instrumentation
|
||||
│ └── telemetry.go
|
||||
├── go.mod # Dependencies
|
||||
├── go.sum # Dependency checksums
|
||||
├── config.example.yaml # Configuration template
|
||||
├── config.yaml # Configuration file
|
||||
├── scripts/ # Server control and build scripts
|
||||
│ ├── start-server.sh # Server lifecycle management
|
||||
│ ├── build.sh # Binary compilation
|
||||
│ └── test-opentelemetry.sh # OpenTelemetry testing
|
||||
├── README.md # User documentation
|
||||
├── AGENTS.md # This file
|
||||
└── .gitignore # Ignore patterns
|
||||
@@ -337,6 +388,87 @@ curl http://localhost:8080/api/v1/greet/Alice
|
||||
# Response: {"message":"Hello Alice!"}
|
||||
```
|
||||
|
||||
## 🔗 OpenTelemetry & Jaeger Integration
|
||||
|
||||
The application supports OpenTelemetry for distributed tracing with Jaeger compatibility.
|
||||
|
||||
### Configuration
|
||||
|
||||
Enable OpenTelemetry in your `config.yaml`:
|
||||
|
||||
```yaml
|
||||
telemetry:
|
||||
enabled: true
|
||||
otlp_endpoint: "localhost:4317"
|
||||
service_name: "DanceLessonsCoach"
|
||||
insecure: true
|
||||
sampler:
|
||||
type: "parentbased_always_on"
|
||||
ratio: 1.0
|
||||
```
|
||||
|
||||
Or via environment variables:
|
||||
|
||||
```bash
|
||||
export DLC_TELEMETRY_ENABLED=true
|
||||
export DLC_TELEMETRY_OTLP_ENDPOINT="localhost:4317"
|
||||
export DLC_TELEMETRY_SERVICE_NAME="DanceLessonsCoach"
|
||||
export DLC_TELEMETRY_INSECURE=true
|
||||
export DLC_TELEMETRY_SAMPLER_TYPE="parentbased_always_on"
|
||||
export DLC_TELEMETRY_SAMPLER_RATIO=1.0
|
||||
```
|
||||
|
||||
### Testing with Jaeger
|
||||
|
||||
1. **Start Jaeger in Docker:**
|
||||
```bash
|
||||
docker run -d --name jaeger \
|
||||
-e COLLECTOR_OTLP_ENABLED=true \
|
||||
-p 16686:16686 \
|
||||
-p 4317:4317 \
|
||||
jaegertracing/all-in-one:latest
|
||||
```
|
||||
|
||||
2. **Start the server with OpenTelemetry enabled:**
|
||||
```bash
|
||||
# Using config file
|
||||
./scripts/start-server.sh start
|
||||
|
||||
# Or with environment variables
|
||||
DLC_TELEMETRY_ENABLED=true ./scripts/start-server.sh start
|
||||
```
|
||||
|
||||
3. **Make API requests:**
|
||||
```bash
|
||||
curl http://localhost:8080/api/v1/greet/John
|
||||
```
|
||||
|
||||
4. **View traces in Jaeger UI:**
|
||||
Open http://localhost:16686 and select the "DanceLessonsCoach" service.
|
||||
|
||||
### Sampler Types
|
||||
|
||||
- `always_on`: Sample all traces
|
||||
- `always_off`: Sample no traces
|
||||
- `traceidratio`: Sample based on trace ID ratio
|
||||
- `parentbased_always_on`: Sample based on parent span (always on)
|
||||
- `parentbased_always_off`: Sample based on parent span (always off)
|
||||
- `parentbased_traceidratio`: Sample based on parent span with ratio
|
||||
|
||||
### Testing Script
|
||||
|
||||
Use the provided test script:
|
||||
```bash
|
||||
./scripts/test-opentelemetry.sh
|
||||
```
|
||||
|
||||
This script:
|
||||
1. Starts Jaeger container
|
||||
2. Starts the server with OpenTelemetry
|
||||
3. Makes test API calls
|
||||
4. Shows Jaeger UI URL
|
||||
5. Cleans up on exit
|
||||
|
||||
## 🔧 Development Workflow
|
||||
|
||||
### 1. Check Server Status
|
||||
@@ -632,44 +764,92 @@ defer cancel()
|
||||
## 📈 Future Enhancements
|
||||
|
||||
### Potential Features
|
||||
- [ ] Configuration management
|
||||
- [ ] Database integration
|
||||
- [ ] Authentication/Authorization
|
||||
- [ ] Rate limiting
|
||||
- [ ] Metrics and monitoring
|
||||
- [ ] Docker containerization
|
||||
- [ ] CI/CD pipeline
|
||||
- [ ] Configuration hot reload
|
||||
- [ ] Circuit breakers
|
||||
|
||||
### Architectural Improvements
|
||||
- [ ] Request validation middleware
|
||||
- [ ] OpenAPI/Swagger documentation
|
||||
- [ ] Graceful shutdown
|
||||
- [ ] Configuration hot reload
|
||||
- [ ] Circuit breakers
|
||||
- [ ] Enhanced OpenTelemetry instrumentation
|
||||
- [ ] Metrics collection and visualization
|
||||
- [ ] Health check improvements
|
||||
- [ ] Configuration validation enhancements
|
||||
|
||||
### Completed Features
|
||||
- ✅ Graceful shutdown with readiness endpoint
|
||||
- ✅ OpenTelemetry integration with Jaeger support
|
||||
- ✅ Configuration management with Viper
|
||||
- ✅ Comprehensive logging with Zerolog
|
||||
- ✅ Build system with binary output
|
||||
- ✅ Complete documentation with commit conventions
|
||||
|
||||
## 📝 Architecture Decision Records
|
||||
|
||||
The project maintains comprehensive Architecture Decision Records (ADRs) that document all major architectural choices. See the [adr/](adr/) directory for complete documentation.
|
||||
|
||||
**Key Decisions**:
|
||||
- **Language**: Go 1.26.1 ([ADR-0001](adr/0001-go-1.26.1-standard.md))
|
||||
- **Routing**: Chi router ([ADR-0002](adr/0002-chi-router.md))
|
||||
- **Logging**: Zerolog ([ADR-0003](adr/0003-zerolog-logging.md))
|
||||
- **Design**: Interface-based ([ADR-0004](adr/0004-interface-based-design.md))
|
||||
- **Shutdown**: Graceful with readiness ([ADR-0005](adr/0005-graceful-shutdown.md))
|
||||
- **Config**: Viper ([ADR-0006](adr/0006-configuration-management.md))
|
||||
- **Observability**: OpenTelemetry ([ADR-0007](adr/0007-opentelemetry-integration.md))
|
||||
- **Testing**: BDD with Godog ([ADR-0008](adr/0008-bdd-testing.md))
|
||||
- **Strategy**: Hybrid testing ([ADR-0009](adr/0009-hybrid-testing-approach.md))
|
||||
|
||||
**Adding New ADRs**:
|
||||
```bash
|
||||
# 1. Copy template
|
||||
cp adr/0001-go-1.26.1-standard.md adr/0010-new-decision.md
|
||||
|
||||
# 2. Edit the new ADR
|
||||
# 3. Update adr/README.md
|
||||
# 4. Reference in documentation
|
||||
```
|
||||
|
||||
## 📝 Changelog
|
||||
|
||||
### 2026-04-03 - Current Version
|
||||
- ✅ Zerolog integration with Trace level
|
||||
- ✅ Context-aware Greet service
|
||||
- ✅ Fixed route structure `/api/v1/greet/*`
|
||||
- ✅ Comprehensive server management guide
|
||||
- ✅ Verified all API endpoints working
|
||||
- ✅ Updated documentation
|
||||
### 2026-04-05 - Architecture Documentation
|
||||
- ✅ Added comprehensive ADR directory with 9 decision records
|
||||
- ✅ Enhanced Zerolog vs Zap analysis in logging ADR
|
||||
- ✅ Updated README.md and AGENTS.md with ADR references
|
||||
- ✅ Documented hybrid testing approach
|
||||
- ✅ Added BDD testing decision record
|
||||
|
||||
### 2026-04-02 - Web API Implementation
|
||||
### 2026-04-04 - Observability & Testing
|
||||
- ✅ OpenTelemetry integration with Jaeger
|
||||
- ✅ Middleware-only tracing approach
|
||||
- ✅ Comprehensive telemetry configuration
|
||||
- ✅ BDD testing framework setup
|
||||
- ✅ Hybrid testing strategy documentation
|
||||
|
||||
### 2026-04-03 - Production Readiness
|
||||
- ✅ Graceful shutdown with readiness endpoints
|
||||
- ✅ Configuration management with Viper
|
||||
- ✅ JSON logging configuration
|
||||
- ✅ File output logging support
|
||||
- ✅ Comprehensive error handling
|
||||
|
||||
### 2026-04-02 - Web API Foundation
|
||||
- ✅ Chi router integration
|
||||
- ✅ Versioned API endpoints
|
||||
- ✅ JSON responses
|
||||
- ✅ Health endpoint
|
||||
- ✅ Interface-based design
|
||||
- ✅ Versioned API endpoints (`/api/v1`)
|
||||
- ✅ Health and readiness endpoints
|
||||
- ✅ JSON responses with proper headers
|
||||
- ✅ Interface-based design patterns
|
||||
|
||||
### 2026-04-01 - Foundation
|
||||
- ✅ Go 1.26.1 setup
|
||||
- ✅ Project structure
|
||||
- ✅ Core Greet service
|
||||
### 2026-04-01 - Project Foundation
|
||||
- ✅ Go 1.26.1 environment setup
|
||||
- ✅ Project structure with `cmd/` and `pkg/`
|
||||
- ✅ Core Greet service implementation
|
||||
- ✅ CLI interface
|
||||
- ✅ Unit tests
|
||||
- ✅ Unit tests with table-driven approach
|
||||
|
||||
## 🤖 AI Agent Information
|
||||
|
||||
|
||||
Reference in New Issue
Block a user