swift-nio/dev/alloc-limits-from-test-output

74 lines
1.7 KiB
Bash
Executable File

#!/bin/bash
# This script allows you to consume any Jenkins/alloc counter run output and
# convert it into the right for for the docker-compose script.
set -eu
mode_flag=${1---docker-compose}
function usage() {
echo >&1 "Usage: $0 [--docker-compose|--export]"
echo >&1
echo >&1 "Example:"
echo >&1 " # copy the output from the Jenkins CI into your clipboard, then"
echo >&1 " pbpaste | $0 --docker-compose"
}
function die() {
echo >&2 "ERROR: $*"
exit 1
}
case "$mode_flag" in
--docker-compose)
mode=docker
;;
--export)
mode=export
;;
*)
usage
exit 1
;;
esac
function allow_slack() {
raw="$1"
if [[ ! "$raw" =~ ^[0-9]+$ ]]; then
die "not a malloc count: '$raw'"
fi
if [[ "$raw" -lt 1000 ]]; then
echo "$raw"
return
fi
allocs=$raw
while true; do
allocs=$(( allocs + 1 ))
if [[ "$allocs" =~ [0-9]+00$ || "$allocs" =~ [0-9]+50$ ]]; then
echo "$allocs"
return
fi
done
}
grep -e "total number of mallocs" -e ".total_allocations" | \
sed -e "s/: total number of mallocs/.total_allocations/g" \
-e "s/info: /test_/g"| \
grep -Eo 'test_.*\.total_allocations: [0-9]+' | sort | uniq | while read test allocs; do
test_name=$(echo "$test" | sed "s/test_//g" | cut -d. -f1 )
allocs=$(allow_slack "$(echo "$allocs" | cut -d: -f2 | sed "s/ //g")")
case "$mode" in
docker)
echo " - MAX_ALLOCS_ALLOWED_$test_name=$allocs"
;;
export)
echo "export MAX_ALLOCS_ALLOWED_$test_name=$allocs"
;;
*)
die "Unexpected mode: $mode"
;;
esac
done