summaryrefslogtreecommitdiff
path: root/functions/tech-support-brief
blob: 2c627d0bae9998e4c04254db57e86de003d60a12 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# implement "show tech-support brief"
# usage: tech-support [brief] [ save [ <filename> ] ]
# NOTE: this file is sourced, NOT executed

function header {
    echo
    echo ----------------
    echo "$*"
    echo ----------------
}

# by default send to stdout
OUT=1
FLAG=0
REMOTE=0
DEFAULT_PATH=/config/support
DEFAULT_GROUP=users

do_rotate ()
{
  local count=`ls -t $DEFAULT_PATH/*.tech-support.* 2>/dev/null |wc -l`
  if (( count >= 100 )); then
    local dfile=`ls -t $DEFAULT_PATH/*.tech-support.* 2>/dev/null |tail -1`
    rm -f $dfile >&/dev/null \
      && echo "Removed old tech-support brief output file '$dfile'"
  fi
}

HOSTNAME=`hostname`
CURTIME=`date +%F-%H%M%S`
if [ "$1" == "save-uncompressed" ]; then
  FLAG="1"
elif [ "$1" == "save" ]; then
  FLAG="0"
fi

if [ "$1" == "save" ] || [ "$1" == "save-uncompressed" ]; then
  # "save" or save-uncompressed is specified. save output to file.
  OUT="$HOSTNAME.tech-support.$CURTIME.txt"
  if [ -n "$2" ]; then
    if [[ "$2" =~ scp:///* || "$2" =~ ftp:///* ]]; then
      REMOTE="1"
    else
      #file to be save locally
      OUT="$2.$OUT"
    fi
  fi

  if [[ $OUT != /* ]]; then
    # it's not absolute path. save in default path.
    mkdir -p $DEFAULT_PATH >& /dev/null
    chgrp $DEFAULT_GROUP $DEFAULT_PATH >& /dev/null
    chmod 775 $DEFAULT_PATH >& /dev/null
    OUT="$DEFAULT_PATH/$OUT"
    do_rotate
  fi
  if ! touch $OUT >& /dev/null; then
    echo "Cannot create tech-support file '$OUT'"
    exit 1
  fi
  if [ $REMOTE != "1" ]; then
    echo "Saving output to '$OUT'..."
  fi
fi

(
export PATH=/sbin:/usr/sbin:$PATH

header Show Tech-Support Brief
header CONFIGURATION


header VyOS Version and Package Changes
show version all

header Running configuration
show configuration

header INTERFACES

header Interfaces
show interfaces

header ROUTING

function show_route_limit ()
{
  NUM=$(show $1 route $2 | wc -l)
  # subtract 3 lines of header
  [ $NUM -gt 3 ] &&  NUM=$[$NUM - 3]
  OUTPUT=$(echo show $1 route $2 \(total $NUM\))
  CMD="show $1 route $2"
  if [ $3 -eq 0 ]
  then
    header $OUTPUT
    vtysh -c "$CMD"
  else
    header "$OUTPUT- limit $3"
    vtysh -c "$CMD" | head -n $3
  fi
}

#
# show all connected/static, limit the output others and include a total
#
show_route_limit ip connected 0
show_route_limit ip static    0
show_route_limit ip rip  500
show_route_limit ip ospf 500
show_route_limit ip bgp  500
show_route_limit ip ''   500

show_route_limit ipv6 connected 0
show_route_limit ipv6 static    0
show_route_limit ipv6 ripng 500
show_route_limit ipv6 ospf6 500
show_route_limit ipv6 bgp   500
show_route_limit ipv6 ''    500


header Recent 100 Log Messages
show log tail 100

header "END OF TECH-SUPPORT BRIEF FILE"
) 1>&$OUT 2>&1

if [ $OUT != "1" ]; then
  chgrp $DEFAULT_GROUP $OUT >& /dev/null
  chmod 664 $OUT >& /dev/null
  if [ $FLAG == "0" ]; then
    gzip $OUT
    OUT=$OUT.gz
    if [ $REMOTE != "1" ]; then
      echo "File $OUT is the compressed file."
    fi
  fi

  if [ $REMOTE != "1" ]; then
    echo "Done."
  fi
fi

if [ $REMOTE == "1" ]; then
  python3 -c "from vyos.remote import upload; upload(\"$OUT\", \"$2\")"
fi