-#!/usr/bin/env 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/lcpz/lain
-
-# Requires gawk
-
-# -------------------------------------------------------------------------
-# Decoding options
-# -------------------------------------------------------------------------
-USAGE="Usage: $0 [-h(elp)] | [-n(arrow mode)] | [-w(eb output) | --type=<fstype> | --exclude-type=<fstype>]"
-
-NARROW_MODE=0
-WEB_OUTPUT=0
-DF_OPTIONS=""
-
-while [ $# -gt 0 ]; do
-case "$1" in
-"-h" )
-echo $USAGE
-exit
-;;
-"-d" )
-DEBUG=1
-;;
-"-n" )
-NARROW_MODE=1
-;;
-"-w" )
-WEB_OUTPUT=1
-;;
---type=*)
-DF_OPTIONS+=" $1"
-;;
---exclude-type=*)
-DF_OPTIONS+=" $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
-
-# Add additional df options
-DF_COMMAND+=$DF_OPTIONS
-
-# -------------------------------------------------------------------------
-# 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 <= 49; 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
-}'