125 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/perl -w
 | |
| use strict;
 | |
| use Getopt::Std qw( getopts );
 | |
| use Time::Local qw( timelocal );
 | |
| 
 | |
| my ($releaseDate) = qw( 2009-10-02 );
 | |
| 
 | |
| ( my $Script = $0 ) =~ s{^.*/}{};
 | |
| # -------------------------------------------------------------------------
 | |
| sub usage {
 | |
|     $! = 0;    # clean exit
 | |
|     warn "@_\n" if @_;
 | |
|     die <<"USAGE";
 | |
| usage:
 | |
|     $Script [OPTION] file1 [ .. fileN ]
 | |
| 
 | |
| with options:
 | |
|   -b YYYY[-MM[-DD]]
 | |
|           begin date for accounting (job end_time  > DATE 2 A.M.)
 | |
|   -e YYYY[-MM[-DD]]
 | |
|           end date for accounting   (job end_time <= DATE 2 A.M.)
 | |
|   -h      usage
 | |
| 
 | |
| Extract portions of the GridEngine accounting(5) file according to the
 | |
| job end_time. For example,
 | |
|     $Script -b 2008-01-01 -e 2009 ...
 | |
| extracts the accounting for jobs that finished running in 2008.
 | |
| 
 | |
| The value of 2 A.M. avoids problems that daylight savings time might
 | |
| otherwise cause.
 | |
| 
 | |
| version ($releaseDate)
 | |
| copyright (c) 2009 <Mark.Olesen\@faurecia.com>
 | |
| 
 | |
| Licensed and distributed under the Creative Commons
 | |
| Attribution-NonCommercial-ShareAlike 3.0 License.
 | |
| http://creativecommons.org/licenses/by-nc-sa/3.0
 | |
| USAGE
 | |
| }
 | |
| 
 | |
| # -------------------------------------------------------------------------
 | |
| my %opt;
 | |
| getopts( "hb:e:", \%opt ) or usage();
 | |
| usage() if $opt{h};
 | |
| 
 | |
| @ARGV or usage();
 | |
| 
 | |
| for (@ARGV) {
 | |
|     -f $_ or die "no file '$_'\n";
 | |
| 
 | |
|     ## handle compressed files transparently
 | |
|     if (/\.bz2$/) {
 | |
|         $_ = qq{bzip2 -dc "$_"|};
 | |
|     }
 | |
|     elsif (/\.gz$/) {
 | |
|         $_ = qq{gzip -dc "$_"|};
 | |
|     }
 | |
| }
 | |
| 
 | |
| for (qw( b e )) {
 | |
|     if ( $opt{$_} ||= 0 ) {
 | |
|         my ( $yy, $mm, $dd );
 | |
| 
 | |
|         if ( $opt{$_} =~ /^(\d{2,4})-(\d{1,2})-(\d{1,2})$/ ) {
 | |
|             ## YYYY-MM-DD
 | |
|             ( $yy, $mm, $dd ) = ( $1, $2, $3 );
 | |
|         }
 | |
|         elsif ( $opt{$_} =~ /^(\d{2,4})-(\d{1,2})$/ ) {
 | |
|             ## YYYY-MM
 | |
|             ( $yy, $mm ) = ( $1, $2 );
 | |
|         }
 | |
|         elsif ( $opt{$_} =~ /^(\d{2,4})$/ ) {
 | |
|             ## YYYY
 | |
|             ($yy) = ($1);
 | |
|         }
 | |
|         else {
 | |
|             usage("invalid date format: '$opt{$_}'");
 | |
|         }
 | |
| 
 | |
|         # treat missing month/day as '1'
 | |
|         $mm ||= 1;
 | |
|         $dd ||= 1;
 | |
| 
 | |
|         # convert from YYYY-MM-DD to epoch,
 | |
|         # start at 2am - avoid problems with daylight savings time
 | |
|         $opt{$_} = timelocal( 0, 0, 2, $dd, $mm - 1, $yy );    # month (0..11)
 | |
|     }
 | |
| }
 | |
| 
 | |
| $opt{b} or $opt{e} or usage("must specify at least one of -b or -e");
 | |
| 
 | |
| if ( $opt{e} and $opt{b} >= $opt{e} ) {
 | |
|     usage("-b DATE must less than -e DATE");
 | |
| }
 | |
| 
 | |
| my $fileCount;
 | |
| while (<>) {
 | |
|     if (/^\s*#/) {
 | |
|         ## pass-thru comments, but only for the first file
 | |
|         print unless $fileCount;
 | |
|         next;
 | |
|     }
 | |
| 
 | |
|     my ($endtime) = ( split /:/ )[10];
 | |
| 
 | |
|     # only allow things that ran (endtime non-zero)
 | |
|     # and that are within the filter limits
 | |
|     if (    $endtime
 | |
|         and ( $opt{b} ? ( $endtime > $opt{b} )  : 'okay' )
 | |
|         and ( $opt{e} ? ( $endtime <= $opt{e} ) : 'okay' ) )
 | |
|     {
 | |
|         print;
 | |
|     }
 | |
| }
 | |
| continue {
 | |
|     $fileCount++ if eof;
 | |
| }
 | |
| 
 | |
| __END__
 | |
| 
 | |
| FORMAT - see accounting(5)
 | |
| 08  submission_time
 | |
| 09  start_time
 | |
| 10  end_time
 |