You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
387 lines
10 KiB
387 lines
10 KiB
#!/bin/bash |
|
# |
|
# Adapted from Eridan's "fs" (cleanup, enhancements and switch to bash/Linux) |
|
# JM, 10/12/2004 |
|
# |
|
# Integrated into Lain in september 2013 |
|
# https://github.com/copycat-killer/lain |
|
|
|
# Requires gawk |
|
|
|
# ------------------------------------------------------------------------- |
|
# Decoding options |
|
# ------------------------------------------------------------------------- |
|
USAGE="Usage: $0 [-h(elp)] | [-n(arrow mode)] | [-w(eb output)]" |
|
|
|
NARROW_MODE=0 |
|
WEB_OUTPUT=0 |
|
|
|
while [ $# -gt 0 ]; do |
|
case "$1" in |
|
"-h" ) |
|
echo $USAGE |
|
exit |
|
;; |
|
"-d" ) |
|
DEBUG=1 |
|
;; |
|
"-n" ) |
|
NARROW_MODE=1 |
|
;; |
|
"-w" ) |
|
WEB_OUTPUT=1 |
|
;; |
|
* ) |
|
echo $USAGE |
|
exit |
|
;; |
|
esac |
|
shift |
|
done |
|
|
|
# ------------------------------------------------------------------------- |
|
# Preparations |
|
# ------------------------------------------------------------------------- |
|
SYSTEM=`uname -s` |
|
PATTERN="/" |
|
|
|
case "$SYSTEM" in |
|
"Linux" ) |
|
DF_COMMAND="/usr/bin/env df -k" |
|
SORT_COMMAND="/usr/bin/env sort -k6" |
|
AWK_COMMAND="/usr/bin/env awk" |
|
;; |
|
* ) |
|
DF_COMMAND="/bin/df -k" |
|
SORT_COMMAND="/usr/bin/sort -k6" |
|
AWK_COMMAND="/usr/bin/env gawk" |
|
;; |
|
esac |
|
|
|
# ------------------------------------------------------------------------- |
|
# Grabbing "df" result |
|
# ------------------------------------------------------------------------- |
|
DF_RESULT=`$DF_COMMAND` |
|
if [ ! -z $DEBUG ]; then |
|
echo "--> DF_RESULT:" |
|
echo "$DF_RESULT" |
|
echo "" |
|
fi |
|
|
|
# ------------------------------------------------------------------------- |
|
# Preprocessing "df" result, to join split logical lines |
|
# ------------------------------------------------------------------------- |
|
PREPROCESSING_RESULT=` \ |
|
echo "$DF_RESULT" | $AWK_COMMAND -v PATTERN=$PATTERN \ |
|
' |
|
NF == 1 { |
|
printf ("%s", $0) |
|
} |
|
|
|
NF == 5 { |
|
printf ("%s\n", $0) |
|
} |
|
|
|
NF > 6 { |
|
} |
|
|
|
NF == 6 { |
|
printf ("%s\n", $0) |
|
}' |
|
` |
|
if [ ! -z $DEBUG ]; then |
|
echo "--> PREPROCESSING_RESULT:" |
|
echo "$PREPROCESSING_RESULT" |
|
echo "" |
|
fi |
|
|
|
SORTED_FILE_SYSTEMS_INFO=`echo "$PREPROCESSING_RESULT" | $SORT_COMMAND` |
|
|
|
if [ ! -z $DEBUG ]; then |
|
echo "--> SORTED_FILE_SYSTEMS_INFO:" |
|
echo "$SORTED_FILE_SYSTEMS_INFO" |
|
echo "" |
|
fi |
|
|
|
# ------------------------------------------------------------------------- |
|
# Computing mount point max length |
|
# ------------------------------------------------------------------------- |
|
MOUNT_POINT_MAX_LENGTH=` \ |
|
echo "$SORTED_FILE_SYSTEMS_INFO" | $AWK_COMMAND -v PATTERN=$PATTERN \ |
|
' |
|
BEGIN { |
|
mount_point_length_max = 15; |
|
} |
|
|
|
END { |
|
printf ("%d", mount_point_length_max); |
|
} |
|
|
|
$0 ~ PATTERN { |
|
# printf ("$6 = %s\n", $6); |
|
|
|
mount_point = $6; |
|
# printf ("mount_point = %s\n", mount_point); |
|
|
|
mount_point_length = length (mount_point); |
|
# printf ("mount_point_length = %d\n", mount_point_length); |
|
|
|
if (mount_point_length > mount_point_length_max) |
|
mount_point_length_max = mount_point_length; |
|
}' |
|
` |
|
if [ ! -z $DEBUG ]; then |
|
echo "MOUNT_POINT_MAX_LENGTH: $MOUNT_POINT_MAX_LENGTH" |
|
fi |
|
|
|
# ------------------------------------------------------------------------- |
|
# Computing mount point data max size |
|
# ------------------------------------------------------------------------- |
|
MOUNT_POINT_MAX_SIZE=` \ |
|
echo "$SORTED_FILE_SYSTEMS_INFO" | $AWK_COMMAND -v PATTERN=$PATTERN \ |
|
' |
|
BEGIN { |
|
mount_point_size_max = 0; |
|
} |
|
|
|
END { |
|
printf ("%d", mount_point_size_max); |
|
} |
|
|
|
$0 ~ PATTERN { |
|
# df -k shows k_bytes! |
|
# printf ("$2 = %s\n", $2); |
|
|
|
mount_point_size = $2 * 1024; |
|
# printf ("mount_point_size = %d\n", mount_point_size); |
|
|
|
if (mount_point_size > mount_point_size_max) |
|
mount_point_size_max = mount_point_size; |
|
}' |
|
` |
|
if [ ! -z $DEBUG ]; then |
|
echo "MOUNT_POINT_MAX_SIZE: $MOUNT_POINT_MAX_SIZE" |
|
fi |
|
|
|
# ------------------------------------------------------------------------- |
|
# Let's go! |
|
# ------------------------------------------------------------------------- |
|
echo "$SORTED_FILE_SYSTEMS_INFO" | $AWK_COMMAND -v DEBUG=$DEBUG -v PATTERN=$PATTERN -v NARROW_MODE=$NARROW_MODE -v LEFT_COLUMN=$MOUNT_POINT_MAX_LENGTH -v MAX_SIZE=$MOUNT_POINT_MAX_SIZE -v SCALE=$SCALE -v WEB_OUTPUT=$WEB_OUTPUT \ |
|
' |
|
# {printf ("$0 = %s\n", $0);} |
|
# {printf ("$1 = %s\n", $1);} |
|
# {printf ("PATTERN = %s\n", PATTERN);} |
|
# {printf ("LEFT_COLUMN = %s\n", LEFT_COLUMN);} |
|
|
|
BEGIN { |
|
k_bytes = 1024.0; |
|
m_bytes = 1024.0 * k_bytes; |
|
g_bytes = 1024.0 * m_bytes; |
|
t_bytes = 1024.0 * g_bytes; |
|
|
|
if (WEB_OUTPUT) |
|
{ |
|
all_stars = "**************************************************"; |
|
current_date = strftime ("%d-%m-%Y @ %H:%M:%S", localtime (systime ())); |
|
free_threshold = 10; # % |
|
|
|
printf ("<!-- DEBUT CONTENU -->\n"); |
|
|
|
printf ( \ |
|
"<A NAME=\"top\"></A>\n" \ |
|
"<P ALIGN=CENTER><SPAN CLASS=\"titleblue\">%s</SPAN><SPAN CLASS=\"textbold\"> -- STATUS OF <SPAN CLASS=\"titlered\">ALCOR</SPAN> FILE SYSTEMS</SPAN></P><BR>\n", |
|
current_date ) |
|
|
|
printf ("<TABLE WIDTH=\"100%%\" BORDER=1>\n"); |
|
|
|
printf ( \ |
|
"<TR>\n" \ |
|
"<TD ALIGN=LEFT><STRONG>Mount point</STRONG></TD>\n" \ |
|
"<TD ALIGN=CENTER><STRONG>%% Usato (<SPAN CLASS=\"titleblue\">*</SPAN>)" \ |
|
" - %% Free (<SPAN CLASS=\"titlegreen\">*</SPAN>)</STRONG></TD>\n" \ |
|
"<TD ALIGN=CENTER><STRONG>%% Used</STRONG></TD>\n" \ |
|
"<TD ALIGN=CENTER><STRONG>Free</STRONG></TD>\n" \ |
|
"<TD ALIGN=CENTER><STRONG>Total</STRONG></TD>\n" \ |
|
"</TR>\n" ); |
|
} |
|
else |
|
{ |
|
narrow_margin = " "; |
|
# printf ("%-*s", LEFT_COLUMN + 2, "Mount point"); |
|
if (NARROW_MODE) |
|
printf ("\n%s", narrow_margin); |
|
else |
|
printf ("%-*s", LEFT_COLUMN + 2, ""); |
|
print " Used Free Total "; |
|
if (! NARROW_MODE) |
|
print ""; |
|
} |
|
} |
|
|
|
END { |
|
if (WEB_OUTPUT) |
|
{ |
|
printf ("</TABLE>\n"); |
|
|
|
printf ("<!-- FIN CONTENU -->\n"); |
|
} |
|
else |
|
{ |
|
if (NARROW_MODE) |
|
printf ("%s", narrow_margin); |
|
else |
|
printf ("%-*s", LEFT_COLUMN + 2, ""); |
|
print "|----|----|----|----|----|----|----|----|----|----|" |
|
if (NARROW_MODE) |
|
printf ("\n%s", narrow_margin); |
|
else |
|
printf ("%-*s", LEFT_COLUMN + 2, ""); |
|
print "0 10 20 30 40 50 60 70 80 90 100"; |
|
print ""; |
|
} |
|
} |
|
|
|
$0 ~ PATTERN { |
|
|
|
if (index ($0, "members") == 0 && index ($0, "Download") == 0 && index ($0, "admin") == 0) |
|
{ |
|
# df -k shows k_bytes! |
|
|
|
total_size = $2 * k_bytes; |
|
free_size = $4 * k_bytes; |
|
percentage_occupied = substr($5, 0, 3); |
|
mount_point = $6; |
|
|
|
percentage_free = int (100 - percentage_occupied); |
|
|
|
# reduction_factor: 2 |
|
stars_number = int (percentage_occupied / 2); |
|
|
|
if (WEB_OUTPUT) |
|
{ |
|
posGroup = index (mount_point, "scratch"); |
|
if (posGroup == 0) |
|
posGroup = index (mount_point, "u1"); |
|
if (posGroup == 0) |
|
posGroup = index (mount_point, "u2"); |
|
if (posGroup == 0) |
|
posGroup = index (mount_point, "u4"); |
|
if (posGroup == 0) |
|
posGroup = index (mount_point, "u5"); |
|
|
|
printf ("<TR>\n"); |
|
|
|
if (posGroup > 0 || percentage_free < free_threshold) |
|
{ |
|
if (percentage_free < free_threshold) |
|
{ |
|
class = "titlered"; |
|
if (posGroup == 0) |
|
posGroup = 1; # to display the whole mount_point in this color anyway |
|
} |
|
else if ((index (mount_point, "scratch") != 0) || (index (mount_point, "u1") != 0) || (index (mount_point, "u2") != 0)) |
|
{ |
|
class = "titleorange"; |
|
posGroup = 1; # to display the whole mount_point in this color |
|
} |
|
else if ((index (mount_point, "u4") != 0) || (index (mount_point, "u5") != 0)) |
|
{ |
|
class = "titlebrown"; |
|
posGroup = 1; # to display the whole mount_point in this color |
|
} |
|
|
|
printf ( \ |
|
"<TD ALIGN=LEFT>%s<SPAN CLASS=\"%s\">%s</SPAN></TD>\n", |
|
substr (mount_point, 1, posGroup - 1), |
|
class, |
|
substr (mount_point, posGroup) ); |
|
} |
|
else |
|
{ |
|
printf ("<TD ALIGN=LEFT>%s</TD>\n", mount_point); |
|
} |
|
|
|
printf ( \ |
|
"<TD ALIGN=CENTER><SPAN CLASS=\"titleblue\">%s</SPAN><SPAN CLASS=\"titlegreen\">%s</SPAN></TD>\n", |
|
substr (all_stars, 1, stars_number), substr (all_stars, stars_number + 1, 49) ); |
|
|
|
if (percentage_free < free_threshold) |
|
{ |
|
color_beginning = "<SPAN CLASS=\"titlered\">"; |
|
color_end = "</SPAN>" |
|
} |
|
else |
|
{ |
|
color_beginning = ""; |
|
color_end = "" |
|
} |
|
|
|
if (total_size > 1 * t_bytes) |
|
printf ( \ |
|
"<TD ALIGN=RIGHT>%s%3d%%%s</TD><TD ALIGN=RIGHT>%5.1f Tb</TD><TD ALIGN=RIGHT>%5.1f Tb</TD>\n", \ |
|
color_beginning, percentage_occupied, color_end, free_size / t_bytes, total_size / t_bytes \ |
|
); |
|
else if (total_size > 1 * g_bytes) |
|
printf ( \ |
|
"<TD ALIGN=RIGHT>%s%3d%%%s</TD><TD ALIGN=RIGHT>%5.1f Gb</TD><TD ALIGN=RIGHT>%5.1f Gb</TD>\n", \ |
|
color_beginning, percentage_occupied, color_end, free_size / g_bytes, total_size / g_bytes \ |
|
); |
|
else if (total_size > 1 * m_byptes) |
|
printf ( \ |
|
"<TD ALIGN=RIGHT>%s%3d%%%s</TD><TD ALIGN=RIGHT>%5.1f Mb</TD><TD ALIGN=RIGHT>%5.1f Mb</TD>\n", \ |
|
color_beginning, percentage_occupied, color_end, free_size / m_bytes, total_size / m_bytes \ |
|
); |
|
else |
|
printf ( \ |
|
"<TD ALIGN=RIGHT>%s%3d%%%s</TD><TD ALIGN=RIGHT>%5.1f Kb</TD><TD ALIGN=RIGHT>%5.1f Kb</TD>\n", \ |
|
color_beginning, percentage_occupied, color_end, free_size / k_bytes, total_size / k_bytes \ |
|
); |
|
|
|
printf ("</TR>\n"); |
|
} |
|
|
|
else |
|
{ |
|
# printf ("percentage_occupied = %d\n", percentage_occupied); |
|
# printf ("percentage_free = %d\n", percentage_free); |
|
|
|
printf ("%-*s", LEFT_COLUMN + 2, mount_point); |
|
if (NARROW_MODE) |
|
printf ("\n%s", narrow_margin); |
|
|
|
# printf ("stars_number = %d\n", stars_number); |
|
|
|
printf ("|"); |
|
for (i = 1; i <= stars_number; i++) |
|
{ |
|
printf ("%s", "*"); |
|
} |
|
for (i = stars_number + 1; i <= 49; i++) |
|
{ |
|
printf ("%s", "-"); |
|
} |
|
|
|
|
|
if (total_size > 1 * t_bytes) |
|
printf ( \ |
|
"| %3d%% %6.1f %6.1f Tb\n", \ |
|
percentage_occupied, free_size / t_bytes, total_size / t_bytes \ |
|
); |
|
else if (total_size > 1 * g_bytes) |
|
printf ( \ |
|
"| %3d%% %6.1f %6.1f Gb\n", \ |
|
percentage_occupied, free_size / g_bytes, total_size / g_bytes \ |
|
); |
|
else if (total_size > 1 * m_byptes) |
|
printf ( \ |
|
"| %3d%% %6.1f %6.1f Mb\n", \ |
|
percentage_occupied, free_size / m_bytes, total_size / m_bytes \ |
|
); |
|
else |
|
printf ( \ |
|
"| %3d%% %6.1f %6.1f Kb\n", \ |
|
percentage_occupied, free_size / k_bytes, total_size / k_bytes \ |
|
); |
|
} |
|
} # if |
|
}'
|
|
|