-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMASTER_REPORT.sh
162 lines (140 loc) · 4.8 KB
/
MASTER_REPORT.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
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#!/bin/bash
# Get OS and Kernel information
OS=$(lsb_release -d | awk -F"\t" '{print $2}')
KERNEL=$(uname -r)
# Get hostname and network information
HOSTNAME=$(hostname)
MACHINE_IP=$(hostname -I | awk '{print $1}')
CLIENT_IP=$(hostname -I | awk '{print $1}') # Adjust according to your needs
DNS_IP=$(grep 'nameserver' /etc/resolv.conf | awk '{print $2}' | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | head -n 1)
USER=$(whoami)
# Get CPU information
CPU=$(lscpu | grep "Model name" | awk -F: '{print $2}' | xargs)
CORES=$(nproc)
NUM_CORES=$(echo $CORES | awk '{print $1}')
CPU_FREQ=$(vcgencmd measure_clock arm | awk -F "=" '{print $2/1000000}')
# Get CPU Load
LOAD1=$(uptime | awk -F'load average:' '{print $2}' | cut -d, -f1 | xargs)
LOAD5=$(uptime | awk -F'load average:' '{print $2}' | cut -d, -f2 | xargs)
LOAD15=$(uptime | awk -F'load average:' '{print $2}' | cut -d, -f3 | xargs)
# Function to round to the nearest 0.20
round_to_nearest_five() {
number=$1
remainder=$((number % 5))
if [ $remainder -ge 3 ]; then
rounded=$((number + (5 - remainder)))
else
rounded=$((number - remainder))
fi
# Divide by 100 to get back to the original scale
echo $(echo "scale=2; $rounded / 5" | bc)
}
# Convert to a percentage
percentage() {
dividend=$1
divisor=$2
new_val=$(echo "scale=2; $dividend / $divisor" | bc)
result=$(echo "scale=0; $new_val * 100 / 1" | bc)
echo $result
}
# Calc LOAD percentage
PERCENTAGE_LOAD1=$(percentage $LOAD1 $NUM_CORES)
PERCENTAGE_LOAD5=$(percentage $LOAD5 $NUM_CORES)
PERCENTAGE_LOAD15=$(percentage $LOAD15 $NUM_CORES)
# Rounded CPU LOAD
ROUNDED_LOAD1=$(round_to_nearest_five $PERCENTAGE_LOAD1)
ROUNDED_LOAD5=$(round_to_nearest_five $PERCENTAGE_LOAD5)
ROUNDED_LOAD15=$(round_to_nearest_five $PERCENTAGE_LOAD15)
# Available CPU LOAD
DIFF_LOAD1=$(echo "20 - $ROUNDED_LOAD1" | bc)
DIFF_LOAD5=$(echo "20 - $ROUNDED_LOAD5" | bc)
DIFF_LOAD15=$(echo "20 - $ROUNDED_LOAD15" | bc)
# Get Memory information
MEM_TOTAL=$(free -h | grep Mem | awk '{print $2}')
MEM_USED=$(free -h | grep Mem | awk '{print $3}')
MEM_USAGE=$(echo "$(free | awk '/Mem:/ {print $3}') / $(free | awk '/Mem:/ {print $2}') * 100" | bc -l | awk '{print int($1+0.5)}')
ROUNDED_MEM=$(round_to_nearest_five $MEM_USAGE)
DIFF_MEM=$(echo "20 - $ROUNDED_MEM" | bc)
# Get Disk usage
DISK_TOTAL=$(df -h / | grep / | awk '{print $2}')
DISK_USED=$(df -h / | grep / | awk '{print $3}')
DISK_USAGE=$(df -h / | grep / | awk '{print $5}' | tr -d '%')
ROUNDED_DISK=$(round_to_nearest_five $DISK_USAGE)
DIFF_DISK=$(echo "20 - $ROUNDED_DISK" | bc)
# Get last login and uptime
LAST_LOGIN=$(last -n 1 -a | head -n 1 | awk '{print $4, $5, $6}')
UPTIME=$(uptime -p)
FORMATTED_UPTIME=$(echo $UPTIME | sed 's/up //; s/ days*/d,/; s/ hours*/h,/; s/ minutes*/m/; s/, *$//')
UTF_SOLID_SQUARE="\u2588"
UTF_OPAQUE_SQUARE="\u2592"
# Display the report
echo "-----------------------------------------------"
echo "-----------------------------------------------"
echo " ARASKA CORP."
echo " MACHINE REPORT"
echo "-----------------------------------------------"
echo "OS | $OS"
echo "KERNEL | Linux $KERNEL"
echo ""
echo "HOSTNAME | $HOSTNAME"
echo "MACHINE IP | $MACHINE_IP"
echo "CLIENT IP | $CLIENT_IP"
echo "DNS IP | $DNS_IP"
echo "USER | $USER"
echo "-----------------------------------------------"
echo "PROCESSOR | $CPU"
echo "CORES | $CORES vCPU(s)"
echo "CPU FREQ | $CPU_FREQ MHz"
echo -ne "LOAD 1m | "
for i in $(seq 1 $ROUNDED_LOAD1); do
printf "$UTF_SOLID_SQUARE"
done
for i in $(seq 1 $DIFF_LOAD1); do
printf "$UTF_OPAQUE_SQUARE"
done
printf " $PERCENTAGE_LOAD1%%"
echo
echo -ne "LOAD 5m | "
for i in $(seq 1 $ROUNDED_LOAD5); do
printf "$UTF_SOLID_SQUARE"
done
for i in $(seq 1 $DIFF_LOAD5); do
printf "$UTF_OPAQUE_SQUARE"
done
printf " $PERCENTAGE_LOAD5%%"
echo
echo -ne "LOAD 15m | "
for i in $(seq 1 $ROUNDED_LOAD15); do
printf "$UTF_SOLID_SQUARE"
done
for i in $(seq 1 $DIFF_LOAD15); do
printf "$UTF_OPAQUE_SQUARE"
done
printf " $PERCENTAGE_LOAD15%%"
echo
echo "-----------------------------------------------"
echo "MEMORY | $MEM_USED/$MEM_TOTAL"
echo -ne "USAGE | "
for i in $(seq 1 $ROUNDED_MEM); do
printf "$UTF_SOLID_SQUARE"
done
for i in $(seq 1 $DIFF_MEM); do
printf "$UTF_OPAQUE_SQUARE"
done
printf " $MEM_USAGE%%"
echo
echo "-----------------------------------------------"
echo "VOLUME | $DISK_USED/$DISK_TOTAL"
echo -ne " | "
for i in $(seq 1 $ROUNDED_DISK); do
printf "$UTF_SOLID_SQUARE"
done
for i in $(seq 1 $DIFF_DISK); do
printf "$UTF_OPAQUE_SQUARE"
done
printf " $DISK_USAGE%%"
echo
echo "-----------------------------------------------"
echo "LAST LOGIN | $LAST_LOGIN"
echo "UPTIME | $FORMATTED_UPTIME"
echo "-----------------------------------------------"