#! /usr/bin/perl package monitoring; use Net::SSH::Expect; use Net::SCP::Expect; use Net::SFTP::Foreign; use Net::FTP; use strict; # # this function execute command on remote host # exec_cmd__(hostname, username, password, port, command) # sub exec_cmd__ { die $@ unless (($#_+1)==5); my $host=shift; my $user=shift; my $pass=shift; my $port=shift; my $command=shift; my $ssh = Net::SSH::Expect->new ( host => "$host", password => "$pass", user => "$user", port => "$port", timeout => "3" ); my $login_output = $ssh->login(); $ssh->exec("stty raw -echo"); my $result=$ssh->exec("$command"); $ssh->close(); return $result; } # # This function can get and send file to remote computer. # transfer_file__(hostname, username, password, port, source file|directory, destination file|directory, method) # -method can be fh(means get file from somewhere) and th(send file to host) # sub transfer_file__ { die $@ unless (($#_+1)==7); my $host=shift; my $user=shift; my $pass=shift; my $port=shift; my $src_file=shift; my $dst_file=shift; my $method=shift; my $scpe = Net::SCP::Expect->new( port => "$port", host => "$host", auto_yes => "1" ); $scpe->login("$user", "$pass"); if ( $method eq "fh" ) { $scpe->scp(":$src_file", "$dst_file"); } elsif ( $method eq "th" ) { $scpe->scp("$src_file", ":$dst_file"); } else { die "function transfer_file__ got wrong method\n"; } } # # This function can get and send file to remote computer via sftp protocol. # sftp_func__(hostname, username, password, port, source file|directory, destination file|directory, method) # -method can be get(means get file from somewhere) and put(send file to host) and del(delete file) # NOTICE: if you use method "del" please specify the target as source_file and destination specify as null sub sftp_func__ { my $host=shift; my $user=shift; my $pass=shift; my $port=shift; my $src_file=shift; my $dst_file=shift; my $method=shift; my $sftp = Net::SFTP::Foreign->new( host => "$host", user => "$user", password => "$pass", port => "$port" ) or die "cannot set connection"; if ( $method eq "get" ) { $src_file =~ m/^(.*)\/(.*)$/; my $remote_dir=$1; $src_file=$2; $sftp->setcwd("$remote_dir") or die "cannot change directory"; $sftp->get("$src_file", "$dst_file") or die "cannot get file"; $sftp->remove("$src_file"); } elsif ( $method eq "put") { $dst_file =~ m/^(.*)\/(.*)$/; my $remote_dir=$1; $dst_file=$2; $sftp->setcwd("$remote_dir") or die "cannot change directory"; $sftp->put("$src_file", "$dst_file") or die "cannot put file"; #$sftp->remove("$src_file"); } elsif ( $method eq "del" ) { $src_file =~ m/^(.*)\/(.*)$/; my $remote_dir=$1; $src_file=$2; $sftp->setcwd("$remote_dir") or die "cannot change directory"; $sftp->remove("$src_file"); } } # # This function get and delete remote file via ftp protocol. # ftp_func__(hostname, username, password, port, source file|directory, destination file|directory, method) # method can be get and put sub ftp_func__ { my $host=shift; my $user=shift; my $pass=shift; my $port=shift; my $src_file=shift; my $dst_file=shift; my $method=shift; my $ftp = Net::FTP->new($host, Debug => 0) or die "Cannot connect to some.host.name: $@"; $ftp->login($user,$pass) or die "Cannot login ", $ftp->message ; if ( $method eq "get" ) { $src_file =~ m/^(.*)\/(.*)$/; my $remote_dir=$1; $src_file=$2; $ftp->cwd("$remote_dir") or die "Cannot change working directory ", $ftp->message; $ftp->get($src_file, $dst_file) or die "get failed ", $ftp->message; $ftp->delete($src_file); } elsif ( $method eq "put" ) { $dst_file =~ m/^(.*)\/(.*)$/; my $remote_dir=$1; $dst_file=$2; $ftp->cwd("$remote_dir") or die "cannot change directory", $ftp->message; $ftp->put($src_file, $dst_file) or die "cannot put file", $ftp->message; } $ftp->quit; } # # This function get remote file(without removing it) via ftp protocol. # get_file_via_ftp(hostname, username, password, port, source file|directory, destination file|directory) # method can be get and put sub get_file_via_ftp__ { my $host=shift; my $user=shift; my $pass=shift; my $port=shift; my $src_file=shift; my $dst_file=shift; my $ftp = Net::FTP->new($host, Debug => 0) or die "Cannot connect to some.host.name: $@"; $ftp->login($user,$pass) or die "Cannot login ", $ftp->message ; $src_file =~ m/^(.*)\/(.*)$/; my $remote_dir=$1; $src_file=$2; $ftp->cwd("$remote_dir") or die "Cannot change working directory ", $ftp->message; $ftp->get($src_file, $dst_file) or die "get failed ", $ftp->message; $ftp->quit; } # # This function return date of yesterday in format which was got by function as first argument; # Ex.: # get_yesterday__("YYYYDDMM"), get_yesterday__("DDMMYYYY") and so on. # sub get_yesterday__ { my $format=shift; my $current_sht=time; my $yest_sht=$current_sht-86400; # 86400 == 24 hours my ($mday,$mon,$year)=(localtime($yest_sht))[3,4,5]; $year=$year+1900; $mon=$mon+1; my $yesterday; if ( $format =~ /YYYYDDMM/) { $yesterday = sprintf("%4d%.2d%.2d", $year,$mon,$mday); } elsif ($format =~ /YYYYMMDD/) { $yesterday = sprintf("%4d%.2d%.2d", $year,$mday,$mon); } elsif ($format =~ /DDYYYYMM/) { $yesterday = sprintf("%02d%.4d%.2d", $mday,$year,$mon); } elsif ($format =~ /DDMMYYYY/) { $yesterday = sprintf("%02d%.2d%.4d", $mday,$mon,$year); } elsif ($format =~ /MMYYYYDD/) { $yesterday = sprintf("%02d%.4d%.2d", $mon,$year,$mday); } elsif ($format =~ /MMDDYYYY/) { $yesterday = sprintf("%02d%.2d%.4d", $mon,$mday,$year); } else { die "wrong type of format in get_yesterday function"; } return $yesterday; } 1; __END__