Download this file
| 1 | #!/usr/bin/env bash |
| 2 | # Collects wake-from-sleep samples: every 2 minutes, any app whose instance |
| 3 | # the platform's own log says is asleep (latest event "stopping"/"exited") |
| 4 | # gets one first request timed. After a sample an app is left alone for at |
| 5 | # least 16 minutes (the idle window is 15), because the log is flushed |
| 6 | # periodically and can lag. Runs until every app has <samples> samples. |
| 7 | # Nothing else may touch the apps meanwhile. |
| 8 | # scripts/measure-wake.sh [samples] [slug...] |
| 9 | set -uo pipefail |
| 10 | cd "$(dirname "$0")/.." |
| 11 | want=${1:-3}; shift || true |
| 12 | slugs=("$@") |
| 13 | [ ${#slugs[@]} -gt 0 ] || slugs=(go go-rastrillo rust zig ocaml haskell swift nim spinel) |
| 14 | declare -A last |
| 15 | have() { python3 -c "import json,sys; print(len(json.load(open('results/$1.json')).get('Wake') or []))"; } |
| 16 | while :; do |
| 17 | left=0 |
| 18 | now=$(date +%s) |
| 19 | for s in "${slugs[@]}"; do |
| 20 | n=$(have "$s") |
| 21 | [ "$n" -ge "$want" ] && continue |
| 22 | left=1 |
| 23 | [ $(( now - ${last[$s]:-0} )) -lt 960 ] && continue |
| 24 | if bakeoff wake --slug "$s"; then |
| 25 | last[$s]=$(date +%s) |
| 26 | echo "$(date +%H:%M) $s sample $((n+1))" |
| 27 | fi |
| 28 | done |
| 29 | [ $left = 0 ] && break |
| 30 | sleep 120 |
| 31 | done |
| 32 | echo "wake: done" |
| 33 | |