@@ -37,6 +37,8 @@ HOME=${HOME:-/root}
37
37
USER=${USER:- root}
38
38
TIMEOUT_MIN=" 5"
39
39
SKIP_BCMCMD=0
40
+ SAVE_STDERR=true
41
+ RETURN_CODE=0
40
42
41
43
handle_signal ()
42
44
{
@@ -46,7 +48,15 @@ handle_signal()
46
48
}
47
49
trap ' handle_signal' SIGINT
48
50
51
+ handle_error () {
52
+ if [ " $1 " != " 0" ]; then
53
+ echo " ERR: RC:-$1 observed on line $2 " >&2
54
+ RETURN_CODE=1
55
+ fi
56
+ }
57
+
49
58
save_bcmcmd () {
59
+ trap ' handle_error $? $LINENO' ERR
50
60
local start_t=$( date +%s%3N)
51
61
local end_t=0
52
62
local cmd=" $1 "
@@ -106,6 +116,7 @@ save_bcmcmd() {
106
116
# None
107
117
# ##############################################################################
108
118
save_bcmcmd_all_ns () {
119
+ trap ' handle_error $? $LINENO' ERR
109
120
local do_gzip=${3:- false}
110
121
111
122
if [[ ( " $NUM_ASICS " > 1 ) ]]; then
@@ -142,6 +153,7 @@ save_bcmcmd_all_ns() {
142
153
# None
143
154
# ##############################################################################
144
155
save_cmd () {
156
+ trap ' handle_error $? $LINENO' ERR
145
157
local start_t=$( date +%s%3N)
146
158
local end_t=0
147
159
local cmd=" $1 "
@@ -150,6 +162,15 @@ save_cmd() {
150
162
local do_gzip=${3:- false}
151
163
local tarpath=" ${BASE} /dump/$filename "
152
164
local timeout_cmd=" timeout --foreground ${TIMEOUT_MIN} m"
165
+ local redirect=' &>'
166
+ local redirect_eval=' 2>&1'
167
+
168
+ if ! $SAVE_STDERR
169
+ then
170
+ redirect=" >"
171
+ redirect_eval=" "
172
+ fi
173
+
153
174
[ ! -d $LOGDIR ] && $MKDIR $V -p $LOGDIR
154
175
155
176
# eval required here to re-evaluate the $cmd properly at runtime
@@ -159,7 +180,7 @@ save_cmd() {
159
180
if $do_gzip ; then
160
181
tarpath=" ${tarpath} .gz"
161
182
filepath=" ${filepath} .gz"
162
- local cmds=" $cmd 2>&1 | gzip -c > '${filepath} '"
183
+ local cmds=" $cmd $redirect_eval | gzip -c > '${filepath} '"
163
184
if $NOOP ; then
164
185
echo " ${timeout_cmd} bash -c \" ${cmds} \" "
165
186
else
@@ -170,9 +191,9 @@ save_cmd() {
170
191
fi
171
192
else
172
193
if $NOOP ; then
173
- echo " ${timeout_cmd} $cmd &> '$filepath '"
194
+ echo " ${timeout_cmd} $cmd $redirect '$filepath '"
174
195
else
175
- eval " ${timeout_cmd} $cmd " & > " $filepath "
196
+ eval " ${timeout_cmd} $cmd " " $redirect " " $filepath "
176
197
if [ $? -ne 0 ]; then
177
198
echo " Command: $cmd timedout after ${TIMEOUT_MIN} minutes."
178
199
fi
@@ -198,6 +219,7 @@ save_cmd() {
198
219
# None
199
220
# ##############################################################################
200
221
save_cmd_all_ns () {
222
+ trap ' handle_error $? $LINENO' ERR
201
223
local do_zip=${3:- false}
202
224
203
225
# host or default namespace
@@ -226,14 +248,15 @@ save_cmd_all_ns() {
226
248
# None
227
249
# ##############################################################################
228
250
copy_from_docker () {
251
+ trap ' handle_error $? $LINENO' ERR
229
252
local start_t=$( date +%s%3N)
230
253
local end_t=0
231
254
local docker=$1
232
255
local filename=$2
233
256
local dstpath=$3
234
257
local timeout_cmd=" timeout --foreground ${TIMEOUT_MIN} m"
235
258
236
- local touch_cmd=" sudo docker exec -i ${docker} touch ${filename} "
259
+ local touch_cmd=" sudo docker exec ${docker} touch ${filename} "
237
260
local cp_cmd=" sudo docker cp ${docker} :${filename} ${dstpath} "
238
261
239
262
if $NOOP ; then
@@ -267,6 +290,7 @@ copy_from_docker() {
267
290
# None
268
291
# ##############################################################################
269
292
copy_from_masic_docker () {
293
+ trap ' handle_error $? $LINENO' ERR
270
294
local docker=$1
271
295
local filename=$2
272
296
local dstpath=$3
@@ -292,6 +316,7 @@ copy_from_masic_docker() {
292
316
# vtysh namespace option
293
317
# ##############################################################################
294
318
get_vtysh_namespace () {
319
+ trap ' handle_error $? $LINENO' ERR
295
320
local asic_id=${1:- " " }
296
321
local ns=" "
297
322
if [[ ( $asic_id = " " ) ]] ; then
@@ -316,6 +341,7 @@ get_vtysh_namespace() {
316
341
# None
317
342
# ##############################################################################
318
343
save_vtysh () {
344
+ trap ' handle_error $? $LINENO' ERR
319
345
local vtysh_cmd=$1
320
346
local filename=$2
321
347
local do_gzip=${3:- false}
@@ -345,6 +371,7 @@ save_vtysh() {
345
371
# None
346
372
# ##############################################################################
347
373
save_ip () {
374
+ trap ' handle_error $? $LINENO' ERR
348
375
local ip_args=$1
349
376
local filename=" ip.$2 "
350
377
local do_gzip=${3:- false}
@@ -363,6 +390,7 @@ save_ip() {
363
390
# None
364
391
# ##############################################################################
365
392
save_bridge () {
393
+ trap ' handle_error $? $LINENO' ERR
366
394
local br_args=$1
367
395
local filename=" bridge.$2 "
368
396
local do_gzip=${3:- false}
@@ -379,6 +407,7 @@ save_bridge() {
379
407
# None
380
408
# ##############################################################################
381
409
save_bridge_info () {
410
+ trap ' handle_error $? $LINENO' ERR
382
411
save_bridge " fdb show" " fdb"
383
412
save_bridge " vlan show" " vlan"
384
413
}
@@ -395,6 +424,7 @@ save_bridge_info() {
395
424
# None
396
425
# ##############################################################################
397
426
save_bgp_neighbor () {
427
+ trap ' handle_error $? $LINENO' ERR
398
428
local timeout_cmd=" timeout --foreground ${TIMEOUT_MIN} m"
399
429
local asic_id=${1:- " " }
400
430
local ns=$( get_vtysh_namespace $asic_id )
@@ -431,6 +461,7 @@ save_bgp_neighbor() {
431
461
# None
432
462
# ##############################################################################
433
463
save_bgp_neighbor_all_ns () {
464
+ trap ' handle_error $? $LINENO' ERR
434
465
if [[ ( " $NUM_ASICS " == 1 ) ]] ; then
435
466
save_bgp_neighbor
436
467
else
@@ -451,6 +482,7 @@ save_bgp_neighbor_all_ns() {
451
482
# None
452
483
# ##############################################################################
453
484
save_nat_info () {
485
+ trap ' handle_error $? $LINENO' ERR
454
486
save_cmd_all_ns " iptables -t nat -nv -L" " nat.iptables"
455
487
save_cmd_all_ns " conntrack -j -L" " nat.conntrack"
456
488
save_cmd_all_ns " conntrack -j -L | wc" " nat.conntrackcount"
@@ -469,6 +501,7 @@ save_nat_info() {
469
501
# None
470
502
# ##############################################################################
471
503
save_bfd_info () {
504
+ trap ' handle_error $? $LINENO' ERR
472
505
save_vtysh " show bfd peers" " frr.bfd.peers"
473
506
save_vtysh " show bfd peers counters" " frr.bfd.peers.counters"
474
507
save_vtysh " show bfd peers json" " frr.bfd.peers.json"
@@ -485,6 +518,7 @@ save_bfd_info() {
485
518
# None
486
519
# ##############################################################################
487
520
save_ip_info () {
521
+ trap ' handle_error $? $LINENO' ERR
488
522
save_ip " link" " link"
489
523
save_ip " addr" " addr"
490
524
save_ip " rule" " rule"
@@ -503,6 +537,7 @@ save_ip_info() {
503
537
# None
504
538
# ##############################################################################
505
539
save_bgp_info () {
540
+ trap ' handle_error $? $LINENO' ERR
506
541
save_vtysh " show ip bgp summary" " bgp.summary"
507
542
save_vtysh " show ip bgp neighbors" " bgp.neighbors"
508
543
save_vtysh " show ip bgp" " bgp.table"
@@ -522,6 +557,7 @@ save_bgp_info() {
522
557
# None
523
558
# ##############################################################################
524
559
save_frr_info () {
560
+ trap ' handle_error $? $LINENO' ERR
525
561
save_vtysh " show running-config" " frr.running_config"
526
562
save_vtysh " show ip route vrf all" " frr.ip_route"
527
563
save_vtysh " show ipv6 route vrf all" " frr.ip6_route"
@@ -541,6 +577,7 @@ save_frr_info() {
541
577
# None
542
578
# ##############################################################################
543
579
save_redis_info () {
580
+ trap ' handle_error $? $LINENO' ERR
544
581
save_redis " APPL_DB"
545
582
save_redis " ASIC_DB"
546
583
save_redis " COUNTERS_DB"
@@ -568,6 +605,7 @@ save_redis_info() {
568
605
# None
569
606
# ##############################################################################
570
607
save_proc () {
608
+ trap ' handle_error $? $LINENO' ERR
571
609
local procfiles=" $@ "
572
610
$MKDIR $V -p $TARDIR /proc
573
611
for f in $procfiles
@@ -593,6 +631,7 @@ save_proc() {
593
631
# None
594
632
# ##############################################################################
595
633
save_redis () {
634
+ trap ' handle_error $? $LINENO' ERR
596
635
local db_name=$1
597
636
if [ $# -ge 2 ] && [ -n " $2 " ]; then
598
637
local dest_file_name=$2
@@ -612,6 +651,7 @@ save_redis() {
612
651
# None
613
652
# ##############################################################################
614
653
save_saidump () {
654
+ trap ' handle_error $? $LINENO' ERR
615
655
if [[ ( " $NUM_ASICS " == 1 ) ]] ; then
616
656
save_cmd " docker exec -it syncd saidump" " saidump"
617
657
else
@@ -632,6 +672,7 @@ save_saidump() {
632
672
# None
633
673
# ##############################################################################
634
674
save_platform_info () {
675
+ trap ' handle_error $? $LINENO' ERR
635
676
save_cmd " show platform syseeprom" " syseeprom"
636
677
save_cmd " show platform psustatus" " psustatus"
637
678
save_cmd " show platform ssdhealth" " ssdhealth"
@@ -659,6 +700,7 @@ save_platform_info() {
659
700
# None
660
701
# ##############################################################################
661
702
save_file () {
703
+ trap ' handle_error $? $LINENO' ERR
662
704
local start_t=$( date +%s%3N)
663
705
local end_t=0
664
706
local orig_path=$1
@@ -705,6 +747,7 @@ save_file() {
705
747
# None
706
748
# ##############################################################################
707
749
find_files () {
750
+ trap ' handle_error $? $LINENO' ERR
708
751
local -r directory=$1
709
752
$TOUCH --date=" ${SINCE_DATE} " " ${REFERENCE_FILE} "
710
753
local -r find_command=" find -L $directory -type f -newer ${REFERENCE_FILE} "
@@ -749,6 +792,7 @@ enable_logrotate() {
749
792
# None
750
793
# ##############################################################################
751
794
collect_mellanox () {
795
+ trap ' handle_error $? $LINENO' ERR
752
796
local sai_dump_filename=" /tmp/sai_sdk_dump_$( date +" %m_%d_%Y_%I_%M_%p" ) "
753
797
${CMD_PREFIX} docker exec -it syncd saisdkdump -f $sai_dump_filename
754
798
${CMD_PREFIX} docker exec syncd tar Ccf $( dirname $sai_dump_filename ) - $( basename $sai_dump_filename ) | tar Cxf /tmp/ -
@@ -763,9 +807,9 @@ collect_mellanox() {
763
807
764
808
# Save SDK error dumps
765
809
local sdk_dump_path=` ${CMD_PREFIX} docker exec syncd cat /tmp/sai.profile| grep " SAI_DUMP_STORE_PATH" | cut -d = -f2`
766
- if [[ $sdk_dump_path ]]; then
810
+ if [[ -d $sdk_dump_path ]]; then
767
811
copy_from_docker syncd $sdk_dump_path /tmp/sdk-dumps
768
- for file in $( find /tmp/sdk-dumps) ; do
812
+ for file in $( find /tmp/sdk-dumps -type f ) ; do
769
813
save_file ${file} sai_sdk_dump false
770
814
done
771
815
rm -rf /tmp/sdk-dumps
@@ -782,6 +826,7 @@ collect_mellanox() {
782
826
# None
783
827
# ##############################################################################
784
828
collect_broadcom () {
829
+ trap ' handle_error $? $LINENO' ERR
785
830
local platform=$( show platform summary --json | python -c ' import sys, json; \
786
831
print(json.load(sys.stdin)["platform"])' )
787
832
local hwsku=$( show platform summary --json | python -c ' import sys, json; \
@@ -868,6 +913,7 @@ collect_broadcom() {
868
913
# None
869
914
# ##############################################################################
870
915
save_log_files () {
916
+ trap ' handle_error $? $LINENO' ERR
871
917
disable_logrotate
872
918
trap enable_logrotate HUP INT QUIT TERM KILL ABRT ALRM
873
919
@@ -907,6 +953,7 @@ save_log_files() {
907
953
# None
908
954
# ##############################################################################
909
955
save_warmboot_files () {
956
+ trap ' handle_error $? $LINENO' ERR
910
957
# Copy the warmboot files
911
958
start_t=$( date +%s%3N)
912
959
if $NOOP ; then
@@ -935,6 +982,7 @@ save_warmboot_files() {
935
982
# ##############################################################################
936
983
save_crash_files () {
937
984
# archive core dump files
985
+ trap ' handle_error $? $LINENO' ERR
938
986
for file in $( find_files " /var/core/" ) ; do
939
987
# don't gzip already-gzipped log files :)
940
988
if [ -z " ${file##* .gz} " ]; then
@@ -967,9 +1015,15 @@ save_crash_files() {
967
1015
# ASIC Count
968
1016
# ##############################################################################
969
1017
get_asic_count () {
1018
+ trap ' handle_error $? $LINENO' ERR
1019
+ local redirect_eval=" 2>&1"
1020
+ if ! $SAVE_STDERR
1021
+ then
1022
+ redirect_eval=" "
1023
+ fi
970
1024
local cmd=" show platform summary --json | python -c 'import sys, json; \
971
1025
print(json.load(sys.stdin)[\" asic_count\" ])'"
972
- echo ` eval ${cmd} 2>&1 `
1026
+ echo ` eval ${cmd} ${redirect_eval} `
973
1027
}
974
1028
975
1029
# ##############################################################################
@@ -983,6 +1037,7 @@ get_asic_count() {
983
1037
# None
984
1038
# ##############################################################################
985
1039
save_counter_snapshot () {
1040
+ trap ' handle_error $? $LINENO' ERR
986
1041
local asic_name=" $1 "
987
1042
local idx=$2
988
1043
counter_t=$( date +' %d/%m/%Y %H:%M:%S:%6N' )
@@ -1016,6 +1071,7 @@ save_counter_snapshot() {
1016
1071
# None
1017
1072
# ##############################################################################
1018
1073
main () {
1074
+ trap ' handle_error $? $LINENO' ERR
1019
1075
local start_t=0
1020
1076
local end_t=0
1021
1077
if [ ` whoami` != root ] && ! $NOOP ;
@@ -1094,12 +1150,12 @@ main() {
1094
1150
if [[ ( " $NUM_ASICS " > 1 ) ]]; then
1095
1151
for (( i= 0 ; i< $NUM_ASICS ; i++ ))
1096
1152
do
1097
- save_cmd " docker exec -it lldp$i lldpcli show statistics" " lldp$i .statistics"
1153
+ save_cmd " docker exec lldp$i lldpcli show statistics" " lldp$i .statistics"
1098
1154
save_cmd " docker logs bgp$i " " docker.bgp$i .log"
1099
1155
save_cmd " docker logs swss$i " " docker.swss$i .log"
1100
1156
done
1101
1157
else
1102
- save_cmd " docker exec -it lldp lldpcli show statistics" " lldp.statistics"
1158
+ save_cmd " docker exec lldp lldpcli show statistics" " lldp.statistics"
1103
1159
save_cmd " docker logs bgp" " docker.bgp.log"
1104
1160
save_cmd " docker logs swss" " docker.swss.log"
1105
1161
fi
@@ -1192,6 +1248,7 @@ main() {
1192
1248
fi
1193
1249
1194
1250
echo ${TARFILE}
1251
+ exit $RETURN_CODE
1195
1252
}
1196
1253
1197
1254
# ##############################################################################
@@ -1247,11 +1304,13 @@ OPTIONS
1247
1304
"24 March", "yesterday", etc.
1248
1305
-t TIMEOUT_MINS
1249
1306
Command level timeout in minutes
1307
+ -r
1308
+ Redirect any intermediate errors to STDERR
1250
1309
1251
1310
EOF
1252
1311
}
1253
1312
1254
- while getopts " :xnvhzas:t:" opt; do
1313
+ while getopts " :xnvhzas:t:r " opt; do
1255
1314
case $opt in
1256
1315
x)
1257
1316
# enable bash debugging
@@ -1293,6 +1352,9 @@ while getopts ":xnvhzas:t:" opt; do
1293
1352
t)
1294
1353
TIMEOUT_MIN=" ${OPTARG} "
1295
1354
;;
1355
+ r)
1356
+ SAVE_STDERR=false
1357
+ ;;
1296
1358
/? )
1297
1359
echo " Invalid option: -$OPTARG " >&2
1298
1360
exit 1
0 commit comments