-
Notifications
You must be signed in to change notification settings - Fork 0
OpenTelemetry Integration Roadmap
Enterprise SDK Architecture for RDCP OpenTelemetry Integration
The goal is to create a flexible, enterprise-grade integration that allows customers to choose their level of OpenTelemetry integration without forcing dependencies.
@rdcp/server # Core RDCP functionality (current)
@rdcp.dev/otel-plugin # OpenTelemetry integration (planned)
@rdcp/examples # Integration examples (planned)
- β Optional Dependency: Customers without OpenTelemetry aren't forced to install it
- β Version Flexibility: OTel plugin can support multiple OpenTelemetry versions
- β Performance Control: Enable/disable correlation based on requirements
- β Vendor Agnostic: Works with any OpenTelemetry-compatible backend
- β Clean Testing: Each package can be tested independently
Goal: Add trace provider interface to existing RDCP SDK
export interface TraceProvider {
getCurrentTraceContext(): TraceContext | null
}
export interface TraceContext {
traceId: string
spanId: string
baggage?: Record<string, string>
}
// Enhanced RDCP debug system
export class RDCPDebugger {
private traceProvider?: TraceProvider
setTraceProvider(provider: TraceProvider): void
private enrichWithTrace(logData: any): any {
if (!this.traceProvider) return logData
const context = this.traceProvider.getCurrentTraceContext()
if (!context) return logData
return {
...logData,
trace: {
traceId: context.traceId,
spanId: context.spanId
}
}
}
}
Status: π Starting implementation Files Modified:
-
src/debug.ts
- Add trace provider hooks -
src/types/debug.ts
- Add trace interfaces -
tests/opentelemetry.test.ts
- Test trace integration
Goal: Create separate @rdcp.dev/otel-plugin
package
import { trace } from '@opentelemetry/api'
import { TraceProvider, TraceContext } from '@rdcp/server'
export class OpenTelemetryProvider implements TraceProvider {
getCurrentTraceContext(): TraceContext | null {
const activeSpan = trace.getActiveSpan()
if (!activeSpan) return null
const spanContext = activeSpan.spanContext()
if (!spanContext || !trace.isSpanContextValid(spanContext)) {
return null
}
return {
traceId: spanContext.traceId,
spanId: spanContext.spanId,
baggage: this.extractBaggage()
}
}
}
// Easy setup function
export function setupRDCPWithOpenTelemetry() {
// Internally sets the OpenTelemetry provider for RDCP debug system
setTraceProvider(new OpenTelemetryProvider())
}
Package.json Features:
-
peerDependencies
:@opentelemetry/api
- Supports multiple OpenTelemetry versions
- Zero impact on core SDK bundle size
Goal: Provide clear integration patterns for enterprise customers
// Customer code - Basic RDCP
import { RDCPClient } from '@rdcp/server'
const rdcp = new RDCPClient({
apiKey: process.env.RDCP_API_KEY,
endpoint: 'https://debug.mycompany.com'
})
// Debug logs work normally
rdcp.debug.database('Query executed', { sql: 'SELECT...' })
// Customer code - With OpenTelemetry correlation
import { RDCPClient } from '@rdcp/server'
import { setupRDCPWithOpenTelemetry } from '@rdcp.dev/otel-plugin'
const rdcp = new RDCPClient({
apiKey: process.env.RDCP_API_KEY,
endpoint: 'https://debug.mycompany.com'
})
// Optional: Enable OpenTelemetry correlation
setupRDCPWithOpenTelemetry(rdcp)
// Debug logs now include trace context automatically
rdcp.debug.database('Query executed', {
sql: 'SELECT...',
// Automatically added:
// trace: { traceId: 'abc123', spanId: 'def456' }
})
The demo app configures an OpenTelemetry-aware trace provider. The server SDK enriches debug logs with trace correlation when available.
- In the demo app, set the trace provider via:
import { setTraceProvider } from '@rdcp.dev/server'
import { OpenTelemetryProvider } from '@rdcp.dev/otel-plugin'
setTraceProvider(new OpenTelemetryProvider())
- Then drive control operations with the client; traces and logs will include correlation.
See tests/opentelemetry.test.ts for examples.
- Gradual Adoption: Start with basic RDCP, add OpenTelemetry later
- Performance Tuning: Enable/disable correlation per environment
- Version Control: Upgrade OpenTelemetry independently from RDCP
Works with any OpenTelemetry-compatible backend:
- β Jaeger
- β Zipkin
- β DataDog
- β New Relic
- β Honeycomb
- β AWS X-Ray
- β Google Cloud Trace
- Clean Dependencies: No forced OpenTelemetry installation
- Testable: Each package independently testable
- Scalable: Performance control for high-volume environments
- Compliant: Maintains RDCP v1.0 protocol compliance
- Add
TraceProvider
interface to core SDK - Add
TraceContext
interface - Modify debug system to support trace enrichment
- Add
setTraceProvider()
method - Update protocol discovery to show OTel capabilities
- Add comprehensive tests (15 tests covering all scenarios)
- Update TypeScript types (no
any
types) - Maintain RDCP v1.0 compliance
- Create
@rdcp.dev/otel-plugin
package structure - Implement
OpenTelemetryProvider
class following Context7 patterns - Create easy setup function (
setupRDCPWithOpenTelemetry
) - Add peer dependency management (OpenTelemetry API)
- Write comprehensive plugin-specific tests (15 tests)
- Create plugin documentation and README
- Follow WARP.md compliance (all files under limits)
- Enterprise-ready error handling and configuration
- Create customer integration examples
- Write migration guide (basic β enhanced)
- Performance benchmarking documentation
- Enterprise deployment guides
- Multi-backend configuration examples
- DataDog Quickstart (10-minute setup)
- New Relic Quickstart (10-minute setup)
- TODO: Honeycomb Quickstart (10-minute setup)
- TODO: AWS X-Ray Quickstart (10-minute setup)
- TODO: Expand Security & Compliance docs with vendor-specific notes
Phase 1: β
COMPLETED - Core trace provider hooks implemented
Phase 2: β
COMPLETED - OpenTelemetry plugin package created
Branch: feature/opentelemetry
Next Steps: Phase 3 - Enhanced examples and enterprise deployment guides
Core SDK (@rdcp/server
):
- β
TraceProvider
interface - β
setTraceProvider()
function - β Enhanced debug system with trace correlation
- β Protocol discovery shows OpenTelemetry status
Plugin Package (@rdcp.dev/otel-plugin
):
- β
OpenTelemetryProvider
class - β
setupRDCPWithOpenTelemetry()
one-line setup - β Enterprise configuration options
- β Comprehensive error handling
- β Full TypeScript support
This roadmap ensures we build enterprise-grade OpenTelemetry integration while maintaining the simplicity and protocol compliance that makes RDCP successful.
Getting Started: Installation β’ Basic Usage β’ Authentication
Migration: From Manual Implementation β’ Framework Examples β’ Publishing Guide
Protocol: RDCP v1.0 Specification β’ Implementation Guide β’ API Reference
π Home | π¦ NPM Package | π GitHub | π Issues
RDCP SDK v1.0.0 - Runtime Debug Control Protocol implementation for JavaScript/Node.js applications
- Implementation-Status
- JavaScript-vs-TypeScript-Boundaries
- Core-Package-Boundaries
- Publishing-Setup
- Contributing
- API-Reference
- Protocol Specification
- Implementation Guide
- RDCP-Primitive-Types
- Protocol-Schemas
- Protocol-Error-Codes
- API-Reference
Version: 1.0.0
Protocol: RDCP v1.0
License: Apache-2.0