Скачать 60.09 Kb.
|
Автоматизация получения отчета о размерах почтовых ящиков в каждом почтовом офисе. Общие замечания. Все это делал, когда возникла задача получать на каждое утро статистику по размерам почтовых ящиков во всех Почтовых офисах. Эти офисы расположены либо на NW, либо на LINUX и в разных городах. Отчеты надо иметь на нашем сервере. Скрипт, который был написан, отлаживался и работает сейчас на NW6.5. (теоретически будет работать и на другой платформе. Он не использует NW специфических функций) GW – GW6.5SP4 и GW7+FTF6 В процессе отладки скрипта с огорчением обнаружил, что
Итак: Размер почтового ящика по каждому пользователю можно брать из журнала работы GWCHECK. Речь идет о запуске GWCHECK
В этом случае администратору будет прислано письмо с прикреплением: файл-отчета. Предпологается, что на сервере по cron-у будет запускаться каждый день PERL-скрипт, который будет выполнять следующие опперации:
gwusername;XXXX;kbytes;Имя Фамилия;Название_Отдела Имя файла будет вида: YYYYMMDD_POSTOFSNAME.CSV Реализация
MailBoxStatistics и отправкой результата в адрес Вашего почтового ящика. Например для запуска в 02:30. РЕКОМЕНДАЦИЯ: создавать Sheduled events ОТДЕЛЬНО ДЛЯ КАЖДОГО POA.
Cодержимое этого файла имеет вид: start post1 1post1stats qwerty docum:\\wrk\\home\\admin\\gwsize\\post1 N end start postm 1postmtats qwerty docum:\\wrk\home\\admin\\gwsize\\postm N end Подробнее о содержимом этого файла:
# # Read from POSTOFFICE LOG file with stats # read over POP3 (over POP3) # and Parse and save it to the file # use Encode 'from_to'; use Net::POP3; use MIME::Base64; # IP адрес Вашего сервера , где расположен GWIA $mail_server="192.168.0.10"; $postname; $username="XXXXXXXXX"; $password="XXXXXXXXX"; $dstdir="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; $ostype='L'; my $READCONF="sys:\\etc\\1getpost\\getpost.cfg"; my $TMPFILE="sysdata:\\results\\getpost\\tfile.log"; # Where the COMMON logs live. $log_dir="SYSDATA:results\\getpost\\log"; # Exit if the log directory's not there. die "Log folder $log_dir does not exist" if (not -d $log_dir); # The overall log file. Indicidual job logs will have incremental numbers $log_file="$log_dir\\getpost.log"; mylog (" \n", $log_file); mylog("***************************************************", $log_file); mylog(" Start Get Post Stats", $log_file); open (FL1, "<$READCONF") || die("Did not Open Source File !!"); $cmd1=""; $cmd1=readline(FL1); $cmd1 =~ s/\n//g; open (FL1, "<$READCONF") || die("Did not Open Source File !!"); $cmd1=""; $cmd1=readline(FL1); $cmd1 =~ s/\n//g; while (not eof(FL1) ) { if ( $cmd1 eq 'start' ) { $cmd1=readline(FL1); $cmd1 =~ s/\n//g; $postname = $cmd1; $cmd1=readline(FL1); $cmd1 =~ s/\n//g; $username = $cmd1; $cmd1=readline(FL1); $cmd1 =~ s/\n//g; $password = $cmd1; $cmd1=readline(FL1); $cmd1 =~ s/\n//g; $dstdir = $cmd1; $cmd1=readline(FL1); $cmd1 =~ s/\n//g; $ostype = $cmd1; # print "user=[".$username."]\n"; # print "pasword=[".$password."]\n"; # print "dsdir=[".$dstdir."]\n"; # print "ostype=[".$ostype."]\n"; # run my script !!! $trez='A'; $trez=getlogfile($username,$password); if ($trez eq '0') { mylog("Not Get info from $username", $log_file); # print "Not Get info from $username\n"; } else { mylog("Get info from $username", $log_file); #--- # print "Get info from $username\n"; # print "Will bi run parslogfile\n"; parslogfile($postname,$dstdir,$ostype); ; } # end my scripts } $cmd1=readline(FL1); $cmd1 =~ s/\n//g; } close(FL1); exit(0); #------------------------ sub getlogfile { #$_[0] - username #$_[1] - password # Get LogFile and store in the temporary file. # get over POP3. my $rootDir; my $dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks; my $entry1=$TMPFILE; $size = 0; open (FL2, ">$TMPFILE") || die("Did not Open Target File !!"); $pop = Net::POP3->new($mail_server) or die "Can't open connection to $mail_server : $!\n"; defined ($pop->login($_[0], $_[1])) or die "Can't authenticate: $!\n"; $messages = $pop->list or die "Can't get list of undeleted messages: $!\n"; $sw=0; foreach $msgid (keys %$messages) { $message = $pop->get($msgid); $tm=@$message; #!!!!!!!!!!!!************************************ # ! ! ! ! ! ! !****** A T A N T I O N *************** $tm1=25; #******************************************** $sw=0; while ($tm1 < $tm) { $tres=@$message[$tm1]; $tres=decode_base64($tres); # $tres =~ s/\n//g; print FL2 $tres; $tm1=$tm1+1; } $pop->delete($msgid); # unless (defined $message) # { # warn "Couldn't fetch $msgid from server: $!\n"; # next; # } # $message is a reference to an array of lines $sw=0; next; } close(FL2); $pop->quit(); ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks)=lstat($entry1); #print "size=[$size]\n"; mylog("size=[$size]", $log_file); if ($size == 0) {return '0'; } else {return '1';} } #exit(0); #exit(0); # #-------------------------------- # sub parslogfile { # $_[0] - postoffice name # $_[1] - dstdir # $_[2] - ostype # N - NetWare # L - Linux # my $lweek; my $lmonth; my $lday; my $lyear; my $lpostname=$_[0]; my $ldstdir=$_[1]; my $lostype=$_[2]; my $lresfile; my $user; my $gid; my $tgfnm; my $i; my $end1; my $end2; my $gsize; my $gt; my $size; # #print "+++In the PARSLOG Procedure\n"; #print "+++will be open for read file($TMPFILE)\n"; open (FL2, "<$TMPFILE") || die("Did not Open Target File !!"); while (not eof(FL2) ) { $lstr=readline(FL2); # print "**$lstr**"; if ($lstr =~ /Processed on (\w+), (\w+) (\w+), (\w+)/) { $lweek = $1; $lmonth = $2; $lday = $3; $lyear = $4; $lresfile = $ldstdir; $lresfile.="\\\\"; $lresfile.=$lyear; if ($lmonth eq "October") { $lmonth="10"; } if ($lmonth eq "November") { $lmonth="11"; } if ($lmonth eq "December") { $lmonth="12"; } if ($lmonth eq "January") { $lmonth="01"; } if ($lmonth eq "February") { $lmonth="02"; } if ($lmonth eq "March") { $lmonth="03"; } if ($lmonth eq "April") { $lmonth="04"; } if ($lmonth eq "May") { $lmonth="05"; } if ($lmonth eq "June") { $lmonth="06"; } if ($lmonth eq "July") { $lmonth="07"; } if ($lmonth eq "August") { $lmonth="08"; } if ($lmonth eq "September") { $lmonth="09"; } $lresfile.=$lmonth; if ($lday < 10) { $lday="0".$lday;} $lresfile.=$lday; $lresfile.="_"; $lresfile.=$lpostname; $lresfile.="\.csv"; # print "Will be Open file for wirte:($lresfile)\n"; open (FL3, ">$lresfile") || die("Did not Open Target File !!"); } # # PARSING !!! if ($lstr =~ /Checking user = (\w+)/) { $user = $1; $gid = substr($lstr,34,3); $tgfnm = substr($lstr,71); $i=0; $end1=0; $end2=0; $gsize=0; # will be pars $qfnm #print "====888===\n"; while ($i < 165 ) { $gt = substr($tgfnm,$i,1); if ($gt eq '[') { $end1 = $i; } if ($gt eq ']') { $end2 = $i; } $i=$i+1; } if ($lostype eq 'N') { #--------------Start when file from Netware # print "From !!!!!!! NetWare\n"; if (substr($tgfnm,0,1) eq ' ') { $gfnm = substr($tgfnm,1,$end1-2); if (substr($tgfnm,$end1-2,1) eq ' ') { $gfnm = substr($tgfnm,1,$end1-2); } } else { $gfnm = substr($tgfnm,0,$end1-1); if (substr($tgfnm,$end1-2,1) eq ' ') { $gfnm = substr($tgfnm,0,$end1-2); } } $gdep = " "; $gdep = substr($tgfnm,$end1+4,$end2-$end1-4); #------end for file from NetWare } else { #------Star for file from Linux # print "From !!!!!!! Linux\n"; if (substr($tgfnm,0,1) eq ' ') { $gfnm = substr($tgfnm,1,$end1-2); if (substr($tgfnm,$end1-2,1) eq ' ') { $gfnm = substr($tgfnm,1,$end1-2); } } else { $gfnm = substr($tgfnm,0,$end1-1); if (substr($tgfnm,$end1-2,1) eq ' ') { $gfnm = substr($tgfnm,0,$end1-2); } } $gdep = " "; $gdep = substr($tgfnm,$end1+1,$end2-$end1-1); #------end for file from Linux } } if ($lstr =~ /(\d+) (\w+) in use by user's mail/) { $size = $1.' '.$2; $gsize = $1; } if ($user && $size) { if ($gdep eq '') { ; } else { if ($lostype eq 'N') {from_to($gdep,"cp866","cp1251"); }; print FL3 "$user;$gsize;kbytes;$gfnm;$gdep\n"; } $user = ''; $size = ''; $gfnm = ''; $gdep = ''; } # end PARSING next; } #close while close FL2; close FL3; } #---------------- sub mylog { # log output to screen and (optionally) to file # $_[0] is the string to be logged, $_[1] is the logfile ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime; $out=sprintf("%02d",$mday); $out.="/"; $out.=sprintf("%02d",$mon+1); $out.="/"; $out.=1900+$year; $out.=" "; $out.=sprintf("%02d",$hour); $out.=":"; $out.=sprintf("%02d",$min); $out.=":"; $out.=sprintf("%02d",$sec); $out.=" $_[0]"; $out.="\n"; # print $out; if ($_[1]) { ^ open LOGFILE or die "Can't open log file $_[1]: $!"; print LOGFILE $out; close LOGFILE; } }
Как проверить работоспособность.
P.S.: Спасибо всем, кто дочитал до конца этот текст. Если возникнут коментарии, пожелания или вопросы, то: skoltogyan@mail.ru Колтогян Сергей Рубенович Украина, г. Донецк НПП АМИ |
![]() | Пользователи могут могут подсоединяться в любое время для проверки своих почтовых ящиков и забирать накопившуюся почту. Выгода от... | ![]() | Это информационный бюллетень для всех администраторов почтовых рассылок и пользователей почтовых аккаунтов. В нём содержится важная... |
![]() | Запах дыма в квартире или офисе ни в коем случае не должен вызвать у вас панику. Быстро обойдите все помещения и найдите источник... | ![]() | Это информационный бюллетень для всех администраторов почтовых рассылок и пользователей почтовых аккаунтов. В нём содержится важная... |
![]() | ФЗ) право на предъявление претензии имеют отправитель или получатель почтовых отправлений. Сведения о передаваемых по сетям почтовой... | ![]() | Для формирования отчета выберите пункт меню Операции/Зарплата/Начисления и расчет/ Отчет по расчету заработной платы. Перед формированием... |
![]() | Подписку на газету «ЮК» можно оформить в любом почтовом отделении ао «Казпочта» и подписных организациях: тоо «Евразия-Пресс», «Ернур-Пресс»,... | ![]() | Рабочей группы по работе с обращениями граждан из специализированных ящиков «Для обращений граждан по вопросам коррупции», положения... |
![]() | Рабочей группы по работе с обращениями граждан из специализированных ящиков «Для обращений граждан по вопросам коррупции», положения... | ![]() |