博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

沉默是金

Love exists,Hope is alive.Just waiting...
   xiaoquqi.cublog.cn
关于作者  
姓名:小曲奇
职业:软件工程师
年龄:25
位置:北京
Just waiting your comming...

我的分类  




Perl使用心得:2005到2006年引发的程序问题
今天忽然发现kpi的告警程序运行起来超级慢,经过仔细分析发现是由于时间问题导致的。
unix平台下,ls -lrt命令只能显示出月、日,小时:分钟,对于过早的文件才会在日期处显示成年,以前的程序忽略了跨年显示的情况,导致程序把去年的文件也当作符合时间点的文件进行分析了,从而影响了程序的效率。
新程序的思路如下:
将ls -lrt返回的文件列表进行分析,把月、日、小时:分钟,再定义一个存放文件年的变量,分别放在单独的一个变量里,然后取出系统当前时间,与月进行比较后如果发现文件的月大于当前系统时间的月,那么文件的年的变量就应该为系统年-1。程序部分代码如下:
sub anaylze_file_list
{
    my $doorDate=shift;
    my ($lscmd,$fhd,$fileMon,$fileDay,$fileTime,$fileName,$filelist,$fileDate,$fileYear);
    my (@lscmd,@filename);
    $lscmd="ls -lrt ".%config->{"LogPath"}."|awk '{print \$6\" \"\$7\" \"\$8\" \"\$9}'";
    @lscmd=`$lscmd`;
    if(@lscmd==0){print("No Pattern File");exit 0;}
    foreach $fhd (@lscmd){
        chomp($fhd);
        @filename=split(/\s+/,$fhd);
        #Month of File
        $fileMon=$filename[0];
        $fileMon = $namemonth{$fileMon};
        $fileMon = sprintf("%0.2d",$fileMon);
        #Day of File
        $fileDay=$filename[1];
        $fileDay = sprintf ("%0.2d",$fileDay);
        #Time of file
        $fileTime=$filename[2];
        #Name of File
        $fileName=$filename[3];
        my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime;
        if($fileTime=~/^(\d\d\d\d)$/){
            $fileDate=$1.$fileMon.$fileDay."000000";
        }else{
            $fileTime=~s/\://g;
            $mon = sprintf("%0.2d",$mon+1);
            if($mon<$fileMon){$fileYear=$year+1900-1;}else{$fileYear=$year+1900;}
            $fileDate=$fileYear.$fileMon.$fileDay.$fileTime."00";
        }
        if($fileDate<$doorDate){next;}
        if($filelist eq ''){
              $filelist=$fileName;
        }else{
              $filelist=$filelist.",".$fileName;
        }
    }
    return $filelist;
}

 发表于: 2006-03-01,修改于: 2006-03-01 17:03 已浏览731次,有评论0条 推荐 投诉

  网友评论

  发表评论



Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
页面生成时间:0.00742

京ICP证041476号