load('monitor_tools'); $this->_tools = new monitor_tools(); /* end global section for monitor cronjobs */ /* the id of the server as int */ $server_id = intval($conf['server_id']); /** The type of the data */ $type = 'disk_usage'; /** The state of the disk-usage */ $state = 'ok'; /** Fetch the data of ALL devices into a array (needed for monitoring!) */ //$dfData = shell_exec('df -hT 2>/dev/null'); $app->uses('getconf'); $web_config = $app->getconf->get_server_config($conf['server_id'], 'web'); $dfData = shell_exec('df -hT|grep -v "'.$web_config['website_basedir'].'/" 2>/dev/null'); // split into array $df = explode("\n", $dfData); /* * ignore the first line, process the rest */ for ($i = 1; $i <= sizeof($df); $i++) { if ($df[$i] != '') { /* * Make an array of the data */ $s = preg_split('/[\s]+/', $df[$i]); $data[$i]['fs'] = $s[0]; $data[$i]['type'] = $s[1]; $data[$i]['size'] = $s[2]; $data[$i]['used'] = $s[3]; $data[$i]['available'] = $s[4]; $data[$i]['percent'] = $s[5]; $data[$i]['mounted'] = $s[6]; /* * calculate the state */ $usePercent = floatval($data[$i]['percent']); //* get the free memsize if(substr($data[$i]['available'],-1) == 'G') { $freesize = floatval($data[$i]['available'])*1024; } elseif(substr($data[$i]['available'],-1) == 'T') { $freesize = floatval($data[$i]['available'])*1024*1024; } else { $freesize = floatval($data[$i]['available']); } //* We don't want to check some filesystem which have no sensible filling levels switch ($data[$i]['type']) { case 'iso9660': case 'cramfs': case 'udf': case 'tmpfs': case 'devtmpfs': case 'udev': break; default: if ($usePercent > 75 && $freesize < 2000) $state = $this->_tools->_setState($state, 'info'); if ($usePercent > 80 && $freesize < 1000) $state = $this->_tools->_setState($state, 'warning'); if ($usePercent > 90 && $freesize < 500) $state = $this->_tools->_setState($state, 'critical'); if ($usePercent > 95 && $freesize < 100) $state = $this->_tools->_setState($state, 'error'); break; } } } $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 (' . $res['server_id'] . ', ' . "'" . $app->dbmaster->quote($res['type']) . "', " . 'UNIX_TIMESTAMP(), ' . "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " . "'" . $res['state'] . "'" . ')'; $app->dbmaster->query($sql); /* 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(); } } ?>