-
Couldn't load subscription status.
- Fork 19
Open
Description
v0 Goal
Ensure the net/http and grpc injection functions correctly.
Roadmap
-
Initial
- Setup Phase
- isSetup - Check if setup phase is already done(because we can either
otel setup + otel go buildor justotel go build) - feat: find project's dependencies #34 - Find all dependencies of the project being build
- feat: match hook rules with found dependencies #35 - Match the hook code with these dependencies
- feat: introduce hook dependencies via otel.runtime.go #38 - Introduce additional hook code by generating otel.instrumentation.go
- feat: sync new dependencies to go.mod #39 - Run
go mod tidyto refresh dependencies - feat: instrument.load matched rules from setup phase #43 - Write the matched hook rules to match.txt
- isSetup - Check if setup phase is already done(because we can either
- Instrument Phase
- feat: instrument.load matched rules from setup phase #43 - Load matched hook rules from match.txt
- feat: match the rules with compile command in instrument phase #46 - Check if the current package should be instrumented
- feat: instrument the package #50 - Instrument the target function
- Misc
- Setup Phase
-
Test
- basic test framework and enable it in CI/CD
- Add unit test for tool/{util,ex,cmd} and tool/internal/{ast,setup} #47 - unit test
- Enable CI test actions #51 - unit test
- Add an integration test for the full OTel injection process. The test should inject, run the app, and then verify the output - integration test
- Link the instrumented binary and run it and further check output content in
instrument_test.go#104
-
Demo
- Highest priority Refactor the demo applications to use
net/httpandgrpc. - This will serve as our primary testbed- Support trace context propagation in demo application
- Add basic
net/httpinstrumentation rule underpkg/instrumentation/http - Add basic
grpcinstrumentation rule underpkg/instrumentation/grpc - Make http+grpc rules work
- Highest priority Refactor the demo applications to use
-
Functionality
- feat: instrument struct #83 - inject new field for arbitrary struct
- Auto-generate
go:linknametags instead of depending on hook author -
Split largetrampoline.gointo smaller files - refactor: limit visibility to necessary fields and constants #92 - Unexport HookContextImpl fields
- Only embedding the
*.yamland*.gzinstead of wildcard intool/data/export.go - More detailed documents for new contributors
- Auto-sync template_api.go and pkg/inst/context.go #54 - auto-sync two files
- Consolidate all embeded files into
tool/datadir - feat: instrument func with receiver type #105 - Inject func with receiver
- feat: propagate otel trace context from caller goroutine #98
Please feel free to claim the implementation tasks.
kakkoyun and pdelewski
Metadata
Metadata
Assignees
Labels
No labels
Type
Projects
Status
In progress