aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Youri/Check/Output/Mail.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Youri/Check/Output/Mail.pm')
-rw-r--r--lib/Youri/Check/Output/Mail.pm156
1 files changed, 156 insertions, 0 deletions
diff --git a/lib/Youri/Check/Output/Mail.pm b/lib/Youri/Check/Output/Mail.pm
new file mode 100644
index 0000000..eb9a1f2
--- /dev/null
+++ b/lib/Youri/Check/Output/Mail.pm
@@ -0,0 +1,156 @@
+# $Id: Mail.pm 1179 2006-08-05 08:30:57Z warly $
+package Youri::Check::Output::Mail;
+
+=head1 NAME
+
+Youri::Check::Output::Mail - Report results by mail
+
+=head1 DESCRIPTION
+
+This plugin reports results by mail. Additional subplugins handle specific
+formats.
+
+=cut
+
+use warnings;
+use strict;
+use Carp;
+use MIME::Entity;
+use Youri::Utils;
+use base 'Youri::Check::Output';
+
+sub _init {
+ my $self = shift;
+ my %options = (
+ from => '', # mail from header
+ to => '', # mail to header
+ reply_to => '', # mail reply-to header
+ mta => '', # mta path
+ noempty => 1, # don't generate empty reports
+ formats => {},
+ @_
+ );
+
+ croak "no format defined" unless $options{formats};
+ croak "formats should be an hashref" unless ref $options{formats} eq 'HASH';
+
+ $self->{_from} = $options{from};
+ $self->{_to} = $options{to};
+ $self->{_reply_to} = $options{reply_to};
+ $self->{_mta} = $options{mta};
+ $self->{_noempty} = $options{noempty};
+
+ foreach my $id (keys %{$options{formats}}) {
+ print "Creating format $id\n" if $options{verbose};
+ eval {
+ push(
+ @{$self->{_formats}},
+ create_instance(
+ 'Youri::Check::Output::Mail::Format',
+ id => $id,
+ test => $options{test},
+ verbose => $options{verbose},
+ %{$options{formats}->{$id}}
+ )
+ );
+ };
+ print STDERR "Failed to create format $id: $@\n" if $@;
+ }
+
+ croak "no formats created" unless @{$self->{_formats}};
+}
+
+sub _global_report {
+ my ($self, $resultset, $type, $columns, $links) = @_;
+
+ foreach my $format (@{$self->{_formats}}) {
+ my $iterator = $resultset->get_iterator(
+ $type,
+ [ 'package' ]
+ );
+
+ return if $self->{_noempty} && ! $iterator->has_results();
+
+ my $content = $format->get_report(
+ $self->{_time},
+ "$type global report",
+ $iterator,
+ $type,
+ $columns,
+ $links,
+ undef
+ );
+
+ $self->_send_mail(
+ $format->type(),
+ $self->{_to},
+ "$type global report",
+ $content,
+ );
+ }
+}
+
+sub _individual_report {
+ my ($self, $resultset, $type, $columns, $links, $maintainer) = @_;
+
+ foreach my $format (@{$self->{_formats}}) {
+ my $iterator = $resultset->get_iterator(
+ $type,
+ [ 'package' ],
+ { maintainer => [ $maintainer ] }
+ );
+
+ return if $self->{_noempty} && ! $iterator->has_results();
+
+ my $content = $format->get_report(
+ $self->{_time},
+ "$type individual report for $maintainer",
+ $iterator,
+ $type,
+ $columns,
+ $links,
+ $maintainer
+ );
+
+ $self->_send_mail(
+ $format->type(),
+ $maintainer,
+ "$type individual report for $maintainer",
+ $content,
+ );
+ }
+
+}
+
+sub _send_mail {
+ my ($self, $type, $to, $subject, $content) = @_;
+
+ return unless $content;
+
+ my $mail = MIME::Entity->build(
+ 'Type' => $type,
+ 'From' => $self->{_from},
+ 'Reply-To' => $self->{_reply_to},
+ 'To' => $to,
+ 'Subject' => $subject,
+ 'Data' => $$content
+ );
+
+ if ($self->{_test}) {
+ $mail->print(\*STDOUT);
+ } else {
+ open(MAIL, "| $self->{_mta} -t -oi -oem") or die "Can't open MTA program: $!";
+ $mail->print(\*MAIL);
+ close MAIL;
+ }
+}
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (C) 2002-2006, YOURI project
+
+This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
+
+=cut
+
+1;