RADIUS-XMLParser
view release on metacpan or search on metacpan
RADIUS/XMLParser.pm view on Meta::CPAN
use File::Basename;
use File::Spec;
use Storable qw(lock_store lock_retrieve);
use Carp;
use IO::File;
use XML::Writer;
our $VERSION = '2.30';
my $interimUpdate;
my $writer;
my $labelref;
my $mapRef;
my $startDbm;
my $interimDbm;
my $daysForOrphan = 1;
my $purgeOrphan = 0;
my $writeAllEvents = 0;
my $outputDir;
my $orphanDir;
my $xmlencoding = "utf-8";
my %map;
my @labels;
my %tags = ();
my %event;
my %start;
my %stop;
my %interim;
#--------------------------------------------------
# Constructor
#--------------------------------------------------
sub new {
my $this = shift;
my $class = ref($this) || $this;
my $ref = shift;
my %params = %$ref;
#Load parameters if any
$mapRef = $params{MAP} if $params{MAP};
$purgeOrphan = $params{AUTOPURGE} if $params{AUTOPURGE};
$daysForOrphan = $params{DAYSFORORPHAN} if $params{DAYSFORORPHAN};
$writeAllEvents = $params{ALLEVENTS} if $params{ALLEVENTS};
$xmlencoding = $params{XMLENCODING} if $params{XMLENCODING};
$outputDir = $params{OUTPUTDIR} if $params{OUTPUTDIR};
$orphanDir = $params{ORPHANDIR} if $params{ORPHANDIR};
%map = %$mapRef if $mapRef;
#Get current directory
my $curdir = File::Spec->tmpdir();
$outputDir = $curdir if ( not defined $outputDir );
$orphanDir = $curdir if ( not defined $orphanDir );
#Get orphan files
$startDbm = File::Spec->catfile( $orphanDir, "orphan.start" );
$interimDbm = File::Spec->catfile( $orphanDir, "orphan.interim" );
my $self = {};
bless $self => $class;
#Load orphan start and interim hash (if any)
_loadHash();
$self;
}
#--------------------------------------------------
# Clean up orphanage on demand
# Note that this is done at startup, but might
# be required some times to times
# (especially for deamons process)
#--------------------------------------------------
sub flush($) {
my ($self) = @_;
_loadHash();
}
#--------------------------------------------------
# Open log file and parse each line.
# Group then all event based on same session ID
#--------------------------------------------------
sub convert($$) {
my ( $self, $log ) = @_;
#Initialize counters
my $processedLines = 0;
#Open log file to be parsed
croak "Log file not supplied" if ( not defined $log );
#Get absolute path
$log = File::Spec->rel2abs($log);
open( LOG, $log ) or croak "Cannot open file; File=$log; $!";
#Boolean that becomes true (1) when the first blank lines have been skipped.
my $begining_skipped = 0;
#Get each line
while (<LOG>) {
$processedLines++;
# Skip the begining of the log file if it only contains blank lines.
if ( /^(\s)*$/ && !$begining_skipped ) {
next;
} else {
$begining_skipped = 1;
}
# Analyze line
_analyseRadiusLine( $_, $processedLines, $log );
}
#Store file into XML
my $xmlReturnRef = _event2xml($log);
my %xmlReturn = %$xmlReturnRef;
( run in 0.574 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )