access-log-matrix.pl
上传用户:liugui
上传日期:2007-01-04
资源大小:822k
文件大小:2k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. #!/usr/local/bin/perl
  2. # access-log-matrix.pl
  3. # Duane Wessels, Dec 1995
  4. # Stdin is a Harvest access log (in the old, non-common logfile format!).
  5. # The output is a matrix of hostnames and log entry types, plus totals.
  6. while (<>) {
  7. chop;
  8. @F = split;
  9. $when = $F[0];
  10. $first = $when unless ($first);
  11. $last = $when;
  12. $what = pop @F;
  13. $size = pop @F;
  14. $host = pop @F;
  15. $HOSTS{$host}++;
  16. $HOSTS{'TOTAL'}++;
  17. if ($what eq 'TCP_DONE') {
  18. $TCP_DONE{$host}++;
  19. $TCP_DONE{'TOTAL'}++;
  20. } elsif ($what eq 'TCP_HIT') {
  21. $TCP_HIT{$host}++;
  22. $TCP_HIT{'TOTAL'}++;
  23. } elsif ($what eq 'TCP_MISS') {
  24. $TCP_MISS{$host}++;
  25. $TCP_MISS{'TOTAL'}++;
  26. } elsif ($what eq 'TCP_MISS_TTL') {
  27. $TCP_MISS_TTL{$host}++;
  28. $TCP_MISS_TTL{'TOTAL'}++;
  29. } elsif ($what eq 'UDP_HIT') {
  30. $UDP_HIT{$host}++;
  31. $UDP_HIT{'TOTAL'}++;
  32. } elsif ($what eq 'UDP_MISS') {
  33. $UDP_MISS{$host}++;
  34. $UDP_MISS{'TOTAL'}++;
  35. } else {
  36. $OTHER{$host}++;
  37. $OTHER{'TOTAL'}++;
  38. }
  39. }
  40. print  '       HOSTNAME: '. `hostname`;
  41. ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdat) = localtime($first);
  42. printf "FIRST LOG ENTRY: %s/%s/%s %.2d:%.2d:%.2dn", $year,$mon+1,$mday, $hour,$min,$sec;
  43. ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdat) = localtime($last);
  44. printf " LAST LOG ENTRY: %s/%s/%s %.2d:%.2d:%.2dn", $year,$mon+1,$mday, $hour,$min,$sec;
  45. print "n";
  46. printf ("%25.25s %5s %5s %5s %5s %5s %5s %5s %5sn",
  47. '',
  48. 'TCP', 'TCP', 'TCP', 'TCP',
  49. 'UDP', 'UDP', '',
  50. '');
  51. printf ("%25.25s %5s %5s %5s %5s %5s %5s %5s %5sn",
  52. 'HOST',
  53. 'HIT', 'MISS', 'TTL', 'DONE',
  54. 'HIT', 'MISS', 'OTHER',
  55. 'TOTAL');
  56. printf ("%25.25s %5s %5s %5s %5s %5s %5s %5s %5sn",
  57. '-'x25,
  58. '-'x5, '-'x5, '-'x5, '-'x5, '-'x5, '-'x5, '-'x5, '-'x5);
  59. foreach $h (sort totalcmp keys %HOSTS) {
  60. next if ($h eq 'TOTAL');
  61. ($a1,$a2,$a3,$a4) = split('.', $h);
  62. ($fqdn, @F) = gethostbyaddr(pack('C4',$a1,$a2,$a3,$a4),2);
  63. $fqdn = $h unless ($fqdn ne '');
  64. printf "%25.25s %5d %5d %5d %5d %5d %5d %5d %5dn",
  65. $fqdn,
  66. $TCP_HIT{$h},
  67. $TCP_MISS{$h},
  68. $TCP_MISS_TTL{$h},
  69. $TCP_DONE{$h},
  70. $UDP_HIT{$h},
  71. $UDP_MISS{$h},
  72. $OTHER{$h},
  73. $HOSTS{$h};
  74. }
  75. printf ("%25.25s %5s %5s %5s %5s %5s %5s %5s %5sn",
  76. '-'x25,
  77. '-'x5, '-'x5, '-'x5, '-'x5, '-'x5, '-'x5, '-'x5, '-'x5);
  78. printf "%25.25s %5d %5d %5d %5d %5d %5d %5d %5dn",
  79. 'TOTAL',
  80. $TCP_HIT{'TOTAL'},
  81. $TCP_MISS{'TOTAL'},
  82. $TCP_MISS_TTL{'TOTAL'},
  83. $TCP_DONE{'TOTAL'},
  84. $UDP_HIT{'TOTAL'},
  85. $UDP_MISS{'TOTAL'},
  86. $OTHER{'TOTAL'},
  87. $HOSTS{'TOTAL'};
  88. exit 0;
  89. sub hostcmp {
  90. $a cmp $b
  91. }
  92. sub totalcmp {
  93. $HOSTS{$b} <=> $HOSTS{$a}
  94. }