/usr/lib/ifmail/fido.daily is in ifmail 2.14tx8.10-22.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | #!/usr/bin/perl
#
# fido.daily -- resume your ifcico, iftoss, ifmail, and ifnews logs
#
# by Joaquim Baptista, px@fct.unl.pt
#
# Placed on the public domain. If you make significant improvements on
# this script, please send them to me so that I can mantain a "reference"
# version. This script works with ifmail28; future versions may break it.
#
# Example usage from cron, before rotating the logs:
# fido.daily iflog | mail -s 'Daily Fidonet report' sysop
#
# v1.1 -- Ignore "@somenet" in addresses like "2:362/42@fidonet" to avoid
# multiple entries for the same node. Add -s option to select
# nodes. Avoid dupplicate lines in the table of messages sent.
# Add report of period covered.
#
# v1.0 -- First release
#
# Modified by kao@linux.it
#
use Getopt::Std;
getopts("s:") || die "usage: $0 [-s pattern] [file...]\n";
if ($opt_s ne "") { $opt_s =~ s/([^a-zA-Z0-9\s])/\\$1/g; }
$first="zzz 99";
$last= " ";
while (<>) {
if (/^([A-Z][a-z][a-z] [ \d]\d )/) {
$date= substr($_,0,15);
if ($date lt $first) { $first=$date; }
if ($last lt $date ) { $last=$date; }
}
if (/ifcico\[(\d+)\]: calling\s+([^\s@]+)/ ) {
$call{$1}=$2;
$attempts{$2}++;
}
elsif (/ifcico\[(\d+)\]: chat got "CONNECT"/) {
$conn{$call{$1}}++;
}
elsif (/ifcico\[(\d+)\]: chat got "BUSY"/) {
$busy{$call{$1}}++;
}
elsif (/ifcico\[(\d+)\]: chat got "NO CARRIER"/) {
$noca{$call{$1}}++;
}
elsif (/ifcico\[(\d+)\]: received (\d+) bytes in (\d+)/) {
$bytes_rcvd{$call{$1}} += $2;
$seconds_rcvd{$call{$1}} += $3;
}
elsif (/ifcico\[(\d+)\]: sent (\d+) bytes in (\d+)/) {
$bytes_sent{$call{$1}} += $2;
$seconds_sent{$call{$1}} += $3;
}
elsif (/iftoss\[(\d+)\]: packet from node ([^\s@]+)/) {
$toss{$1}= $2;
}
elsif (/iftoss\[(\d+)\]: No newsgroup for area tag (\S+)/) {
$toss_area{$2}++;
}
elsif (/iftoss\[(\d+)\]: end (\d+) echomail, (\d+)/) {
$tosskeys{$toss{$1}} ++;
$echomail{$toss{$1}} += $2;
$netmail{$toss{$1}} += $3;
}
elsif (/ifmail\[(\d+)\]: route: ([^\s@]+)/) {
$ifmail{$2}++;
}
elsif (/ifnews\[(\d+)\]: route: ([^\s@]+)/) {
$snews{$1}= $2;
}
elsif (/ifnews\[(\d+)\]: end input (\d+)/) {
$ifnewskeys{$snews{$1}} ++;
$ifnewscount{$snews{$1}} += $2;
}
elsif (/ifcico\[(\d+)\]: start inbound/) {
$inb{$1} = $1;
$inbcount{$1}++;
}
elsif (/ifcico\[(\d+)\]: remote operator: ([\S ]*)/) {
$inbkeys{$inb{$1}} = $2;
}
elsif (/ifcico\[(\d+)\]: remote time: ([\S ]*)/) {
$inbtime{$inb{$1}} = $2;
}
}
print "Report period:\n From $first\n To $last\n\n";
print "Call-out systems (ifcico):\n";
print "Attempts Busy NoCa Conn Time Received Sent System\n";
for $s (sort keys %attempts) {
next if ($opt_s ne "") && ($s !~ /$opt_s/o);
printf("%7d %3d %3d %3d %s %6dKb %4dKb %s\n",
$attempts{$s}, $busy{$s}, $noca{$s}, $conn{$s},
&mmss($seconds_rcvd{$s}+$seconds_sent{$s}),
$bytes_rcvd{$s}/1024, $bytes_sent{$s}/1024, $s);
}
print "\n\nMessages received by system (iftoss):\nEchomail Netmail Route\n";
for $s (sort keys %tosskeys) {
next if ($opt_s ne "") && ($s !~ /$opt_s/o);
printf("%7d %7d %s\n", $echomail{$s}, $netmail{$s}, $s);
}
print "\n\nMessages sent by system (ifnews+ifmail):\nEchomail Netmail Route\n";
%aux=(%ifmail, %ifnewskeys);
for $s (sort (keys %aux)) {
next if ($opt_s ne "") && ($s !~ /$opt_s/o);
printf("%7d %7d %s\n", $ifnewscount{$s}, $ifmail{$s}, $s);
}
print "\n\nCall-in systems (ifcico):\n";
printf("%-20s%s\n","Time","Operator");
for $s (sort keys %inbcount) {
next if ($opt_s ne "") && ($s !~ /$opt_s/o);
printf("%-20s%s\n",
$inbtime{$s}, $inbkeys{$s});
}
if (%toss_area) {
print "\n\nMessages not tossed for lack of area tag (iftoss):\nNumber Area tag\n";
for $a (sort keys %toss_area) {
printf("%5d %s\n", $toss_area{$a}, $a);
} }
exit 0;
sub mmss {
local($s)= @_;
sprintf("%4d:%2.2d", $s/60, $s-int($s/60)*60);
}
|