[enh] diagnostic:service:mail

This commit is contained in:
alban 2014-07-04 22:57:20 +02:00
parent 0647a56abb
commit fc01077346
1 changed files with 101 additions and 0 deletions

View File

@ -11,8 +11,109 @@ class Alternc_Diagnostic_Service_Mail
{
public $name = "email";
protected $mailList = array();
const SECTION_LIST = "list";
const SECTION_STAT_ALIAS = "stat_alias";
const SECTION_CHECK_STORAGE = "check_storage";
function run(){
// Attempts to retrieve all email addresses
$this->mailList = $this->getList();
// Writes the domains list
$this->writeSectionData (self::SECTION_LIST,$this->getList());
// Writes the alias stats
$this->writeSectionData (self::SECTION_STAT_ALIAS,$this->getStatAlias());
// Writes the quota stats
$this->writeSectionData (self::SECTION_CHECK_STORAGE,$this->getCheckStorage());
return $this->data;
}
/**
* Gets list from db
*
* @return array
*/
function getList(){
$returnArray = array();
// Check the availability
$this->db->query('
SELECT CONCAT(a.address,"@",d.domaine) as email, a.type, a.enabled, r.recipients, m.path,m.quota,m.bytes/(1024*1024) as size_mo,m.messages
FROM address a
LEFT JOIN recipient r ON r.address_id = a.id
LEFT JOIN mailbox m ON m.address_id = a.id
JOIN domaines d ON a.domain_id = d.id;');
if ($this->db->num_rows()) {
while ($this->db->next_record()) {
$email = $this->db->f("email");
$returnArray[$email] = array(
"enabled" => $this->db->f("enabled"),
"type" => $this->db->f("type"),
"recipients" => $this->db->f("recipients"),
"path" => $this->db->f("path"),
"quota" => $this->db->f("quota"),
"size_mo" => $this->db->f("size_mo"),
"messages" => $this->db->f("messages"),
);
}
}
return $returnArray;
}
/**
* Searches mails with alias
*
* @return array
*/
function getStatAlias() {
$returnArray = array();
foreach ($this->mailList as $email => $emailInfo) {
$is_alias = false;
if( !is_null($emailInfo["recipients"])){
$is_alias = true;
}
$returnArray[$email] = $is_alias;
}
return $returnArray;
}
/**
* Checks the box oversize and effective existence
*
* @return array
*/
function getCheckStorage() {
$returnArray = array();
foreach ($this->mailList as $email => $emailInfo) {
// Only account real boxes
if( ! $emailInfo["path"]){
continue;
}
$quota_pct = "0";
$box_exists = true;
$quota = $emailInfo["quota"];
$size_mo = $emailInfo["size_mo"] ;
if( $quota > 0 ){
$quota_pct = $size_mo * 100 / $quota;
}
if( !is_dir($emailInfo["path"]) ){
$box_exists = false;
}
$returnArray[$email] = array(
"percent" => number_format($quota_pct, 2),
"box_exists" => $box_exists
);
}
return $returnArray;
}
}