Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/add resource builder #2322

Open
wants to merge 6 commits into
base: main
Choose a base branch
from

Conversation

pitoniak32
Copy link
Contributor

@pitoniak32 pitoniak32 commented Nov 22, 2024

fixes #2320

Changes

  • Removing the timeout field for ResourceDetectors.
  • Add ResourceBuilder to more easily create resources.

example usage:

let resource = Resource::builder()
    .with_detector(Box::new(EnvResourceDetector::new()))
    .with_key_value(KeyValue::new("test1", "test_value"))
    .with_key_values(vec![
        KeyValue::new("test1", "test_value1"),
        KeyValue::new("test2", "test_value2"),
    ])
    .build();

Merge requirement checklist

  • CONTRIBUTING guidelines followed
  • Unit tests added/updated (if applicable)
  • Appropriate CHANGELOG.md files updated for non-trivial, user-facing changes
  • Changes in public API reviewed (if applicable)

@pitoniak32 pitoniak32 requested a review from a team as a code owner November 22, 2024 01:30
Copy link

codecov bot commented Nov 22, 2024

Codecov Report

Attention: Patch coverage is 81.08108% with 14 lines in your changes missing coverage. Please review.

Project coverage is 79.5%. Comparing base (8c9babb) to head (bee950f).
Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
opentelemetry-sdk/src/resource/builder.rs 83.8% 11 Missing ⚠️
opentelemetry-sdk/src/resource/mod.rs 50.0% 3 Missing ⚠️
Additional details and impacted files
@@          Coverage Diff          @@
##            main   #2322   +/-   ##
=====================================
  Coverage   79.5%   79.5%           
=====================================
  Files        123     124    +1     
  Lines      21295   21371   +76     
=====================================
+ Hits       16935   16996   +61     
- Misses      4360    4375   +15     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.


🚨 Try these New Features:

@pitoniak32
Copy link
Contributor Author

I still need to expose the new builder to the API, and would like feedback on #2324 before going further since the changes are related :)

@utpilla
Copy link
Contributor

utpilla commented Nov 23, 2024

@pitoniak32 Could you split this into two PRs? Have one PR just for removing the timeout argument and one for resource builder. That way we can merge the timeout related PR while we review the builder related changes.

@pitoniak32
Copy link
Contributor Author

@pitoniak32 Could you split this into two PRs? Have one PR just for removing the timeout argument and one for resource builder. That way we can merge the timeout related PR while we review the builder related changes.

split those changes into: #2332

}

/// Add a [KeyValue] to the resource.
pub fn with_key_value(self, kv: KeyValue) -> Self {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

interesting why this does not need mut self...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It might be since the with_detectors consumes the builder and its not a &mut reference? That's just a guess I'm actually not sure about that 😅

@pitoniak32
Copy link
Contributor Author

I was also thinking of doing something like this for with_key_value, I'm wondering what others think?

let resource = Resource::builder()
    .with_key_value(KeyValue::new("test1", "test_value"))
    .build();

// vs

let resource = Resource::builder()
    .with_key_value("test1", "test_value")
    .build();
/// Add a [KeyValue] to the resource.
pub fn with_key_value<K, V>(self, key: K, value: V) -> Self
where
    K: Into<Key>,
    V: Into<Value>,
{
    self.with_key_values(vec![KeyValue::new(key, value)])
}

currently its:

/// Add a [KeyValue] to the resource.
pub fn with_key_value(self, kv: KeyValue) -> Self {
    self.with_key_values(vec![kv])
}

"service.name",
"metrics-advanced-example",
)]))
.with_resource(resource)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wondering if we can do with_servicename_resource("metrics-advanced-example") ? This will be the most common use case.
Or just Resource::builder().with_servicename("metrics-advanced-example")......build() ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like that, I was using the go implementation for Resource builder this weekend and they had something similar to this and it felt pretty nice

sResource, err := resource.New(
  ctx,
  resource.WithTelemetrySDK(),
  resource.WithAttributes(semconv.ServiceName("trace-export-service")),
)

Copy link
Contributor

@hdost hdost left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the contribution 😊

}

/// Create ResourceBuilder with a default [Resource].
pub fn new_default() -> Self {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
pub fn new_default() -> Self {
pub fn default() -> Self {

Probably should be done as an impl Default for ResourceBuilder to make it more generally compatible.


impl ResourceBuilder {
/// Create ResourceBuilder with an empty [Resource].
pub fn new_empty() -> Self {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
pub fn new_empty() -> Self {
pub fn new() -> Self {

This makes it easier to reason about. Since on Resource the new is the same as empty but it accepts key values. Since this is a builder most would assume it's empty.

@lalitb lalitb added this to the 0.27.1 milestone Nov 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Improve Resource related public APIs
5 participants