0: #!/usr/bin/perl -w
1: #
2: ## nstat - print a little news statistic
3: #
4: ## Lukas Ertl, 1999
5: #
6: ##
7:
8: $newsdir = "/var/spool/news";
9:
10: $group = $ARGV[0];
11:
12: $now = localtime;
13:
14: print <<EOF;
15: nstat - print a little news statistic
16: -------------------------------------
17: $now
18: (Remember: quantity != quality)
19: EOF
20:
21: unless ($group) {
22: print "Which newsgroup? ";
23: chomp ($group = <STDIN>);
24: }
25:
26: print "Some statistics about the newsgroup $group\n";
27:
28: @group = split(/\./, $group);
29:
30: foreach $subdir (@group) {
31: $newsdir = $newsdir . "/" . $subdir;
32: }
33:
34: opendir(NEWS, $newsdir) or die $!;
35:
36: @posts = readdir(NEWS) or die $!;
37:
38: foreach $file (@posts) {
39: $num_of_posts++;
40: if ($file =~ /^\d+$/) {
41: $file = $newsdir . "/" . $file;
42: open(TEMP, $file) or die $!;
43: while (<TEMP>){
44: if (/^From: (.+)$/) {
45: if ($1 =~ /^"(.+)" <(.+\@.+)>$/) {
46: $poster = "$1 <$2>";
47: $posters{$poster}++;
48: } elsif ($1 =~ /(.+\@.+) \((.+)\)/) {
49: $poster = "$2 <$1>";
50: $posters{$poster}++;
51: } else {
52: $posters{$1}++;
53: }
54: }
55: if (/^(X-Newsreader:|X-Mailer:|User-Agent:|X-Newsposter:|X-Http-User-Agent:) (.+)$/) {
56: $readers{$2}++;
57: }
58: next;
59: }
60: }
61: }
62:
63: print "\n\nNumber of postings: $num_of_posts";
64:
65: print "\n\nCount posters, order alphabetically:\n";
66: print "------------------------------------\n\n";
67: foreach $key (sort keys %posters) {
68: print "$key: $posters{$key}\n";
69: push @{$posters_by_posts{$posters{$key}}}, $key;
70: }
71:
72: print "\n\nCount posters, order by postings:\n";
73: print "---------------------------------\n\n";
74: foreach $num (sort {$b <=> $a} keys %posters_by_posts) {
75: print "$num: \n";
76: foreach $poster (sort @{$posters_by_posts{$num}}) {
77: print "\t$poster\n";
78: }
79: }
80:
81: print "\n\nCount newsreaders, order alphabetically:\n";
82: print "----------------------------------------\n\n";
83: foreach $key (sort { $a cmp $b } keys %readers) {
84: print "$key: $readers{$key}\n";
85: push @{$readers_by_posts{$readers{$key}}}, $key;
86: }
87:
88: print "\n\nCount newsreaders, order by postings:\n";
89: print "-------------------------------------\n\n";
90: foreach $count (sort { $b <=> $a } keys %readers_by_posts) {
91: print "$count:\n";
92: foreach $reader (sort @{$readers_by_posts{$count}}) {
93: print "\t$reader\n";
94: }
95: }
96:
97: foreach $key (keys %readers) {
98: if ($key =~ /\bMozilla\b/) {
99: if ($key =~ /X11/) {
100: $readers_by_kind{'Mozilla Linux/Unix'} += $readers{$key};
101: } elsif ($key =~ /Win/) {
102: $readers_by_kind{'Mozilla Windows'} += $readers{$key};
103: } elsif ($key =~ /Macintosh/) {
104: $readers_by_kind{'Mozilla Macintosh'} += $readers{$key};
105: } else {
106: $readers_by_kind{$key} += $readers{$key};
107: }
108: } elsif ($key =~ /\bForte\b/) {
109: $readers_by_kind{'Forte (Free) Agent'} += $readers{$key};
110: } elsif ($key =~ /\bCrossPoint\b/) {
111: $readers_by_kind{'CrossPoint'} += $readers{$key};
112: } elsif ($key =~ /\bGnus\b/) {
113: $readers_by_kind{'Gnus (X)Emacs'} += $readers{$key};
114: } elsif ($key =~ /\bMicrosoft\b/) {
115: $readers_by_kind{'Microsoft Outlook'} += $readers{$key};
116: } elsif ($key =~ /\bKNode\b/) {
117: $readers_by_kind{'KNode'} += $readers{$key};
118: } elsif ($key =~ /\bNN\b/) {
119: $readers_by_kind{'NN'} += $readers{$key};
120: } elsif ($key =~ /(\bTIN\b|\btin\b)/) {
121: $readers_by_kind{'tin'} += $readers{$key};
122: } elsif ($key =~ /\bknews\b/) {
123: $readers_by_kind{'knews'} += $readers{$key};
124: } elsif ($key =~ /\bslrn\b/) {
125: $readers_by_kind{'slrn'} += $readers{$key};
126: } elsif ($key =~ /\btrn\b/) {
127: $readers_by_kind{'trn'} += $readers{$key};
128: } elsif ($key =~ /\bKRN\b/) {
129: $readers_by_kind{'KRN'} += $readers{$key};
130: } elsif ($key =~ /\bkexpress\b/) {
131: $readers_by_kind{'kexpress'} += $readers{$key};
132: } elsif ($key =~ /Xnews\//) {
133: $readers_by_kind{'Xnews'} += $readers{$key};
134: } else {
135: $readers_by_kind{$key} += $readers{$key};
136: }
137: }
138:
139: print "\n\nCount readers, order alphabetically and by kind:\n";
140: print "------------------------------------------------\n\n";
141: foreach $count (sort keys %readers_by_kind) {
142: print "$count: $readers_by_kind{$count}\n";
143: push @{$readers_by_kind_posts{$readers_by_kind{$count}}}, $count;
144: }
145:
146: print "\n\nCount readers, order by postings and by kind:\n";
147: print "---------------------------------------------\n\n";
148: foreach $num (sort { $b <=> $a } keys %readers_by_kind_posts) {
149: print "$num:\n";
150: foreach $reader (sort @{$readers_by_kind_posts{$num}}) {
151: print "\t$reader\n";
152: }
153: } In reply to nstat - Retrieve statistics about a newsgroup when you're using the leafnode newsserver by le
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |