#!/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}'