#!/usr/bin/perl use warnings; use strict; use DBI; use MIME::Lite; use Data::Dumper; # Variables my $username = 'aseuser'; my $password = 'Mums0001!'; #my $database = 'ase_mums'; my $database = 'ase_lar'; my $db_lar = 'ase_lar'; my $server = 'localhost'; my ( $email_msg, $email_obj, $tools_info, $ref_date ); my $act_tool = 0; my $gd_tool = 0; #my $email_addr = 'alessandro.battilani@gmail.com'; my $email_addr = 'andrea.segalini@aseltd.eu,andrea.carri@aseltd.eu,roberto.savi@aseltd.eu,alessandro.valletta@aseltd.eu,alessandro.battilani@aseltd.eu,corrado@geielettronica.it,luca.chiapponi@aseltd.eu'; my $cc_email_addr = $email_addr; my $from = 'ASE Alert System'; sub getLoggingTime { my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = localtime(time); my $nice_timestamp = sprintf( "%04d%02d%02d %02d:%02d:%02d", $year + 1900, $mon + 1, $mday, $hour, $min, $sec ); return $nice_timestamp; } sub makeEmailMsg { $email_msg = <<"END_MSG"; Alert from ASE
ASE
Alert from ASE: data received on $ref_date.
$tools_info
CompanySitoID CentralinaID Tools Letture NodiNumero NodiLetture Tool Letture Nodi in ErroreStato Tool
END_MSG } sub emailSend { my $msg = MIME::Lite->new( From => $from, To => $email_addr, Cc => $cc_email_addr, Subject => $email_obj, Data => $email_msg ); $msg->attr( "content-type" => "text/html" ); if ($msg->send( 'smtp', "smtps.aruba.it", AuthUser => "alert\@aseltd.eu", AuthPass => "Ase#2013!20\@bat", Port => 465, SSL => 1, Debug => 0 )) { print getLoggingTime() . " - $email_obj\n"; print getLoggingTime() . " - Mail sent to: $email_addr.\n"; } else { print getLoggingTime() . " - Error in sending mail to: $email_addr.\n"; } } my %ToolName = (); my %Tools_infoCompany = (); my %Tools_infoCompanySite = (); print getLoggingTime() . " - pid $$ >> Start execution.\n"; my $dbh = DBI->connect( "DBI:mysql:$db_lar;host=$server", $username, $password ) or die getLoggingTime() . " - Could not connect to database: $DBI::errstr"; my $sth = $dbh->prepare( 'select idCompany, CompanyNameShort, idSite, SiteName, CompanyEmail, SiteAlarmEmail, SendAlarm, UnitNameId, ToolNameID, ToolState from mail_view where SiteName = "Vobarno";' ) or die getLoggingTime() . " - $DBI::errstr"; $sth->execute(); my $ToolNum = $sth->rows; if ( $sth->rows < 0 ) { print getLoggingTime() . " - No rows from TOOLS & UNITS.\n"; } else { while ( my $results = $sth->fetchrow_hashref ) { $ToolName{ $results->{'UnitNameId'} . $results->{'ToolNameID'} } {'idCompany'} = $results->{'idCompany'}; $ToolName{ $results->{'UnitNameId'} . $results->{'ToolNameID'} } {'CompanyNameShort'} = $results->{'CompanyNameShort'}; $ToolName{ $results->{'UnitNameId'} . $results->{'ToolNameID'} } {'idSite'} = $results->{'idSite'}; $ToolName{ $results->{'UnitNameId'} . $results->{'ToolNameID'} } {'SiteName'} = $results->{'SiteName'}; $ToolName{ 'site' . $results->{'idSite'} }{'SiteAlarmEmail'} = $results->{'SiteAlarmEmail'}; $ToolName{ 'site' . $results->{'idSite'} }{'SendAlarm'} = $results->{'SendAlarm'}; $ToolName{ $results->{'idCompany'} }{'CompanyEmail'} = $results->{'CompanyEmail'}; $ToolName{ $results->{'idCompany'} }{'SendAlarm'} = $results->{'SendAlarm'}; $ToolName{ $results->{'UnitNameId'} . $results->{'ToolNameID'} } {'UnitNameId'} = $results->{'UnitNameId'}; $ToolName{ $results->{'UnitNameId'} . $results->{'ToolNameID'} } {'ToolNameID'} = $results->{'ToolNameID'}; $ToolName{ $results->{'UnitNameId'} . $results->{'ToolNameID'} } {'ToolState'} = $results->{'ToolState'}; $ToolName{ $results->{'UnitNameId'} . $results->{'ToolNameID'} } {'LettureNodi'} = "--"; $ToolName{ $results->{'UnitNameId'} . $results->{'ToolNameID'} } {'LettureCatene'} = "--"; $ToolName{ $results->{'UnitNameId'} . $results->{'ToolNameID'} } {'NumeroNodi'} = "--"; $ToolName{ $results->{'UnitNameId'} . $results->{'ToolNameID'} } {'ErroriTotaliLetture'} = "--"; if ( $results->{'ToolState'} eq "Active" ) { $act_tool++; } } } $sth->finish; # Disconnect $dbh->disconnect; $dbh = DBI->connect( "DBI:mysql:$database;host=$server", $username, $password ) or die getLoggingTime() . " - Could not connect to database: $DBI::errstr"; my $stw = $dbh->prepare( "select UnitName, ToolNameID, EventDate, count(EventTime) 'LettureNodi', truncate(Count(EventTime)/max(NodeNum),2) 'LettureCatene', max(NodeNum) 'NumeroNodi' from RAWDATACOR where EventDate = subdate(curdate(),2) group by UnitName, ToolNameID" ) or die getLoggingTime() . " - $DBI::errstr"; $stw->execute(); if ( $stw->rows == 0 ) { print getLoggingTime() . " - No rows from RAWDATACOR.\n"; $email_obj = "ATTENZIONE: nessuna lettura pervenuta!!!"; } else { while ( my $results = $stw->fetchrow_hashref ) { $ToolName{ $results->{'UnitName'} . $results->{'ToolNameID'} } {'LettureNodi'} = $results->{'LettureNodi'}; $ToolName{ $results->{'UnitName'} . $results->{'ToolNameID'} } {'LettureCatene'} = $results->{'LettureCatene'}; $ToolName{ $results->{'UnitName'} . $results->{'ToolNameID'} } {'NumeroNodi'} = $results->{'NumeroNodi'}; $ref_date = $results->{'EventDate'}; if ( substr( $results->{'ToolNameID'}, 0, 2 ) eq "GD" ) { $gd_tool++; } } if ( ( $act_tool + $gd_tool ) == $stw->rows ) { $email_obj = "Tutte le letture pervenute."; } else { $email_obj = "ATTENZIONE: alcune letture non pervenute!!!"; } print getLoggingTime() . " - tool attivi: $act_tool - GD tool: $gd_tool - righe query: " . $stw->rows . ".\n"; } $stw->finish; my $ste = $dbh->prepare( "select UnitName, ToolNameID, count(val0) 'ErroriTotaliLetture' from RAWDATACOR where EventDate = ? and val0 = 'Err1' group by ToolNameID" ) or die getLoggingTime() . " - $DBI::errstr"; $ste->bind_param( 1, $ref_date ); $ste->execute(); while ( my $results = $ste->fetchrow_hashref ) { $ToolName{ $results->{'UnitName'} . $results->{'ToolNameID'} } {'ErroriTotaliLetture'} = $results->{'ErroriTotaliLetture'}; } $ste->finish; # Disconnect $dbh->disconnect; # Ciclo x email totale rilevazioni foreach my $tool ( sort grep { /DT|PT/ } keys %ToolName ) { if ( $ToolName{$tool}{'ToolState'} eq 'Monitoring Completed' ) { next; #skip dei tool nello stato del test } my $tool_part = "" . $ToolName{$tool}{'CompanyNameShort'} . "" . $ToolName{$tool}{'SiteName'} . ""; $tool_part .= "" . $ToolName{$tool}{'UnitNameId'} . "" . $ToolName{$tool}{ToolNameID} . ""; $tool_part .= "" . $ToolName{$tool}{'LettureNodi'} . "" . $ToolName{$tool}{'NumeroNodi'} . ""; $tool_part .= "" . $ToolName{$tool}{'LettureCatene'} . ""; $tool_part .= "" . $ToolName{$tool}{'ErroriTotaliLetture'} . "" . $ToolName{$tool}{'ToolState'} . "\n"; if ( $ToolName{$tool}{'LettureNodi'} ne "--" ) { $tools_info .= ""; } elsif ( $ToolName{$tool}{'ToolState'} eq 'Active' ) { if ( $ToolName{ 'site' . $ToolName{$tool}{'idSite'} }{'SiteAlarmEmail'} eq "" ) { $Tools_infoCompany{ $ToolName{$tool}{'idCompany'} } .= "" . $tool_part; } else { $Tools_infoCompanySite{ $ToolName{$tool}{'idSite'} } .= "" . $tool_part; } $tools_info .= ""; } else { $tools_info .= ""; } $tools_info .= $tool_part; } makeEmailMsg(); emailSend(); #print $email_msg;print "OOOOOOOOOOOOOO=====================OOOOOOOOOOOOOO\n"; #print Dumper(\%ToolName); foreach my $comp ( keys %Tools_infoCompany ) { $tools_info = $Tools_infoCompany{$comp}; my $comp_email = $ToolName{$comp}{'CompanyEmail'}; my $send_alarm = $ToolName{$comp}{'SendAlarm'}; print getLoggingTime() . " - Company email: $comp_email - Send Alarm: $send_alarm\n"; if ( $send_alarm == 1 ) { $email_addr = $ToolName{$comp}{'CompanyEmail'}; makeEmailMsg(); emailSend(); #print $email_msg;print "XXXXXXXXXXXXX=====================XXXXXXXXXXXXX\n"; } } foreach my $site ( keys %Tools_infoCompanySite ) { $tools_info = $Tools_infoCompanySite{$site}; my $site_email = $ToolName{ 'site' . $site }{'SiteAlarmEmail'}; my $send_alarm = $ToolName{ 'site' . $site }{'SendAlarm'}; print getLoggingTime() . " - Site email: $site_email - Send Alarm: $send_alarm\n"; if ( $send_alarm == 1 ) { $email_addr = $site_email; makeEmailMsg(); emailSend(); #print $email_msg;print "|||||||||||||||=====================|||||||||||||||\n"; } } print getLoggingTime() . " - pid $$ >> Execution ended.\n";