# # Monitorix - A lightweight system monitoring tool. # # Copyright (C) 2005-2013 by Jordi Sanfeliu # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # package emailreports; use strict; use warnings; use Monitorix; use MIME::Lite; use LWP::UserAgent; use Exporter 'import'; our @EXPORT = qw(emailreports_send); sub emailreports_send { my $myself = (caller(0))[3]; my ($config, $report, $when, $debug) = @_; my $emailreports = $config->{emailreports}; my $n; my $base_cgi = $config->{base_cgi}; my $imgs_dir = $config->{imgs_dir}; my $images; logger("$myself: sending $report reports."); my $hostname = $ENV{HOSTNAME} ? $ENV{HOSTNAME} : `hostname`; my $html = <<"EOF";
  Host:    $hostname     $report  

EOF my $html_footer = <
Copyright © 2005-2013 Jordi Sanfeliu EOF foreach (split(',', $emailreports->{$report}->{graphs})) { my $g = trim($_); # generate the graphs and get the html source my $url = $emailreports->{url_prefix} . $base_cgi . "/monitorix.cgi?mode=localhost&graph=_$g&when=$when&color=white"; my $ua = LWP::UserAgent->new(timeout => 30); my $response = $ua->request(HTTP::Request->new('GET', $url)); my $data = $response->content; $data =~ s/\n/@@@/g; (my $graph) = $data =~ m/@@@(.*?)/; if(!$graph) { logger("$myself: unable to retrieve graphs from '$g'. It's enabled?"); next; } $graph =~ s/@@@/\n/g; $graph =~ s///g; $graph =~ s/><\/a>/>/g; # get the images my @tmp = (); $n = 1; foreach (split('\n', $graph)) { if(/"); $images->{"image_$g$n"} = ""; if($config->{graphs}->{"_$g$n"}) { ($url) = $_ =~ m/request(HTTP::Request->new('GET', $url)); $images->{"image_$g$n"} = $response->content; } $n++; } else { push(@tmp, $_); } } $html .= join("\n", @tmp); $html .= "
"; } $html .= $html_footer; # create the multipart container and add attachments foreach (split(',', $emailreports->{$report}->{to})) { my $to = trim($_); my $msg = new MIME::Lite( From => $emailreports->{from_address}, To => $to, Subject => "Monitorix: '$report' Report", Type => "multipart/related", Organization => "Monitorix", ); $msg->attach( Type => 'text/html', Data => $html, ); $msg->attach( Type => 'image/png', Id => 'image_logo', Path => $config->{base_dir} . $config->{logo_bottom}, ); while (my ($key, $val) = each(%{$images})) { $msg->attach( Type => 'image/png', Id => $key, Data => $val, ); } $msg->send('smtp', $emailreports->{smtp_hostname}, Timeout => 60); logger("\t$myself: to: $to") if $debug; } } 1;