elastic / elastic/apm-agent-java
Improve process instrumentation for Java 9
- Dominant language
- Java
- Stars
- 594
- Forks
- 338
- Avg merge
- 1d 13h
- Merged PRs (30d)
- 25
Description
**Problem description**
This is an improvement on elastic/apm-agent-java#903 (external process execution instrumentation).
Starting from Java 9, there is a new API available for process execution `ProcessHandle`, which is not covered by #903.
As a result, any usage of this API will not result in spans be created.
**Proposed solution**
Instrument `Process.toHandle()` to wrap returned `ProcessHandle` instance.
Wrapped `ProcessHandle` should end current process span on those methods
- `ProcessHandle.destroy()`
- `ProcessHandle.destroyForcibly()`
- `ProcessHandle.onExit()` > returns a `CompletableFuture` which should be wrapped and terminate span
This would also allow to use `ProcessHandle.Info` and capture program arguments, PID or other attributes.
Alternatively, we could also use `CompletableFuture.thenApply(...)` to chain a task that will terminate the process span.
Contributor guide
Assessment
This issue has not been assessed yet.