innreport feature request ...
Fabien Tassin
fta at oleane.net
Wed Sep 29 21:06:50 UTC 1999
According to The Hermit Hacker:
>
> NNRP Readership Statistics are great...but how hard would it be to put a
> 'summary' report just over top of it, that took:
>
> pm3-56k-24.tht.net
> pm3-56k-4.tht.net
> pm3-56k-7.tht.net
>
> and summarized it as just *.tht.net, and gave totals for that?
it's not very difficult.
Just try this (untested) patch.
--
Fabien Tassin -+- fta at oleane.net
-- Attached file included as plaintext by Listar --
*** innreport.conf.in.orig Fri Jun 25 11:03:03 1999
--- innreport.conf.in Wed Sep 29 23:00:32 1999
***************
*** 94,100 ****
};
};
};
!
section prog_type {
# skip true; # used to skip a section.
title "Log entries by program:";
--- 94,100 ----
};
};
};
!
section prog_type {
# skip true; # used to skip a section.
title "Log entries by program:";
***************
*** 303,311 ****
name "%Accpt";
format_name "%6s";
format "%4d%%";
! value "$innd_offered{$key} == 0 ? 0 :
$innd_accepted{$key} / $innd_offered{$key} * 100";
! total "total(%innd_offered) == 0 ? 0 :
total(%innd_accepted) / total(%innd_offered) * 100";
};
column {
--- 303,311 ----
name "%Accpt";
format_name "%6s";
format "%4d%%";
! value "$innd_offered{$key} == 0 ? 0 :
$innd_accepted{$key} / $innd_offered{$key} * 100";
! total "total(%innd_offered) == 0 ? 0 :
total(%innd_accepted) / total(%innd_offered) * 100";
};
column {
***************
*** 378,384 ****
column {
name "%Size";
format_name "%7s";
! value "$inn_flow_size{$key} /
total(%inn_flow_size) * 100";
format "%6.1f%%";
total "100";
--- 378,384 ----
column {
name "%Size";
format_name "%7s";
! value "$inn_flow_size{$key} /
total(%inn_flow_size) * 100";
format "%6.1f%%";
total "100";
***************
*** 386,392 ****
column {
name "KB/sec";
format_name "%7s";
! value "$inn_flow_size{$key} /
$inn_flow_time{$key} / 1024";
format "%7.2f";
total "total(%inn_flow_size) /
--- 386,392 ----
column {
name "KB/sec";
format_name "%7s";
! value "$inn_flow_size{$key} /
$inn_flow_time{$key} / 1024";
format "%7.2f";
total "total(%inn_flow_size) /
***************
*** 468,474 ****
column {
name "KB/sec";
format_name "%7s";
! value "$cnfsstat_rate{$key} /
$cnfsstat_samples{$key} / 1024";
format "%7.2f";
total "total(%cnfsstat_rate) /
--- 468,474 ----
column {
name "KB/sec";
format_name "%7s";
! value "$cnfsstat_rate{$key} /
$cnfsstat_samples{$key} / 1024";
format "%7.2f";
total "total(%cnfsstat_rate) /
***************
*** 1522,1528 ****
name "Pct";
format_name "%4s";
format "%3d%%";
! value "$innxmit_site{$key} ? 100 *
($innxmit_site{$key} -
($innxmit_afail_host{$key} +
$innxmit_hiload{$key} + $innxmit_nospace{$key} +
--- 1522,1528 ----
name "Pct";
format_name "%4s";
format "%3d%%";
! value "$innxmit_site{$key} ? 100 *
($innxmit_site{$key} -
($innxmit_afail_host{$key} +
$innxmit_hiload{$key} + $innxmit_nospace{$key} +
***************
*** 1806,1811 ****
--- 1806,1874 ----
format "%9s";
value "time($nnrpd_times{$key})";
total "time(total(%nnrpd_times))";
+ };
+ };
+
+ section nnrpd_dom_groups {
+ title "NNRP readership statistics (by domain):";
+ data "%nnrpd_dom_connect";
+ sort "$nnrpd_dom_articles{$b} <=> $nnrpd_dom_articles{$a}";
+ numbering true;
+ column {
+ name "System";
+ format "%-30.30s";
+ value "$key";
+ format_total "TOTAL: %-23.23s";
+ total "$num";
+ };
+ column {
+ name "Conn";
+ format_name "%4s";
+ format "%4d";
+ value "$nnrpd_dom_connect{$key}";
+ total "total(%nnrpd_dom_connect)";
+ };
+ column {
+ name "Arts";
+ format_name "%6s";
+ format "%6d";
+ value "$nnrpd_dom_articles{$key}";
+ total "total(%nnrpd_dom_articles)";
+ };
+ column {
+ name "Size";
+ format "%9s";
+ value "bytes($nnrpd_dom_bytes{$key})";
+ total "bytes(total(%nnrpd_dom_bytes))";
+ };
+ column {
+ name "Groups";
+ format_name "%6s";
+ format "%6d";
+ value "$nnrpd_dom_groups{$key}";
+ total "total(%nnrpd_dom_groups)";
+ };
+ column {
+ name "Post";
+ format_name "%4s";
+ format "%4d";
+ value "$nnrpd_dom_post_ok{$key}";
+ total "total(%nnrpd_dom_post_ok)";
+ };
+ column {
+ name "Rej";
+ format_name "%4s";
+ format "%4d";
+ value "$nnrpd_dom_post_rej{$key} + $nnrpd_dom_post_error{$key}"\
+ ;
+ total "total(%nnrpd_dom_post_rej) +
+ total(%nnrpd_dom_post_error)";
+ };
+ column {
+ name "Elapsed";
+ format "%9s";
+ value "time($nnrpd_dom_times{$key})";
+ total "time(total(%nnrpd_dom_times))";
};
};
*** innreport_inn.pm.orig Wed Sep 29 22:28:00 1999
--- innreport_inn.pm Wed Sep 29 22:56:16 1999
***************
*** 276,282 ****
return 1 if $left =~ m/\S+ closed$/o;
# checkpoint
return 1 if $left =~ m/^\S+:\d+ checkpoint /o;
! # if ($left =~ /(\S+):\d+ checkpoint seconds (\d+) accepted (\d+)
# refused (\d+) rejected (\d+)$/) {
# # Skipped...
# my ($server, $seconds, $accepted, $refused, $rejected) =
--- 276,282 ----
return 1 if $left =~ m/\S+ closed$/o;
# checkpoint
return 1 if $left =~ m/^\S+:\d+ checkpoint /o;
! # if ($left =~ /(\S+):\d+ checkpoint seconds (\d+) accepted (\d+)
# refused (\d+) rejected (\d+)$/) {
# # Skipped...
# my ($server, $seconds, $accepted, $refused, $rejected) =
***************
*** 324,330 ****
}
# time (from the Greco's patch)
# ME time X idle X(X) artwrite X(X) artlink X(X) hiswrite X(X) hissync
! # X(X) sitesend X(X) artctrl X(X) artcncl X(X) hishave X(X) hisgrep X(X)
# perl X(X) python X(X)
# Note : some parameters are optional because several versions of this
# patch exist.
--- 324,330 ----
}
# time (from the Greco's patch)
# ME time X idle X(X) artwrite X(X) artlink X(X) hiswrite X(X) hissync
! # X(X) sitesend X(X) artctrl X(X) artcncl X(X) hishave X(X) hisgrep X(X)
# perl X(X) python X(X)
# Note : some parameters are optional because several versions of this
# patch exist.
***************
*** 429,435 ****
if $25 && $innd_time_min{'overview write'} > $24 / ($25 || 1);
$innd_time_max{'overview write'} = $24 / ($25 || 1)
if $25 && $innd_time_max{'overview write'} < $24 / ($25 || 1);
! }
}
}
return 1;
--- 429,435 ----
if $25 && $innd_time_min{'overview write'} > $24 / ($25 || 1);
$innd_time_max{'overview write'} = $24 / ($25 || 1)
if $25 && $innd_time_max{'overview write'} < $24 / ($25 || 1);
! }
}
}
return 1;
***************
*** 457,463 ****
}
# bad_hosts (appears after a "cant gesthostbyname" from a feed)
return 1 if $left =~ m/\S+ bad_hosts /o;
! # cant read
return 1 if $left =~ m/\S+ cant read/o;
# cant write
return 1 if $left =~ m/\S+ cant write/o;
--- 457,463 ----
}
# bad_hosts (appears after a "cant gesthostbyname" from a feed)
return 1 if $left =~ m/\S+ bad_hosts /o;
! # cant read
return 1 if $left =~ m/\S+ cant read/o;
# cant write
return 1 if $left =~ m/\S+ cant write/o;
***************
*** 863,869 ****
return 1 if $left =~ m/ cant chmod \S+\/innfeed.pid/o;
return 1 if $left =~ m/ tape open failed /o;
return 1 if $left =~ m/ oserr open checkpoint file:/o;
! # ME finishing (quickly)
return 1 if $left =~ m/\(quickly\) /o;
# ME config: value of streaming is not a boolean
return 1 if $left =~ m/config: value of \S+ is not/o;
--- 863,869 ----
return 1 if $left =~ m/ cant chmod \S+\/innfeed.pid/o;
return 1 if $left =~ m/ tape open failed /o;
return 1 if $left =~ m/ oserr open checkpoint file:/o;
! # ME finishing (quickly)
return 1 if $left =~ m/\(quickly\) /o;
# ME config: value of streaming is not a boolean
return 1 if $left =~ m/config: value of \S+ is not/o;
***************
*** 904,910 ****
return 1;
}
# 437 Unwanted site ... in path
! if ($left =~
/(\S+) rejected [^\s]+ \(.*?\) 437 Unwanted site (\S+) in path$/o) {
my ($server, $site) = ($1, $2);
$server = lc $server unless $CASE_SENSITIVE;
--- 904,910 ----
return 1;
}
# 437 Unwanted site ... in path
! if ($left =~
/(\S+) rejected [^\s]+ \(.*?\) 437 Unwanted site (\S+) in path$/o) {
my ($server, $site) = ($1, $2);
$server = lc $server unless $CASE_SENSITIVE;
***************
*** 914,920 ****
return 1;
}
# 437 Unwanted newsgroup "..."
! if ($left =~
/(\S+) rejected [^\s]+ \(.*?\) 437 Unwanted newsgroup \"(\S+)\"$/o) {
my ($server, $group) = ($1, $2);
$server = lc $server unless $CASE_SENSITIVE;
--- 914,920 ----
return 1;
}
# 437 Unwanted newsgroup "..."
! if ($left =~
/(\S+) rejected [^\s]+ \(.*?\) 437 Unwanted newsgroup \"(\S+)\"$/o) {
my ($server, $group) = ($1, $2);
$server = lc $server unless $CASE_SENSITIVE;
***************
*** 924,930 ****
return 1;
}
# 437 Unwanted distribution "..."
! if ($left =~
/(\S+) rejected [^\s]+ \(.*?\) 437 Unwanted distribution \"(\S+)\"$/o) {
my ($server, $dist) = ($1, $2);
$server = lc $server unless $CASE_SENSITIVE;
--- 924,930 ----
return 1;
}
# 437 Unwanted distribution "..."
! if ($left =~
/(\S+) rejected [^\s]+ \(.*?\) 437 Unwanted distribution \"(\S+)\"$/o) {
my ($server, $dist) = ($1, $2);
$server = lc $server unless $CASE_SENSITIVE;
***************
*** 1288,1311 ****
return 1 if $left =~ /perl filtering enabled$/o;
# connect
if ($left =~ /(\S+) connect$/o) {
! my $server = $1;
! $server = lc $server unless $CASE_SENSITIVE;
! $nnrpd_connect{$server}++;
return 1;
}
# group
if ($left =~ /(\S+) group (\S+) (\d+)$/o) {
! my ($server, $group, $num) = ($1, $2, $3);
! if ($num != 0) {
$nnrpd_group{$group} += $num;
my ($hierarchy) = $group =~ /^([^\.]+).*$/o;
$nnrpd_hierarchy{$hierarchy} += $num;
}
return 1;
}
! # post failed
if ($left =~ /(\S+) post failed (.*)$/o) {
! my ($server, $error) = ($1, $2);
$nnrpd_post_error{$error}++;
return 1;
}
--- 1288,1313 ----
return 1 if $left =~ /perl filtering enabled$/o;
# connect
if ($left =~ /(\S+) connect$/o) {
! my $cust = $1;
! $cust = lc $cust unless $CASE_SENSITIVE;
! my $dom = &host2dom($cust);
! $nnrpd_dom_connect{$dom}++;
! $nnrpd_connect{$cust}++;
return 1;
}
# group
if ($left =~ /(\S+) group (\S+) (\d+)$/o) {
! my ($cust, $group, $num) = ($1, $2, $3);
! if ($num) {
$nnrpd_group{$group} += $num;
my ($hierarchy) = $group =~ /^([^\.]+).*$/o;
$nnrpd_hierarchy{$hierarchy} += $num;
}
return 1;
}
! # post failed
if ($left =~ /(\S+) post failed (.*)$/o) {
! my ($cust, $error) = ($1, $2);
$nnrpd_post_error{$error}++;
return 1;
}
***************
*** 1313,1411 ****
return 1 if $left =~ /\S+ post ok/o;
# posts
if ($left =~ /(\S+) posts received (\d+) rejected (\d+)$/o) {
! my ($server, $received, $rejected) = ($1, $2, $3);
! $server = lc $server unless $CASE_SENSITIVE;
! $nnrpd_post_ok{$server} += $received;
! $nnrpd_post_rej{$server} += $rejected;
return 1;
}
# noperm post without permission
if ($left =~ /(\S+) noperm post without permission/o) {
! my $server = $1;
! $server = lc $server unless $CASE_SENSITIVE;
! $nnrpd_post_rej{$server} ++;
return 1;
}
# no_permission
if ($left =~ /(\S+) no_(permission|access)$/o) {
! my $server = $1;
! $server = lc $server unless $CASE_SENSITIVE;
! $nnrpd_no_permission{$server}++;
return 1;
}
# bad_auth
if ($left =~ /(\S+) bad_auth$/o) {
! my $server = $1;
! $server = lc $server unless $CASE_SENSITIVE;
! $nnrpd_no_permission{$server}++;
return 1;
}
# unrecognized + command
if ($left =~ /(\S+) unrecognized (.*)$/o) {
! my ($server, $error) = ($1, $2);
! $server = lc $server unless $CASE_SENSITIVE;
$error = "_null command_" if ($error !~ /\S/);
$error =~ s/^(xmotd) .*$/$1/i if ($error =~ /^xmotd .*$/i);
! $nnrpd_unrecognized{$server}++;
$nnrpd_unrecogn_cmd{$error}++;
return 1;
}
# exit
if ($left =~ /(\S+) exit articles (\d+) groups (\d+)$/o) {
! my ($server, $articles, $groups) = ($1, $2, $3);
! $server = lc $server unless $CASE_SENSITIVE;
! $nnrpd_connect{$server}++ if ($server eq '?');
! $nnrpd_groups{$server} += $groups;
! $nnrpd_articles{$server} += $articles;
return 1;
}
# times
if ($left =~ /(\S+) times user (\S+) system (\S+) elapsed (\S+)$/o) {
! my ($server, $user, $system, $elapsed) = ($1, $2, $3, $4);
! $server = lc $server unless $CASE_SENSITIVE;
! $nnrpd_times{$server} += $elapsed;
return 1;
}
# artstats
if ($left =~ /(\S+) artstats get (\d+) time (\d+) size (\d+)$/o) {
! my ($server, $articles, $time, $bytes) = ($1, $2, $3, $4);
! $server = lc $server unless $CASE_SENSITIVE;
! $nnrpd_bytes{$server} += $bytes;
return 1;
}
# timeout
if ($left =~ /(\S+) timeout$/o) {
! my $server = $1;
! $server = lc $server unless $CASE_SENSITIVE;
! $nnrpd_timeout{$server}++;
return 1;
}
# timeout in post
if ($left =~ /(\S+) timeout in post$/o) {
! my $server = $1;
! $server = lc $server unless $CASE_SENSITIVE;
! $nnrpd_timeout{$server}++;
return 1;
}
# cant read Connection timed out
if ($left =~ /(\S+) cant read Connection timed out$/o) {
! my $server = $1;
! $server = lc $server unless $CASE_SENSITIVE;
! $nnrpd_timeout{$server}++;
return 1;
}
# cant read Operation timed out
if ($left =~ /(\S+) cant read Operation timed out$/o) {
! my $server = $1;
! $server = lc $server unless $CASE_SENSITIVE;
! $nnrpd_timeout{$server}++;
return 1;
}
# cant read Connection reset by peer
if ($left =~ /(\S+) cant read Connection reset by peer$/o) {
! my $server = $1;
! $server = lc $server unless $CASE_SENSITIVE;
! $nnrpd_reset_peer{$server}++;
return 1;
}
# gethostbyaddr: xxx.yyy.zzz != a.b.c.d
--- 1315,1441 ----
return 1 if $left =~ /\S+ post ok/o;
# posts
if ($left =~ /(\S+) posts received (\d+) rejected (\d+)$/o) {
! my ($cust, $received, $rejected) = ($1, $2, $3);
! $cust = lc $cust unless $CASE_SENSITIVE;
! my $dom = &host2dom($cust);
! $nnrpd_dom_post_ok{$dom} += $received;
! $nnrpd_dom_post_rej{$dom} += $rejected;
! $nnrpd_post_ok{$cust} += $received;
! $nnrpd_post_rej{$cust} += $rejected;
return 1;
}
# noperm post without permission
if ($left =~ /(\S+) noperm post without permission/o) {
! my $cust = $1;
! $cust = lc $cust unless $CASE_SENSITIVE;
! my $dom = &host2dom($cust);
! $nnrpd_dom_post_rej{$dom} ++;
! $nnrpd_post_rej{$cust} ++;
return 1;
}
# no_permission
if ($left =~ /(\S+) no_(permission|access)$/o) {
! my $cust = $1;
! $cust = lc $cust unless $CASE_SENSITIVE;
! my $dom = &host2dom($cust);
! $nnrpd_no_permission{$cust}++;
! $nnrpd_dom_no_permission{$dom}++;
return 1;
}
# bad_auth
if ($left =~ /(\S+) bad_auth$/o) {
! my $cust = $1;
! $cust = lc $cust unless $CASE_SENSITIVE;
! my $dom = &host2dom($cust);
! $nnrpd_dom_no_permission{$dom}++;
! $nnrpd_no_permission{$cust}++;
return 1;
}
# unrecognized + command
if ($left =~ /(\S+) unrecognized (.*)$/o) {
! my ($cust, $error) = ($1, $2);
! $cust = lc $cust unless $CASE_SENSITIVE;
! my $dom = &host2dom($cust);
$error = "_null command_" if ($error !~ /\S/);
$error =~ s/^(xmotd) .*$/$1/i if ($error =~ /^xmotd .*$/i);
! $nnrpd_dom_unrecognized{$dom}++;
! $nnrpd_unrecognized{$cust}++;
$nnrpd_unrecogn_cmd{$error}++;
return 1;
}
# exit
if ($left =~ /(\S+) exit articles (\d+) groups (\d+)$/o) {
! my ($cust, $articles, $groups) = ($1, $2, $3);
! $cust = lc $cust unless $CASE_SENSITIVE;
! my $dom = &host2dom($cust) || '?';
! $nnrpd_connect{$cust}++, $nnrpd_dom_connect{$dom}++ if $cust eq '?';
! $nnrpd_groups{$cust} += $groups;
! $nnrpd_dom_groups{$dom} += $groups;
! $nnrpd_articles{$cust} += $articles;
! $nnrpd_dom_articles{$dom} += $articles;
return 1;
}
# times
if ($left =~ /(\S+) times user (\S+) system (\S+) elapsed (\S+)$/o) {
! my ($cust, $user, $system, $elapsed) = ($1, $2, $3, $4);
! $cust = lc $cust unless $CASE_SENSITIVE;
! my $dom = &host2dom($cust);
! $nnrpd_times{$cust} += $elapsed;
! $nnrpd_dom_times{$dom} += $elapsed;
return 1;
}
# artstats
if ($left =~ /(\S+) artstats get (\d+) time (\d+) size (\d+)$/o) {
! my ($cust, $articles, $time, $bytes) = ($1, $2, $3, $4);
! $cust = lc $cust unless $CASE_SENSITIVE;
! my $dom = &host2dom($cust);
! $nnrpd_bytes{$cust} += $bytes;
! $nnrpd_dom_bytes{$cust} += $bytes;
return 1;
}
# timeout
if ($left =~ /(\S+) timeout$/o) {
! my $cust = $1;
! $cust = lc $cust unless $CASE_SENSITIVE;
! my $dom = &host2dom($cust);
! $nnrpd_dom_timeout{$dom}++;
! $nnrpd_timeout{$cust}++;
return 1;
}
# timeout in post
if ($left =~ /(\S+) timeout in post$/o) {
! my $cust = $1;
! $cust = lc $cust unless $CASE_SENSITIVE;
! my $dom = &host2dom($cust);
! $nnrpd_dom_timeout{$dom}++;
! $nnrpd_timeout{$cust}++;
return 1;
}
# cant read Connection timed out
if ($left =~ /(\S+) cant read Connection timed out$/o) {
! my $cust = $1;
! $cust = lc $cust unless $CASE_SENSITIVE;
! my $dom = &host2dom($cust);
! $nnrpd_dom_timeout{$dom}++;
! $nnrpd_timeout{$cust}++;
return 1;
}
# cant read Operation timed out
if ($left =~ /(\S+) cant read Operation timed out$/o) {
! my $cust = $1;
! $cust = lc $cust unless $CASE_SENSITIVE;
! my $dom = &host2dom($cust);
! $nnrpd_dom_timeout{$dom}++;
! $nnrpd_timeout{$cust}++;
return 1;
}
# cant read Connection reset by peer
if ($left =~ /(\S+) cant read Connection reset by peer$/o) {
! my $cust = $1;
! $cust = lc $cust unless $CASE_SENSITIVE;
! my $dom = &host2dom($cust);
! $nnrpd_dom_reset_peer{$dom}++;
! $nnrpd_reset_peer{$cust}++;
return 1;
}
# gethostbyaddr: xxx.yyy.zzz != a.b.c.d
***************
*** 1707,1713 ****
$added = $used - $cnfsstat_used{$buffer};
if ($cycles > $cnfsstat_cycles{$buffer}) {
$added += $size * ($cycles - $cnfsstat_cycles{$buffer});
! }
if ($added > 0) {
$cnfsstat_rate{$buffer} += $added / $period;
$cnfsstat_samples{$buffer}++;
--- 1737,1743 ----
$added = $used - $cnfsstat_used{$buffer};
if ($cycles > $cnfsstat_cycles{$buffer}) {
$added += $size * ($cycles - $cnfsstat_cycles{$buffer});
! }
if ($added > 0) {
$cnfsstat_rate{$buffer} += $added / $period;
$cnfsstat_samples{$buffer}++;
***************
*** 1816,1822 ****
foreach $key (keys (%innd_time_min)) {
$innd_time_min{$key} = 0 if ($innd_time_min{$key} == $MIN);
$innd_time_max{$key} = 0 if ($innd_time_max{$key} == $MAX);
!
#$innd_time_min{$key} /= 1000;
#$innd_time_max{$key} /= 1000;
}
--- 1846,1852 ----
foreach $key (keys (%innd_time_min)) {
$innd_time_min{$key} = 0 if ($innd_time_min{$key} == $MIN);
$innd_time_max{$key} = 0 if ($innd_time_max{$key} == $MAX);
!
#$innd_time_min{$key} /= 1000;
#$innd_time_max{$key} /= 1000;
}
***************
*** 1833,1839 ****
# adjust the crosspost stats.
if (%crosspost) {
foreach $key (keys (%crosspost)) {
! $crosspost_times{$key} = $crosspost_time ?
sprintf "%.2f", $crosspost{$key} / $crosspost_time * 60 : "?";
}
}
--- 1863,1869 ----
# adjust the crosspost stats.
if (%crosspost) {
foreach $key (keys (%crosspost)) {
! $crosspost_times{$key} = $crosspost_time ?
sprintf "%.2f", $crosspost{$key} / $crosspost_time * 60 : "?";
}
}
***************
*** 1873,1883 ****
my $t = sprintf "%02d", $j;
$inn_flow{"$prev_dd $t"} = 0;
}
!
# all the days between (if any)
# well, we can forget them as it is supposed to be a tool
# launched daily.
!
# the beginning of the last day..
for ($j = 0; $j < $h; $j++) {
my $t = sprintf "%02d", $j;
--- 1903,1913 ----
my $t = sprintf "%02d", $j;
$inn_flow{"$prev_dd $t"} = 0;
}
!
# all the days between (if any)
# well, we can forget them as it is supposed to be a tool
# launched daily.
!
# the beginning of the last day..
for ($j = 0; $j < $h; $j++) {
my $t = sprintf "%02d", $j;
***************
*** 2084,2089 ****
--- 2114,2127 ----
$date1 += substr($a, 7, 2);
$date2 += substr($b, 7, 2);
$date1 - $date2;
+ }
+
+ sub host2dom {
+ my $host = shift;
+
+ $host =~ m/^[^\.]+(.*)/;
+ $host =~ m/^[\d\.]+$/ ? "unresolved" : "*$1";
+
}
1;
More information about the inn-workers
mailing list