|
|
|
#!/usr/bin/perl
|
|
|
|
|
|
|
|
# Companion script:
|
|
|
|
|
|
|
|
# #!/bin/bash
|
|
|
|
# cd
|
|
|
|
#while true; do
|
|
|
|
# tput civis;
|
|
|
|
# clear; tput smul;
|
|
|
|
# printf "%+50s" "(every 5 mins)";
|
|
|
|
# tput cub 99; date; tput sgr0; echo;
|
|
|
|
# perl df-highlight.pl -c 3 -p;
|
|
|
|
# echo; uptime | cut -d, -f4- | awk '{$1=$1};1' # https://unix.stackexchange.com/a/205854
|
|
|
|
# tput cnorm; sleep 300;
|
|
|
|
#done
|
|
|
|
|
|
|
|
use warnings;
|
|
|
|
use strict;
|
|
|
|
use Term::ANSIColor;
|
|
|
|
use Time::HiRes qw(usleep nanosleep);
|
|
|
|
use Time::localtime;
|
|
|
|
|
|
|
|
# "User modifiable" data
|
|
|
|
my $DFCMD="/usr/bin/df";
|
|
|
|
my $TPUT="/usr/bin/tput";
|
|
|
|
my $DFARGS="-h";
|
|
|
|
my $CLEAR_SCREEN=`/usr/bin/clear`;
|
|
|
|
|
|
|
|
# Arguments
|
|
|
|
my ($CLS, $RBG, $ARGDEX, $MY_COL) = (0,0,0,3);
|
|
|
|
for (@ARGV) {
|
|
|
|
if ($_ eq "-p") {$RBG=1;}
|
|
|
|
elsif ($_ eq "-c") {$MY_COL=$ARGV[$ARGDEX+1];}
|
|
|
|
elsif ($_ eq "--help" or $_ eq "-h" ) {get_help();}
|
|
|
|
$ARGDEX++;
|
|
|
|
}
|
|
|
|
|
|
|
|
# Static data
|
|
|
|
my $ROW_START=`$TPUT cub 120`; # If this doesn't work on your terminal, make the value more than 120 lol
|
|
|
|
my $UP_ONE_ROW=`$TPUT cuu1`;
|
|
|
|
my $CLEAR_TO_END=`$TPUT el`;
|
|
|
|
my @HEADERS=qw(MT Filesystem Size Used Avail 'Use%' 'Mounted on');
|
|
|
|
my @COLORS=qw(MT bright_red bright_yellow bright_green bright_cyan bright_blue bright_magenta);
|
|
|
|
my @COLWIDTHS=qw(0 28 6 6 7 6 10);
|
|
|
|
my $COLOR_OFFSET=9;
|
|
|
|
|
|
|
|
# Helper functions
|
|
|
|
# https://stackoverflow.com/a/5047362
|
|
|
|
sub clean {my $text = shift; $text=~s/\n//g; $text=~s/\r//g;return $text;}
|
|
|
|
sub randcol {return int(rand(6)+1);}
|
|
|
|
sub cachemath {my $lcache=(localtime->min*60)+localtime->sec;return $lcache;}
|
|
|
|
sub get_help {
|
|
|
|
my ($underline,$undereset)=(`tput smul`,`tput sgr0`);
|
|
|
|
my @help_columns=qw(12);
|
|
|
|
printf("\n%s%s%s\n\n","$underline","DF Highlight Script Usage","$undereset");
|
|
|
|
printf("");
|
|
|
|
printf(" %-$help_columns[0]s %s\n","-h, --help","Displays this help and exits");
|
|
|
|
printf(" %-$help_columns[0]s %s\n","-c #","Highlights the specified column (default: 3)");
|
|
|
|
printf(" %-$help_columns[0]s %s\n","-p","Enables a pinball-esque color mode before highlighting the chosen column");
|
|
|
|
exit 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
# Runtime data
|
|
|
|
my @linedata=();
|
|
|
|
my $line="";
|
|
|
|
my @dfdata=();
|
|
|
|
my $dfcache=0;
|
|
|
|
my $current_column=1;
|
|
|
|
my @colored_cols=qw'0';
|
|
|
|
my $rows=0;
|
|
|
|
|
|
|
|
sub dfboi {
|
|
|
|
my $colored_column = $_[0];
|
|
|
|
my $COLOR = $COLORS[$colored_column];
|
|
|
|
if ($dfcache == 0 or cachemath()-$dfcache > 60) {
|
|
|
|
# REFRESH DF DATA
|
|
|
|
@dfdata=(); # Clear the array to avoid duplicating data
|
|
|
|
open my $cmd, '-|', "$DFCMD $DFARGS";
|
|
|
|
while (my $line = <$cmd>) {
|
|
|
|
push(@dfdata,$line); # P O P U L A T E
|
|
|
|
}
|
|
|
|
close $cmd;
|
|
|
|
$dfcache=cachemath();
|
|
|
|
$rows=scalar @dfdata;
|
|
|
|
}
|
|
|
|
for (@dfdata) {
|
|
|
|
$line=$_;
|
|
|
|
$current_column=1;
|
|
|
|
# Filesystem Size Used Avail Use% Mounted
|
|
|
|
if ($line =~ /([a-zA-Z0-9\/\-_]+)\s+([0-9GMKT\.]+)\s+([0-9GMKT\.]+)\s+([0-9GMKT\.]+)\s+([0-9%]+)\s+([\/a-z\-0-9A-Z]+)/ or $line =~ /^(Filesystem)\s+(Size)\s+(Used)\s+(Avail)\s+(Use%)\s+(Mounted on)/) {
|
|
|
|
@linedata=("MT", "$1", "$2", "$3", "$4", "$5", "$6");
|
|
|
|
while ($current_column <= 6) {
|
|
|
|
if ($current_column == $colored_column) {
|
|
|
|
$colored_cols[0]=$COLWIDTHS[$current_column]+$COLOR_OFFSET;
|
|
|
|
printf("%-$colored_cols[0]s",clean(colored("$linedata[$current_column]", $COLOR)));
|
|
|
|
} else {
|
|
|
|
printf("%-$COLWIDTHS[$current_column]s",clean("$linedata[$current_column]"));
|
|
|
|
}
|
|
|
|
$current_column=$current_column+1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
printf("\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($RBG) {
|
|
|
|
my $blinky=10;
|
|
|
|
my $undoline=0;
|
|
|
|
while ($blinky--) {
|
|
|
|
dfboi(randcol());
|
|
|
|
select()->flush();
|
|
|
|
usleep($blinky < 2 ? 600000 : $blinky < 4 ? 300000 : 150000);
|
|
|
|
$undoline=0;
|
|
|
|
while ($undoline < $rows) {printf("%s",$UP_ONE_ROW);$undoline++;}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
dfboi($MY_COL);
|