forked from richb-hanover/OpenWrtScripts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
getstats.sh
executable file
·121 lines (96 loc) · 3.02 KB
/
getstats.sh
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
#! /bin/sh
#
# getstats.sh - Collect diagnostic information about OpenWrt
# Write the data to a file (usually /tmp/openwrtstats.txt)
#
# Usage: sh getstats.sh [ "command 1 to be executed" "command 2" "command 3" ... ]
#
# ***** To install and run this script *****
#
# SSH into your router and execute these statements.
#
# ssh [email protected]
# cd /tmp
# cat > getstats.sh
# [paste in the contents of this file, then hit ^D]
# sh getstats.sh
# The results listed are written to the designated file
# (usually /tmp/openwrtstats.txt, unless redirected)
#
# License: GPL Copyright (c) 2013-2018 Rich Brown
#
# Based on Sebastian Moeller's original set of diagnostic info:
# https://lists.bufferbloat.net/pipermail/cerowrt-devel/2014-April/002871.html
# Based on alexmow's script to list user-installed packages
# https://forum.openwrt.org/t/script-to-list-installed-packages-for-simplifying-sysupgrade/7188/16
# File that will receive command results
out_fqn=/tmp/openwrtstats.txt
# ------- display_command() -------
# Format the command results into the output file
# Redirect both standard out and error out to that file.
display_command() {
echo "[ $1 ]" >> $out_fqn
eval "$1" >> $out_fqn 2>> $out_fqn
echo -e "\n" >> $out_fqn
}
# ------- display_user_packages() ---------
# Display a list of all packages installed after the kernel was built
display_user_packages() {
echo "[ User-installed packages ]" >> $out_fqn
install_time=`opkg status kernel | awk '$1 == "Installed-Time:" { print $2 }'`
opkg status | awk '$1 == "Package:" {package = $2} \
$1 == "Status:" { user_inst = / user/ && / installed/ } \
$1 == "Installed-Time:" && $2 != '$install_time' && user_inst { print package }' | \
sort >> $out_fqn 2>> $out_fqn
echo -e "\n" >> $out_fqn
}
# ------- Main Routine -------
# Examine first argument to see if they're asking for help
if [ "$1" == "-h" ] || [ "$1" == "--help" ]
then
echo 'Usage: sh $0 "command 1 to be executed" "command 2" "command 3" ... '
echo ' '
exit
fi
# Write a heading for the file
echo "===== $0 at `date` =====" > $out_fqn
# Display four sets of commands:
# 1. Common diagnostic commands
# 2. Additional user-supplied commands (from the command line)
# 3. User-installed opkg packages
# 4. Longer/less common diagnostic output
# 1. Display the common diagnostic commands
# These are read from the list delimited by "EOF"
while read LINE; do
display_command "$LINE"
done << EOF
cat /etc/banner
date
cat /etc/openwrt_release
uname -a
uptime
top -b | head -n 20
du -sh / ; du -sh /*
EOF
# 2. Extract arguments from the command line and display them.
while [ $# -gt 0 ]
do
display_command "$1"
shift 1
done
# 3. Display user-installed opkg packages
display_user_packages
# 4. Display the long/less frequently-needed commands
while read LINE; do
display_command "$LINE"
done << EOF
ifconfig
logread
dmesg
EOF
# End the report
echo "===== end of $0 =====" >> $out_fqn
#cat $out_fqn
echo "Done... Diagnostic information written to $out_fqn"
echo " "
# Now press Ctl-D, then type "sh getstats.sh"