Audit-DBI
view release on metacpan or search on metacpan
lib/Audit/DBI.pm view on Meta::CPAN
diff =>
[
$old_structure,
$new_structure,
comparison_function => sub { ... },
]
See C<diff_structures()> in L<Audit::DBI::Utils> for more information on how to
write custom comparison functions.
=back
=cut
sub record ## no critic (NamingConventions::ProhibitAmbiguousNames)
{
my ( $self, %args ) = @_;
my $limit_rate_timespan = delete( $args{'limit_rate_timespan'} );
my $limit_rate_unique_key = delete( $args{'limit_rate_unique_key'} );
my $dbh = $self->get_database_handle();
# Check required parameters.
foreach my $arg ( qw( event subject_type subject_id ) )
{
next if defined( $args{ $arg } ) && $args{ $arg } ne '';
croak "The argument $arg must be specified.";
}
croak('The argument "limit_rate_timespan" must be a strictly positive integer.')
if defined $limit_rate_timespan && ( $limit_rate_timespan !~ /^\d+$/ || $limit_rate_timespan == 0 );
croak('The argument "limit_rate_unique_key" must be a string with length greater than zero.')
if defined $limit_rate_unique_key && length $limit_rate_unique_key == 0;
croak('Both "limit_rate_timespan" and "limit_rate_unique_key" must be defined.')
if defined $limit_rate_timespan != defined $limit_rate_unique_key;
# Rate limiting.
if ( defined( $limit_rate_timespan ) )
{
if ( !defined( $self->get_cache( key => $limit_rate_unique_key ) ) )
{
# Cache event.
$self->set_cache(
key => $limit_rate_unique_key,
value => 1,
expire_time => $limit_rate_timespan,
);
}
else
{
# No need to log audit event.
return 1;
}
}
# Record the time (unless it was already passed in).
$args{'event_time'} ||= time();
# Store the file and line of the caller, unless they were passed in.
if ( !defined( $args{'file'} ) || !defined( $args{'line'} ) )
{
my ( $file, $line ) = ( caller() )[1,2];
$file =~ s|.*/||;
$args{'file'} = $file
if !defined( $args{'file'} );
$args{'line'} = $line
if !defined( $args{'line'} );
}
my $audit_event = $self->insert_event( \%args );
return defined( $audit_event )
? 1
: 0;
}
=head2 review()
Return the logged audit events corresponding to the criteria passed as
parameter.
my $results = $audit->review(
ip_ranges =>
[
{
include => $boolean,
begin => $begin,
end => $end
},
...
],
subjects =>
[
{
include => $boolean,
type => $type1,
ids => \@id1,
},
{
include => $boolean,
type => $type2,
ids => \@id2,
},
...
],
date_ranges =>
[
{
include => $boolean,
begin => $begin,
end => $end
},
...
],
values =>
[
{
include => $boolean,
name => $name1,
values => \@value1,
},
( run in 2.336 seconds using v1.01-cache-2.11-cpan-140bd7fdf52 )