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 | 
						|
}'
 | 
						|
 |