summarise.pl
上传用户:shbosideng
上传日期:2013-05-04
资源大小:1555k
文件大小:3k
- # summarise.pl
- #
- # Summarise some whodo log/csv files into a single file. The old files
- # are then deleted.
- #
- # Args are:
- # i path of input log/CSV files. If no arg is given, this defaults to
- # yesterday's files.
- # o path of output CSV file. If no arg is given, this defaults to
- # YYYYMMDD.csv where the date is the latest date in the input data.
- #
- # v1.0 11/11/98 Tony Farr
- #
- use Getopt::Std;
- use File::Basename;
- use strict;
- use vars qw/ $opt_i $opt_o /;
- # Directory for output logs/csv files.
- my $LOGPATH= "D:\logs\whodo\";
- my $progname = basename($0);
- my $usage= "Usage: $progname -i input_path -o output_filen";
- getopts('i:o:') || die $usage;
- my @flist= get_input_files($opt_i);
- if ( scalar(@flist) < 1 ) {
- die "$progname: No files to process!";
- }
- my ($trafficref, $endtime, $duration)= get_traffic(@flist);
- if (! $opt_o) {
- ($_)= split(/ /, $endtime);
- my ($d,$m,$y) = split///;
- $opt_o= dirname($flist[0]) . "\" . sprintf "%d%02d%02d.csv",$y,$m,$d;
- }
- print_stats($trafficref, $endtime, $duration, $opt_o);
- unlink @flist;
- exit 0;
- sub get_input_files {
- # Returns a list of input files to be processed
- my($path)= @_;
- if (! $path) {
- my $t = time() - 24*60*60;
- my ($mday,$mon,$year) = ( localtime($t) )[3..5];
- $path= $LOGPATH . sprintf("%d%02d%02d-*.csv",$year+1900,$mon+1,$mday);
- }
- glob($path);
- }
- sub get_traffic {
- # Read the log files (specified in @_) & summarise into a hash
- my($fname, $lastf, $lasttime, $hr, $min, $sec, $duration, $src, $dst, $bytes, %traffic);
- foreach $fname (@_) {
- open(CSV, "< $fname") || warn "$progname: unable to open $fname; $!";
- # First line is a header giving end time
- $_= <CSV> || warn "$progname: $fname is emptyn";
- chomp;
- $_= (split/,/)[1];
- if ($fname gt $lastf) {
- $lastf= $fname;
- $lasttime= $_;
- }
- # Second line is a header giving period covered by this log
- $_= <CSV> || die "$progname: $fname lacks second header linen";
- chomp;
- $_= (split/,/)[1];
- ($hr, $min, $sec)= split/:/;
- $duration += $sec + 60 * ($min + 60*$hr);
- # The rest of the file has traffic for particular sources & destinations
- while (<CSV>) {
- ($src, $dst, $bytes)= split/,/;
- $traffic{$src}{$dst} += $bytes;
- }
- close(CSV);
- }
- return(%traffic, $lasttime, $duration);
- }
- sub print_stats {
- # Print out the traffictab in csv format
- use integer;
- my ($trafficref, $endtime, $duration, $fname)= @_;
- open (CSVFILE,">$fname") || die "$progname: Could not open file $fname; $!n";
- print CSVFILE "End Time:,$endtimen";
- my $sec= $duration % 60;
- $_= ($duration - $sec) / 60;
- my $min= $_ % 60;
- my $hr= ($_ - $min) / 60;
- print CSVFILE "Duration:,$hr:$min:$secn";
- foreach my $s (sort keys %$trafficref) {
- foreach my $d (sort keys %{$$trafficref{$s}}) {
- print CSVFILE "$s,$d,$$trafficref{$s}{$d}n";
- }
- }
- close(CSVFILE);
- }