| | |
| | | $distname = 'Ubuntu'; |
| | | $distid = 'debian40'; |
| | | $distbaseid = 'debian'; |
| | | $ver = explode(' ',$issue); |
| | | $ver = explode(' ', $issue); |
| | | $ver = array_filter($ver); |
| | | $ver = next($ver); |
| | | $mainver = explode('.',$ver); |
| | | $mainver = explode('.', $ver); |
| | | $mainver = array_filter($mainver); |
| | | $mainver = current($mainver).'.'.next($mainver); |
| | | switch ($mainver){ |
| | | case "15.10": |
| | | $relname = "(Wily Werewolf)"; |
| | | break; |
| | | case "15.04": |
| | | $relname = "(Vivid Vervet)"; |
| | | break; |
| | | case "14.10": |
| | | $relname = "(Utopic Unicorn)"; |
| | | break; |
| | | case "14.04": |
| | | $relname = "(Trusty Tahr)"; |
| | | break; |
| | | case "13.10": |
| | | $relname = "(Saucy Salamander)"; |
| | | break; |
| | | case "13.04": |
| | | $relname = "(Raring Ringtail)"; |
| | | break; |
| | | case "12.10": |
| | | $relname = "(Quantal Quetzal)"; |
| | | break; |
| | | break; |
| | | case "12.04": |
| | | $relname = "(Precise Pangolin)"; |
| | | break; |
| | | break; |
| | | case "11.10": |
| | | $relname = "(Oneiric Ocelot)"; |
| | | break; |
| | | break; |
| | | case "11.14": |
| | | $relname = "(Natty Narwhal)"; |
| | | break; |
| | | break; |
| | | case "10.10": |
| | | $relname = "(Maverick Meerkat)"; |
| | | break; |
| | | break; |
| | | case "10.04": |
| | | $relname = "(Lucid Lynx)"; |
| | | break; |
| | | break; |
| | | case "9.10": |
| | | $relname = "(Karmic Koala)"; |
| | | break; |
| | | break; |
| | | case "9.04": |
| | | $relname = "(Jaunty Jackpole)"; |
| | | break; |
| | | break; |
| | | case "8.10": |
| | | $relname = "(Intrepid Ibex)"; |
| | | break; |
| | | $relname = "(Intrepid Ibex)"; |
| | | break; |
| | | case "8.04": |
| | | $relname = "(Hardy Heron)"; |
| | | break; |
| | | break; |
| | | case "7.10": |
| | | $relname = "(Gutsy Gibbon)"; |
| | | break; |
| | | break; |
| | | case "7.04": |
| | | $relname = "(Feisty Fawn)"; |
| | | break; |
| | | break; |
| | | case "6.10": |
| | | $relname = "(Edgy Eft)"; |
| | | break; |
| | | break; |
| | | case "6.06": |
| | | $relname = "(Dapper Drake)"; |
| | | break; |
| | | break; |
| | | case "5.10": |
| | | $relname = "(Breezy Badger)"; |
| | | break; |
| | | break; |
| | | case "5.04": |
| | | $relname = "(Hoary Hedgehog)"; |
| | | break; |
| | | break; |
| | | case "4.10": |
| | | $relname = "(Warty Warthog)"; |
| | | break; |
| | | break; |
| | | default: |
| | | $relname = "UNKNOWN"; |
| | | } |
| | |
| | | $distver = 'Squeeze/Sid'; |
| | | $distid = 'debian60'; |
| | | $distbaseid = 'debian'; |
| | | } elseif (strstr(trim(file_get_contents('/etc/debian_version')), '7.0') || strstr(trim(file_get_contents('/etc/debian_version')), '7.1') || trim(file_get_contents('/etc/debian_version')) == 'wheezy/sid') { |
| | | } elseif (strstr(trim(file_get_contents('/etc/debian_version')), '7.0') || substr(trim(file_get_contents('/etc/debian_version')),0,2) == '7.' || trim(file_get_contents('/etc/debian_version')) == 'wheezy/sid') { |
| | | $distname = 'Debian'; |
| | | $distver = 'Wheezy/Sid'; |
| | | $distid = 'debian60'; |
| | | $distbaseid = 'debian'; |
| | | } elseif(strstr(trim(file_get_contents('/etc/debian_version')), '8') || substr(trim(file_get_contents('/etc/debian_version')),0,1) == '8') { |
| | | $distname = 'Debian'; |
| | | $distver = 'Jessie'; |
| | | $distid = 'debian60'; |
| | | $distbaseid = 'debian'; |
| | | } else { |
| | |
| | | $distver = '5.3'; |
| | | $distid = 'centos53'; |
| | | $distbaseid = 'fedora'; |
| | | } elseif(stristr($content, 'CentOS Linux release 6')) { |
| | | $distname = 'CentOS'; |
| | | $distver = 'Unknown'; |
| | | $distid = 'centos53'; |
| | | $distbaseid = 'fedora'; |
| | | } elseif(stristr($content, 'CentOS Linux release 7')) { |
| | | $distname = 'CentOS'; |
| | | $distver = 'Unknown'; |
| | | $distid = 'centos53'; |
| | | $distbaseid = 'fedora'; |
| | | } else { |
| | | $distname = 'Redhat'; |
| | | $distver = 'Unknown'; |
| | |
| | | return array('name' => $distname, 'version' => $distver, 'id' => $distid, 'baseid' => $distbaseid); |
| | | } |
| | | |
| | | // this function remains in the tools class, because it is used by cron AND rescue |
| | | // this function remains in the tools class, because it is used by cron AND rescue |
| | | public function monitorServices() { |
| | | global $app; |
| | | global $conf; |
| | | |
| | | /** the id of the server as int */ |
| | | |
| | | |
| | | $server_id = intval($conf['server_id']); |
| | | |
| | | /** get the "active" Services of the server from the DB */ |
| | | $services = $app->db->queryOneRecord('SELECT * FROM server WHERE server_id = ' . $server_id); |
| | | $services = $app->db->queryOneRecord('SELECT * FROM server WHERE server_id = ?', $server_id); |
| | | /* |
| | | * If the DB is down, we have to set the db to "yes". |
| | | * If we don't do this, then the monitor will NOT monitor, that the db is down and so the |
| | |
| | | $state = 'error'; // because service is down |
| | | } |
| | | } |
| | | $data['mongodbserver'] = -1; |
| | | if ($this->_checkTcp('localhost', 27017)) { |
| | | $data['mongodbserver'] = 1; |
| | | } else { |
| | | $data['mongodbserver'] = 0; |
| | | //$state = 'error'; // because service is down |
| | | /* TODO!!! check if this is a mongodbserver at all, otherwise it will always throw an error state!!! */ |
| | | } |
| | | $data['mongodbserver'] = -1; |
| | | if ($this->_checkTcp('localhost', 27017)) { |
| | | $data['mongodbserver'] = 1; |
| | | } else { |
| | | $data['mongodbserver'] = 0; |
| | | //$state = 'error'; // because service is down |
| | | /* TODO!!! check if this is a mongodbserver at all, otherwise it will always throw an error state!!! */ |
| | | } |
| | | |
| | | /* |
| | | * Return the Result |
| | |
| | | $res['state'] = $state; |
| | | return $res; |
| | | } |
| | | |
| | | |
| | | public function _getLogData($log) { |
| | | global $conf; |
| | | |
| | |
| | | } |
| | | |
| | | switch ($log) { |
| | | case 'log_mail': |
| | | if ($dist == 'debian') { |
| | | $logfile = '/var/log/mail.log'; |
| | | } elseif ($dist == 'redhat') { |
| | | $logfile = '/var/log/maillog'; |
| | | } elseif ($dist == 'suse') { |
| | | $logfile = '/var/log/mail.info'; |
| | | } elseif ($dist == 'gentoo') { |
| | | $logfile = '/var/log/maillog'; |
| | | } |
| | | break; |
| | | case 'log_mail_warn': |
| | | if ($dist == 'debian') { |
| | | $logfile = '/var/log/mail.warn'; |
| | | } elseif ($dist == 'redhat') { |
| | | $logfile = '/var/log/maillog'; |
| | | } elseif ($dist == 'suse') { |
| | | $logfile = '/var/log/mail.warn'; |
| | | } elseif ($dist == 'gentoo') { |
| | | $logfile = '/var/log/maillog'; |
| | | } |
| | | break; |
| | | case 'log_mail_err': |
| | | if ($dist == 'debian') { |
| | | $logfile = '/var/log/mail.err'; |
| | | } elseif ($dist == 'redhat') { |
| | | $logfile = '/var/log/maillog'; |
| | | } elseif ($dist == 'suse') { |
| | | $logfile = '/var/log/mail.err'; |
| | | } elseif ($dist == 'gentoo') { |
| | | $logfile = '/var/log/maillog'; |
| | | } |
| | | break; |
| | | case 'log_messages': |
| | | if ($dist == 'debian') { |
| | | $logfile = '/var/log/syslog'; |
| | | } elseif ($dist == 'redhat') { |
| | | $logfile = '/var/log/messages'; |
| | | } elseif ($dist == 'suse') { |
| | | $logfile = '/var/log/messages'; |
| | | } elseif ($dist == 'gentoo') { |
| | | $logfile = '/var/log/messages'; |
| | | } |
| | | break; |
| | | case 'log_ispc_cron': |
| | | if ($dist == 'debian') { |
| | | $logfile = $conf['ispconfig_log_dir'] . '/cron.log'; |
| | | } elseif ($dist == 'redhat') { |
| | | $logfile = $conf['ispconfig_log_dir'] . '/cron.log'; |
| | | } elseif ($dist == 'suse') { |
| | | $logfile = $conf['ispconfig_log_dir'] . '/cron.log'; |
| | | } elseif ($dist == 'gentoo') { |
| | | $logfile = '/var/log/cron'; |
| | | } |
| | | break; |
| | | case 'log_freshclam': |
| | | if ($dist == 'debian') { |
| | | $logfile = '/var/log/clamav/freshclam.log'; |
| | | } elseif ($dist == 'redhat') { |
| | | $logfile = (is_file('/var/log/clamav/freshclam.log') ? '/var/log/clamav/freshclam.log' : '/var/log/freshclam.log'); |
| | | } elseif ($dist == 'suse') { |
| | | $logfile = '/var/log/freshclam.log'; |
| | | } elseif ($dist == 'gentoo') { |
| | | $logfile = '/var/log/clamav/freshclam.log'; |
| | | } |
| | | break; |
| | | case 'log_clamav': |
| | | if ($dist == 'debian') { |
| | | $logfile = '/var/log/clamav/clamav.log'; |
| | | } elseif ($dist == 'redhat') { |
| | | $logfile = (is_file('/var/log/clamav/clamd.log') ? '/var/log/clamav/clamd.log' : '/var/log/maillog'); |
| | | } elseif ($dist == 'suse') { |
| | | $logfile = '/var/log/clamd.log'; |
| | | } elseif ($dist == 'gentoo') { |
| | | $logfile = '/var/log/clamav/clamd.log'; |
| | | } |
| | | break; |
| | | case 'log_fail2ban': |
| | | if ($dist == 'debian') { |
| | | $logfile = '/var/log/fail2ban.log'; |
| | | } elseif ($dist == 'redhat') { |
| | | $logfile = '/var/log/fail2ban.log'; |
| | | } elseif ($dist == 'suse') { |
| | | $logfile = '/var/log/fail2ban.log'; |
| | | } elseif ($dist == 'gentoo') { |
| | | $logfile = '/var/log/fail2ban.log'; |
| | | } |
| | | break; |
| | | case 'log_mongodb': |
| | | $logfile = '/var/log/mongodb/mongodb.log'; |
| | | break; |
| | | case 'log_ispconfig': |
| | | if ($dist == 'debian') { |
| | | $logfile = $conf['ispconfig_log_dir'] . '/ispconfig.log'; |
| | | } elseif ($dist == 'redhat') { |
| | | $logfile = $conf['ispconfig_log_dir'] . '/ispconfig.log'; |
| | | } elseif ($dist == 'suse') { |
| | | $logfile = $conf['ispconfig_log_dir'] . '/ispconfig.log'; |
| | | } elseif ($dist == 'gentoo') { |
| | | $logfile = $conf['ispconfig_log_dir'] . '/ispconfig.log'; |
| | | } |
| | | break; |
| | | default: |
| | | $logfile = ''; |
| | | break; |
| | | case 'log_mail': |
| | | if ($dist == 'debian') { |
| | | $logfile = '/var/log/mail.log'; |
| | | } elseif ($dist == 'redhat') { |
| | | $logfile = '/var/log/maillog'; |
| | | } elseif ($dist == 'suse') { |
| | | $logfile = '/var/log/mail.info'; |
| | | } elseif ($dist == 'gentoo') { |
| | | $logfile = '/var/log/maillog'; |
| | | } |
| | | break; |
| | | case 'log_mail_warn': |
| | | if ($dist == 'debian') { |
| | | $logfile = '/var/log/mail.warn'; |
| | | } elseif ($dist == 'redhat') { |
| | | $logfile = '/var/log/maillog'; |
| | | } elseif ($dist == 'suse') { |
| | | $logfile = '/var/log/mail.warn'; |
| | | } elseif ($dist == 'gentoo') { |
| | | $logfile = '/var/log/maillog'; |
| | | } |
| | | break; |
| | | case 'log_mail_err': |
| | | if ($dist == 'debian') { |
| | | $logfile = '/var/log/mail.err'; |
| | | } elseif ($dist == 'redhat') { |
| | | $logfile = '/var/log/maillog'; |
| | | } elseif ($dist == 'suse') { |
| | | $logfile = '/var/log/mail.err'; |
| | | } elseif ($dist == 'gentoo') { |
| | | $logfile = '/var/log/maillog'; |
| | | } |
| | | break; |
| | | case 'log_messages': |
| | | if ($dist == 'debian') { |
| | | $logfile = '/var/log/syslog'; |
| | | } elseif ($dist == 'redhat') { |
| | | $logfile = '/var/log/messages'; |
| | | } elseif ($dist == 'suse') { |
| | | $logfile = '/var/log/messages'; |
| | | } elseif ($dist == 'gentoo') { |
| | | $logfile = '/var/log/messages'; |
| | | } |
| | | break; |
| | | case 'log_ispc_cron': |
| | | if ($dist == 'debian') { |
| | | $logfile = $conf['ispconfig_log_dir'] . '/cron.log'; |
| | | } elseif ($dist == 'redhat') { |
| | | $logfile = $conf['ispconfig_log_dir'] . '/cron.log'; |
| | | } elseif ($dist == 'suse') { |
| | | $logfile = $conf['ispconfig_log_dir'] . '/cron.log'; |
| | | } elseif ($dist == 'gentoo') { |
| | | $logfile = '/var/log/cron'; |
| | | } |
| | | break; |
| | | case 'log_freshclam': |
| | | if ($dist == 'debian') { |
| | | $logfile = '/var/log/clamav/freshclam.log'; |
| | | } elseif ($dist == 'redhat') { |
| | | $logfile = (is_file('/var/log/clamav/freshclam.log') ? '/var/log/clamav/freshclam.log' : '/var/log/freshclam.log'); |
| | | } elseif ($dist == 'suse') { |
| | | $logfile = '/var/log/freshclam.log'; |
| | | } elseif ($dist == 'gentoo') { |
| | | $logfile = '/var/log/clamav/freshclam.log'; |
| | | } |
| | | break; |
| | | case 'log_clamav': |
| | | if ($dist == 'debian') { |
| | | $logfile = '/var/log/clamav/clamav.log'; |
| | | } elseif ($dist == 'redhat') { |
| | | $logfile = (is_file('/var/log/clamav/clamd.log') ? '/var/log/clamav/clamd.log' : '/var/log/maillog'); |
| | | } elseif ($dist == 'suse') { |
| | | $logfile = '/var/log/clamd.log'; |
| | | } elseif ($dist == 'gentoo') { |
| | | $logfile = '/var/log/clamav/clamd.log'; |
| | | } |
| | | break; |
| | | case 'log_fail2ban': |
| | | if ($dist == 'debian') { |
| | | $logfile = '/var/log/fail2ban.log'; |
| | | } elseif ($dist == 'redhat') { |
| | | $logfile = '/var/log/fail2ban.log'; |
| | | } elseif ($dist == 'suse') { |
| | | $logfile = '/var/log/fail2ban.log'; |
| | | } elseif ($dist == 'gentoo') { |
| | | $logfile = '/var/log/fail2ban.log'; |
| | | } |
| | | break; |
| | | case 'log_mongodb': |
| | | $logfile = '/var/log/mongodb/mongodb.log'; |
| | | break; |
| | | case 'log_ispconfig': |
| | | if ($dist == 'debian') { |
| | | $logfile = $conf['ispconfig_log_dir'] . '/ispconfig.log'; |
| | | } elseif ($dist == 'redhat') { |
| | | $logfile = $conf['ispconfig_log_dir'] . '/ispconfig.log'; |
| | | } elseif ($dist == 'suse') { |
| | | $logfile = $conf['ispconfig_log_dir'] . '/ispconfig.log'; |
| | | } elseif ($dist == 'gentoo') { |
| | | $logfile = $conf['ispconfig_log_dir'] . '/ispconfig.log'; |
| | | } |
| | | break; |
| | | default: |
| | | $logfile = ''; |
| | | break; |
| | | } |
| | | |
| | | // Getting the logfile content |
| | |
| | | * 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; |
| | | 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; |
| | | break; |
| | | 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; |
| | | case 'no_state': $newInt = 0; |
| | | break; |
| | | case 'ok': $newInt = 1; |
| | | break; |
| | | 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; |
| | | } |
| | | |
| | | /* |
| | |
| | | |
| | | // $now = time(); |
| | | // $old = $now - (4 * 60); // 4 minutes |
| | | $old = 'UNIX_TIMESTAMP() - 240'; |
| | | $old = 240; //seconds |
| | | |
| | | /* |
| | | * ATTENTION if i do NOT pay attention of the server id, i delete all data (of the type) |
| | |
| | | * even though it is the NEWEST data of this server. To avoid this i HAVE to include |
| | | * the server-id! |
| | | */ |
| | | $sql = 'DELETE FROM monitor_data ' . |
| | | 'WHERE ' . |
| | | ' type =' . "'" . $app->dbmaster->quote($type) . "' " . |
| | | 'AND ' . |
| | | ' created < ' . $old . ' ' . |
| | | 'AND ' . |
| | | ' server_id = ' . $serverId; |
| | | $app->dbmaster->query($sql); |
| | | $sql = 'DELETE FROM `monitor_data` WHERE `type` = ? AND `created` < UNIX_TIMESTAMP() - ? AND `server_id` = ?'; |
| | | $app->dbmaster->query($sql, $type, $old, $serverId); |
| | | } |
| | | |
| | | public function send_notification_email($template, $placeholders, $recipients) { |
| | | global $conf; |
| | | |
| | | if(!is_array($recipients) || count($recipients) < 1) return false; |
| | | if(!is_array($placeholders)) $placeholders = array(); |
| | | |
| | | if(file_exists($conf['rootpath'].'/conf-custom/mail/' . $template . '_'.$conf['language'].'.txt')) { |
| | | $lines = file($conf['rootpath'].'/conf-custom/mail/' . $template . '_'.$conf['language'].'.txt'); |
| | | } elseif(file_exists($conf['rootpath'].'/conf-custom/mail/' . $template . '_en.txt')) { |
| | | $lines = file($conf['rootpath'].'/conf-custom/mail/' . $template . '_en.txt'); |
| | | } elseif(file_exists($conf['rootpath'].'/conf/mail/' . $template . '_'.$conf['language'].'.txt')) { |
| | | $lines = file($conf['rootpath'].'/conf/mail/' . $template . '_'.$conf['language'].'.txt'); |
| | | } else { |
| | | $lines = file($conf['rootpath'].'/conf/mail/' . $template . '_en.txt'); |
| | | } |
| | | |
| | | //* get mail headers, subject and body |
| | | $mailHeaders = ''; |
| | | $mailBody = ''; |
| | | $mailSubject = ''; |
| | | $inHeader = true; |
| | | for($l = 0; $l < count($lines); $l++) { |
| | | if(trim($lines[$l]) == '') { |
| | | $inHeader = false; |
| | | continue; |
| | | } |
| | | if($inHeader == true) { |
| | | $parts = explode(':', $lines[$l], 2); |
| | | if(strtolower($parts[0]) == 'subject') { |
| | | $mailSubject = trim($parts[1]); |
| | | continue; |
| | | } |
| | | unset($parts); |
| | | $mailHeaders .= trim($lines[$l]) . "\n"; |
| | | } else { |
| | | $mailBody .= trim($lines[$l]) . "\n"; |
| | | } |
| | | } |
| | | $mailBody = trim($mailBody); |
| | | |
| | | //* Replace placeholders |
| | | $mailHeaders = strtr($mailHeaders, $placeholders); |
| | | $mailSubject = strtr($mailSubject, $placeholders); |
| | | $mailBody = strtr($mailBody, $placeholders); |
| | | |
| | | for($r = 0; $r < count($recipients); $r++) { |
| | | mail($recipients[$r], $mailSubject, $mailBody, $mailHeaders); |
| | | } |
| | | |
| | | unset($mailSubject); |
| | | unset($mailHeaders); |
| | | unset($mailBody); |
| | | unset($lines); |
| | | |
| | | return true; |
| | | } |
| | | |
| | | } |
| | | |