-
Notifications
You must be signed in to change notification settings - Fork 509
[SDK] Implement spec: MetricFilter #3235
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
Conversation
✅ Deploy Preview for opentelemetry-cpp-api-docs canceled.
|
bbd4ca5 to
9e8e4b7
Compare
d6f5504 to
1473ebe
Compare
|
Thanks for the PR. Please remember to sign the EasyCLA, so this PR can be processed. |
e0d8498 to
9c3f930
Compare
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #3235 +/- ##
==========================================
+ Coverage 89.41% 89.49% +0.08%
==========================================
Files 207 208 +1
Lines 6458 6497 +39
==========================================
+ Hits 5774 5814 +40
+ Misses 684 683 -1
🚀 New features to boost your workflow:
|
a36ed14 to
a4384fa
Compare
|
@IcySteam Thanks for the PR. I believe you are working to get the CLA signed, as the PR can't be reviewed without that. |
a4384fa to
4bff481
Compare
4bff481 to
7b19eb4
Compare
marcalff
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the contribution, and for signing the CLA.
Before looking in more details at the code,
please see some preliminary comments below.
There should be no changes in third_party/opentelemetry-proto.
Please make sure to initialize and update git submodules in your branch.
Please check the "include-what-you-use" build in CI for warnings,
and fix the code to resolve them.
There should be no more warnings in the PR compared to the main branch.
More comments to follow.
| void AddMetricReader(std::shared_ptr<MetricReader> reader) noexcept; | ||
| std::shared_ptr<MetricCollector> AddMetricReader( | ||
| std::shared_ptr<MetricReader> reader, | ||
| std::unique_ptr<MetricFilter> metric_filter = nullptr) noexcept; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This was righty pointed out by @marcalff in community meeting - does this method need to return shared_ptr?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@IcySteam It looks like you've now changed it to return a weak_ptr. Sorry I was not clear earlier, the question was—why does this method need to return anything at all?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@lalitb Returning the MetricCollector created by the MeterContext does seem like one of the only few ways to access the MetricCollector, as it is needed by MetricCollectorTest. Extending MetricCollector with a test class is also potentially viable, but that would require changing some of MetricCollector's private members to protected (or a friend class). What are your thoughts on writing proper tests in this case?
72cbd97 to
de7b80e
Compare
de7b80e to
0421775
Compare
|
@lalitb Thanks for approving the CI workflows as always; for some reason, |
ca24682 to
0c944f1
Compare
|
Hi @lalitb, I've pushed another commit which uses a |
eea4047 to
8fa2622
Compare
8fa2622 to
8dd3291
Compare
8dd3291 to
085ad96
Compare
|
Hi @lalitb, I've resolved the merge conflicts from the latest upstream changes. Have you had the chance to review the PR yet? Thanks. |
085ad96 to
244f223
Compare
| auto context = std::shared_ptr<MeterContext>(new MeterContext(ViewRegistryFactory::Create())); | ||
| auto scope = InstrumentationScope::Create("CollectWithMetricFilterTestMetricTest1"); | ||
| auto meter = std::shared_ptr<Meter>(new Meter(context, std::move(scope))); | ||
| context->AddMeter(meter); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit - there can be a helper method to create Meter, and used across tests.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the comment; since context and meter are directly needed by the test code below, creating a helper method here to create meter might not simplify much. We could use a common meter between test cases, but that would require us to make sure there are no duplicate instrument names. Do you think it would be better if we used a common meter?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good point. I believe we can leave it as for now, and can improve later.
| if (attributes_filter_result == MetricFilter::AttributesFilterResult::kAccept) | ||
| { | ||
| filtered_point_data_attrs.emplace_back(std::move(point_data_attr)); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we reuse the existing vector by filtering in-place?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We could reuse the existing metric.point_data_attr_ here by deleting the filtered entries from it, but I think in this case it would be slower than creating a new vector and std::moveing the wanted entries to it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agree. This looks good.
lalitb
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Thanks for implementing this.
marcalff
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, thanks for the feature.
Fixes #2447
Changes
This PR implements the MetricFilter spec in
opentelemetry-cpp.For significant contributions please make sure you have completed the following items:
CHANGELOG.mdupdated for non-trivial changesMetricProducer::MetricProducerMetricCollector::MetricCollectorMeterContext::AddMetricReaderMeterProvider::AddMetricReader