Re[2]: Как спросить quota через LDAP

От: Валерий Сухих <CGatePro_at_mx_ru>
Дата: Thu 15 Jun 2006 - 13:47:21 MSD


 15 июня 2006 г. в 12:35:18GMT +0400 Вы, Dmitry Akindinov писали мне по поводу "[CGP] Как спросить quota через LDAP":

>> Есть необходимость проверять забитость ящика (квоту) через ldap >> вот только где она в директории хранится никак не найду подсобите.

DA> В директории и в настройках акаунтов доля использованной квоты не DA> хранится. Эти данные можно получить через CLI и IMAP. Может пригодится кому:

#!/usr/local/bin/php
<?php // Подсчитать _LINES_OUTPUT самых жирных аккаунтов и послать начальству

define("_LINES_OUTPUT",25);                             // количество строк в отчете
define("_RCPT_LIST","suh@id.rsk,boss@id.rsk");          // список получателей
define("_PIPE_DIR","/var/CommuniGate/Submitted");       // CGP pipe directory
define("_MAX_MSG",49152);                               // max. generated msg size
define("_DOMAIN","id.rsk");                             // домен
define("_DETAIL_URL","https://mx.id.rsk:9010/Domains/"._DOMAIN."/"); // см. подробности

error_reporting(E_NONE);
// Загрузка класса и создание экземпляра require_once("/home/mail/bin/CLI_login.php");

 function Du($dir) {

$du = popen("/usr/bin/du -sk $dir", "r");
$res = fgets($du, 256);

    pclose($du);
$res = strtok($res,"\t");

    return $res;
 }

$total = floor(disk_total_space("/var/CommuniGate/Domains/"._DOMAIN)/1024);
$occu = Du("/var/CommuniGate/Domains/"._DOMAIN);
$perc = floor(($occu * 100)/$total);
$GT = "Всего:<b>".floor($occu/1024)." Mb</b> из ".floor($total/1024)." Mb (${perc}%)\n";

if(isset($_SERVER["argv"][1])){

$mode=$_SERVER["argv"][1];

    }else{
$mode="msg";

}

if($mode=="reset"){

$la = $cli->ListAccounts(_DOMAIN); reset($la);
    while(list($acc,$i)=each($la)) {

        $cli->ResetAccountStat($acc);
    }
}elseif($mode=="msg"){

$la = $cli->ListAccounts(_DOMAIN); reset($la);
$accs=array();

    while(list($acc,$i)=each($la)) {

        $acc.="@"._DOMAIN;
        $x=$cli->GetAccountInfo($acc,"LastLogin");
        $xx=$cli->GetAccountInfo($acc,"StorageUsed");
        $xxx=$cli->GetAccountStat($acc);
        $accs[$acc]['size']=$xx;
        $accs[$acc]['msg']=$xxx["MessagesReceived"];
        $accs[$acc]['bytes']=$xxx["BytesReceived"];
        $accs[$acc]['last']=$x;
        $i=$cli->GetAccountSettings($acc);
        $accs[$acc]['name']=iconv("utf-8","koi8-r","&#13;&nbsp;&nbsp;&nbsp;&nbsp;".$i["RealName"]." (".$i["departmentNumber"].")&nbsp;&nbsp;&nbsp;&nbsp;&#13;");
    }
    arsort($accs);
    reset($accs);     

$msg =sprintf("From: . <.@.>\n");
$msg.=sprintf("To: \"Big Shots\"\n");
$msg.=sprintf("Bcc: "._RCPT_LIST."\n");
$msg.=sprintf("MIME-Version: 1.0\n");
$msg.=sprintf("Content-Type: text/html;\n");
$msg.=sprintf("Content-Transfer-Encoding: 8bit\n");
$msg.=sprintf("Subject: Объем хранимой почты и стат за текущий месяц на ".date("d-m-y")."("._LINES_OUTPUT." лидеров)\n\n");
$msg.=sprintf("<HTML><HEAD>\n");
$msg.=sprintf("<TITLE>title-title</TITLE>\n");
$msg.=sprintf("<META http-equiv='Content-Type' content='text/html; charset=koi8-r'>\n<STYLE><!--\n");
$msg.=sprintf(".imy {font-weight:bold;color:navy;font-family:courier}\n");
$msg.=sprintf(".last {text-align:right;font-size:xx-small}\n");
$msg.=sprintf(".num {text-align:right}\n");
$msg.=sprintf(".num, .imy, .last {border-bottom:1px solid #9D9D77;border-right:1px solid #7D7D55;}\n");
$msg.=sprintf("th {background-color:AAAAA0;border-bottom:1px solid black;}\n");
$msg.=sprintf("\n-->\n</STYLE></HEAD>\n");
$msg.=sprintf("<BODY bgcolor=#CCCCA1 topmargin=5>\n");
$msg.=sprintf("<TABLE align=center bgcolor=#AAAA8A cellpadding=0 cellspacing=0>\n\n");
$msg.=sprintf("<TR><TD align=\"right\"\n");
$msg.=sprintf(" colspan=5 style=\"border:1 solid 3D3D88;color:cyan\">\n");
    

$msg.="$GT";
$msg.=sprintf("\n</TD></TR>\n");

$msg.=sprintf("<tr valign=top><th>Имя<br>пользователя</td><th>Объем почты<br>Mb.</th><th title='...за текущий месяц'>Получено<br>Mb. </th><th>Получено<br>сообщений</th><th title='..за текущий месяц'>Последнее обращение<br>за почтой</th></tr>\n" );
    for($i=0;$i<_LINES_OUTPUT;++$i){

        list($k,$x)=each($accs);
        $name = ereg_replace("@"._DOMAIN,"&nbsp;",$k);
        $msg.=sprintf( "<tr title=\"%176s &nbsp;\">
                                <td class=imy> &nbsp;%-14s&nbsp;</td>
                                <td class=num> %6.1f  &nbsp;</td>
                                <td class=num> %6.1f  &nbsp;</td>
                                <td class=num> %5.0f   &nbsp;</td>
                                <td class=last> %25.25s&nbsp;</td>
                                <td></td>
                                </tr>\n"  ,
                                  $x["name"],$name,$x["size"]/1048576,$x["bytes"]/1048576,$x["msg"],$x["last"]);
    }
$msg.="<TR valign=middle><TD align=\"right\" colspan=5 style=\"border:1 solid 3D3D88;height:19px\">";
$msg.="<a href=\""._DETAIL_URL."\">подробности см.</a>\n</TD></TR>\n";
$msg.="</TABLE>";
$msg.="</BODY>\n\n<br><br>-- \nSinserelly, ur CGPro\n\n";
$fn = tempnam(_PIPE_DIR, "MAIL_VOLUMES");
$fh = fopen($fn,"w+");
    fwrite($fh,$msg,_MAX_MSG);
    fclose($fh);
    rename($fn,$fn.".sub");

}     

?>

    mailto:suh@udmene.ru Получено Thu Jun 15 09:47:31 2006

Этот архив был сгенерирован hypermail 2.1.8 : Thu 15 Jun 2006 - 14:12:48 MSD