Untitled

mail@pastecode.io avatar
unknown
plain_text
8 months ago
2.3 kB
1
Indexable
Never
#!/usr/bin/perl -w
use strict;
use lib '/usr/local/res/pm/';
use web_function;
use Getopt::Std;


# Script che invia una notifica se viene caricato un nuovo file nell'area FTP
# schedulato in crontab gira ogni 5 minuti
# args:
# crs-alert-upload-ftp.pl -t : test configurazione x chiara


# Leggo configurazione
my $FILE_CFG = "/usr/local/res/conf/ftp-alert-upload.json";
# Formato json
#{
#	"directory" : { "mail_to": "mail che ricevono la notifica", "nome" : "nome ftp"}
#} 
my $opts = {};
getopts('t', $opts);


my $cfg_text = '';
open(FILE, '<', $FILE_CFG );
while(my $l = <FILE>) { $cfg_text .= $l; }
close(FILE);
my $json = JSON->new();
my $cfg = $json->decode($cfg_text);

# Test configurazione
if (exists $opts->{t} && $opts->{t} == 1) {
	print "Directory caricate:\n";
	print join("\n", sort keys %{$cfg})."\n";
	print "Tot: " . (scalar keys %{$cfg}) ."\n";
	exit;
}


# scorro tra le directory
foreach my $k (sort keys %{$cfg}) {
	# Notifica nuovi file per maccione
	&find_new_file({ 
		path 	=> $k, 
		ago_n 	=> 5, # 5 minuti
		mail_to => $cfg->{$k}->{mail_to},
	        nome 	=> $cfg->{$k}->{nome}
	});

}


sub find_new_file {
        my $args = shift;
        # * mandatory
        my $path 	= $args->{path}; # * path dove effettuare la ricerca
        my $mail_to 	= $args->{mail_to}; # * mail dove notificare
	my $nome	= $args->{nome}; # nome area FTP
        # $ago_n = file + nuovi di X minuti fa. Default: 800 minuti
        my $ago_n = exists $args->{ago_n} ? $args->{ago_n} : 5; 

        # cerco nuovi file
        my $find_command = `find $path -type f -newermt "$ago_n minutes ago"`;
        
        # se trovo nuovi file
        if($find_command ne '') {
            my @files = split("\n", $find_command);
            # Elimino path dai file 
            for(my $i = 0;$i < scalar @files; $i++) {
                $files[$i] =~ s/$path//;
            }
	
	    # Invio la notifica
	    my $content = join("<br>\n", @files);

	    my $mail_args = {
		from    => 'noreply@resbinaria.com',
		to     => $mail_to,
		subject => "Nuovi file nell'area FTP $nome",
		content => qq(
			Sono stati caricati nuovi file nell'area FTP $nome:<br>
			$content
		),
		no_restful_log => 1,
	    };

	    &web_function::email_to($mail_args);
        }
}
Leave a Comment