uses('getconf'); $mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail'); if($mail_config['mailbox_quota_stats'] == 'n') return; /* used for all monitor cronjobs */ $app->load('monitor_tools'); $this->_tools = new monitor_tools(); /* end global section for monitor cronjobs */ //* Initialize data array $data = array(); //* the id of the server as int $server_id = intval($conf['server_id']); //* The type of the data $type = 'email_quota'; //* The state of the email_quota. $state = 'ok'; $mailboxes = $app->db->queryAllRecords("SELECT email,maildir FROM mail_user WHERE server_id = ?", $server_id); if(is_array($mailboxes)) { //* with dovecot we can use doveadm instead of 'du -s' $dovecot = false; if (isset($mail_config['pop3_imap_daemon']) && $mail_config ['pop3_imap_daemon'] = 'dovecot' && is_executable('doveadm')) { exec('doveadm quota 2>&1', $tmp_output, $tmp_retval); // with dovecot 2.2.x 'doveadm quota' is unuseable if ($retval = 64) $dovecot = true; } foreach($mailboxes as $mb) { $email = $mb['email']; $email_parts = explode('@', $mb['email']); $filename = $mb['maildir'].'/.quotausage'; if(!file_exists($filename) && $dovecot) { exec('doveadm quota recalc -u '.$email); } if(file_exists($filename) && !is_link($filename)) { $quotafile = file($filename); preg_match('/storage.*?([0-9]+)/s', implode('',$quotafile), $storage_value); $data[$email]['used'] = $storage_value[1]; $app->log("Mail storage $email: " . $storage_value[1], LOGLEVEL_DEBUG); unset($quotafile); } else { exec('du -s '.escapeshellcmd($mb['maildir']), $out); $parts = explode(' ', $out[0]); $data[$email]['used'] = intval($parts[0])*1024; unset($out); unset($parts); } } } unset($mailboxes); //* Dovecot quota check Courier in progress lathama@gmail.com /* if($dir = opendir("/var/vmail")){ while (($quotafiles = readdir($dir)) !== false){ if(preg_match('/.\_quota$/', $quotafiles)){ $quotafile = (file("/var/vmail/" . $quotafiles)); $emailaddress = preg_replace('/_quota/',"", $quotafiles); $emailaddress = preg_replace('/_/',"@", $emailaddress); $data[$emailaddress]['used'] = trim($quotafile['1']); } } closedir($dir); } */ $res = array(); $res['server_id'] = $server_id; $res['type'] = $type; $res['data'] = $data; $res['state'] = $state; /* * Insert the data into the database */ $sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' . 'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)'; $app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']); /* The new data is written, now we can delete the old one */ $this->_tools->delOldRecords($res['type'], $res['server_id']); parent::onRunJob(); } /* this function is optional if it contains no custom code */ public function onAfterRun() { global $app; parent::onAfterRun(); } } ?>