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.

88 lines
2.7 KiB

#!/usr/bin/perl
use warnings;
use strict;
use Term::ANSIColor;
use Time::HiRes qw(usleep nanosleep);
use Time::localtime;
use Getopt::Long;
# "User modifiable" data
my $MY_COL=3;
my $DFCMD="/usr/bin/df";
my $TPUT="/usr/bin/tput";
my $DFARGS="-h";
my $CLEAR_SCREEN=`/usr/bin/clear`;
# Static data
#GetOptions("=s" => \( my $INTERVAL=300 ),"header|h=i" => \( my $HEADER_REPEAT = 24 ),) or die "command line arguments error";
my $CLS = grep( /^-c/, @ARGV ) ? 1 : 0;
my $RBG = grep( /^-p/, @ARGV ) ? 1 : 0;
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;}
# 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");
}
}
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);