Skip to content

[ADMIN] CONTRIBUTORS WELCOME #3068

Description

@marcalff

0. START HERE

This issue lists areas that are good entry points to start contributing to opentelemetry-cpp.

If an item is listed here, it is by definition open to everyone, so no need to ask "Can I work on this ?": yes, you can.

Caution

To avoid duplicate work, make sure to check existing PR, maybe this is in progress already.

When considering to work on a PR, make sure to check is the issue is linked to existing PRs first, to see if someone else is working on this area.

Consider to comment, on the issue, that you intend to work on it, as a courtesy to others. This will not make the issue exclusively reserved to you (famous last words: "I am working on this"), but serves as a heads up to prevent overlap.

When posting a new PR, make sure to add Fixes #ISSUE_NUMBER in the description, so the PR will automatically linked with the issue by github.

In all cases, this is not about competition, but cooperation: consider to make comments on existing PRs if you see something you would have done differently (and say why).

We do not assign issues, so no need to ask, you can file a PR directly.

For each issue, see the issue comments for details.

1. Functional

Typically, features touching a functional area requires to dive into the code, but do not need changes in the infrastructure, like CI, workflows, compilers, platforms, makefiles ...
This is a good opportunity to learn the C++ code itself. The size of the code affected varies by feature.

1.1 All signals

Typically, changes affecting all signals at once are using the same pattern, applied everywhere.
The change is limited in scope, but touches multiple parts.
This is a good opportunity to learn how to apply design or coding pattern to an existing code base.

  • TODO: find more easy issues

1.2 Entities

1.3 Trace signal

1.4 Metrics signal

Typically, changes affecting the metrics signal are more involved on the functional part (time series, aggregation).
This is a good opportunity to understand in depth a component, with clear boundaries.

1.5 Logs signal

  • TODO: find more easy issues

1.6 Prometheus exporter

Please check open-telemetry/opentelemetry-specification#4805, see the following comment, and fix gaps to the specifications:

  • Version and format
  • Host
  • Port
  • default_aggregation
  • with_resource_constant_labels
  • translation_strategy
  • content_negotiation
  • interactions with translation strategy

1.7 Specific areas

Typically, features touching a specific area do not require to understand the whole code base, but only a well defined subset.
This is a good opportunity to learn the development process (git, PR, review, merge) as well as the affected code.

2. Code health

This area requires to change CI/CD scripts to improve the build process.
This is a very good opportunity to learn the github CI workflow, to implement new tooling.

2.1 Clang-tidy

Iterative changes, to expand coverage to the entire code base.

2.2 Doxygen

3. Test coverage

This area is a very good opportunity to learn docker to execute tests in a container environment.

4. Documentation

This is internal documentation, for maintainers.
We need to document internal processes (like, how to do a release, an upgrade, a deprecation, ...),
as well as feature design (explain how xyz works) at high level, to understand the code base.

5. Major work

Some areas in opentelemetry-cpp need major work, and contributions are welcome here as well.

A couple of things to keep in mind:

  • These are definitively not "good first issue" items, you should have contributed already to opentelemetry-cpp (to be familiar with the process and tooling) and have some experience to be effective.
  • Not every technical aspects are defined yet, a good part of the work will be to propose what needs to be done first.
  • Maintainers are here to help and facilitate this, and will provide guidance.
  • Consider to join the community meetings to discuss specific areas.

5.1 Binary packages

To be able to ship binary packages for opentelemetry-cpp, a lot of preliminary work needs to happen

5.2 Full Windows support

To instrument an application using only opentelemetry-cpp api, the following issue needs to be resolved for Windows:

6. Complete specification coverage

6.1. spec-compliance-matrix

The opentelemetry-specification keeps a compliance matrix listing the status for the cpp implementation.

See https://github.com/open-telemetry/opentelemetry-specification/blob/main/spec-compliance-matrix/cpp.yaml

Below are the remaining items, not marked as implemented:

# Implementation status for C++
#
# Legend:
#   '+'     Implemented
#   '-'     Not implemented
#   '?'     Unknown
#   'N/A'   Not applicable to this language
#
sections:
  - name: Traces
    features:
      - heading: '[TracerProvider](specification/trace/api.md#tracerprovider-operations)'
        features:
          - name: Associate Tracer with InstrumentationScope
            status: '?'
      - heading: '[Tracer](specification/trace/api.md#tracer-operations)'
        features:
          - name: Documentation defines adding attributes at span creation as preferred
            status: '?'
      - heading: '[SpanContext](specification/trace/api.md#spancontext)'
        features:
          - name: '[Support W3C Trace Context Level 2 randomness](specification/trace/sdk.md#traceid-randomness)'
            status: '?'
      - heading: '[Span](specification/trace/api.md#span)'
        features:
          - name: SpanProcessor.OnStart receives parent Context
            status: '-'
          - name: events collection size limit
            status: '-'
          - name: attribute collection size limit
            status: '-'
          - name: links collection size limit
            status: '-'
          - name: '[SpanProcessor.OnEnding](specification/trace/sdk.md#onending)'
            status: '-'
      - heading: '[Span exceptions](specification/trace/api.md#record-exception)'
        features:
          - name: RecordException
            status: '-'
          - name: RecordException with extra parameters
            status: '-'
      - heading: '[Sampling](specification/trace/sdk.md#sampling)'
        features:
          - name: 'Sampler: JaegerRemoteSampler'
            status: '?'
          - name: '[SpanLimits](specification/trace/sdk.md#span-limits)'
            status: '-'
          - name: '[Attribute Limits](specification/common/README.md#attribute-limits)'
            status: '?'
          - name: Fetch InstrumentationScope from ReadableSpan
            status: '?'
          - name: '[TraceIdRatioBased sampler implements OpenTelemetry tracestate `th` field](specification/trace/sdk.md#traceidratiobased)'
            status: '?'
          - name: '[CompositeSampler and built-in ComposableSamplers](specification/trace/sdk.md#compositesampler)'
            status: '?'
          - name: '[Sampler: AlwaysRecord](specification/trace/sdk.md#alwaysrecord)'
            status: '?'
  - name: Metrics
    features:
      - name: The fallback `Meter` `name` property keeps its original invalid value.
        status: '-'
      - name: '`Gauge` instrument is supported.'
        status: '-'
      - name:
          A valid instrument MUST be created and warning SHOULD be emitted when multiple instruments are registered under
          the same `Meter` using the same `name`.
        status: '?'
      - name: Duplicate instrument registration name conflicts are resolved by using the first-seen for the stream name.
        status: '?'
      - name: Instrument descriptions conform to the specified syntax.
        status: '-'
      - name: Instrument supports the advisory ExplicitBucketBoundaries parameter.
        status: '?'
      - name: Instrument supports the advisory Attributes parameter.
        status: '?'
      - name: The `MeterProvider` provides methods to update the configuration
        status: '-'
      - name: The updated configuration applies to all already returned `Meter`s.
        status: '-'
      - name: The `View` allows configuring excluded attribute keys of resulting metric stream.
        status: '?'
      - name: The `View` allows configuring the exemplar reservoir of resulting metric stream.
        status: '?'
      - name: The `ExponentialBucketHistogram` aggregation is available.
        status: '?'
      - name: The metrics Reader implementation supports configuring the default aggregation on the basis of instrument kind.
        status: '-'
      - name: The metrics SDK samples `Exemplar`s from measurements.
        status: '?'
      - name: Exemplar sampling can be disabled.
        status: '?'
      - name: The metrics SDK supports SDK-wide exemplar filter configuration
        status: '?'
      - name: The metrics SDK supports `TraceBased` exemplar filter
        status: '?'
      - name: The metrics SDK supports `AlwaysOn` exemplar filter
        status: '?'
      - name: The metrics SDK supports `AlwaysOff` exemplar filter
        status: '?'
      - name: Exemplars retain any attributes available in the measurement that are not preserved by aggregation or view configuration.
        status: '?'
      - name:
          Exemplars contain the associated trace id and span id of the active span in the Context when the measurement was
          taken.
        status: '?'
      - name: Exemplars contain the timestamp when the measurement was taken.
        status: '?'
      - name: The metrics SDK provides an `ExemplarReservoir` interface or extension point.
        status: '?'
      - name: An `ExemplarReservoir` has an `offer` method with access to the measurement value, attributes, `Context` and timestamp.
        status: '?'
      - name:
          The metrics SDK provides a `SimpleFixedSizeExemplarReservoir` that is used by default for all aggregations except
          `ExplicitBucketHistogram`.
        status: '?'
      - name:
          The metrics SDK provides an `AlignedHistogramBucketExemplarReservoir` that is used by default for `ExplicitBucketHistogram`
          aggregation.
        status: '?'
      - name: A metric Producer accepts an optional metric Filter
        status: '?'
      - name: The metric Reader implementation supports registering metric Filter and passing them  its registered metric Producers
        status: '?'
      - name: The metric SDK's metric Producer implementations uses the metric Filter
        status: '?'
      - name: Metric SDK supports configuring cardinality limit at MeterReader level
        status: '-'
      - name: Metric SDK supports configuring cardinality limit per metric (using Views)
        status: '-'
      - name: Metric SDK supports per-timeseries cumulative start timestamps
        status: '?'
  - name: Logs
    features:
      - name: Logger.Emit(LogRecord) with Exception parameter
        status: '?'
      - name: LogRecordProcessor.Enabled
        status: '?'
  - name: Resource
    features:
      - name: '[Resource detectors populate Schema URL](specification/resource/sdk.md#detecting-resource-information-from-the-environment)'
        status: '?'
  - name: Context Propagation
    features:
      - name: OT Propagator
        status: '?'
      - name: OpenCensus Binary Propagator
        status: '?'
  - name: Environment Variables
    features:
      - name: OTEL_LOG_LEVEL
        status: '-'
      - name: OTEL_PROPAGATORS
        status: '-'
      - name: OTEL_EXPORTER_ZIPKIN_*
        status: '-'
      - name: OTEL_TRACES_EXPORTER
        status: '-'
      - name: OTEL_METRICS_EXPORTER
        status: '-'
      - name: OTEL_LOGS_EXPORTER
        status: '-'
      - name: OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT
        status: '-'
      - name: OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT
        status: '-'
      - name: OTEL_SPAN_EVENT_COUNT_LIMIT
        status: '-'
      - name: OTEL_SPAN_LINK_COUNT_LIMIT
        status: '-'
      - name: OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT
        status: '-'
      - name: OTEL_LINK_ATTRIBUTE_COUNT_LIMIT
        status: '-'
      - name: OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT
        status: '-'
      - name: OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT
        status: '-'
      - name: OTEL_TRACES_SAMPLER
        status: '-'
      - name: OTEL_TRACES_SAMPLER_ARG
        status: '-'
      - name: OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT
        status: '-'
      - name: OTEL_ATTRIBUTE_COUNT_LIMIT
        status: '-'
      - name: OTEL_METRICS_EXEMPLAR_FILTER
        status: '-'
      - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE
        status: '-'
      - name: OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION
        status: '-'
  - name: Exporters
    features:
      - name: '[Exporter interface has `ForceFlush`](specification/trace/sdk.md#forceflush-2)'
        status: '?'
      - heading: '**[OTLP](specification/protocol/otlp.md)**'
        features:
          - name: OTLP/HTTP gzip Content-Encoding support
            status: '-'
          - name: Concurrent sending
            status: '-'
          - name: Honors retryable responses with backoff
            status: '-'
          - name: Honors non-retryable responses
            status: '-'
          - name: Honors throttling response
            status: '-'
          - name: Multi-destination spec compliance
            status: '-'
          - name: SchemaURL in ResourceSpans and ScopeSpans
            status: '?'
          - name: SchemaURL in ResourceMetrics and ScopeMetrics
            status: '?'
          - name: SchemaURL in ResourceLogs and ScopeLogs
            status: '?'
          - name: Honors the [user agent spec](specification/protocol/exporter.md#user-agent)
            status: '?'
          - name:
              '[Partial Success](https://github.com/open-telemetry/opentelemetry-proto/blob/main/docs/specification.md#partial-success)
              messages are handled and logged for OTLP/gRPC'
            status: '?'
          - name:
              '[Partial Success](https://github.com/open-telemetry/opentelemetry-proto/blob/main/docs/specification.md#partial-success-1)
              messages are handled and logged for OTLP/HTTP'
            status: '?'
          - name: Metric Exporter configurable temporality preference
            status: '?'
          - name: Metric Exporter configurable default aggregation
            status: '?'
      - heading: '**[Zipkin](specification/trace/sdk_exporters/zipkin.md)**'
        features:
          - name: Zipkin V1 JSON
            status: '-'
          - name: Zipkin V1 Thrift
            status: '-'
          - name: Zipkin V2 Protobuf
            status: '-'
          - name: InstrumentationScope mapping
            status: '?'
      - heading: '**Prometheus**'
        features:
          - name: '[Metadata Deduplication](specification/compatibility/prometheus_and_openmetrics.md#metric-metadata-1)'
            status: '-'
          - name: '[UNIT Metadata](specification/compatibility/prometheus_and_openmetrics.md#metric-metadata-1)'
            status: '-'
          - name: '[Unit Full Words](specification/compatibility/prometheus_and_openmetrics.md#metric-metadata-1)'
            status: '-'
          - name: '[otel_scope_name and otel_scope_version labels on all Metrics](specification/compatibility/prometheus_and_openmetrics.md#instrumentation-scope-1)'
            status: '-'
          - name: '[otel_scope_[attribute] labels on all Metrics](specification/compatibility/prometheus_and_openmetrics.md#instrumentation-scope-1)'
            status: '-'
          - name: '[otel_scope labels can be disabled](specification/compatibility/prometheus_and_openmetrics.md#instrumentation-scope-1)'
            status: '-'
          - name: '[Prometheus Counters have _total suffix by default](specification/compatibility/prometheus_and_openmetrics.md#sums)'
            status: '-'
          - name: '[Prometheus Counters _total suffixing can be disabled](specification/compatibility/prometheus_and_openmetrics.md#sums)'
            status: '-'
          - name: '[Delta Non-Monotonic Sums become Cumulative Prometheus Counters](specification/compatibility/prometheus_and_openmetrics.md#sums)'
            status: '-'
          - name: '[Delta Histograms become Cumulative Prometheus Histograms](specification/compatibility/prometheus_and_openmetrics.md#histograms-1)'
            status: '-'
          - name: '[Colliding sanitized attribute keys are merged](specification/compatibility/prometheus_and_openmetrics.md#metric-attributes)'
            status: '-'
          - name: '[Exemplars for Histograms and Monotonic sums](specification/compatibility/prometheus_and_openmetrics.md#exemplars-1)'
            status: '-'
          - name: '[`target_info` metric from Resource](specification/compatibility/prometheus_and_openmetrics.md#resource-attributes-1)'
            status: '-'
  - name: OpenCensus Compatibility
    features:
      - name: '[Trace Bridge](specification/compatibility/opencensus.md#trace-bridge)'
        status: '-'
      - name: '[Metric Bridge](specification/compatibility/opencensus.md#metrics--stats)'
        status: '-'
  - name: OpenTracing Compatibility
    features:
      - name: '[Create OpenTracing Shim](specification/compatibility/opentracing.md#create-an-opentracing-tracer-shim)'
        status: '?'
      - name: '[Tracer](specification/compatibility/opentracing.md#tracer-shim)'
        status: '?'
      - name: '[Span](specification/compatibility/opentracing.md#span-shim)'
        status: '?'
      - name: '[SpanContext](specification/compatibility/opentracing.md#spancontext-shim)'
        status: '?'
      - name: '[ScopeManager](specification/compatibility/opentracing.md#scopemanager-shim)'
        status: '?'
      - name: Error mapping for attributes/events
        status: '?'
      - name: Migration to OpenTelemetry guide
        status: '?'

For each item marked '?' in this list:

  • A ? indicates the implementation status is not known.
  • Investigate if a feature is / is not implemented already, and update the spec.

For each item marked '-' in this list:

  • A - indicates the implementation is missing.
  • Confirm if the item is really not implemented, the matrix could be out of date.
  • Confirm if it is desirable to implement the item (some area are deprecated, not worth changing)
  • Create an issue for remaining items.

6.2. declarative configuration matrix

The declarative configuration repository keeps a compliance matrix listing the status for the cpp implementation.

See https://github.com/open-telemetry/opentelemetry-configuration/blob/main/schema/meta_schema_language_cpp.yaml

How to find remaining items:

[malff@malff-desktop schema]$ pwd
/home/malff/CODE/MY_GITHUB/opentelemetry-configuration/schema
[malff@malff-desktop schema]$ yq '.typeSupportStatuses[] | select(.status == "not_implemented") | .type' meta_schema_language_cpp.yaml 
SpanKind
ExperimentalContainerResourceDetector
ExperimentalEventToSpanEventBridgeLogRecordProcessor
ExperimentalHostResourceDetector
ExperimentalJaegerRemoteSampler
ExperimentalLoggerConfig
ExperimentalProcessResourceDetector
ExperimentalResourceDetection
ExperimentalResourceDetector
ExperimentalServiceResourceDetector
ExperimentalSpanParent

Remaining work:

7. Too late

Fixed already:

Metadata

Metadata

Assignees

Labels

good first issueGood for newcomershelp wantedGood for taking. Extra help will be provided by maintainers

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions