• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/bash
2#
3# Copyright 2014 The Chromium OS Authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6#
7# count_labels:  Print a summary of how many times a particular label
8# value occurs in the output of an `atest host list` command.
9#
10# To find the sizes of the pools assigned to a board:
11#     atest host list -b board:$BOARD | count_labels -p
12#
13# To find how many of each board is assigned to a pool:
14#     atest host list -b pool:$POOL | count_labels -b
15
16USAGE="usage: $(basename $0)"
17HELP="\
18$USAGE -p | -b | -v | -l <label>
19$USAGE -h
20
21Standard input to this command is the output of some variant of
22'atest host list'.  The command line option selects a particular
23category of label to be counted:
24  -p: Count \"pool:\" label values.
25  -b: Count \"board:\" label values.
26  -m: Count \"model:\" label values.
27  -v: Count \"variant:\" label values.
28  -l <label>: Count values of labels named \"<label>:\"
29
30Exactly one label selection option must be supplied; there is no
31default, and multiple options aren't allowed.
32
33The comand reports the counts of the various values of the
34selected label.
35
36Example:
37  \$ atest host list -b board:daisy_skate | count_labels -p
38        9 bvt
39       14 suites
40        1 wificell
41"
42
43
44usage() {
45    if [ $# -ne 0 ]; then
46        echo "$@" >&2
47        echo >&2
48    fi
49    echo "$HELP" >&2
50    exit 1
51}
52
53COUNT=0
54ERR=0
55while getopts 'hpbmvl:' flag; do
56    case $flag in
57        p) LABEL=pool ;;
58        b) LABEL=board ;;
59        m) LABEL=model ;;
60        v) LABEL=variant ;;
61        l) LABEL=$OPTARG ;;
62        h|\?) ERR=1 ;;
63    esac
64    COUNT=$(( COUNT + 1 ))
65done
66
67if [ $COUNT -ne 1 ]; then
68    usage "Must have exactly one label-specifying option" >&2
69fi
70
71if [ $ERR -ne 0 ]; then
72    usage
73fi
74
75sed -e "/$LABEL:/ !d" -e "s=.*$LABEL:\([^,]*\).*=\1=" | sort |
76    uniq -c | awk '{sum += $1; print} END {printf "%7d total\n", sum}'
77