-
Notifications
You must be signed in to change notification settings - Fork 1.8k
feat(observability): [WIP] implement universal 4-path OpenTelemetry tracing #18433
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
Open
chalmerlowe
wants to merge
121
commits into
main
Choose a base branch
from
feat/otel-tracing-universal-4path
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+25,169
−4,011
Open
Changes from all commits
Commits
Show all changes
121 commits
Select commit
Hold shift + click to select a range
bfb40b0
feat(core): add request hook to inject GCP resource and project attri…
chalmerlowe 87ca9b8
feat(core): implement complete T4 gRPC telemetry capture and response…
chalmerlowe 451e17b
test(core): add comprehensive unit tests for T4 gRPC telemetry and hooks
chalmerlowe 29de72e
refactor(core): adopt explicit _grpc_* naming for request extraction …
chalmerlowe 7f6519f
test(core): align test names and assertions with _grpc_* naming conve…
chalmerlowe b0de0a4
feat(core): add url.domain, error attributes, and streamline T4 hooks
chalmerlowe ac095c5
feat(core): normalize gRPC span names and eliminate duplicate rpc.sys…
chalmerlowe ef7d77d
refactor(core): remove deferred gcp.resource.destination.id attribute
chalmerlowe aa2bead
feat(core): record rpc.response.status_code on wire attempt spans
chalmerlowe 894b380
refactor(core): remove duplicate error attribute extraction in favor …
chalmerlowe 1c1b9af
fix(observability): resolve mypy union-attr error and support environ…
chalmerlowe 81b686c
refactor(observability): simplify response hook to record OK on succe…
chalmerlowe 324b866
test(observability): cover request hook span edge cases for 100% bran…
chalmerlowe abeaf04
fix(observability): safely handle invalid port in endpoint attributes
chalmerlowe 99a4d3d
fix(observability): ensure response hook only records OK on successfu…
chalmerlowe 4b82c9c
refactor(observability): address review feedback on method name, url …
chalmerlowe 0fb354a
docs(observability): clarify sync vs async behavior and specify semco…
chalmerlowe acce308
feat(gapic): add OpenTelemetry channel tracing to generator templates
chalmerlowe d337933
fix(gapic): resolve CI import errors on unreleased ClientInterceptor …
chalmerlowe 13f1218
fix(gapic): use AnonymousCredentials in test_grpc_transport_channel_i…
chalmerlowe 11ccd0d
test(gapic): update bazel integration goldens for otel channel tracing
chalmerlowe a7dad4f
ci(gapic): add OpenTelemetry test dependencies to showcase nox sessions
chalmerlowe 858ff52
test(gapic): support client_options and otel interceptor in system te…
chalmerlowe b1c66e4
test(gapic): add showcase system test suite for OpenTelemetry channel…
chalmerlowe b409ba6
feat(gapic): broaden transport subclass check and harden tracing tests
chalmerlowe 2059f32
refactor(gapic): guard ClientInterceptor under TYPE_CHECKING in trans…
chalmerlowe 66a6f0e
test(gapic): synchronize NO COVER pragma in golden gRPC transports
chalmerlowe 7ebebfa
test(gapic): support flexible import of construct_client in system tr…
chalmerlowe a7956a5
feat(gapic): resolve OTel interceptor in GrpcTransport and pass clien…
chalmerlowe cd5299a
test(gapic): update bazel integration goldens for transport tracing u…
chalmerlowe 8b540c8
fix(gapic): resolve showcase mypy error and ensure base transport wra…
chalmerlowe 880f5b9
feat(observability): add fallback status code and exception mapping f…
chalmerlowe 9bb3305
test(gapic): harmonize showcase system tracing tests with env gating …
chalmerlowe af22028
fix(observability): ensure 100% branch coverage in error attribute ex…
chalmerlowe d073f2b
perf(generator): cache wrap_method tracing check at module level
chalmerlowe 715f58b
refactor(observability): guard none span in response hook and tag int…
chalmerlowe c13f97a
feat(gapic): harden otel interceptor deduplication and options checki…
chalmerlowe b1b7ce4
test(gapic): update bazel integration goldens for interceptor hardening
chalmerlowe ce65620
Merge remote-tracking branch 'origin/main' into feat/otel-tracing-gap…
chalmerlowe d53607b
fix(ci): synchronize goldens with bazel generator and align with main
chalmerlowe f7f3feb
feat(gapic): wire method_name for mixin methods in base transport
chalmerlowe 2f522bd
test(gapic): clarify test handling of abstract base transport NotImpl…
chalmerlowe ee5f778
refactor(testing): tighten fixture usage and standardize span asserti…
chalmerlowe 89675ea
feat(observability): populate status.message span attribute for cross…
chalmerlowe 8abdbc6
feat(observability): implement universal 4-path OpenTelemetry tracing
chalmerlowe cba76f3
fix(observability): resolve 4-path transport tracing gaps and support…
chalmerlowe 2772ee3
fix(observability): resolve mypy typing, matrix coverage, and update …
chalmerlowe 09080aa
fix(generator): isolate goldens from pre-commit formatting and sync i…
chalmerlowe a933acb
fix(generator): sync Bazel integration goldens with raw generator out…
chalmerlowe 78a1db7
test(tracing): achieve 100% coverage on google-api-core and showcase …
chalmerlowe 0f6e078
refactor(tracing): centralize wrap_method introspection and simplify …
chalmerlowe 2535c2d
refactor(gapic-generator): unify transport method wrapping and centra…
chalmerlowe 1f54064
refactor(observability): add trace_http_request helper and simplify r…
chalmerlowe 4c8984d
refactor(gapic-generator): unify transport wrap helper, clean compat …
chalmerlowe 03e8dff
fix(core): route async channel interceptors by RPC type
chalmerlowe f63234f
refactor(observability): complete docstring typing, enforce transport…
chalmerlowe 2862cce
fix(observability): document fail-open rationale and cover tracing in…
chalmerlowe b621fcd
feat(observability): align REST rpc.system.name, cache trace context …
chalmerlowe 8382184
fix(generator): add coverage pragmas to _compat observability fallbac…
chalmerlowe c22f65b
test(core): cover apply_channel_interceptors fallback branches
chalmerlowe b50c26e
test(core): cover all non-appendable branches in apply_channel_interc…
chalmerlowe 84ff4d9
test(generator): add semantic span contracts and 18-feature complianc…
chalmerlowe 84a2128
refactor(generator): consolidate telemetry compliance scenarios and p…
chalmerlowe 2f8d713
refactor(observability): address review comments on HTTP span context…
chalmerlowe c148624
refactor(observability): collapse _HttpSpanContext into class trace_h…
chalmerlowe 4d2c361
style(generator): move TYPE_CHECKING import to bottom of imports in g…
chalmerlowe 40b0db6
test(generator): remove pragma: NO COVER from base transport fallback…
chalmerlowe d535d6d
refactor(gapic-generator): inline _wrap helper directly into _wrap_me…
chalmerlowe 86e2eed
docs(gapic-generator): add docstrings to transport method wrappers an…
chalmerlowe 7934816
test(showcase): add F3 live retry hierarchy and aggregation complianc…
chalmerlowe bc39993
refactor(testing): drive telemetry compliance test suite from CSV fea…
chalmerlowe f2c08f9
feat(testing): add --dump-spans option to dump raw OpenTelemetry JSON…
chalmerlowe b2a97ed
refactor(testing): output telemetry compliance scorecard in clean CSV…
chalmerlowe f8ed46d
fix(observability): resolve mypy exit-return typing and sync bazel in…
chalmerlowe 566e55d
fix(testing): simplify span_contract record and support local core in…
chalmerlowe a4dd85a
ci(generator): add showcase-system test workflow
chalmerlowe 96e54eb
fix(generator): include sequence.proto in showcase library generation
chalmerlowe 79b01ba
ci(generator): run full showcase system test suite in CI
chalmerlowe df0617e
ci(generator): enable verbose and uncaptured output for showcase syst…
chalmerlowe 7599f5b
refactor(testing): clear legacy span_contract boilerplate for spec-dr…
chalmerlowe 8b07759
docs(testing): update telemetry requirements matrix with concrete 1-t…
chalmerlowe 4296316
feat(generator): implement clean-slate spec-driven telemetry complian…
chalmerlowe 178686f
refactor(testing): remove deprecated span_contract references from te…
chalmerlowe 6bc5406
refactor(testing): make matrix sole authority for sequence and retry …
chalmerlowe bc3a140
refactor(testing): use monkeypatch for tracing environment variable c…
chalmerlowe b6df0b7
refactor(testing): introduce construct_observability_client helper fo…
chalmerlowe 02cb934
refactor(testing): remove unnecessary use_mtls plumbing from test run…
chalmerlowe 38311d5
refactor(testing): inject clients into scenario runners and centraliz…
chalmerlowe fb3c3ff
refactor(testing): eliminate magic numbers and unify sequence executi…
chalmerlowe 2bba42d
refactor(testing): decompose assert_span_matches_row into modular sub…
chalmerlowe 0d3dcdf
docs(testing): enrich architectural docstrings and commentary across …
chalmerlowe 89c6f86
refactor(testing): dry up span metadata assertions and simplify DSL d…
chalmerlowe 92f9a2f
fix(core): remove unreachable branch in trace_http_request.__exit__ t…
chalmerlowe b640ac8
test(observability): harden unit test boundaries, parametrization, an…
chalmerlowe fe2b289
chore: merge branch 'main' of https://github.com/googleapis/google-cl…
chalmerlowe d20d306
fix(core): remove unreachable branch in trace_http_request.__exit__ t…
chalmerlowe 6cca78d
chore(spanner): align samples noxfile imports with librarian generate
chalmerlowe 26410c8
test(showcase): install local google-api-core in showcase_w_rest_asyn…
chalmerlowe 6da4d08
chore(gapic-generator): document coverage pragmas and lifecycles on t…
chalmerlowe 1a868df
test(gapic-generator): skip positive tracing tests when observability…
chalmerlowe 0c28765
chore: restore unrelated packages to match origin/main
chalmerlowe da8b1d0
chore(ci): restore gapic-generator-tests.yml to match origin/main
chalmerlowe 0f6bd43
chore(generator): restore test_streams.py formatting to match origin/…
chalmerlowe c90fab0
chore: restore .gitignore to match origin/main
chalmerlowe 302e717
chore(testing): remove obsolete --dump-spans option from showcase sys…
chalmerlowe 1a79526
refactor(core): use explicit transport kind constants and align metho…
chalmerlowe 265359b
refactor(gapic_v1): privatize transport kind constants in method and …
chalmerlowe 2aad17b
refactor(tracing): refine span exception filtering, inherit async cal…
chalmerlowe 1b0c4c9
refactor(tracing): encapsulate HTTP wire tracing into _TraceContext a…
chalmerlowe ed802b8
fix(tracing): support BaseException in _extract_error_attributes for …
chalmerlowe 775d71e
docs(tracing): enrich _fallback_apply_interceptors docstrings and pat…
chalmerlowe 639aa7e
fix(generator): preserve transport kind in wrap_method fallback on ol…
chalmerlowe 89e0a9c
fix(tracing): gate kind injection in base transport, clean unused imp…
chalmerlowe d6632eb
fix(generator): add 3-era google-api-core support to async transport …
chalmerlowe 3358ec3
fix(observability): resolve showcase test coverage and compat golden …
chalmerlowe fd86f66
chore: merge branch 'main' into feat/otel-tracing-universal-4path
chalmerlowe a26f127
refactor(observability): inline error recording into _TraceContext an…
chalmerlowe 5b82add
test(showcase): upload raw spans artifact in CI and print compliance …
chalmerlowe 2f48184
test(showcase): pin upload-artifact action and capture error states i…
chalmerlowe a8a8c64
ci(generator): gate local core install and add showcase canary job
chalmerlowe 048cf39
fix(ci): gate span tests on _TraceContext and exclude broken gcp-sphi…
chalmerlowe File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.
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.
Note
As context for the reviewer:
For native methods (like
EchoorGetSecret), the generator reads the service's.protofile directly, so constructing the name in the template is straightforward:method_name="{{ '.'.join(method.meta.address.package) }}.{{ service.name }}/{{ method.name }}"However, mixins don't live in the service’s proto. Mixin methods (
GetOperation,GetIamPolicy,ListLocations) are synthetic—they are injected by the generator from the static catalog ingapic/schema/mixins.pyWithout a name attribute, any mixin call (like polling an operation or checking IAM permissions) would be unable to start an OpenTelemetry method span, or would emit an unknown/nameless span that failed our contract checks.