#!/usr/bin/perl
# fixscript will replace this line with require innshellvars.pl
# backlogstat - display backlog to sites
# based on bklog by bill davidsen <davidsen@tmr.com>
# breaks if backlog-directory in innfeed.conf is not "innfeed"
my $dir = "$inn::pathspool/innfeed";
my $Revision = '1.8';
use strict;
use warnings;
use Getopt::Std;
use vars qw($opt_H $opt_h $opt_n $opt_t $opt_k $opt_S $opt_d);
$| = 1;
# option processing
&getopts('HhntkS:d:') || &Usage;
&Usage if $opt_h;
# open the directory;
$dir = $opt_d if $opt_d;
print "$opt_d\n";
chdir($dir) or die "Can't cd to $dir";
opendir(DIR, ".") or die "Can't open dir";
my %nodes;
while (my $name = readdir(DIR)) {
# must be a file, correct name, non-zero size
my $size;
next unless -f $name;
next unless ($size = -s $name);
next unless $name =~ m/.*\.(in|out)put/;
my $io = $1;
(my $nodename = $name) =~ s/\..*//;
# check for only some sites wanted
next if ($opt_S && $nodename !~ /^${opt_S}.*/);
# here we do the counts if asked
if ($opt_n) {
# open the file and count lines
if (open(IN, "<$name")) {
if ($name =~ m/.*\.input/) {
my $offset = <IN> + 0;
seek(IN, $offset, 0);
}
$size = 0;
for ($size = 0; <IN> ; ++$size) {};
close IN;
}
} else {
# get the offset on .input files
if ($name =~ m/.*\.input/ && open(IN, "<$name")) {
my $offset = <IN> + 0;
$size -= $offset;
close IN;
}
}
$nodes{$nodename} = () unless defined $nodes{$nodename};
$nodes{$nodename}->{$io} = ( $opt_k ? $size / 1024 : $size );
}
closedir DIR;
# output the data for each node
if (my $numnodes = keys %nodes) {
if ($opt_H) {
if ($opt_n) {
print " <---------- posts ----------->\n";
} else {
print " <---------- bytes ----------->\n";
}
}
my $ofmt;
if ($opt_k) {
print " input(k) output(k) total(k) Feed Name\n" if $opt_H;
$ofmt = ( $opt_n ? "%10.2f" : "%10.1f" );
} else {
print " input output total Feed Name\n" if $opt_H;
$ofmt = "%10d";
}
for my $node (sort keys %nodes) {
my $hash = $nodes{$node};
my $size_in = $hash->{in} || 0;
my $size_out = $hash->{out} || 0;
my $size_tot = $size_in + $size_out;
printf "${ofmt} ${ofmt} ${ofmt} %s\n",
$size_in, $size_out, $size_tot, $node;
}
} else {
print "NO backlog!\n";
}
exit 0;
sub Usage
{
print "\n"
. "bklog - print innfeed backlog info - v$Revision\n"
. "\n"
. "Format:\n"
. " bklog [ options ]\n"
. "\n"
. "Options:\n"
. " -H output a header at the top of the output\n"
. " -k scale all numbers in k (1024) units\n"
. " -n count number of arts, not bytes of backlog filesize\n"
. " Note: this may be SLOW for large files!\n"
. " -Sxx Display only site names starting with xx\n"
. " -d dir Use \"dir\" instead of \$pathspool/innfeed\n"
. "\n"
. " -h HELP - this is all, you got it!\n"
. "\n";
exit 1;
}
syntax highlighted by Code2HTML, v. 0.9.1