"John Doe" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
> Robert Hicks am Dienstag, 10. Januar 2006 18.16:
> > I have an application log that shows the "time", "id" and "type" for a
user
> > logging in. A short except looks like this:
> >
> > 19/12/2005 07:28:37  User (guest) logging in from (LIMS-CIT) - Assigned
> > Userno (7045)
> > 19/12/2005 07:32:06  User (guest) logging in from (LIMS-CIT) - Assigned
> > Userno (1959)
> > 19/12/2005 07:51:38  User (guest) logging in from (LIMS-CIT) - Assigned
> > Userno (7601)
> > 19/12/2005 07:54:10  User (guest) logging off - Userno (7601)
> >
> Are you interested in one specific Userno only, or do you want the login
times
> for all Usernos?
>
> What do you mean by "could log in and log out multiple times"? In
parallel, or
> sequential? If parallel: Are different Usernos assigned for the same user
> logged in multiple times?
>
I am not really interested in the "user" per se just the "Userno" but that
can appear several times in the log
for both logins and logouts.

So I need to first find the login line and Userno and then find the first
logout line with the Userno and then
do a time diff.

> A hash (or hash of hashes / hash of arrays) could be useful to lookup
Usernos
> or login times.

I am reading up on the HoH as well.

> Have you some code to post, f.e. the part extracting the wanted info from
the
> lines?

I have only created a regex so far to split the information out and doing
some counts. Code is below:

use strict;
use warnings;
use English;
use Carp;

my $filename = 'test.log';
open my $LOG, '<', $filename or croak "Can't open '$filename': $OS_ERROR";

# Test line from logfile
#$_ = "19/12/2005 08:53:31 ECP3.2.01.1008I : User (guest) logging in from
(LIMS-CIT) - Assigned Userno (A50C)";

# This parses a login entry
while (<$LOG>) {

    my ( $date, $time, $ecp, $login_message, $login_type, $login_loc,
$userno,
        $userid )
        = /                     # regex begins
    ^                           # string anchor
    (\d{2}.\d{2}.\d{4})         # $date
    \                           # literal space
    (\d+:\d+:\d+)               # $time
    \                           # literal space
    (ECP\d.\d.\d{2}.\w{5})      # $ecp
    \                           # literal space
    :                           # literal :
    \                           # literal space
    (User\s\([\S.]+\))          # $login_message
    \                           # literal space
    (logging\sin)               # $login_type
    \                           # literal space
    (from\s\([\S.]+\))          # $login_loc
    \                           # literal space
    -                           # literal -
    \                           # literal space
    (Assigned\sUserno)          # $userno
    \                           # literal space
    \(                          # literal (
    (\w{4})                     # $userid
    \)                          # literal )
    /xms;                       # regex ends

    print join "\n", $date, $time, $ecp, $login_message, $login_type,
$login_loc, $userno, $userid, "\n";
    last;  # I only want one line returned from the log for testing
}

This prints out:

19/12/2005
07:28:37
ECP3.2.01.1008I
User (guest)
logging in
from (LIMS-CIT)
Assigned Userno
7045






-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to