blob: 3fec80c8786c51ec2e08b5ecd971ee84d80f5e40 [file] [log] [blame]
#!/bin/bash
#
# Copyright 2014 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# count_labels: Print a summary of how many times a particular label
# value occurs in the output of an `atest host list` command.
#
# To find the sizes of the pools assigned to a board:
# atest host list -b board:$BOARD | count_labels -p
#
# To find how many of each board is assigned to a pool:
# atest host list -b pool:$POOL | count_labels -b
USAGE="usage: $(basename $0)"
HELP="\
$USAGE -p | -b | -v | -l <label>
$USAGE -h
Standard input to this command is the output of some variant of
'atest host list'. The command line option selects a particular
category of label to be counted:
-p: Count \"pool:\" label values.
-b: Count \"board:\" label values.
-m: Count \"model:\" label values.
-v: Count \"variant:\" label values.
-l <label>: Count values of labels named \"<label>:\"
Exactly one label selection option must be supplied; there is no
default, and multiple options aren't allowed.
The comand reports the counts of the various values of the
selected label.
Example:
\$ atest host list -b board:daisy_skate | count_labels -p
9 bvt
14 suites
1 wificell
"
usage() {
if [ $# -ne 0 ]; then
echo "$@" >&2
echo >&2
fi
echo "$HELP" >&2
exit 1
}
COUNT=0
ERR=0
while getopts 'hpbmvl:' flag; do
case $flag in
p) LABEL=pool ;;
b) LABEL=board ;;
m) LABEL=model ;;
v) LABEL=variant ;;
l) LABEL=$OPTARG ;;
h|\?) ERR=1 ;;
esac
COUNT=$(( COUNT + 1 ))
done
if [ $COUNT -ne 1 ]; then
usage "Must have exactly one label-specifying option" >&2
fi
if [ $ERR -ne 0 ]; then
usage
fi
sed -e "/$LABEL:/ !d" -e "s=.*$LABEL:\([^,]*\).*=\1=" | sort |
uniq -c | awk '{sum += $1; print} END {printf "%7d total\n", sum}'