Makefile: add pickrand
[cmccabe-bin] / networkcanary.sh
1 #!/usr/bin/env bash
2
3 # Licensed to the Apache Software Foundation (ASF) under one or more
4 # contributor license agreements.  See the NOTICE file distributed with
5 # this work for additional information regarding copyright ownership.
6 # The ASF licenses this file to You under the Apache License, Version 2.0
7 # (the "License"); you may not use this file except in compliance with
8 # the License.  You may obtain a copy of the License at
9 #
10 #    http://www.apache.org/licenses/LICENSE-2.0
11 #
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
17
18 if [[ $# -lt 1 || $1 == "-h" || $1 == "--help" ]]; then
19     cat <<EOF
20 $0: checks if the given set of hosts is reachable on port 22.
21
22 usage:
23     $0 [flags] [host1,host2,...]
24
25 flags:
26     -h|--help       This help message
27
28 environment variables:
29     CHECK_INTERVAL  The minimum interval in seconds to check each host at.
30 EOF
31     exit 0
32 fi
33
34 CHECK_INTERVAL=${CHECK_INTERVAL:-5}
35 hosts="$@"
36
37 ping_host() {
38     host="$1"
39     while true; do
40         now=$(date +'%s')
41         end=$(( now + CHECK_INTERVAL))
42         timeout 1 bash -c "cat < /dev/null > /dev/tcp/$host/22" &> /dev/null
43         [[ $? -eq 0 ]] || echo "Failed to connect to port 22 on $host"
44         now=$(date +'%s')
45         rem=$((end-now))
46         [[ $rem -gt 0 ]] && sleep -- $rem
47     done
48 }
49
50 trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT
51 for host in $hosts; do
52     ping_host $host &
53 done
54
55 wait