swift-otel icon indicating copy to clipboard operation
swift-otel copied to clipboard

🛣️ OTel 1.0 Roadmap

Open simonjbeaumont opened this issue 5 months ago • 0 comments
trafficstars

Following discussions in the Swift OTel contributors meeting we've defined a breakdown of items to complete for the 1.0 release, which are tracked here as an umbrella issue.

The items are pretty fine-grained, and could be seen as the smallest unit that could land in a single PR. This is not prescriptive though, and it's likely that several items may be batched into a single PR.

Required for 1.0.0-alpha

  • [ ] Public API proposal
    • [x] Initial prototype
    • [x] Early feedback on prototype
    • [x] Write up proposal (link)
    • [x] Early feedback from Swift OTel contributors meeting (Moritz, Franz, Joannis, Honza)
    • [x] Post to the Swift forums (link)
    • [ ] Consolidate feedback and find permanent home for the proposal (https://github.com/swift-otel/swift-otel/pull/205)
  • [ ] Setup Git branches and CI
    • [x] Create a release-0.x branch for patches to pre-1.0 with existing CI (https://github.com/swift-otel/swift-otel/tree/release-0.x)
    • [x] Update CI on main to 6.1+ only (https://github.com/swift-otel/swift-otel/pull/204)
    • [ ] Disable/relax coverage on main
  • [ ] Restructure Swift package according to proposal
    • [ ] Rename current OTel library target to OTelCore
    • [ ] Create new OTel library target
    • [ ] Create new OTLPHTTP library target
    • [ ] Define OTLPHTTP and OTLPGRPC traits
    • [ ] Remove package library products: OTelCore and OTLPGRPC
    • [ ] Add package products: OTel
    • [ ] Update minimum Swift version to 6.1 (for traits)
  • [ ] Add new API surface to OTel module
    • [ ] Confguration
    • [ ] bootstrap
    • [ ] Stubs for makeTracingBackend, makeMetricsBackend, and makeLoggingBackend
  • [ ] Mark all previous public API as internal or package
  • [ ] Review import visibility and reduce where possible
    • [ ] Use upcoming feature flag to change default, unqualified import to internal
  • [ ] Add stub for OTLPHTTPExporter
  • [ ] Refactor OTLPGRPCTracesExporter and OTLPGRPCMetricsExporter to use a common OTLPGRPCExporter
  • [ ] Add init(config: OTel.Configuration) for internal types with just what's configurable today (e.g. no mTLS)
  • [ ] Traces implementation
    • [ ] Wire up public makeTracingBackend and internal bootstrapTraces
  • [ ] Metrics implementation
    • [ ] Wire up public makeMetricsBackend and internal bootstrapMetrics
  • [ ] Logging implementation
    • [ ] Implement OTLPGRPCLogsExporter using the now common OTLPGRPCExporter
    • [ ] Wire up public makeLoggingBackend and internal bootstrapLogs
  • [ ] Implement OTLP[Traces|Metrics|Logs]HTTPExporter
    • [ ] Initial stubbed structure for shared implementation between signals
    • [ ] Move generated GRPC proto messages from OTLPGRPC to OTLPCore to use from OTLPHTTP
    • [ ] Unauthenticated HTTP client configuration
    • [ ] Add support for (m)TLS to the HTTP client used in the OTLPHTTP exporter
    • [ ] Export logic for OTLP/HTTP+protobuf
    • [ ] Export logic for OTLP/HTTP+json
  • [ ] Wire up more configuration values from OTel.Configuration
    • [ ] mTLS for GRPC exporter
    • [ ] BatchSpanProcessor configuration
    • [ ] Periodic metrics reader configuration
  • [ ] Migrate OTLP[Traces|Metrics|Logs]Exporter to gRPC v2
  • [ ] HTTP exporter tests
  • [ ] Logging backend tests
  • [ ] Configuration datamodel tests
  • [ ] End to end tests
  • [ ] Documentation overhaul
    • [ ] Top-level module documentation
    • [ ] API documentation throughout
    • [ ] Update examples
    • [ ] Update README
    • [ ] ~~Document Swift version support policy~~
    • [ ] Document traits
  • [ ] Decide what to do with existing APIs that aren't obviously replaced:
    • [x] Resource detection (Added to future directions of proposal)
    • [ ] Logging metadata provider (needs more discussion)
  • [ ] Make sure all internal SDK logging uses a custom logger

Required for 1.0.0

  • [ ] Enable coverage regression checking CI
  • [ ] Drive to higher threshold coverage
  • [ ] Remove/refactor redundant internal code
    • [ ] Previous configuration types
    • [ ] ...

Not required for 1.0.0 but should follow shortly after

  • [ ] Refactor common logic in the span and logs batch processor types

Open questions

Unsorted tasks

simonjbeaumont avatar May 30 '25 09:05 simonjbeaumont