|
|
@@ -1,48 +1,69 @@
|
|
|
#!/bin/bash
|
|
|
#########################################################################
|
|
|
# Script for check HDD & RAID state #
|
|
|
-# Created by PM-DoIT #
|
|
|
-# ver 0.2 #
|
|
|
+# Created by Pavol Macko - DoIT #
|
|
|
+# ver 0.4 #
|
|
|
#########################################################################
|
|
|
|
|
|
#---------------------------- VARIABLES --------------------------------#
|
|
|
REP=/tmp/hdd.rep
|
|
|
WEB=/var/www/hdd
|
|
|
-test -d $WEB || mkdir $WEB
|
|
|
+TMP=/tmp/hdd.tmp
|
|
|
+LOG=/tmp/hdd.log
|
|
|
+test -d $WEB || mkdir -p $WEB
|
|
|
test -f $TMP && rm -rf $TMP
|
|
|
test -f $LOG && rm -rf $LOG
|
|
|
|
|
|
#----------------------------- WEB-START -------------------------------#
|
|
|
webstart(){
|
|
|
cat > $WEB/hdd.html <<\EOF
|
|
|
-<HTML>
|
|
|
-<HEAD>
|
|
|
-<TITLE>HDD-[SITE]</TITLE>
|
|
|
+<!DOCTYPE html>
|
|
|
+<html lang="en">
|
|
|
+<head>
|
|
|
+<meta charset="UTF-8">
|
|
|
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
+<title>SITE HDD</title>
|
|
|
<link rel="icon" href="logo.ico">
|
|
|
-</HEAD>
|
|
|
-<BODY border=0 bgcolor="white" text="Black">
|
|
|
-<p align="center"><font size="3" face="Verdana" color="#0000FF"><b>HDD [NUM] located on PVE server [DATE]</b></font></p>
|
|
|
-<DIV ALIGN=CENTER>
|
|
|
-<TABLE WIDTH="100%" BORDER=0>
|
|
|
-<TR BGCOLOR="#D9D9D9" VALIGN=center>
|
|
|
-<TD WIDTH="25%"<DIV ALIGN=center><b>HDD-MODEL</b></DIV></TD>
|
|
|
-<TD WIDTH="25%"<DIV ALIGN=center><b>SERIAL</b></DIV></TD>
|
|
|
-<TD WIDTH="15%"<DIV ALIGN=center><b>SIZE</b></DIV></TD>
|
|
|
-<TD WIDTH="15%"<DIV ALIGN=center><b>PATH</b></DIV></TD>
|
|
|
-<TD WIDTH="10%"<DIV ALIGN=center><b>TEMP</b></DIV></TD>
|
|
|
-<TD WIDTH="10%"<DIV ALIGN=center><b>FAIL</b></DIV></TD>
|
|
|
-</TR>
|
|
|
+<style>
|
|
|
+ body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #0f172a; color: #f8fafc; margin: 0; padding: 40px 20px; }
|
|
|
+ .container { max-width: 1000px; margin: 0 auto; background: #1e293b; border-radius: 10px; box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.5); padding: 30px; border: 1px solid #334155; }
|
|
|
+ h2 { text-align: center; color: #f1f5f9; margin-top: 0; margin-bottom: 6px; font-weight: 600; letter-spacing: -0.025em; }
|
|
|
+ .subtitle { text-align: center; color: #94a3b8; font-size: 0.9em; margin-bottom: 30px; }
|
|
|
+ table { width: 100%; border-collapse: collapse; }
|
|
|
+ th, td { padding: 14px 16px; text-align: center; border-bottom: 1px solid #334155; }
|
|
|
+ th { background-color: #0f172a; color: #cbd5e1; font-size: 0.8em; text-transform: uppercase; letter-spacing: 0.08em; font-weight: 700; }
|
|
|
+ tr:hover { background-color: #334155; transition: background-color 0.15s ease; }
|
|
|
+ .status-ok { background-color: rgba(16, 185, 129, 0.15); color: #34d399; border: 1px solid rgba(52, 211, 153, 0.3); padding: 4px 12px; border-radius: 20px; font-size: 0.85em; font-weight: 600; display: inline-block; }
|
|
|
+ .status-fail { background-color: rgba(239, 68, 68, 0.15); color: #fca5a5; border: 1px solid rgba(252, 165, 165, 0.3); padding: 4px 12px; border-radius: 20px; font-size: 0.85em; font-weight: 600; display: inline-block; }
|
|
|
+</style>
|
|
|
+</head>
|
|
|
+<body>
|
|
|
+<div class="container">
|
|
|
+ <h2>Disk overview on server [SITE]</h2>
|
|
|
+ <div class="subtitle">Number of disks: <b style="color: #f8fafc;">[NUM]</b> | Last update: DATE</div>
|
|
|
+ <table>
|
|
|
+ <thead>
|
|
|
+ <tr>
|
|
|
+ <th>HDD-Model</th>
|
|
|
+ <th>Serial</th>
|
|
|
+ <th>Size</th>
|
|
|
+ <th>Path</th>
|
|
|
+ <th>Temp</th>
|
|
|
+ <th>Fail</th>
|
|
|
+ </tr>
|
|
|
+ </thead>
|
|
|
+ <tbody>
|
|
|
EOF
|
|
|
}
|
|
|
|
|
|
#------------------------------ WEB-STOP -------------------------------#
|
|
|
webend(){
|
|
|
cat >> $WEB/hdd.html <<\EOF
|
|
|
-</TABLE>
|
|
|
-<BR>
|
|
|
-</DIV>
|
|
|
-</BODY>
|
|
|
-</HTML>
|
|
|
+ </tbody>
|
|
|
+ </table>
|
|
|
+</div>
|
|
|
+</body>
|
|
|
+</html>
|
|
|
EOF
|
|
|
NUM=$(cat $REP | egrep -v "SERIAL|---" | wc -l)
|
|
|
SITE=$(hostname -s | sed 's/-/ /g' | awk '{print $1}')
|
|
|
@@ -54,54 +75,60 @@ sed -i "s/SITE/$SITE/g" $WEB/hdd.html
|
|
|
#--------------------------- CHECK HDD INFO ----------------------------#
|
|
|
checkhdd(){
|
|
|
echo -e "- \e[1;32mExtracting\e[0m HDD info from PVE hypervisor"
|
|
|
+echo "--------------------------------------" > /tmp/hdd.rac
|
|
|
+echo -e "\e[1;37mHW-RAID-CONTROLER\e[0m" >> /tmp/hdd.rac
|
|
|
+echo "--------------------------------------" >> /tmp/hdd.rac
|
|
|
+CON=$(megacli -ShowSummary -aALL | grep ProductName | awk '{$1=$2="";print $0}' | sed 's/ //g')
|
|
|
+echo -e "\e[1;36m$CON\e[0m" >>/tmp/hdd.rac
|
|
|
echo "------ ---------- --------" > /tmp/hdd.rai
|
|
|
-echo "TYPE SIZE STATUS" >> /tmp/hdd.rai
|
|
|
+echo -e "\e[1;37mTYPE SIZE STATUS\e[0m" >> /tmp/hdd.rai
|
|
|
echo "------ ---------- --------" >> /tmp/hdd.rai
|
|
|
megacli -LDInfo -L0 -a0 > /tmp/hdd.r0
|
|
|
RAI=$(cat /tmp/hdd.r0 | grep Name | sed 's/://g' | awk '{print $2}')
|
|
|
SIZ=$(cat /tmp/hdd.r0 | grep "Size" | egrep -v "Sector|Strip" | awk '{print $3""$4}')
|
|
|
STA=$(cat /tmp/hdd.r0 | grep State | awk '{print $3}')
|
|
|
-echo "$RAI $SIZ $STA" >> /tmp/hdd.rai
|
|
|
+echo -e "\e[1;36m$RAI $SIZ $STA\e[0m" >> /tmp/hdd.rai
|
|
|
megacli -LDInfo -L1 -a0 > /tmp/hdd.r1
|
|
|
RAI=$(cat /tmp/hdd.r1 | grep Name | sed 's/://g' | awk '{print $2}')
|
|
|
SIZ=$(cat /tmp/hdd.r1 | grep "Size" | egrep -v "Sector|Strip" | awk '{print $3""$4}')
|
|
|
STA=$(cat /tmp/hdd.r1 | grep State | awk '{print $3}')
|
|
|
-echo "$RAI $SIZ $STA" >> /tmp/hdd.rai
|
|
|
+echo -e "\e[1;36m$RAI $SIZ $STA\e[0m" >> /tmp/hdd.rai
|
|
|
echo "------ ---------- --------" >> /tmp/hdd.rai
|
|
|
megacli -PDList -a0 > /tmp/hdd.tmp
|
|
|
echo "-------------------- ---------------- ---------- -------- --- -----" > $REP
|
|
|
-echo "HDD-MODEL SERIAL SIZE PATH TEMP FAIL " >> $REP
|
|
|
+echo -e "\e[1;37mHDD-MODEL SERIAL SIZE PATH TEMP FAIL\e[0m" >> $REP
|
|
|
echo "-------------------- ---------------- ---------- -------- --- -----" >> $REP
|
|
|
SN=$(cat /tmp/hdd.tmp | grep "Inquiry Data" | awk '{print $NF}')
|
|
|
for i in $SN;
|
|
|
do
|
|
|
-MODL=$(cat /tmp/hdd.tmp | grep -B15 $i | grep "Inquiry Data" | awk '{print $3"-"$4}')
|
|
|
-SIZE=$(cat /tmp/hdd.tmp | grep -B15 $i | grep "Raw Size" | awk '{print $3"GB"}')
|
|
|
-PORT=$(cat /tmp/hdd.tmp | grep -B15 $i | grep "Connected Port Number" | awk '{print $4}')
|
|
|
-FAIL=$(cat /tmp/hdd.tmp | grep -B20 $i | grep "Predictive Failure Count" | awk '{print $NF}')
|
|
|
-TEMP=$(cat /tmp/hdd.tmp | grep -A12 $i | grep "Temperature" | sed 's/://g' | awk '{print $3}')
|
|
|
-echo "<TR BGCOLOR=\"#FFFFFF\" VALIGN=center>" >> $WEB/hdd.html
|
|
|
-echo "<TD WIDTH=\"25%\"<DIV ALIGN=center>$MODL</DIV></TD>" >> $WEB/hdd.html
|
|
|
-echo "<TD WIDTH=\"25%\"<DIV ALIGN=center>$i</DIV></TD>" >> $WEB/hdd.html
|
|
|
-echo "<TD WIDTH=\"15%\"<DIV ALIGN=center>$SIZE</DIV></TD>" >> $WEB/hdd.html
|
|
|
-echo "<TD WIDTH=\"15%\"<DIV ALIGN=center>$PORT</DIV></TD>" >> $WEB/hdd.html
|
|
|
-echo "<TD WIDTH=\"10%\"<DIV ALIGN=center>$TEMP</DIV></TD>" >> $WEB/hdd.html
|
|
|
-if [[ "$FAIL" == "0" ]]; then
|
|
|
-echo "<TD WIDTH=\"10%\"<DIV ALIGN=center>$FAIL</DIV></TD>" >> $WEB/hdd.html
|
|
|
-else
|
|
|
-echo "<TD WIDTH=\"10%\"<DIV ALIGN=center style=\"color:red\"><b>$FAIL</b></DIV></TD>" >> $WEB/hdd.html
|
|
|
-fi
|
|
|
-echo "</TR>" >> $WEB/hdd.html
|
|
|
-echo "$MODL $i $SIZE $PORT $TEMP $FAIL" >> $REP
|
|
|
+ MODL=$(cat /tmp/hdd.tmp | grep -B15 $i | grep "Inquiry Data" | awk '{print $3"-"$4}')
|
|
|
+ SIZE=$(cat /tmp/hdd.tmp | grep -B15 $i | grep "Raw Size" | awk '{print $3"GB"}')
|
|
|
+ PORT=$(cat /tmp/hdd.tmp | grep -B15 $i | grep "Connected Port Number" | awk '{print $4}')
|
|
|
+ FAIL=$(cat /tmp/hdd.tmp | grep -B20 $i | grep "Predictive Failure Count" | awk '{print $NF}')
|
|
|
+ TEMP=$(cat /tmp/hdd.tmp | grep -A12 $i | grep "Temperature" | sed 's/://g' | awk '{print $3}')
|
|
|
+ if [[ "$FAIL" == "0" ]]; then
|
|
|
+ FAIL_HTML="<span class=\"status-ok\">0</span>"
|
|
|
+ else
|
|
|
+ FAIL_HTML="<span class=\"status-fail\">$FAIL</span>"
|
|
|
+ fi
|
|
|
+ echo "<tr>" >> $WEB/hdd.html
|
|
|
+ echo "<td>$MODL</td>" >> $WEB/hdd.html
|
|
|
+ echo "<td>$i</td>" >> $WEB/hdd.html
|
|
|
+ echo "<td>$SIZE</td>" >> $WEB/hdd.html
|
|
|
+ echo "<td>$PORT</td>" >> $WEB/hdd.html
|
|
|
+ echo "<td>$TEMP</td>" >> $WEB/hdd.html
|
|
|
+ echo "<td>$FAIL_HTML</td>" >> $WEB/hdd.html
|
|
|
+ echo "</tr>" >> $WEB/hdd.html
|
|
|
+ echo "$MODL $i $SIZE $PORT $TEMP $FAIL" >> $REP
|
|
|
done
|
|
|
echo "-------------------- ---------------- ---------- -------- --- -----" >> $REP
|
|
|
}
|
|
|
|
|
|
#------------------------------- CORE ----------------------------------#
|
|
|
-clear
|
|
|
webstart
|
|
|
checkhdd
|
|
|
webend
|
|
|
echo -e "- Final HTML report (\e[1;35mhttp://$(ifconfig vmbr0 | grep -w inet | awk '{print $2}' | sed 's/ //g')/hdd/hdd.html\e[0m)"
|
|
|
+cat /tmp/hdd.rac
|
|
|
cat /tmp/hdd.rai | column -t
|
|
|
cat $REP | column -t
|