Apache-ParseLog
view release on metacpan or search on metacpan
ParseLog.pm view on Meta::CPAN
the log file calculated as the "total hit").
As such, the hit count obviously can be misleading in the sense of "how
many visitors have actually visited my site?", especially if the
pages of your site contain many images (because each image is counted as
one hit).
Apache::ParseLog provides the methods to obtain such traditional data,
because those data also are very important for monitoring your web
site's activities. However, this module also provides the methods to
obtain the B<unique visitor counts>, i.e., the actual number of "people"
(well, IP or hostname) who visited your site, by date, time, and date
and time.
See the L<"LOG OBJECT METHODS"> for details about those methods.
=item 4
B<Pre-Compiled Regex>
The new pre-compiled regex feature introduced by Perl 5.005 is used (if
you have the version installed on your machine).
For the pre-compiled regex and the new quote-like assignment operator (qr),
see perlop(1) and perlre(1) manpages.
=back
=cut
#######################################################################
# Local variables
local($HOST, $LOGIN, $DATETIME, $REQUEST, $OSTATUS, $LSTATUS, $BYTE, $FILENAME, $ADDR, $PORT, $PROC, $SEC, $URL, $HOSTNAME, $REFERER, $UAGENT);
my(%COUNTRY_BY_CODE) = map {
chomp;
my(@line) = split(/:/);
$line[0] => $line[1]
} <DATA>;
my(%STATUS_BY_CODE) = (
100 => "Continue",
101 => "Switching Protocols",
200 => "OK",
201 => "Created",
202 => "Accepted",
203 => "Non-Authoritative Information",
204 => "No Content",
205 => "Reset Content",
206 => "Partial Content",
300 => "Multiple Choices",
301 => "Moved Permanently",
302 => "Moved Temporarily",
303 => "See Other",
304 => "Not Modified",
305 => "Use Proxy",
400 => "Bad Request",
401 => "Unauthorized",
402 => "Payment Required",
403 => "Forbidden",
404 => "Not Found",
405 => "Method Not Allowed",
406 => "Not Acceptable",
407 => "Proxy Authentication Required",
408 => "Request Time-out",
409 => "Conflict",
410 => "Gone",
411 => "Length Required",
412 => "Precondition Failed",
413 => "Request Entity Too Large",
414 => "Request-URI Too Large",
415 => "Unsupported Media Type",
500 => "Internal Server Error",
501 => "Not Implemented",
502 => "Bad Gateway",
503 => "Service Unavailable",
504 => "Gateway Time-out",
505 => "HTTP Version not supported",
);
my(%M2N) = (
'Jan' => '01',
'Feb' => '02',
'Mar' => '03',
'Apr' => '04',
'May' => '05',
'Jun' => '06',
'Jul' => '07',
'Aug' => '08',
'Sep' => '09',
'Oct' => '10',
'Nov' => '11',
'Dec' => '12',
);
#######################################################################
# Constructor
#######################################################################
=pod
=head1 CONSTRUCTOR
To construct an Apache::ParseLog object,B<new()> method is available
just like other modules.
The C<new()> constructor returns an Apache::ParseLog base object with
which to obtain basic server information as well as to construct
B<log objects>.
=cut
#######################################################################
# new([$path_to_httpd.conf]); returns ParseLog object
=pod
=head2 New Method
B<C<new([$path_to_httpd_conf[, $virtual_host]]);>>
With the B<C<new()>> method, an Apache::ParseLog object can be created
in three different ways.
ParseLog.pm view on Meta::CPAN
Returns a hash containing the file names relative to the F<DocumentRoot>
of the server as keys, and the hit count for each key as values.
=cut
sub file {
my($this) = shift;
return %{($this->{'file'} || undef)};
}
######################################################################
# querystring(); returns %querystring
=pod
=item *
C<querystring();>
%querystring = $logobject->querystring();
Returns a hash containing the query string
as keys, and the hit count for each key as values.
=cut
sub querystring {
my($this) = shift;
return %{($this->{'querystring'} || undef)};
}
######################################################################
# proto(); returns %proto
=pod
=item *
C<proto();>
%proto = $logobject->proto();
Returns a hash containing the protocols used (HTTP/1.0, HTTP/1.1, etc.)
as keys, and the hit count for each key as values.
=cut
sub proto {
my($this) = shift;
return %{($this->{'proto'} || undef)};
}
######################################################################
# lstatus(); returns %lstatus
=pod
=item *
C<lstatus();>
%lstatus = $logobject->lstatus();
Returns a hash containing HTTP codes and messages (e.g. "404 Not Found")
for the last status (i.e., when the httpd finishes processing that
request) as keys, and the hit count for each key as values.
=cut
sub lstatus {
my($this) = shift;
return %{($this->{'lstatus'} || undef)};
}
######################################################################
# byte(); returns %byte
=pod
=item *
C<byte();>
%byte = $logobject->byte();
Returns a hash containing at least a key 'Total' with the total
transferred bytes as its value, and the file extensions (i.e., html,
jpg, gif, cgi, pl, etc.) as keys, and the transferred bytes for each
key as values.
=cut
sub byte {
my($this) = shift;
return %{($this->{'byte'} || undef)};
}
######################################################################
# bytebydate(); returns %bytebydate
=pod
=item *
C<bytebydate();>
%bytebydate = $logobject->bytebydate();
Returns a hash containing date (mm/dd/yyyy) as keys, and the hit
count for each key as values.
=cut
sub bytebydate {
my($this) = shift;
return %{($this->{'bytebydate'} || undef)};
}
######################################################################
# bytebytime(); returns %bytebytime
=pod
=item *
C<bytebytime();>
ParseLog.pm view on Meta::CPAN
the F<ServerName>) visited as keys, and the hit count for each key as
values. (LogFormat C<%a>)
=cut
sub addr {
my($this) = shift;
return %{($this->{'addr'} || undef)};
}
######################################################################
# filename(); returns %filename
=pod
=item *
C<filename();>
%filename = $logobject->filename();
Returns a hash containing the absolute paths to the files as keys, and
the hit count for each key as values. (LogFormat C<%f>)
=cut
sub filename {
my($this) = shift;
return %{($this->{'filename'} || undef)};
}
######################################################################
# hostname(); returns %hostname
=pod
=item *
C<hostname();>
%hostname = $logobject->hostname();
Returns a hash containing the hostnames of the visitors as keys, and
the hit count for each key as values. (LogFormat C<%v>)
=cut
sub hostname {
my($this) = shift;
return %{($this->{'hostname'} || undef)};
}
######################################################################
# ostatus(); returns %ostatus
=pod
=item *
C<ostatus();>
%ostatus = $logobject->ostatus();
Returns a hash containing HTTP codes and messages (e.g. "404 Not Found")
for the original status (i.e., when the httpd starts processing that
request) as keys, and the hit count for each key as values.
=cut
sub ostatus {
my($this) = shift;
return %{($this->{'ostatus'} || undef)};
}
######################################################################
# port(); returns %port
=pod
=item *
C<port();>
%port = $logobject->port();
Returns a hash containing the port used for the transfer as keys, and
the hit count for each key as values (there will probably be the only
one key-value pair value for each server). (LogFormat C<%p>)
=cut
sub port {
my($this) = shift;
return %{($this->{'port'} || undef)};
}
######################################################################
# proc(); returns %proc
=pod
=item *
C<proc();>
%proc = $logobject->proc();
Returns a hash containing the process ID of the server used for
each file transfer as keys, and the hit count for each key as values.
(LogFormat C<%P>)
=cut
sub proc {
my($this) = shift;
return %{($this->{'proc'} || undef)};
}
######################################################################
# sec(); returns %sec
=pod
=item *
C<sec();>
( run in 1.308 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )