Add a facility to log tool invocations

Add a function to log the invocation of tools run from the Android
build environment. This enables analyzing and optimizing developer
flows.

Note that there are no tools currently leveraging the logging
facility. Logging is also disabled by default and not configured to
use any particular logger.

Test: atest run_tool_with_logging_test
bug: 331638854

Change-Id: I001ba3c6c30b3ffc95d0fdb30ea7178a991c680f
This commit is contained in:
Zhuoyao Zhang
2024-03-26 22:50:12 +00:00
parent fde34c3b65
commit cc44d2e70e
4 changed files with 454 additions and 0 deletions

View File

@@ -1103,6 +1103,48 @@ function adb() {
$ADB "${@}"
}
function run_tool_with_logging() {
# Run commands in a subshell for us to handle forced terminations with a trap
# handler.
(
local tool_tag="$1"
shift
local tool_binary="$1"
shift
# If logging is not enabled or the logger is not configured, run the original command and return.
if [[ "${ANDROID_ENABLE_TOOL_LOGGING}" != "true" ]] || [[ -z "${ANDROID_TOOL_LOGGER}" ]]; then
"${tool_binary}" "${@}"
return $?
fi
# Otherwise, run the original command and call the logger when done.
local start_time
start_time=$(date +%s.%N)
local logger=${ANDROID_TOOL_LOGGER}
# Install a trap to call the logger even when the process terminates abnormally.
# The logger is run in the background and its output suppressed to avoid
# interference with the user flow.
trap '
exit_code=$?;
# Remove the trap to prevent duplicate log.
trap - EXIT;
"${logger}" \
--tool_tag "${tool_tag}" \
--start_timestamp "${start_time}" \
--end_timestamp "$(date +%s.%N)" \
--tool_args \""${@}"\" \
--exit_code "${exit_code}" \
> /dev/null 2>&1 &
exit ${exit_code}
' SIGINT SIGTERM SIGQUIT EXIT
# Run the original command.
"${tool_binary}" "${@}"
)
}
# simplified version of ps; output in the form
# <pid> <procname>
function qpid() {