erase screen only when it changes
authorDobrica Pavlinusic <dpavlin@rsync1.maxxo.com>
Tue, 17 Apr 2012 11:39:59 +0000 (13:39 +0200)
committerDobrica Pavlinusic <dpavlin@rsync1.maxxo.com>
Tue, 17 Apr 2012 11:39:59 +0000 (13:39 +0200)
gearman-top.pl

index 7bb4dbc..9670670 100755 (executable)
@@ -16,18 +16,21 @@ print "\e[2J"; # Erase Screen
 my $t = time();
 my $max;
 my $erase_screen = 1;
-my $last_names = '?';
+my $last_content = '?';
 
 while(1) {
        my $uptime = time() - $t;
-       print "\e[2J" if $erase_screen || $uptime % 5 == 0;
+       if ( $erase_screen ) {
+               print "\e[2J";
+               $erase_screen = 0;
+       }
        print "\e[0;0H"; # Cursor Home
        print "Gearman " . localtime(time()) . "\t\e[34mmax update: $uptime\e[0m\n"; 
        printf "\e[4mqueued  running  wrk function\e[0m\n";
 
        print $sock "STATUS\n";
 
-       my $names;
+       my $content;
 
        while ( my $line = <$sock> ) {
                chomp $line;
@@ -38,13 +41,14 @@ while(1) {
                $max->{$name}->{$_} ||= 0 foreach qw(queued running);
                $max->{$name}->{queued}  = $queued  if $queued > $max->{$name}->{queued};
                $max->{$name}->{running} = $running if $running > $max->{$name}->{running};
-               printf "%3d \e[34m%-3d\e[0m %3d \e[34m%-3d\e[0m %3d  %s\n"
+               my $line = sprintf "%3d \e[34m%-3d\e[0m %3d \e[34m%-3d\e[0m %3d  %s"
                        , $queued,  $max->{$name}->{queued}
                        , $running, $max->{$name}->{running}
                        , $workers
                        , $name
                ;
-               $names .= $name;
+               print "$line\n";
+               $content .= $line;
        }
 
 =for workers
@@ -57,9 +61,9 @@ while(1) {
        }
 =cut
 
-       if ( $names ne $last_names ) {
+       if ( $content ne $last_content ) {
                $erase_screen = 1;
-               $last_names = $names;
+               $last_content = $content;
        }
 
        sleep 1;