Skip to content
monitor_core_module.inc.php 44.9 KiB
Newer Older


    function monitorMessagesLog()
    {
        global $app;
        global $conf;

        /* the id of the server as int */
        $server_id = intval($conf["server_id"]);

        /** The type of the data */
        $type = 'log_messages';

        /* Get the data of the log */
        $data = $this->_getLogData($type);

        /*
         * actually this info has no state.
         * maybe someone knows better...???...
         */
        $state = 'no_state';

        /*
        Insert the data into the database
        */
        $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
            "VALUES (".
        $server_id . ", " .
vogelor's avatar
vogelor committed
            "'" . $app->dbmaster->quote($type) . "', " .
vogelor's avatar
vogelor committed
            "'" . $app->dbmaster->quote(serialize($data)) . "', " .

        /* The new data is written, now we can delete the old one */
        $this->_delOldRecords($type, 10);
    function monitorISPCCronLog()
    {
        global $app;
        global $conf;

        /* the id of the server as int */
        $server_id = intval($conf["server_id"]);

        /** The type of the data */
        $type = 'log_ispc_cron';

        /* Get the data of the log */
        $data = $this->_getLogData($type);

        /*
         * actually this info has no state.
         * maybe someone knows better...???...
         */
        $state = 'no_state';

        /*
        Insert the data into the database
        */
        $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
            "VALUES (".
        $server_id . ", " .
            "'" . $app->dbmaster->quote($type) . "', " .
        time() . ", " .
            "'" . $app->dbmaster->quote(serialize($data)) . "', " .
            "'" . $state . "'" .
            ")";
        $app->dbmaster->query($sql);

        /* The new data is written, now we can delete the old one */
        $this->_delOldRecords($type, 10);
    }
    
    function monitorFreshClamLog()
    {
        global $app;
        global $conf;

        /* the id of the server as int */
        $server_id = intval($conf["server_id"]);

        /** The type of the data */
        $type = 'log_freshclam';

        /* Get the data of the log */
        $data = $this->_getLogData($type);

        /* Get the data from the LAST log-Entry.
         * if there can be found:
         * WARNING: Your ClamAV installation is OUTDATED!
         * then the clamav is outdated. This is a warning!
         */
        $tmp = explode("\n", $data);
        $lastLog = array();
        if ($tmp[sizeof($tmp)-1] == "")
        {
            /* the log ends with an empty line remove this */
            array_pop($tmp);
        }
        if (strpos($tmp[sizeof($tmp)-1], "-------------") !== false)
        {
            /* the log ends with "-----..." remove this */
            array_pop($tmp);
        }
        for ($i = sizeof($tmp) -1; $i > 0; $i--){
            if (strpos($tmp[$i], "---------") === false){
                /* no delimiter found, so add this to the last-log */
                $lastLog[] = $tmp[$i];
            }
            else
            {
                /* delimiter found, so there is no more line left! */
                break;
            }
        }

        /*
         * Now we have the last log in the array.
         * Check if the outdated-string is found...
         */
        foreach($lastLog as $line){
            if (strpos(strtolower($line), "outdated") !== false) {
                 $state = $this->_setState($state, 'warning');
            }
        }

        /*
        Insert the data into the database
        */
        $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
            "VALUES (".
        $server_id . ", " .
vogelor's avatar
vogelor committed
            "'" . $app->dbmaster->quote($type) . "', " .
vogelor's avatar
vogelor committed
            "'" . $app->dbmaster->quote(serialize($data)) . "', " .

        /* The new data is written, now we can delete the old one */
        $this->_delOldRecords($type, 10);
    }

    function monitorClamAvLog()
    {
        global $app;
        global $conf;

        /* the id of the server as int */
        $server_id = intval($conf["server_id"]);

        /** The type of the data */
        $type = 'log_clamav';

        /* Get the data of the log */
        $data = $this->_getLogData($type);

        // Todo: the state should be calculated.
        $state = 'ok';

        /*
        Insert the data into the database
        */
        $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
            "VALUES (".
        $server_id . ", " .
vogelor's avatar
vogelor committed
            "'" . $app->dbmaster->quote($type) . "', " .
vogelor's avatar
vogelor committed
            "'" . $app->dbmaster->quote(serialize($data)) . "', " .
        /* The new data is written, now we can delete the old one */
        $this->_delOldRecords($type, 10);
    }

    function monitorIspConfigLog()
    {
        global $app;
        global $conf;

        /* the id of the server as int */
        $server_id = intval($conf["server_id"]);

        /** The type of the data */
        $type = 'log_ispconfig';

        /* Get the data of the log */
        $data = $this->_getLogData($type);

        // Todo: the state should be calculated.
        $state = 'ok';

        /*
        Insert the data into the database
        */
        $sql = "INSERT INTO monitor_data (server_id, type, created, data, state) " .
            "VALUES (".
        $server_id . ", " .
vogelor's avatar
vogelor committed
            "'" . $app->dbmaster->quote($type) . "', " .
vogelor's avatar
vogelor committed
            "'" . $app->dbmaster->quote(serialize($data)) . "', " .

        /* The new data is written, now we can delete the old one */
        $this->_delOldRecords($type, 10);
        
		$dist = '';
		$logfile = '';
		
		if(@is_file('/etc/debian_version')) $dist = 'debian';
		if(@is_file('/etc/redhat-release')) $dist = 'redhat';
		if(@is_file('/etc/SuSE-release')) $dist = 'suse';
		if(@is_file('/etc/gentoo-release')) $dist = 'gentoo';
                if($dist == 'debian') $logfile = '/var/log/mail.log';
				if($dist == 'redhat') $logfile = '/var/log/maillog';
				if($dist == 'suse') $logfile = '/var/log/mail.info';
				if($dist == 'gentoo') $logfile = '/var/log/maillog';
                if($dist == 'debian') $logfile = '/var/log/mail.warn';
				if($dist == 'redhat') $logfile = '/var/log/maillog';
				if($dist == 'suse') $logfile = '/var/log/mail.warn';
				if($dist == 'gentoo') $logfile = '/var/log/maillog';
                if($dist == 'debian') $logfile = '/var/log/mail.err';
				if($dist == 'redhat') $logfile = '/var/log/maillog';
				if($dist == 'suse') $logfile = '/var/log/mail.err';
				if($dist == 'gentoo') $logfile = '/var/log/maillog';
                if($dist == 'debian') $logfile = '/var/log/messages';
				if($dist == 'redhat') $logfile = '/var/log/messages';
tbrehm's avatar
tbrehm committed
				if($dist == 'suse') $logfile = '/var/log/messages';
				if($dist == 'gentoo') $logfile = '/var/log/messages';
                if($dist == 'debian') $logfile = '/var/log/ispconfig/cron.log';
				if($dist == 'redhat') $logfile = '/var/log/ispconfig/cron.log';
				if($dist == 'suse') $logfile = '/var/log/ispconfig/cron.log';
				if($dist == 'gentoo') $logfile = '/var/log/cron';
                if($dist == 'debian') $logfile = '/var/log/clamav/freshclam.log';
				if($dist == 'redhat') $logfile = (is_file('/var/log/clamav/freshclam.log') ? '/var/log/clamav/freshclam.log' : '/var/log/freshclam.log');
                if($dist == 'suse') $logfile = '';
                if($dist == 'gentoo') $logfile = '/var/log/clamav/freshclam.log';
                if($dist == 'debian') $logfile = '/var/log/clamav/clamav.log';
				if($dist == 'redhat') $logfile = (is_file('/var/log/clamav/clamd.log') ? '/var/log/clamav/clamd.log' : '/var/log/maillog');
				if($dist == 'suse') $logfile = '';
				if($dist == 'gentoo') $logfile = '/var/log/clamav/clamd.log';
                if($dist == 'debian') $logfile = '/var/log/fail2ban.log';
				if($dist == 'redhat') $logfile = '/var/log/fail2ban.log';
				if($dist == 'suse') $logfile = '/var/log/fail2ban.log';
				if($dist == 'gentoo') $logfile = '/var/log/fail2ban.log';
                if($dist == 'debian') $logfile = '/var/log/ispconfig/ispconfig.log';
				if($dist == 'redhat') $logfile = '/var/log/ispconfig/ispconfig.log';
				if($dist == 'suse') $logfile = '/var/log/ispconfig/ispconfig.log';
				if($dist == 'gentoo') $logfile = '/var/log/ispconfig/ispconfig.log';
                break;
            default:
                $logfile = '';
                break;
        }

        // Getting the logfile content
        if($logfile != '') {
            $logfile = escapeshellcmd($logfile);
tbrehm's avatar
tbrehm committed
            if(stristr($logfile, ';') or substr($logfile,0,9) != '/var/log/' or stristr($logfile, '..')) {
                $log = 'Logfile path error.';
            }
            else
            {
                $log = '';
                if(is_readable($logfile)) {
                    if($fd = popen("tail -n 100 $logfile", 'r')) {
                        while (!feof($fd)) {
                            $log .= fgets($fd, 4096);
                            $n++;
                            if($n > 1000) break;
                        }
                        fclose($fd);
                    }
                } else {
                    $log = 'Unable to read '.$logfile;
                }
            }
        }

        return $log;
    }

    function _checkTcp ($host,$port) {

        $fp = @fsockopen ($host, $port, $errno, $errstr, 2);

        if ($fp) {
            fclose($fp);
            return true;
        } else {
            return false;
        }
    }

    function _checkUdp ($host,$port) {

        $fp = @fsockopen ('udp://'.$host, $port, $errno, $errstr, 2);

        if ($fp) {
            fclose($fp);
            return true;
        } else {
            return false;
        }
    }

    function _checkFtp ($host,$port){

        $conn_id = @ftp_connect($host, $port);

        if($conn_id){
            @ftp_close($conn_id);
            return true;
        } else {
            return false;
        }
    }

    /*
     Deletes Records older than n.
    */
    function _delOldRecords($type, $min, $hour=0, $days=0) {
        global $app;

        $now = time();
        $old = $now - ($min * 60) - ($hour * 60 * 60) - ($days * 24 * 60 * 60);
        $sql = "DELETE FROM monitor_data " .
            "WHERE " .
vogelor's avatar
vogelor committed
            "type =" . "'" . $app->dbmaster->quote($type) . "' " .
    }

    /*
     * Set the state to the given level (or higher, but not lesser).
     * * If the actual state is critical and you call the method with ok,
     *   then the state is critical.
     *
     * * If the actual state is critical and you call the method with error,
     *   then the state is error.
     */
    function _setState($oldState, $newState)
    {
        /*
         * Calculate the weight of the old state
         */
        switch ($oldState) {
            case 'no_state': $oldInt = 0;
                break;
            case 'ok': $oldInt = 1;
                break;
            case 'unknown': $oldInt = 2;
                break;
            case 'info': $oldInt = 3;
                break;
            case 'warning': $oldInt = 4;
                break;
            case 'critical': $oldInt = 5;
                break;
            case 'error': $oldInt = 6;
                break;
        }
        /*
         * Calculate the weight of the new state
         */
        switch ($newState) {
            case 'no_state': $newInt = 0 ;
                break;
            case 'ok': $newInt = 1 ;
            case 'unknown': $newInt = 2 ;
                break;
            case 'info': $newInt = 3 ;
                break;
            case 'warning': $newInt = 4 ;
                break;
            case 'critical': $newInt = 5 ;
                break;
            case 'error': $newInt = 6 ;
                break;
        }

        /*
         * Set to the higher level
         */
        if ($newInt > $oldInt){
            return $newState;
        }
        else
        {
            return $oldState;
        }
    }

    function _getIntArray($line){
        /** The array of float found */
        $res = array();
        /* First build a array from the line */
        $data = explode(' ', $line);
        /* then check if any item is a float */
        foreach ($data as $item) {
            if ($item . '' == (int)$item . ''){
                $res[] = $item;
            }
        }
        return $res;
    }