accesslog_parser.pl
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:3k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. #!/usr/bin/perl
  2. #
  3. # accesslog_parser.pl
  4. #
  5. # Kalle Marjola for project Kannel, based on stat.pl by
  6. # 2000-05-12 jarkko@iki.fi
  7. use strict;
  8. my (%stat_in, %stat_out);
  9. my (%userstat_in, %userstat_out);
  10. my (%dailystat_in, %dailystat_out);
  11. my (%keywordstat_in);
  12. my $failed_send = 0;
  13. my $failed_rout = 0;
  14. my $rejected = 0;
  15. my $start = 0;
  16. my $ends = 0;
  17. my $line;
  18. while ($line = <STDIN>) {
  19.     chomp($line);
  20.     # does string begin with date
  21.     if ($line =~ /^(dddd)-(dd)-(dd)s+(dd):dd:dds+(.*)$/) {
  22. my ($year, $month, $day, $hour, $msg) =  ($1, $2, $3, $4, $5);
  23. my ($sender, $receiver, $keyword) = 
  24.     ($msg =~ /[SMSC:[^]]*] [[^:]*:([^]]*)] [[^:]*:([^]]*)] [[^:]*:(w*)/i);
  25. if ($msg =~ /receive sms/i) {
  26.     $stat_in{$sender}{"$year-$month-$day $hour"}++;
  27.     $userstat_in{$sender}++;
  28.     $dailystat_in{"$year-$month-$day $hour"}++;
  29.     $keywordstat_in{lc($keyword)}{"$year-$month-$day $hour"}++;
  30. } elsif ($msg =~ /sent sms/i) {
  31.     $stat_out{$receiver}{"$year-$month-$day $hour"}++;
  32.     $userstat_out{$receiver}++;
  33.     $dailystat_out{"$year-$month-$day $hour"}++;
  34. } elsif ($msg =~ /failed send sms/i) {
  35.     $failed_send++;
  36. } elsif ($msg =~ /failed routing sms/i) {
  37.     $failed_rout++;
  38. } elsif ($msg =~ /rejected/i) {
  39.     $rejected++;
  40. } elsif ($msg =~ /log begins/i) {
  41.     $start++;
  42. } elsif ($msg =~ /log ends/i) {
  43.     $ends++;
  44. }
  45.     }
  46. }
  47. my $key;
  48. my $key2;
  49. # daily/hourly user (phone-number) specific statistics 
  50. print "By phone numbern===============n";
  51. print "Mobile Originated (from user):n";
  52. foreach $key (sort keys %stat_in) {
  53.     print "$key:n";
  54.     foreach $key2 (sort keys %{ $stat_in{$key} } ) {
  55.         print "t$key2 = $stat_in{$key}{$key2}n";
  56.     }
  57.     print "ttttTotal: $userstat_in{$key}nn"; 
  58. }
  59. print "Mobile Terminated (to user):n";
  60. foreach $key (sort keys %stat_out) {
  61.     print "$key:n";
  62.     foreach $key2 (sort keys %{ $stat_out{$key} } ) {
  63. print "t$key2 = $stat_out{$key}{$key2}n";
  64.     }
  65.     print "ttttTotal: $userstat_out{$key}nn"; 
  66. }
  67. # statistics by keyword
  68. my $total;
  69. print "By keywordn==========n";
  70. print "Mobile Originated (from user):n";
  71. foreach $key (sort keys %keywordstat_in) {
  72.     print "$key:n";
  73.     $total = 0;
  74.     foreach $key2 (sort keys %{ $keywordstat_in{$key} } ) {
  75.         print "t$key2 = $keywordstat_in{$key}{$key2}n";
  76. $total += $keywordstat_in{$key}{$key2};
  77.     }
  78.     print "ttttTotal: $totalnn"; 
  79. }
  80. # statistics by hour basic
  81. my ($total_in, $total_out);
  82. print "Total usagen===========n";
  83. print "Mobile Originated (from user):n";
  84. foreach $key (sort keys %dailystat_in) {
  85.     $total_in += $dailystat_in{$key};
  86.     print "$key = $dailystat_in{$key}n";
  87. }
  88. print "ttttTotal: $total_innn"; 
  89. print "Mobile Terminated (to user):n";
  90. foreach $key (sort keys %dailystat_out) {
  91.     $total_out += $dailystat_out{$key};
  92.     print "$key = $dailystat_out{$key}n";
  93. }
  94. print "ttttTotal: $total_outnn"; 
  95. print "$failed_send failed sendings, $failed_rout failed routing, $rejected rejected messagesn";
  96. my $ugly = $start - $ends;
  97. print "$start Kannel start-ups, $ugly crashes/ugly shutdownsn";