Mail-Decency

 view release on metacpan or  search on metacpan

lib/Mail/Decency/LogParser/Aggregator.pm  view on Meta::CPAN


Intervals in strftime format for L<DateTime>

=cut

has interval_formats => ( is => 'rw', isa => 'ArrayRef[Str]', default => sub { [] } );

=head2 maintenance_ttl : Int

Maintenance Time To Live. In maintenance mode, all entries from the database older then (now - ttl) will be wiped.

=cut
has maintenance_ttl => ( is => 'rw', isa => 'Int', default => 86400 * 90 );

=head2 schema_definition : ArrayRef[Str]

Schema for Aggregator is:

=over

=item * Aggregator

=over

=item * (ip|from_domain|to_domain)

=over

=item * (ip|from_domain|to_domain)

Varchar 255 (39 for IP) .. 

=item * type

Varchar 25 .. either sent, bounced or reject

=item * interval

Varchar 25 .. the interval value, such as '2010-06-17'

=item * format

Varchar 25 .. the interval format, such as '%Y-%m-%d'

=item * counter

Integer .. the amount 

=item * last_update

Integer (timestamp) .. last time updated

=back

=back

=back

=cut

has schema_definition => ( is => 'ro', isa => 'HashRef[HashRef]', default => sub {
    {
        aggregator => {
            ip => {
                ip          => [ varchar => 39 ],
                type        => [ varchar => 25 ], # bounced, sent, reject
                interval    => [ varchar => 25 ],
                format      => [ varchar => 25 ],
                counter     => 'integer',
                transfer    => 'integer',
                last_update => 'integer',
                -unique     => [ 'ip', 'type', 'interval', 'format' ]
            },
            from_domain => {
                from_domain => [ varchar => 255 ],
                type        => [ varchar => 25 ], # bounced, sent, reject
                interval    => [ varchar => 25 ],
                format      => [ varchar => 25 ],
                counter     => 'integer',
                transfer    => 'integer',
                last_update => 'integer',
                -unique     => [ 'from_domain', 'type', 'interval', 'format' ]
            },
            to_domain => {
                to_domain   => [ varchar => 255 ],
                type        => [ varchar => 25 ], # bounced, sent, reject
                interval    => [ varchar => 25 ],
                format      => [ varchar => 25 ],
                counter     => 'integer',
                transfer    => 'integer',
                last_update => 'integer',
                -unique     => [ 'to_domain', 'type', 'interval', 'format' ]
            },
        }
    };
} );

=head1 METHODS


=head2 setup

=cut

sub setup {
    my ( $self ) = @_;
    $self->config->{ interval_formats } ||= [ '%Y-%m-%d', '%Y-%m', '%Y' ];
    $self->interval_formats( $self->config->{ interval_formats } );
}


=head2 handle_data

Checks wheter incoming mail is whilist for final recipient

=cut

sub handle_data {
    my ( $self, $parsed_ref ) = @_;
    
    # no relevant



( run in 0.621 second using v1.01-cache-2.11-cpan-39bf76dae61 )