Guest User

Untitled

a guest
Jun 18th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 2.60 KB | None | 0 0
  1.  
  2. sub collect {
  3.  
  4.     use POSIX qw(strftime);
  5.  
  6.     my $file_date = strftime "%Y%m%d", localtime;
  7.     my ($logfile, $to) = @_;
  8.     my $from = 'alerts@zoo.gr';
  9.     my $subject = "Daily Service call report";
  10.     my (%totals, %byhostname);
  11.     my (%mins, %maxs, %averages, %ff95s, %ff99s);
  12.     my $epoch_time = time;
  13.     $epoch_time = $epoch_time * 1000;
  14.  
  15.     if ($logfile =~ /\.gz$/) {
  16.         open (FILE, "gunzip -c $logfile |") or die $!
  17.     } else {
  18.         open (FILE, $logfile) or die $!;
  19.     }
  20.  
  21.     while (my $line = <FILE>) {
  22.         my (undef, undef, undef, $hostname, $identity, $servicename, $daytotals, $min, $max, $average, $ff95, $ff99 ) = split(" ", $line);
  23.         if (! defined $identity or ! length $identity ) { next; }
  24.         if ($identity ne "Service-Analysis:" ) { next; }
  25.         if ($servicename =~ /-/) { next; }
  26.         if ( defined $averages{$servicename} ) {
  27.             $averages{ $servicename } = ( ( $averages{ $servicename } * $totals{ $servicename } ) + ( $average * $daytotals) ) / ( ($totals{ $servicename } + $daytotals ) || 1)  ;
  28.         } else {
  29.             $averages{ $servicename } = $average;
  30.         }
  31.         $totals{ $servicename } = ( $totals{ $servicename } //0 )+ $daytotals ;
  32.         $mins{ $servicename } //= $min ;
  33.         $mins{ $servicename } = min($mins{ $servicename },$min);
  34.         $maxs{ $servicename } //= $max ;
  35.         $maxs{ $servicename } = max($maxs{ $servicename },$max);
  36.  
  37.         $ff95s{ $servicename } //= $ff95 ;
  38.         $ff95s{ $servicename } = max($ff95s{ $servicename },$ff95);
  39.  
  40.         $ff99s{ $servicename } //= $ff99 ;
  41.         $ff99s{ $servicename } = max($ff99s{ $servicename },$ff99);
  42.         push @{ $byhostname {$hostname} }, "$hostname,$servicename,$daytotals,$min,$max,$average,$ff95,$ff99\n";
  43.     }
  44.  
  45.     close(FILE);
  46.  
  47.     my @array = ([], [], []);
  48.     my $body = "Server-name,Service_name,date,Day_total_hits,Min,Max,Average,95per,99per\n";
  49.     foreach my $key (sort keys( %totals )) {
  50.         my @fullstops = $key =~ /\./g;
  51.         my $howmany = @fullstops;
  52.         $averages{$key} = int($averages{$key});
  53.         push @{$array[$howmany]}, "Global,$key,$epoch_time,$totals{$key},$mins{$key},$maxs{$key},$averages{$key},$ff95s{$key},$ff99s{$key}\n";
  54.     }
  55.     for my $i(0..2) {
  56.         for my $line ( @{$array[$i]} ) {
  57.             $body = $body.$line;
  58.  
  59.  }
  60.     }
  61.     foreach my $hostname (sort keys %byhostname) {
  62.         my $rahosts = "@{ $byhostname{$hostname} }";
  63.         $body = $body.$rahosts;
  64.     }
  65.     open F, "> /tmp/ServicesReport.$file_date";
  66.     print F "$body";
  67.  
  68.     sendEmail ($to, $from, $subject, $body);
  69. }
Add Comment
Please, Sign In to add comment