-
Notifications
You must be signed in to change notification settings - Fork 562
feat(metrics): Add trace metrics behind an experiments flag #4898
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
base: master
Are you sure you want to change the base?
Conversation
Similar to getsentry/sentry-javascript#17883, this allows the py sdk to send in new trace metric protocol items, although this code is experimental since the schema may still change. Most of this code has been copied from logs (eg. log batcher -> metrics batcher) in order to dogfood, once we're more sure of our approach we can refactor.
def _metric_to_transport_format(metric): | ||
# type: (TraceMetric) -> Any | ||
def format_attribute(val): | ||
# type: (int | float | str | bool) -> Any |
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.
Potential bug: The type hint int | float | str | bool
in _trace_metrics_batcher.py
is incompatible with supported Python versions older than 3.10, causing a SyntaxError
on import.
-
Description: The type annotation for the
format_attribute
function uses theint | float | str | bool
union syntax. This syntax was introduced in Python 3.10. However, the package'ssetup.py
declares support for Python versions 3.6 and newer. As a result, importing the_trace_metrics_batcher
module on Python versions 3.6 through 3.9 will raise an immediateSyntaxError
, preventing the application from starting and causing the trace metrics feature to be completely non-functional on these supported versions. -
Suggested fix: Replace the
int | float | str | bool
syntax withUnion[int, float, str, bool]
from thetyping
module. This will ensure the type hint is compatible with all supported Python versions from 3.6 onwards.
severity: 0.9, confidence: 1.0
Did we get this right? 👍 / 👎 to inform future reviews.
…ce trace metric is an internal dataset detail
from sentry_sdk.api import get_client, get_current_scope, get_current_span | ||
from sentry_sdk.utils import safe_repr |
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.
The imports should be at the top unless there's a good reason not to have them there.
See my other comment regarding avoiding circular imports.
@@ -1,4 +1,5 @@ | |||
from sentry_sdk import profiler | |||
from sentry_sdk import trace_metrics |
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 should try to avoid circular imports. See the other comment I left. We also don't re-export many other modules. Can we remove the re-export?
To my knowledge the only downside is that it wouldn't be included in from sentry_sdk import *
. If there's a good reason to keep it we should still try to avoid the circular import when importing at the top of a file.
Note that most other modules are not re-exported here.
### Description Remove old metrics code to make way for #4898 Metrics was always an experimental feature and Sentry stopped accepting metrics a year ago. #### Issues <!-- * resolves: #1234 * resolves: LIN-1234 --> #### Reminders - Please add tests to validate your changes, and lint your code using `tox -e linters`. - Add GH Issue ID _&_ Linear ID (if applicable) - PR title should use [conventional commit](https://develop.sentry.dev/engineering-practices/commit-messages/#type) style (`feat:`, `fix:`, `ref:`, `meta:`) - For external contributors: [CONTRIBUTING.md](https://github.com/getsentry/sentry-python/blob/master/CONTRIBUTING.md), [Sentry SDK development docs](https://develop.sentry.dev/sdk/), [Discord community](https://discord.gg/Ww9hbqr)
Summary
Similar to getsentry/sentry-javascript#17883, this allows the py sdk to send in new trace metric protocol items, although this code is experimental since the schema may still change. Most of this code has been copied from logs (eg. log batcher -> metrics batcher) in order to dogfood, once we're more sure of our approach we can refactor.
Closes LOGS-367