piler/webui/model/health/health.php

266 lines
7.1 KiB
PHP
Raw Normal View History

2012-02-08 23:14:28 +01:00
<?php
class ModelHealthHealth extends Model {
public function format_time($time = 0) {
if($time >= 1) {
return sprintf("%.2f", $time) . " sec";
}
else {
return sprintf("%.2f", 1000*$time) . " ms";
}
}
public function checksmtp($smtp = array(), $error = '') {
$ret = $error;
$time = 0;
if($smtp[0] && $smtp[1] && is_numeric($smtp[1]) && $smtp[1] > 0 && $smtp[1] < 65536) {
$time_start = microtime(true);
$s = @fsockopen($smtp[0], $smtp[1]);
if($s) {
$ret = trim(fgets($s, 4096));
fputs($s, "QUIT\r\n");
fclose($s);
}
}
$time = microtime(true) - $time_start;
return array($smtp[0] . ":" . $smtp[1], $ret, $this->format_time($time), $smtp[2]);
}
public function count_processed_emails() {
$today = $last_7_days = $last_30_days = 0;
2014-10-23 09:31:40 +02:00
$a = array();
2012-02-08 23:14:28 +01:00
$now = time();
2013-08-22 11:24:54 +02:00
$ts = $now - 3600;
2014-10-23 09:31:40 +02:00
$query = $this->db->query("select count(*) as count, sum(size) as size from " . TABLE_META . " where arrived > $ts");
if(isset($query->row['count'])) {
$a['last_60_mins_count'] = $query->row['count'];
$a['last_60_mins_size'] = $query->row['size'];
}
2013-08-22 11:24:54 +02:00
2012-02-08 23:14:28 +01:00
$ts = $now - 86400;
2014-10-23 09:31:40 +02:00
$query = $this->db->query("select count(*) as count, sum(size) as size from " . TABLE_META . " where arrived > $ts");
if(isset($query->row['count'])) {
$a['today_count'] = $query->row['count'];
$a['today_size'] = $query->row['size'];
}
2012-02-08 23:14:28 +01:00
$ts = $now - 604800;
2014-10-23 09:31:40 +02:00
$query = $this->db->query("select count(*) as count, sum(size) as size from " . TABLE_META . " where arrived > $ts");
if(isset($query->row['count'])) {
$a['last_7_days_count'] = $query->row['count'];
$a['last_7_days_size'] = $query->row['size'];
}
2012-02-08 23:14:28 +01:00
$ts = $now - 2592000;
2014-10-23 09:31:40 +02:00
$query = $this->db->query("select count(*) as count, sum(size) as size from " . TABLE_META . " where arrived > $ts");
if(isset($query->row['count'])) {
$a['last_30_days_count'] = $query->row['count'];
$a['last_30_days_size'] = $query->row['size'];
}
2012-02-08 23:14:28 +01:00
2014-10-23 09:31:40 +02:00
return $a;
2012-02-08 23:14:28 +01:00
}
public function uptime() {
$s = exec("uptime");
list ($uptime, $loadavg) = preg_split("/ load average\: /", $s);
return array(preg_replace("/\,\ {0,}$/", "", $uptime), $loadavg);
}
public function meminfo() {
$m = explode("\n", file_get_contents("/proc/meminfo"));
while(list($k, $v) = each($m)) {
$a = preg_split("/\ {1,}/", $v);
if(isset($a[0]) && $a[0]) { $_m[$a[0]] = $a[1]; }
}
2012-09-14 11:04:43 +02:00
$mem_percentage = isset($_m['MemTotal:']) && $_m['MemTotal:'] > 0 ? sprintf("%.2f", 100*($_m['MemTotal:'] - $_m['MemFree:'] - $_m['Cached:']) / $_m['MemTotal:']) : "0";
$swap_percentage = isset($_m['SwapTotal:']) && $_m['SwapTotal:'] > 0 ? sprintf("%.2f", 100*($_m['SwapTotal:'] - $_m['SwapFree:']) / $_m['SwapTotal:']) : "0";
2012-02-08 23:14:28 +01:00
2012-09-11 15:12:58 +02:00
return array(sprintf("%.0f", @$_m['MemTotal:'] / 1000), $mem_percentage, sprintf("%.0f", @$_m['SwapTotal:'] / 1000), $swap_percentage);
2012-02-08 23:14:28 +01:00
}
public function diskinfo() {
$shortinfo = array();
2013-08-20 12:05:38 +02:00
$a = array();
2012-02-08 23:14:28 +01:00
2013-02-16 12:33:25 +01:00
$s = exec("df", $output);
2012-02-08 23:14:28 +01:00
$partitions = Registry::get('partitions_to_monitor');
while(list($k, $v) = each($output)) {
if($k > 0) {
$p = preg_split("/\ {1,}/", $v);
2013-08-20 12:05:38 +02:00
if(isset($p[5]) && in_array($p[5], $partitions) && !isset($a[$p[5]])) {
$a[$p[5]] = 1;
2012-02-08 23:14:28 +01:00
$shortinfo[] = array(
'partition' => $p[5],
2013-08-01 22:28:42 +02:00
'freespace' => $p[3],
'total' => $p[1],
'used' => $p[2],
2012-02-08 23:14:28 +01:00
'utilization' => preg_replace("/\%/", "", $p[4])
);
}
}
}
return $shortinfo;
}
public function sysinfo() {
$hostname = exec("hostname -f");
$s = exec("uname -a");
return array($hostname, $s);
}
2012-04-27 14:39:10 +02:00
public function get_options() {
$data = array();
$query = $this->db->query("SELECT * FROM `" . TABLE_OPTION . "`");
if(isset($query->rows)) {
foreach ($query->rows as $q) {
$data[$q['key']] = $q['value'];
}
}
return $data;
}
public function toggle_option($option = '') {
$value = 0;
$query = $this->db->query("SELECT `value` FROM `" . TABLE_OPTION . "` WHERE `key`=?", array($option));
if(isset($query->row['value'])) {
if($query->row['value'] == 0) { $value = 1; }
else { $value = 0; }
$query = $this->db->query("UPDATE `" . TABLE_OPTION . "` SET `value`=? WHERE `key`=?", array($value, $option));
}
}
2013-04-22 23:03:40 +02:00
2013-02-16 12:33:25 +01:00
public function get_database_size() {
$data = array();
$query = $this->db->query("SELECT table_schema AS `name`,
SUM( data_length + index_length ) AS `size`
FROM information_schema.TABLES
WHERE table_schema = '".DB_DATABASE."'
GROUP BY table_schema;");
if(isset($query->rows)) {
2013-04-22 23:03:40 +02:00
$data = array_pop($query->rows);
} else {
$data['size'] = 0;
2013-02-16 12:33:25 +01:00
}
return $data['size'];
}
2013-04-22 23:03:40 +02:00
public function get_oldest_record_ts() {
$data = array();
$query = $this->db->query("SELECT `sent` AS `oldest_record_ts` FROM " . TABLE_META . " WHERE `deleted`=0 and `sent` > 837381600 ORDER BY `sent` ASC LIMIT 1");
2013-04-22 23:03:40 +02:00
if(isset($query->rows)) {
$data = array_pop($query->rows);
} else {
$data['oldest_record_ts'] = 0;
}
return $data['oldest_record_ts'];
}
2014-04-25 13:42:08 +02:00
public function get_first_email_arrival_ts() {
$query = $this->db->query("SELECT `arrived` FROM " . TABLE_META . " ORDER BY id ASC LIMIT 1");
2015-03-23 15:48:06 +01:00
if(isset($query->row['arrived'])) { return $query->row['arrived']; }
2014-04-25 13:42:08 +02:00
return time();
}
public function get_sphinx_size($directory = DIR_SPHINX) {
2013-02-16 12:33:25 +01:00
$dirSize=0;
if(!$dh=opendir($directory)) {
return false;
}
while($file = readdir($dh)) {
if($file == "." || $file == "..") {
continue;
}
if(is_file($directory."/".$file)) {
$dirSize += filesize($directory."/".$file);
}
if(is_dir($directory."/".$file)) {
$dirSize += $this->get_sphinx_size($directory."/".$file);
2013-02-16 12:33:25 +01:00
}
}
closedir($dh);
return $dirSize;
}
2012-04-27 14:39:10 +02:00
2013-08-09 10:13:54 +02:00
public function indexer_stat() {
$data = array('', '');
if(file_exists(INDEXER_BEACON)) {
$st = stat(INDEXER_BEACON);
$t1 = date(DATE_TEMPLATE . " H:i", $st['mtime']);
$t2 = date(DATE_TEMPLATE . " H:i", $st['mtime']+30*60);
$data = array($t1, $t2);
}
return $data;
}
2013-08-11 09:22:03 +02:00
public function purge_stat() {
$data = array('', '');
if(file_exists(PURGE_BEACON)) {
$st = stat(PURGE_BEACON);
$t1 = date(DATE_TEMPLATE . " H:i", $st['mtime']);
$t2 = date(DATE_TEMPLATE . " H:i", $st['mtime']+86400);
$data = array($t1, $t2);
}
return $data;
}
2012-02-08 23:14:28 +01:00
}
?>