#!/usr/bin/perl
#-----------------------------------------------------#
#
# description : create and ftp subchange state file
# author : wqq
# date : 2012-04-30
#
#-----------------------------------------------------#
#use warnings;
use strict;
use Net::FTP;
our ($day,$mon,$yea) = (localtime(time))[3..5];
our $current_date = sprintf "%04s%02d%02d",$yea+1900,$mon+1,$day;
our $source_subchange_dir = "../backup/$current_date";
our $source_file_count = 3;
our $target_subchange_file = "ocs_subchange.unl";
our $ftp_ip = "10.2.11.52";
our $ftp_username = "mid";
our $ftp_password = "mid";
our $local_file = $target_subchange_file;
our $desc_file = "ocs_subchange.unl";
our $desc_dir = "/home/mid/test";
our %hash_state;
our %hash_time;
sub current_datetime()
{
my($sec,$min,$hou,$day,$mon,$yea) = (localtime(time))[0..5];
my $date_time = sprintf "%04s-%02d-%02d %02d:%02d:%02d",$yea+1900,$mon+1,$day,$hou,$min,$sec;
return $date_time;
}
sub info()
{
print "please check parameter!\nusage:\n\t./subchange.pl\n";
}
sub logfile()
{
my $line = shift;
my $exitflag = shift;
open (LOG_FILE,">> $source_subchange_dir/log_$current_date.unl") or die ">>>>>Can't read log file $source_subchange_dir/log_$current_date.unl: $!\nPlease check...\n";
print LOG_FILE "[".¤t_datetime()."]:$line\n";
close LOG_FILE;
if($exitflag == 1)
{
exit;
}
}
sub check_file()
{
my $count_file;
my @count_file;
if(! -d $source_subchange_dir)
{
&logfile(">>>>>The document $source_subchange_dir not exists!",1);
}else{
$count_file = `ls $source_subchange_dir/ocs_subchange* | wc -l`;
@count_file = `ls $source_subchange_dir/ocs_subchange*`;
if($source_file_count != $count_file)
{
chomp($count_file);
&logfile(">>>>>Current source file count: $count_file",0);
foreach my $file (@count_file)
{
chomp($file);
&logfile(">>>>>Source file: [$file] ",0);
}
&logfile(">>>>>Please check source file! need source file count:[$source_file_count]\n",1);
}
}
foreach my $file (@count_file)
{
chomp($file);
&logfile("Source file: [$file] ",0);
}
}
#----------read userdb_ocs_subchangelog file----------#
sub read_ocs_subchangelog_file()
{
my $line;
my @arr;
my $file;
opendir(DIR, $source_subchange_dir) || &logfile(">>>>>Open directory $source_subchange_dir failed!",1);
while ($file = readdir(DIR))
{
if($file =~ /^ocs_subchange/)
{
my ($line);
open (FILE, "$source_subchange_dir/$file") || &logfile(">>>>>Can't read source file $file: $!\nPlease check...",1);
while($line=<FILE>)
{
chomp($line);
@arr = split(/\|/,$line,-1);
chomp($arr[3]);
if(exists $hash_state{$arr[0]})
{
if($hash_time{$arr[0]} le $arr[1])
{
$hash_state{$arr[0]}= $arr[3];
$hash_time{$arr[0]}= $arr[1];
}
}else{
$hash_state{$arr[0]}= $arr[3];
$hash_time{$arr[0]}= $arr[1];
}
}
close FILE;
}
}
close DIR;
}
#----------create subchange file----------#
sub create_subchange_file()
{
my $isdn;
my @arr;
open TARGET_SUBCHANGE, ">> $target_subchange_file" or &logfile(">>>>>Can't read target file $target_subchange_file: $!\nPlease check...",1);
foreach $isdn (keys %hash_state)
{
if(substr($hash_state{$isdn},0,1)==1)
{
print TARGET_SUBCHANGE "MOD LCK: ISDN=\"$isdn\", IC=FALSE, OC=FALSE, GPRSLOCK=FALSE;\n";
}else{
print TARGET_SUBCHANGE "MOD LCK: ISDN=\"$isdn\", IC=TRUE, OC=TRUE, GPRSLOCK=TRUE;\n";
}
}
close TARGET_SUBCHANGE;
}
sub ftp_subchange_file()
{
my $ftp = Net::FTP->new($ftp_ip) or &logfile(">>>>>Can't connect to HLR [$ftp_ip].",1);
&logfile("Begin input username:[$ftp_username] and password:[$ftp_password].",0);
$ftp->login($ftp_username,$ftp_password) or &logfile(">>>>>Can't login [$ftp_ip], username or password is error!",1);
$ftp->ascii();
&logfile("Begin change dir to [$desc_dir].",0);
$ftp->cwd($desc_dir) or &logfile(">>>>>Can't change dir to [$desc_dir], dir is error!",1);
my @file=$ftp->ls($desc_file);
if($file[0] eq "$desc_file")
{
$ftp->delete($desc_file);
&logfile("[$desc_dir/$desc_file] The file exists in the HLR:[$ftp_ip], delete it.",0);
}else{
&logfile("[$desc_dir/$desc_file] The file not exists in the HLR:[$ftp_ip].",0);
}
&logfile("Begin to put the file in the HLR:[$desc_dir/$desc_file]",0);
$ftp->put($local_file,$desc_file) or &logfile(">>>>>Can't put the file in the HLR:[$desc_file]",1);
$ftp->quit;
}
#----------main----------#
if(@ARGV != 0)
{
&info();
}
else
{
system("rm -rf $target_subchange_file $source_subchange_dir/log_$current_date.unl");
&logfile("Begin check source file.",0);
&check_file();
&logfile("Check source file completed!\n",0);
&logfile("Begin create subchange final file.",0);
&read_ocs_subchangelog_file();
&create_subchange_file();
&logfile("Create subchange final file completed!\n");
&logfile("Begin connect to HLR [$ftp_ip].",0);
&ftp_subchange_file();
&logfile("Ftp subchange final file completed!\n");
}
perl中FTP的使用
最新推荐文章于 2022-03-03 12:43:51 发布