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 ;
2015-05-12 14:34:38 +02:00
$time_start = microtime ( true );
2012-02-08 23:14:28 +01:00
if ( $smtp [ 0 ] && $smtp [ 1 ] && is_numeric ( $smtp [ 1 ]) && $smtp [ 1 ] > 0 && $smtp [ 1 ] < 65536 ) {
$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 ;
2015-05-06 12:21:41 +02:00
$query = $this -> db -> query ( " select count(*) as count from " . TABLE_META . " where arrived > $ts " );
2014-10-23 09:31:40 +02:00
if ( isset ( $query -> row [ 'count' ])) {
$a [ 'last_60_mins_count' ] = $query -> row [ 'count' ];
}
2013-08-22 11:24:54 +02:00
2012-02-08 23:14:28 +01:00
$ts = $now - 86400 ;
2015-05-06 12:21:41 +02:00
$query = $this -> db -> query ( " select count(*) as count from " . TABLE_META . " where arrived > $ts " );
2014-10-23 09:31:40 +02:00
if ( isset ( $query -> row [ 'count' ])) {
$a [ 'today_count' ] = $query -> row [ 'count' ];
}
2012-02-08 23:14:28 +01:00
$ts = $now - 604800 ;
2015-05-06 12:21:41 +02:00
$query = $this -> db -> query ( " select count(*) as count from " . TABLE_META . " where arrived > $ts " );
2014-10-23 09:31:40 +02:00
if ( isset ( $query -> row [ 'count' ])) {
$a [ 'last_7_days_count' ] = $query -> row [ 'count' ];
}
2012-02-08 23:14:28 +01:00
$ts = $now - 2592000 ;
2015-05-06 12:21:41 +02:00
$query = $this -> db -> query ( " select count(*) as count from " . TABLE_META . " where arrived > $ts " );
2014-10-23 09:31:40 +02:00
if ( isset ( $query -> row [ 'count' ])) {
$a [ 'last_30_days_count' ] = $query -> row [ 'count' ];
}
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 ();
2013-10-19 10:39:10 +02:00
$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 ();
}
2013-04-15 16:09:59 +02:00
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 )) {
2013-04-15 16:09:59 +02:00
$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' ]);
2019-08-25 12:33:53 +02:00
$t2 = date ( DATE_TEMPLATE . " H:i " , $st [ 'mtime' ] + DELTA_INDEXER_PERIOD );
2013-08-09 10:13:54 +02:00
$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
2018-03-18 13:54:13 +01:00
public function get_current_sphinx_main_index_size () {
$size = 0 ;
if ( file_exists ( SPHINX_MAIN_INDEX_SIZE )) {
$size = ( int ) file_get_contents ( SPHINX_MAIN_INDEX_SIZE );
}
return $size ;
}
2012-02-08 23:14:28 +01:00
2018-03-18 13:54:13 +01:00
}