#!/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.
  -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 'hpbvl:' flag; do
    case $flag in
        p) LABEL=pool ;;
        b) LABEL=board ;;
        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
