blob: 39d2c0642ce4925982a53afc6d76869e7fe1e739 [file] [log] [blame]
Thomas Vachuskaaf0cf7a2018-01-30 13:57:38 -08001#!/bin/bash
2
3#
4# Copyright 2015-present Open Networking Foundation
5#
6# Licensed under the Apache License, Version 2.0 (the "License");
7# you may not use this file except in compliance with the License.
8# 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
19# -----------------------------------------------------------------------------
20# Tool to collect cluster-wide diagnostics into a single tar stream.
21# -----------------------------------------------------------------------------
22function usage() {
Thomas Vachuska1c188d32018-04-16 14:02:18 -070023 echo "usage: $(basename $0) [-x] [-n name] [-P port] [-u user] [-p password] [ip1 ip2...]"
Thomas Vachuskaaf0cf7a2018-01-30 13:57:38 -080024 echo ""
25 echo "Environment Variables:"
26 echo " ONOS_INSTANCES IPs or hostnames of ONOS cluster machines"
27 echo " ONOS_WEB_USER username for REST API"
28 echo " ONOS_WEB_PASS password for REST API"
29 echo ""
30 echo "Example Usages:"
31 echo " # Collect compressed diagnostics for the cluster."
32 echo " # REST API user and password are drawn from environment variables."
33 echo " # Collection archive will be named /tmp/onos-diags.tar.gz"
34 echo " # The cluster node IPs will be drawn from ONOS_INSTANCES variable."
35 echo " > $(basename $0) "
36 echo ""
37 echo " # Collect diagnostics for the cluster and leave them extracted. "
38 echo " # Collection directory will be named /tmp/prague-diags/"
39 echo " # Collection archive will be named /tmp/prague-diags.tar.gz."
40 echo " # REST API user name is 'onos' and password is 'rules'."
41 echo " # The cluster node IPs will be drawn from ONOS_INSTANCES variable."
42 echo " > $(basename $0) -x -n prague -u onos -p rules"
43 echo ""
44 echo " # Collect compressed diagnostics for a cluster."
45 echo " # REST API user name is 'onos' and password is 'rules'."
46 echo " # Collection archive will be named /tmp/onos-diags.tar.gz"
47 echo " # The cluster node IPs are listed explicitly."
48 echo " > $(basename $0) -u onos -p rules 172.17.0.11 172.17.0.12 172.17.0.13"
49
50 exit 1
51}
52
Thomas Vachuska1c188d32018-04-16 14:02:18 -070053ONOS_WEB_USER=${ONOS_WEB_USER:-onos} # ONOS WEB User defaults to 'onos'
54ONOS_WEB_PASS=${ONOS_WEB_PASS:-rocks} # ONOS WEB Password defaults to 'rocks'
55ONOS_WEB_PORT=${ONOS_WEB_PORT:-8181} # REST API port defaults to '8181'
56
57. $(dirname $0)/_find-node
58
Charles Chan415bb232018-03-08 14:59:42 -080059# TODO We should make SR commands optional
Thomas Vachuskaaf0cf7a2018-01-30 13:57:38 -080060CLI_COMMANDS=(
Thomas Vachuskae99e7a32018-02-01 15:52:10 -080061 "feature:repo-list"
Thomas Vachuskaaf0cf7a2018-01-30 13:57:38 -080062 "feature:list"
63 "bundle:list"
64 "scr:list"
65
66 "summary"
67 "nodes"
68 "apps -s"
69 "netcfg"
70 "cfg get"
71
72 "devices"
73 "links"
74 "hosts"
Pier2d87c9f2018-04-05 20:45:40 +020075 "interfaces"
Thomas Vachuskaaf0cf7a2018-01-30 13:57:38 -080076
77 "ports -e"
78 "portstats -nz"
79
Thomas Vachuskabee8a912018-02-28 10:02:16 -080080 "packet-processors"
81 "packet-requests"
82
Thomas Vachuskaaf0cf7a2018-01-30 13:57:38 -080083 "intents"
84 "flows -s"
85 "groups"
86
87 "roles"
88 "masters"
89
Pier1ed9a512018-05-02 13:31:12 +020090 "maps"
91
Charles Chan415bb232018-03-08 14:59:42 -080092 "fpm-connections"
Thomas Vachuskaaf0cf7a2018-01-30 13:57:38 -080093 "routes"
94 "obj-next-ids"
95 "obj-pending-nexts"
Charles Chan92b3e802018-04-24 10:23:21 -070096 "obj-queues"
Thomas Vachuskaaf0cf7a2018-01-30 13:57:38 -080097
Charles Chan415bb232018-03-08 14:59:42 -080098 "sr-device-subnets"
99 "sr-ecmp-spg"
Charles Chanbd39a4a2018-04-17 18:56:53 -0700100 "sr-should-program"
Charles Chan415bb232018-03-08 14:59:42 -0800101 "sr-link-state"
Charles Chan415bb232018-03-08 14:59:42 -0800102 "sr-mcast-tree"
Pier160880a2018-04-18 08:50:29 +0200103 "sr-mcast-leader"
Pier1ed9a512018-05-02 13:31:12 +0200104 "sr-mcast-role"
Andreas Pantelopoulosa1812332018-03-12 16:30:20 -0700105 "sr-pw-list"
Charles Chanb53399f2018-10-26 15:54:32 -0700106 "sr-next-mcast"
107 "sr-next-dst"
108 "sr-next-port"
109 "sr-next-vlan"
110 "sr-next-pw"
111 "sr-next-xconnect"
Charles Chan415bb232018-03-08 14:59:42 -0800112 "dhcp-relay"
Pier2d87c9f2018-04-05 20:45:40 +0200113
114 "mcast-host-routes"
115 "mcast-host-show"
Thomas Vachuskaaf0cf7a2018-01-30 13:57:38 -0800116)
117
Thomas Vachuska1c188d32018-04-16 14:02:18 -0700118port=${ONOS_WEB_PORT}
119user=${ONOS_WEB_USER}
120password=${ONOS_WEB_PASS}
121
Thomas Vachuskaaf0cf7a2018-01-30 13:57:38 -0800122# Scan arguments for user/password or other options...
Thomas Vachuska1c188d32018-04-16 14:02:18 -0700123while getopts n:P:u:p:x?h o; do
Thomas Vachuskaaf0cf7a2018-01-30 13:57:38 -0800124 case "$o" in
125 n) name=$OPTARG;;
Thomas Vachuska1c188d32018-04-16 14:02:18 -0700126 P) port=$OPTARG;;
Thomas Vachuskaaf0cf7a2018-01-30 13:57:38 -0800127 u) user=$OPTARG;;
128 p) password=$OPTARG;;
129 x) extract=true;;
130 *) usage;;
131 esac
132done
Thomas Vachuskabee8a912018-02-28 10:02:16 -0800133
Thomas Vachuskaaf0cf7a2018-01-30 13:57:38 -0800134let OPC=$OPTIND-1
135shift $OPC
136
137[ $# -lt 1 -a -z "$ONOS_INSTANCES" ] && usage;
138
139diags=/tmp/${name:-onos}-diags
140rm -fr $diags $diags.tar.gz; mkdir -p $diags
141
142[ -z $1 ] && nodes=$ONOS_INSTANCES || nodes=$*
143
144# Collect diagnostics from each cluster node
145for node in $nodes; do
146 printf "Collecting diagnostics on $node..."
147
148 # Prepare a clean place for collecting the node diagnostic data
149 cd $diags; rm -fr $node; mkdir -p $node; cd $node;
150
151 # Acquire locally obtained diagnostics via REST API and extract them
152 printf "logs "
153 curl -sS --fail --user $user:$password \
Thomas Vachuska1c188d32018-04-16 14:02:18 -0700154 http://$node:$port/onos/v1/diagnostics > ../$node.tar.gz
Thomas Vachuskabee8a912018-02-28 10:02:16 -0800155 tar zxf ../$node.tar.gz && rm ../$node.tar.gz
Thomas Vachuskaaf0cf7a2018-01-30 13:57:38 -0800156
157 # Acquire remotely obtained diagnostics via ssh CLI
158 for cmd in "${CLI_COMMANDS[@]}"; do
159 cmdLog="$(echo $cmd | cut -d\ -f1 | sed 's/:/-/g').txt"
160 printf "$cmdLog "
161 onos $node $cmd 2>/dev/null >$cmdLog
162 done
163
Thomas Vachuskaaf0cf7a2018-01-30 13:57:38 -0800164 printf " Done.\n"
Thomas Vachuskaaf0cf7a2018-01-30 13:57:38 -0800165done
166
167# Tar-up diagnostics from all the nodes
168cd $diags
169tar zcf $diags.tar.gz *
170[ -z $extract ] && rm -fr $diags