http://qs321.pair.com?node_id=679557

This may be very, very simple compared to most goings on here, but it was cool for me since I still consider myself a newbie yet I was able to hack together a working, useful script in 5 minutes.

This script reads in the output of another script (which tells what nodes in our cluster have how many processors being used), and weeds out which nodes in our cluster are usable (i.e. have zero or one processors being used).

#!/usr/bin/perl #Andrew Levenson #2:13PM EST #Thursday, April 10th, 2008 #Displays nodes on ganglia with 0 or 1 used processors use strict; use warnings; my @open=(); my $ganglia=`ganglia proc_run`; my @results=split(/\n/, $ganglia); foreach(@results) { push @open, $_ if $_=~m/\s{1,}1\s{1,}$/; unshift @open, $_ if $_=~m/\s{1,}0\s{1,}$/; } print "$_\n" foreach(@open);

This greatly reduces to amount of time I spend scanning my terminal looking for whether or not I can submit a molecule to optimize.
C(qw/74 97 104 112/);sub C{while(@_){$c**=$C;print (map{chr($C!=$c?shift:pop)}$_),$C+=@_%2!=1?1:0}}

Replies are listed 'Best First'.
Re: Finding Usable Nodes in our Cluster
by jwkrahn (Abbot) on Apr 11, 2008 at 02:37 UTC
    my $ganglia=`ganglia proc_run`; my @results=split(/\n/, $ganglia); foreach(@results) { push @open, $_ if $_=~m/\s{1,}1\s{1,}$/; unshift @open, $_ if $_=~m/\s{1,}0\s{1,}$/; }

    That could be simplified to:

    foreach ( `ganglia proc_run` ) { push @open, $_ if /\s1\s+$/; unshift @open, $_ if /\s0\s+$/; }
      Awesome, it works great! I updated it to include some formatting of the output to make everything pretty.
      #!/usr/bin/perl #Andrew Levenson #2:13PM EST #Thursday, April 10th, 2008 #Displays nodes on Deli with 0 or 1 used processors use strict; use warnings; print "\n"; my @open=("\n", "One Active Processor:\n\n"); foreach ( `ganglia proc_run` ) { unshift @open, $_ if /\s0\s+$/; push @open, $_ if /\s1\s+$/; } print "Zero Active Processors:\n\n"; print $_ foreach(@open); print "\n";
      C(qw/74 97 104 112/);sub C{while(@_){$c**=$C;print (map{chr($C!=$c?shift:pop)}$_),$C+=@_%2!=1?1:0}}
        print $_ foreach(@open);

        You don't really need the loop there:

        print @open;

        And it might be better if you used strings instead of arrays:

        use strict; use warnings; my $zero = "\nZero Active Processors:\n\n"; my $one = "\nOne Active Processor:\n\n"; foreach ( `ganglia proc_run` ) { $zero .= $_ if /\s0\s+$/; $one .= $_ if /\s1\s+$/; } print "$zero$one\n";
      Ah, thank you! I'll give it a shot when I get back to the lab.
      C(qw/74 97 104 112/);sub C{while(@_){$c**=$C;print (map{chr($C!=$c?shift:pop)}$_),$C+=@_%2!=1?1:0}}