1#!/bin/sh
2
3# Copyright 2017 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# This script probes the readiness of chameleon boards in
8# the audioboxes and atlantis labs. This script takes about 2 seconds per board.
9# The total time for all hosts listed is 5-6 minutes.
10
11#TODO (rjahagir): Add command line for a status check on only a few hosts.
12HOSTS="chromeos2-row10-rack10-host1
13       chromeos2-row10-rack10-host11
14       chromeos2-row10-rack10-host13
15       chromeos2-row10-rack10-host15
16       chromeos2-row10-rack10-host17
17       chromeos2-row10-rack10-host19
18       chromeos2-row10-rack10-host3
19       chromeos2-row10-rack10-host5
20       chromeos2-row10-rack10-host7
21       chromeos2-row10-rack10-host9
22       chromeos2-row10-rack5-host11
23       chromeos2-row10-rack5-host13
24       chromeos2-row10-rack5-host15
25       chromeos2-row10-rack5-host17
26       chromeos2-row10-rack5-host19
27       chromeos2-row10-rack5-host21
28       chromeos2-row10-rack6-host1
29       chromeos2-row10-rack6-host11
30       chromeos2-row10-rack6-host13
31       chromeos2-row10-rack6-host15
32       chromeos2-row10-rack6-host3
33       chromeos2-row10-rack6-host5
34       chromeos2-row10-rack6-host7
35       chromeos2-row10-rack6-host9
36       chromeos2-row10-rack7-host1
37       chromeos2-row10-rack7-host11
38       chromeos2-row10-rack7-host13
39       chromeos2-row10-rack7-host15
40       chromeos2-row10-rack7-host17
41       chromeos2-row10-rack7-host3
42       chromeos2-row10-rack7-host5
43       chromeos2-row10-rack7-host7
44       chromeos2-row10-rack7-host9
45       chromeos2-row10-rack8-host1
46       chromeos2-row10-rack8-host13
47       chromeos2-row10-rack8-host15
48       chromeos2-row10-rack8-host17
49       chromeos2-row10-rack8-host19
50       chromeos2-row10-rack8-host21
51       chromeos2-row10-rack8-host3
52       chromeos2-row10-rack8-host5
53       chromeos2-row10-rack8-host7
54       chromeos2-row10-rack8-host9
55       chromeos2-row10-rack9-host11
56       chromeos2-row10-rack9-host13
57       chromeos2-row10-rack9-host15
58       chromeos2-row10-rack9-host17
59       chromeos2-row10-rack9-host19
60       chromeos2-row10-rack9-host21
61       chromeos2-row10-rack9-host3
62       chromeos2-row10-rack9-host5
63       chromeos2-row10-rack9-host7
64       chromeos2-row10-rack9-host9
65       chromeos9-audiobox1-host1
66       chromeos9-audiobox1-host2
67       chromeos9-audiobox2-host1
68       chromeos9-audiobox2-host2
69       chromeos9-audiobox3-host1
70       chromeos9-audiobox3-host2
71       chromeos9-audiobox4-host1
72       chromeos9-audiobox4-host2
73       chromeos9-audiobox5-host1
74       chromeos9-audiobox5-host2
75       chromeos9-audiobox6-host1
76       chromeos9-audiobox6-host2
77       chromeos9-audiobox7-host1
78       chromeos9-audiobox7-host2
79       chromeos1-row5-rack1-host2
80       chromeos1-row5-rack2-host2
81       chromeos1-row2-rack3-host4
82       chromeos1-row2-rack4-host4"
83
84# NOTE: May need to update based on where test_rsa is located.
85SSH_OPTIONS="-q -i ~/.ssh/.test_rsa \
86             -o UserKnownHostsFile=/dev/null \
87             -o StrictHostKeyChecking=no"
88
89PROBE_RESULT_DIR="/tmp/chameleon_probe_result"
90
91SEP_LINE="--------------------------------------------------------------------------------------"
92
93
94function disp_result {
95  test "$1" -eq "0" && echo ok || echo "-"
96}
97
98function probe_chameleon {
99  chameleon="$1-chameleon.cros"
100
101  # ping test
102  ping -q -w 10 -c1 "${chameleon}" > /dev/null 2>&1
103  ping_result="$(disp_result $?)"
104
105  # checking /dev/root space
106  devroot_space=$(ssh ${SSH_OPTIONS} root@"$chameleon" \
107     df -h | awk -F' ' 'FNR == 2 {print $5}')\
108
109  # Check if chameleond is running.
110  test $(ssh ${SSH_OPTIONS} root@"$chameleon" \
111         ps | awk '$5~"run_chameleond"' | wc -l) -gt "0"
112  chameleond_result="$(disp_result $?)"
113
114  # Check chameleond version
115  chameleond_version=$(ssh ${SSH_OPTIONS} root@"$chameleon" \
116     cat /etc/default/chameleond | \
117     awk -F'=' '/BUNDLE_VERSION/ {print $2}')\
118
119  # Print the result
120  printf "$1-chameleon  %5s %10s %10s      %s\n" "${ping_result}" \
121      "${devroot_space}" "${chameleond_result}" "${chameleond_version}" \
122    > "${PROBE_RESULT_DIR}/${chameleon}"
123}
124
125function probe_chameleons {
126  # Fork parallel processes to probe the chameleon boards.
127  for host in $HOSTS; do
128    probe_chameleon $host &
129    chameleon_pids="${chameleon_pids} $!"
130  done
131}
132
133function create_ping_result_dir {
134  chameleon_pids=""
135
136  mkdir -p "${PROBE_RESULT_DIR}"
137  rm -fr "${PROBE_RESULT_DIR}"/*
138}
139
140function print_chameleon_status {
141  echo "Chameleon                               ping    /dev/root   chameleond     version"
142  echo "${SEP_LINE}"
143
144  # Wait for all probing children processes to terminate.
145  for pid in ${chameleon_pids}; do
146    wait ${pid}
147  done
148
149  # Sort and print the results.
150  cat "${PROBE_RESULT_DIR}"/*-chameleon.cros | sort
151  echo; echo
152}
153
154create_ping_result_dir
155probe_chameleons
156print_chameleon_status
157