nagiosql/admin/support.php

708 lines
35 KiB
PHP
Raw Permalink Normal View History

2017-05-22 11:24:21 +02:00
<?php
///////////////////////////////////////////////////////////////////////////////
//
// NagiosQL
//
///////////////////////////////////////////////////////////////////////////////
//
2019-04-17 11:40:50 +02:00
// (c) 2005-2018 by Martin Willisegger
2017-05-22 11:24:21 +02:00
//
// Project : NagiosQL
// Component : Support page
2019-04-17 11:40:50 +02:00
// Website : https://sourceforge.net/projects/nagiosql/
// Version : 3.4.0
// GIT Repo : https://gitlab.com/wizonet/NagiosQL
2017-05-22 11:24:21 +02:00
//
///////////////////////////////////////////////////////////////////////////////
//
2019-04-17 11:40:50 +02:00
// Path settings
// ===================
$strPattern = '(admin/[^/]*.php)';
$preRelPath = preg_replace($strPattern, '', filter_input(INPUT_SERVER, 'PHP_SELF', FILTER_SANITIZE_STRING));
$preBasePath = preg_replace($strPattern, '', filter_input(INPUT_SERVER, 'SCRIPT_FILENAME', FILTER_SANITIZE_STRING));
//
2017-05-22 11:24:21 +02:00
// Define common variables
// =======================
2019-04-17 11:40:50 +02:00
$prePageId = 40;
$preContent = 'admin/support.htm.tpl';
$preAccess = 1;
$preFieldvars = 1;
$setSaveLangId = 'private';
2017-05-22 11:24:21 +02:00
//
// Include preprocessing files
// ===========================
2019-04-17 11:40:50 +02:00
require $preBasePath.'functions/prepend_adm.php';
require $preBasePath.'functions/prepend_content.php';
2017-05-22 11:24:21 +02:00
//
// Start content
// =============
2019-04-17 11:40:50 +02:00
$conttp->setVariable('TITLE', translate('NagiosQL support page'));
$conttp->parse('header');
$conttp->show('header');
2017-05-22 11:24:21 +02:00
//
// Single data form
// ================
2019-04-17 11:40:50 +02:00
$conttp->setVariable('MAINSITE', $_SESSION['SETS']['path']['base_url']. 'admin.php');
foreach ($arrDescription as $elem) {
$conttp->setVariable($elem['name'], $elem['string']);
2017-05-22 11:24:21 +02:00
}
2019-04-17 11:40:50 +02:00
$conttp->setVariable('SUBTITLE_1', translate('Support contact information'));
$conttp->setVariable('SUPPORT_TEXT_1', translate('For questions, the online support forum or contact information '
. 'visit our website:'));
$conttp->setVariable('WEBSITE_LINK', translate('NagiosQL on sourceforge'));
2017-05-22 11:24:21 +02:00
//
// Donation
// ========
2019-04-17 11:40:50 +02:00
$conttp->setVariable('SUBTITLE_2', translate('Donate to support NagiosQL'));
$conttp->setVariable('SUPPORT_TEXT_2', translate('If you like NagiosQL and it simplifies your daily work, then you '
. 'may want to support the project by making a donation. This helps us to keep NagiosQL alive and to cover '
. 'our costs. Thank you for your donation!'));
$conttp->setVariable('DONATE_LINK', translate('Donate for NagiosQL on sourceforge'));
2017-05-22 11:24:21 +02:00
//
// Translations
// ============
2019-04-17 11:40:50 +02:00
$conttp->setVariable('SUBTITLE_3', translate('Translation services'));
$conttp->setVariable('SUPPORT_TEXT_3', translate('NagiosQL was translated into various languages. Since some '
. 'translators are no longer available in later versions, there may be untranslated words or phrases. If '
. 'you want to help us complete the translation, correct them or introduce a new language, then sign up '
. 'with us now! The translations are simply feasible online - we use an open translation service where '
. 'you can register for free at any time:'));
$conttp->setVariable('TRANSLATION_LINK', translate('Transifex translation service'));
//
// GIT repository
// ==============
$conttp->setVariable('SUBTITLE_8', translate('GIT software repository'));
$conttp->setVariable('SUPPORT_TEXT_5', translate('The NagiosQL sources are available on GitLab. There you will '
.'always find the latest bugfixes and changes as well as older branches.'));
$conttp->setVariable('GIT_LINK', translate('GitLab'));
2017-05-22 11:24:21 +02:00
//
// Online version check
// ====================
2019-04-17 11:40:50 +02:00
$conttp->setVariable('SUBTITLE_4', translate('Version check'));
2017-05-22 11:24:21 +02:00
if (!isset($SETS['common']['updcheck']) || ($SETS['common']['updcheck'] == '0')) {
2019-04-17 11:40:50 +02:00
$conttp->setVariable('SUPPORT_TEXT_4', translate('The online version check is not enabled. You can enable it '
. 'on the settings page.'));
} elseif (isset($SETS['common']['updcheck']) && ($SETS['common']['updcheck'] == '1')) {
$conttp->setVariable('SUPPORT_TEXT_4', translate('The online version check connects the NagiosQL page to find '
. 'out, if your version is still up to date.'));
$conttp->setVariable('LOADER_IMAGE', $_SESSION['SETS']['path']['base_url']. 'images/loader.gif');
$conttp->setVariable('VERSION_IF_SRC', $_SESSION['SETS']['path']['base_url']. 'admin/versioncheck.php?show=0');
$conttp->parse('versioncheck_frame');
$conttp->setVariable('VERSION_IF_SRC_RELOAD', $_SESSION['SETS']['path']['base_url'].
'admin/versioncheck.php?show=1');
$conttp->parse('versioncheck_js');
2017-05-22 11:24:21 +02:00
}
//
// Environment check
// =================
2019-04-17 11:40:50 +02:00
$conttp->setVariable('SUBTITLE_5', translate('Environment check'));
2017-05-22 11:24:21 +02:00
// Javascript check
2019-04-17 11:40:50 +02:00
$conttp->setVariable('FAILED', translate('failed'));
$conttp->setVariable('OK', translate('ok'));
2017-05-22 11:24:21 +02:00
// PHP version check
2019-04-17 11:40:50 +02:00
$conttp->setVariable('PHP_VERSION', translate('PHP version'));
if (PHP_VERSION_ID >= 50500) {
$conttp->setVariable('PHP_CLASS', 'checkgreen');
$conttp->setVariable('PHP_RESULT', translate('ok'). ' (' .PHP_VERSION. ')');
2017-05-22 11:24:21 +02:00
} else {
2019-04-17 11:40:50 +02:00
$conttp->setVariable('PHP_CLASS', 'checkred');
$conttp->setVariable('PHP_RESULT', translate('failed'). ' (' .PHP_VERSION. ' - '
.translate('Required:'). ' 5.5.0)');
2017-05-22 11:24:21 +02:00
}
// PHP modules / extensions
$strExtPath = ini_get('extension_dir');
2019-04-17 11:40:50 +02:00
$strPrefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : '';
$conttp->setVariable('PHP_SESSION_MODULE', translate('PHP module:'). ' session');
2017-05-22 11:24:21 +02:00
if (extension_loaded('session')) {
2019-04-17 11:40:50 +02:00
$conttp->setVariable('PHP_SESSION_CLASS', 'checkgreen');
$conttp->setVariable('PHP_SESSION_RESULT', translate('ok'));
2017-05-22 11:24:21 +02:00
} else {
2019-04-17 11:40:50 +02:00
$conttp->setVariable('PHP_SESSION_CLASS', 'checkred');
$conttp->setVariable('PHP_SESSION_RESULT', translate('failed'));
2017-05-22 11:24:21 +02:00
}
2019-04-17 11:40:50 +02:00
$conttp->setVariable('PHP_GETTEXT_MODULE', translate('PHP module:'). ' gettext');
2017-05-22 11:24:21 +02:00
if (extension_loaded('gettext')) {
2019-04-17 11:40:50 +02:00
$conttp->setVariable('PHP_GETTEXT_CLASS', 'checkgreen');
$conttp->setVariable('PHP_GETTEXT_RESULT', translate('ok'));
2017-05-22 11:24:21 +02:00
} else {
2019-04-17 11:40:50 +02:00
$conttp->setVariable('PHP_GETTEXT_CLASS', 'checkred');
$conttp->setVariable('PHP_GETTEXT_RESULT', translate('failed'));
2017-05-22 11:24:21 +02:00
}
2019-04-17 11:40:50 +02:00
$conttp->setVariable('PHP_FTP_MODULE', translate('PHP module:'). ' ftp');
2017-05-22 11:24:21 +02:00
if (extension_loaded('ftp')) {
2019-04-17 11:40:50 +02:00
$conttp->setVariable('PHP_FTP_CLASS', 'checkgreen');
$conttp->setVariable('PHP_FTP_RESULT', translate('ok'));
$intFTP_ok = 1;
2017-05-22 11:24:21 +02:00
} else {
2019-04-17 11:40:50 +02:00
$conttp->setVariable('PHP_FTP_CLASS', 'checkorange');
$conttp->setVariable('PHP_FTP_RESULT', translate('failed'));
$intFTP_ok = 0;
2017-05-22 11:24:21 +02:00
}
2019-04-17 11:40:50 +02:00
$conttp->setVariable('PHP_SSH2_MODULE', translate('PHP module:'). ' ssh');
2017-05-22 11:24:21 +02:00
if (extension_loaded('ssh2')) {
2019-04-17 11:40:50 +02:00
$conttp->setVariable('PHP_SSH2_CLASS', 'checkgreen');
$conttp->setVariable('PHP_SSH2_RESULT', translate('ok'));
$intSSH_ok = 1;
2017-05-22 11:24:21 +02:00
} else {
2019-04-17 11:40:50 +02:00
$conttp->setVariable('PHP_SSH2_CLASS', 'checkorange');
$conttp->setVariable('PHP_SSH2_RESULT', translate('failed'));
$intSSH_ok = 0;
2017-05-22 11:24:21 +02:00
}
// Datenbankversion
2019-04-17 11:40:50 +02:00
if ($SETS['db']['type'] == 'mysql') {
$conttp->setVariable('DB_VERSION', translate('MySQL version'));
$strSQL = "SHOW VARIABLES LIKE 'version'";
$booReturn = $myDBClass->hasSingleDataset($strSQL, $arrDataset);
if ($booReturn && (count($arrDataset) != 0)) {
$strDBVersion = $arrDataset['Value'];
if (version_compare($strDBVersion, '5.0.0', '>=')) {
$conttp->setVariable('DB_CLASS', 'checkgreen');
$conttp->setVariable('DB_RESULT', translate('ok'). ' (' .$strDBVersion. ')');
} else {
$conttp->setVariable('DB_CLASS', 'checkorange');
$conttp->setVariable('DB_RESULT', translate('failed'). ' (' .$strDBVersion. ' - ' .translate('Required:').
' 5.0.0)');
}
}
2017-05-22 11:24:21 +02:00
}
// INI settings
2019-04-17 11:40:50 +02:00
$conttp->setVariable('INI_FILE_UPLOADS', translate('PHP ini settings:'). ' file_uploads');
$strStatus1 = ini_get('file_uploads');
if (empty($strStatus1) || ($strStatus1 == 1)) {
$conttp->setVariable('INI_FILE_UPLOADS_CLASS', 'checkgreen');
$conttp->setVariable('INI_FILE_UPLOADS_RESULT', translate('ok'));
2017-05-22 11:24:21 +02:00
} else {
2019-04-17 11:40:50 +02:00
$conttp->setVariable('INI_FILE_UPLOADS_CLASS', 'checkred');
$conttp->setVariable('INI_FILE_UPLOADS_RESULT', translate('failed'));
2017-05-22 11:24:21 +02:00
}
2019-04-17 11:40:50 +02:00
$conttp->setVariable('INI_AUTO_START', translate('PHP ini settings:'). ' session.auto_start');
$strStatus2 = ini_get('session.auto_start');
if (empty($strStatus2) || ($strStatus2 == 0)) {
$conttp->setVariable('INI_AUTO_START_CLASS', 'checkgreen');
$conttp->setVariable('INI_AUTO_START_RESULT', translate('ok'));
2017-05-22 11:24:21 +02:00
} else {
2019-04-17 11:40:50 +02:00
$conttp->setVariable('INI_AUTO_START_CLASS', 'checkred');
$conttp->setVariable('INI_AUTO_START_RESULT', translate('failed'));
2017-05-22 11:24:21 +02:00
}
2019-04-17 11:40:50 +02:00
$conttp->setVariable('INI_SUHO_SESS_ENC', translate('PHP ini settings:'). ' suhosin.session.encrypt');
$strStatus3 = ini_get('suhosin.session.encrypt');
if (empty($strStatus3) || ($strStatus3 == 0)) {
$conttp->setVariable('INI_SUHO_SESS_ENC_CLASS', 'checkgreen');
$conttp->setVariable('INI_SUHO_SESS_ENC_RESULT', translate('ok'));
2017-05-22 11:24:21 +02:00
} else {
2019-04-17 11:40:50 +02:00
$conttp->setVariable('INI_SUHO_SESS_ENC_CLASS', 'checkred');
$conttp->setVariable('INI_SUHO_SESS_ENC_RESULT', translate('failed'));
2017-05-22 11:24:21 +02:00
}
2019-04-17 11:40:50 +02:00
$conttp->setVariable('INI_DATE_TIMEZONE', translate('PHP ini settings:'). ' date.timezone');
$strStatus4 = ini_get('date.timezone');
if (!empty($strStatus4)) {
$conttp->setVariable('INI_DATE_TIMEZONE_CLASS', 'checkgreen');
$conttp->setVariable('INI_DATE_TIMEZONE_RESULT', translate('ok'). ' (' .$strStatus4. ')');
2017-05-22 11:24:21 +02:00
} else {
2019-04-17 11:40:50 +02:00
$conttp->setVariable('INI_DATE_TIMEZONE_CLASS', 'checkred');
$conttp->setVariable('INI_DATE_TIMEZONE_RESULT', translate('failed'));
2017-05-22 11:24:21 +02:00
}
// File access checks
2019-04-17 11:40:50 +02:00
$conttp->setVariable('RW_CONFIG', translate('Read/Write access:'). ' settings.php');
$strConfigFile = '../config/settings.php';
2017-05-22 11:24:21 +02:00
if (file_exists($strConfigFile) && is_readable($strConfigFile) && is_writable($strConfigFile)) {
2019-04-17 11:40:50 +02:00
$conttp->setVariable('RW_CONFIG_CLASS', 'checkgreen');
$conttp->setVariable('RW_CONFIG_RESULT', translate('ok'));
} else {
$conttp->setVariable('RW_CONFIG_CLASS', 'checkred');
$conttp->setVariable('RW_CONFIG_RESULT', translate('failed'));
2017-05-22 11:24:21 +02:00
}
//
// Domain checks
// =============
2019-04-17 11:40:50 +02:00
$myConfigClass->getConfigTargets($arrConfigSet);
2017-05-22 11:24:21 +02:00
$intConfigId = $arrConfigSet[0];
2019-04-17 11:40:50 +02:00
$myConfigClass->getConfigValues($intConfigId, 'method', $intMethod);
2017-05-22 11:24:21 +02:00
if ($intConfigId != 0) {
2019-04-17 11:40:50 +02:00
$conttp->setVariable('SUBTITLE_6', translate('Config domain checks'));
$conttp->setVariable('SUPPORT_TEXT_6', translate('The checks below are based on your data domain and config '
. 'domain settings. To change the data domain, use the pull down menu in the upper right corner. Repeat '
. 'this check for any data domain you have configured. To change the config domain, use the data domain '
. 'menu and select a different config domain value.'));
$myConfigClass->getConfigValues($intConfigId, 'conffile', $strConffile);
$myConfigClass->getConfigValues($intConfigId, 'target', $strConfName);
$conttp->setVariable('DOMAIN_NAME', translate('Config domain name'));
$conttp->setVariable('DOMAIN_NAME_VALUE', $strConfName);
$conttp->setVariable('CONNECT_TYPE', translate('Connection type'));
if ($intMethod == 1) {
$conttp->setVariable('CONNECT_TYPE_CLASS', 'checkgreen');
$conttp->setVariable('CONNECT_TYPE_RESULT', 'Fileaccess');
} elseif ($intMethod == 2) {
if ($intFTP_ok == 1) {
$conttp->setVariable('CONNECT_TYPE_CLASS', 'checkgreen');
$conttp->setVariable('CONNECT_TYPE_RESULT', 'FTP');
} else {
$conttp->setVariable('CONNECT_TYPE_CLASS', 'checkred');
$conttp->setVariable('CONNECT_TYPE_RESULT', 'FTP (no FTP module)');
}
} elseif ($intMethod == 3) {
if ($intSSH_ok == 1) {
$conttp->setVariable('CONNECT_TYPE_CLASS', 'checkgreen');
$conttp->setVariable('CONNECT_TYPE_RESULT', 'SSH/SFTP');
} else {
$conttp->setVariable('CONNECT_TYPE_CLASS', 'checkred');
$conttp->setVariable('CONNECT_TYPE_RESULT', 'SSH/SFTP (no SSH2 module)');
}
}
$conttp->setVariable('CONNECT_CHECK', translate('Connection check'));
if ($intMethod == 1) {
$conttp->setVariable('CONNECT_CHECK_CLASS', 'checkgreen');
$conttp->setVariable('CONNECT_CHECK_RESULT', translate('ok'));
} elseif ($intMethod == 2) {
$booReturn = 0;
if (empty($myConfigClass->resConnectId) || !is_resource($myConfigClass->resConnectId)) {
$booReturn = $myConfigClass->getFTPConnection($intConfigId);
}
if ($booReturn == 1) {
$conttp->setVariable('CONNECT_CHECK_CLASS', 'checkred');
$conttp->setVariable('CONNECT_CHECK_RESULT', translate('failed'));
$myVisClass->processMessage($myConfigClass->strErrorMessage, $strErrorMessage);
$intConnectCheck = 0;
} else {
$conttp->setVariable('CONNECT_CHECK_CLASS', 'checkgreen');
$conttp->setVariable('CONNECT_CHECK_RESULT', translate('ok'));
$intConnectCheck = 1;
}
} elseif ($intMethod == 3) {
$booReturn = 0;
if (empty($myConfigClass->resConnectId) || !is_resource($myConfigClass->resConnectId)) {
$booReturn = $myConfigClass->getSSHConnection($intConfigId);
}
if ($booReturn == 1) {
$conttp->setVariable('CONNECT_CHECK_CLASS', 'checkred');
$conttp->setVariable('CONNECT_CHECK_RESULT', translate('failed'));
$myVisClass->processMessage($myConfigClass->strErrorMessage, $strErrorMessage);
$intConnectCheck = 0;
} else {
$conttp->setVariable('CONNECT_CHECK_CLASS', 'checkgreen');
$conttp->setVariable('CONNECT_CHECK_RESULT', translate('ok'));
$intConnectCheck = 1;
}
}
$conttp->setVariable('RW_NAG_CONF', translate('Nagios config file'));
if ($intMethod == 1) {
if (file_exists($strConffile) && is_readable($strConffile)) {
if (is_writable($strConffile)) {
$conttp->setVariable('RW_NAG_CONF_CLASS', 'checkgreen');
$conttp->setVariable('RW_NAG_CONF_RESULT', translate('ok'));
} else {
$conttp->setVariable('RW_NAG_CONF_CLASS', 'checkorange');
$conttp->setVariable('RW_NAG_CONF_RESULT', translate('ok'). ' (' .translate('readonly'). ')');
}
} else {
$conttp->setVariable('RW_NAG_CONF_CLASS', 'checkred');
$conttp->setVariable('RW_NAG_CONF_RESULT', translate('failed'));
}
} elseif (($intMethod == 2) || ($intMethod == 3)) {
// Write file to temporary
$strFileName = tempnam($SETS['path']['tempdir'], 'nagiosql_conf');
// Copy configuration from remote system
$intReturn = $myConfigClass->remoteFileCopy($strConffile, $intConfigId, $strFileName, 0);
if ($intReturn == 0) {
$intCheck = 0;
} else {
$intCheck = 1;
$myVisClass->processMessage($myConfigClass->strErrorMessage, $strErrorMessage);
if (file_exists($strFileName)) {
unlink($strFileName);
}
}
// Copy configuration to remote system
if ($intCheck == 0) {
$intReturn = $myConfigClass->remoteFileCopy($strConffile, $intConfigId, $strFileName, 1);
if ($intReturn == 0) {
$intCheck = 0;
if (file_exists($strFileName)) {
unlink($strFileName);
}
} else {
$myVisClass->processMessage($myConfigClass->strErrorMessage, $strErrorMessage);
$intCheck = 2;
if (file_exists($strFileName)) {
unlink($strFileName);
}
}
}
// Write Results
if ($intCheck == 0) {
$conttp->setVariable('RW_NAG_CONF_CLASS', 'checkgreen');
$conttp->setVariable('RW_NAG_CONF_RESULT', translate('ok'));
} elseif ($intCheck == 1) {
$conttp->setVariable('RW_NAG_CONF_CLASS', 'checkred');
$conttp->setVariable('RW_NAG_CONF_RESULT', translate('failed'));
} elseif ($intCheck == 2) {
$conttp->setVariable('RW_NAG_CONF_CLASS', 'checkorange');
$conttp->setVariable('RW_NAG_CONF_RESULT', translate('ok'). ' (' .translate('readonly'). ')');
}
}
$myConfigClass->getConfigValues($intConfigId, 'pidfile', $strPidfile);
$myConfigClass->getConfigValues($intConfigId, 'binaryfile', $strBinary);
$myConfigClass->getConfigValues($intConfigId, 'commandfile', $strCommandfile);
$conttp->setVariable('CHECK_NAG_LOCK', translate('Nagios process file'));
if ($intMethod == 1) {
if (substr_count(PHP_OS, 'Linux') != 0) {
exec('ps -ef | grep '.basename($strBinary).' | grep -v grep', $arrExec);
} else {
$arrExec[0] = 1;
}
if (isset($arrExec[0])) {
if (file_exists($strPidfile)) {
$conttp->setVariable('CHECK_NAG_LOCK_CLASS', 'checkgreen');
$conttp->setVariable('CHECK_NAG_LOCK_RESULT', translate('ok'));
$intDemonOk = 0;
} else {
$conttp->setVariable('CHECK_NAG_LOCK_CLASS', 'checkred');
$conttp->setVariable('CHECK_NAG_LOCK_RESULT', translate('failed') . ' ('
. translate('file is missed') . ')');
$intDemonOk = 1;
}
} else {
$conttp->setVariable('CHECK_NAG_LOCK_CLASS', 'checkred');
$conttp->setVariable('CHECK_NAG_LOCK_RESULT', translate('failed'));
$myVisClass->processMessage(translate('Nagios daemon is not running'), $strErrorMessage);
$intDemonOk = 1;
}
} elseif ($intMethod == 2) {
$conttp->setVariable('CHECK_NAG_LOCK_CLASS', 'checkorange');
$conttp->setVariable('CHECK_NAG_LOCK_RESULT', translate('ok'). ' (' .translate('not used with FTP'). ')');
$intDemonOk = 1;
} elseif ($intMethod == 3) {
$arrResultBinary = array();
$arrResultPid = array();
$intBinary = 1;
$intPid = 1;
if ($strBinary != '') {
$intBinary = $myConfigClass->sendSSHCommand('ps -ef | grep '.basename($strBinary).' | grep '.
basename($strConffile).' | grep -v grep', $arrResultBinary);
}
if ($strPidfile != '') {
$intPid = $myConfigClass->sendSSHCommand('ls ' . $strPidfile, $arrResult2);
}
if (($intBinary == 0) && ($intPid == 0)) {
$conttp->setVariable('CHECK_NAG_LOCK_CLASS', 'checkgreen');
$conttp->setVariable('CHECK_NAG_LOCK_RESULT', translate('ok'));
$intDemonOk = 0;
} elseif (($intBinary == 0) && ($intPid == 1)) {
$conttp->setVariable('CHECK_NAG_LOCK_CLASS', 'checkred');
$conttp->setVariable('CHECK_NAG_LOCK_RESULT', translate('failed'). ' (' .translate('file is missed'). ')');
$intDemonOk = 1;
} else {
$conttp->setVariable('CHECK_NAG_LOCK_CLASS', 'checkred');
$conttp->setVariable('CHECK_NAG_LOCK_RESULT', translate('failed'). ' (' .translate('demon dead'). ')');
$myVisClass->processMessage(translate('Nagios daemon is not running'), $strErrorMessage);
$intDemonOk = 1;
}
}
// Command file
$conttp->setVariable('RW_NAG_COMMAND', translate('Nagios command file'));
if ($intMethod == 1) {
if (file_exists($strCommandfile) && is_readable($strCommandfile) && is_writable($strCommandfile)) {
if ($intDemonOk == 0) {
$conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkgreen');
$conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('ok'));
} else {
$conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkorange');
$conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('ok'). ' (' .translate('demon dead'). '?)');
}
}
if (!file_exists($strCommandfile)) {
$conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkred');
$conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('failed'). ' (' .translate('file is missed'). ')');
} elseif (!is_writable($strCommandfile)) {
$conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkred');
$conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('failed'). ' (' .translate('readonly'). ')');
} elseif (!is_readable($strCommandfile)) {
$conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkred');
$conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('failed'));
}
} elseif ($intMethod == 2) {
$conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkorange');
$conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('ok'). ' (' .translate('not used with FTP'). ')');
} elseif ($intMethod == 3) {
if ($strCommandfile != '') {
if ($intDemonOk == 0) {
$myConfigClass->sendSSHCommand('echo "TEST" >>' . $strCommandfile . '; echo $?; echo ""', $arrTemp);
if ($arrTemp[0] == 0) {
$conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkgreen');
$conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('ok'));
} else {
$conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkred');
$conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('failed'). ' ('
.translate('readonly'). ')');
}
} elseif ($intDemonOk == 1) {
$conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkred');
$conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('failed'). ' (' .translate('demon dead'). ')');
} else {
$conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkred');
$conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('failed'). ' ('
.translate('file is missed'). ')');
}
} else {
$conttp->setVariable('RW_NAG_COMMAND_CLASS', 'checkred');
$conttp->setVariable('RW_NAG_COMMAND_RESULT', translate('failed'). ' (' .translate('file is missed'). ')');
}
}
// Binary file
$conttp->setVariable('EXE_NAG_BINARY', translate('Nagios binary file'));
if ($intMethod == 1) {
if (file_exists($strBinary)) {
if (is_executable($strBinary)) {
$conttp->setVariable('EXE_NAG_BINARY_CLASS', 'checkgreen');
$conttp->setVariable('EXE_NAG_BINARY_RESULT', translate('ok'));
} else {
$conttp->setVariable('EXE_NAG_BINARY_CLASS', 'checkred');
$conttp->setVariable('EXE_NAG_BINARY_RESULT', translate('failed'). ' ('
.translate('not executable'). ')');
}
} else {
$conttp->setVariable('EXE_NAG_BINARY_CLASS', 'checkred');
$conttp->setVariable('EXE_NAG_BINARY_RESULT', translate('failed'). ' (' .translate('file is missed'). ')');
}
} elseif ($intMethod == 2) {
$conttp->setVariable('EXE_NAG_BINARY_CLASS', 'checkorange');
$conttp->setVariable('EXE_NAG_BINARY_RESULT', translate('ok'). ' (' .translate('not used with FTP'). ')');
} elseif ($intMethod == 3) {
$booReturn = 0;
/** @noinspection IsEmptyFunctionUsageInspection */
if (empty($myConfigClass->resConnectId) || !is_resource($myConfigClass->resConnectId)) {
$booReturn = $myConfigClass->getSSHConnection($intConfigId);
}
if ($booReturn == 1) {
$myVisClass->processMessage($myConfigClass->strErrorMessage, $strErrorMessage);
} else {
if (($strBinary != '') && ($strConffile != '') &&
($myConfigClass->sendSSHCommand('ls '.$strBinary, $arrTemp) == 0)) {
$myConfigClass->sendSSHCommand($strBinary.' -V', $arrResult);
if (!is_array($arrResult) || ($arrResult == false)) {
$conttp->setVariable('EXE_NAG_BINARY_CLASS', 'checkred');
$conttp->setVariable('EXE_NAG_BINARY_RESULT', translate('failed'). ' (' .
translate('not executable'). ')');
} else {
$conttp->setVariable('EXE_NAG_BINARY_CLASS', 'checkgreen');
$conttp->setVariable('EXE_NAG_BINARY_RESULT', translate('ok'));
}
} else {
$conttp->setVariable('EXE_NAG_BINARY_CLASS', 'checkred');
$conttp->setVariable('EXE_NAG_BINARY_RESULT', translate('failed'). ' (' .
translate('file is missed'). ')');
}
}
}
// Check config files
$myConfigClass->getConfigValues($intConfigId, 'basedir', $strBasedir);
$myConfigClass->getConfigValues($intConfigId, 'hostconfig', $strHostdir);
$myConfigClass->getConfigValues($intConfigId, 'serviceconfig', $strServicedir);
$conttp->setVariable('SUBTITLE_7', translate('Verify configuration files and demon configuration'));
$conttp->setVariable('CONFIGURATION_NAME', translate('Configuration name'));
$conttp->setVariable('USED', translate('Used in data domain'));
$conttp->setVariable('DEMON_CONFIG', translate('Included in demon configuration'). ' ('
.basename($strConffile). ')');
$arrConfig = array();
$arrConfigFiles = array(
'Hosts' => array( 'table' => 'tbl_host', 'file' => 'directory'),
'Services' => array( 'table' => 'tbl_service', 'file' => 'directory'),
'Hostgroups' => array( 'table' => 'tbl_hostgroup', 'file' => 'hostgroups.cfg'),
'Servicegroups' => array( 'table' => 'tbl_servicegroup', 'file' => 'servicegroups.cfg'),
'Hosttemplates' => array( 'table' => 'tbl_hosttemplate', 'file' => 'hosttemplates.cfg'),
'servicetemplates' => array( 'table' => 'tbl_servicetemplate', 'file' => 'servicetemplates.cfg'),
'Contacts' => array( 'table' => 'tbl_contact', 'file' => 'contacts.cfg'),
'Contactgroups' => array( 'table' => 'tbl_contactgroup', 'file' => 'contactgroups.cfg'),
'Timeperiods' => array( 'table' => 'tbl_timeperiod', 'file' => 'timeperiods.cfg'),
'Contacttemplates' => array( 'table' => 'tbl_contacttemplate', 'file' => 'contacttemplates.cfg'),
'Commands' => array( 'table' => 'tbl_command', 'file' => 'commands.cfg'),
'Hostdependencies' => array( 'table' => 'tbl_hostdependency', 'file' => 'hostdependencies.cfg'),
'Hostescalations' => array( 'table' => 'tbl_hostescalation', 'file' => 'hostescalations.cfg'),
'Hostextinfo' => array( 'table' => 'tbl_hostextinfo', 'file' => 'hostextinfo.cfg'),
'Servicedependencies' => array( 'table' => 'tbl_servicedependency', 'file' => 'servicedependencies.cfg'),
'Serviceescalations' => array( 'table' => 'tbl_serviceescalation', 'file' => 'serviceescalations.cfg'),
'Serviceextinfo' => array( 'table' => 'tbl_serviceextinfo', 'file' => 'serviceextinfo.cfg'));
if ($intMethod == 1) {
$intCheck = 1;
if (file_exists($strConffile) && is_readable($strConffile)) {
$resFile = fopen($strConffile, 'rb');
while (!feof($resFile)) {
$strLine = trim(fgets($resFile));
if ((0 === strpos($strLine, 'c')) && ((substr_count($strLine, 'cfg_dir') != 0) ||
(substr_count($strLine, 'cfg_file') != 0))) {
$arrConfig[] = $strLine;
}
}
$intCheck = 0;
fclose($resFile);
}
} elseif (($intMethod == 2) || ($intMethod == 3)) {
$intCheck = 1;
// Write file to temporary
$strFileName = tempnam($SETS['path']['tempdir'], 'nagiosql_conf');
// Copy configuration from remote system
$intReturn = $myConfigClass->remoteFileCopy($strConffile, $intConfigId, $strFileName, 0);
if ($intReturn == 0) {
$intCheck = 0;
if (file_exists($strFileName) && is_readable($strFileName)) {
$resFile = fopen($strFileName, 'rb');
while (!feof($resFile)) {
$strLine = trim(fgets($resFile));
if ((0 === strpos($strLine, 'c')) && ((substr_count($strLine, 'cfg_dir') != 0) ||
(substr_count($strLine, 'cfg_file') != 0))) {
$arrConfig[] = $strLine;
}
}
fclose($resFile);
$intCheck = 0;
}
} else {
$intCheck = 1;
$myVisClass->processMessage($myConfigClass->strErrorMessage, $strErrorMessage);
if (file_exists($strFileName)) {
unlink($strFileName);
}
}
}
$i = 0;
foreach ($arrConfigFiles as $key => $elem) {
// Line colours
$strClassL = 'tdlb';
$strClassM = 'tdmb';
if ($i%2 == 1) {
$strClassL = 'tdld';
$strClassM = 'tdmd';
}
$conttp->setVariable('CLASS_L', $strClassL);
$conttp->setVariable('CLASS_M', $strClassM);
// Write configuiration name
$conttp->setVariable('CONFIG_NAME', $key);
// Count active datasets
$strSQL = 'SELECT * FROM `' .$elem['table']."` WHERE `active`='1' AND `config_id`=$chkDomainId";
$booReturn = $myDBClass->hasDataArray($strSQL, $arrDataLines, $intDataCount);
if ($booReturn && ($intDataCount != 0)) {
$conttp->setVariable('ACTIVE_CONFIG_COUNT', '<span class="checkgreen">' .translate('ok'). ' (' .
$intDataCount. ')</span>');
} elseif ($intDataCount == 0) {
$conttp->setVariable('ACTIVE_CONFIG_COUNT', '<span class="checkgreen">' .translate('not used'). '</span>');
} else {
$conttp->setVariable('ACTIVE_CONFIG_COUNT', '<span class="checkred">' .translate('failed'). '</span>');
$myVisClass->processMessage($myDBClass->strErrorMessage, $strErrorMessage);
}
$conttp->setVariable('DEMON_CFG_OK', '<span class="checkred">' .translate('failed'). '</span> (' .
translate('cfg definition missed'). ')');
if (($intCheck == 0) && is_array($arrConfig) && (count($arrConfig) != 0)) {
foreach ($arrConfig as $line) {
if ($elem['file'] != 'directory') {
if ((substr_count($line, 'cfg_dir=' .$strBasedir) != 0) && (substr_count($line, 'cfg_dir=' .
substr($strHostdir, 0, -1)) == 0) && (substr_count($line, 'cfg_dir=' .
substr($strServicedir, 0, -1)) == 0)) {
$conttp->setVariable('DEMON_CFG_OK', '<span class="checkgreen">' .translate('ok').
'</span> (' .$line. ')');
break;
}
if (substr_count($line, $strBasedir.$elem['file']) != 0) {
$conttp->setVariable('DEMON_CFG_OK', '<span class="checkgreen">' .translate('ok').
'</span> (' .$line. ')');
break;
}
if ($intDataCount == 0) {
$conttp->setVariable('DEMON_CFG_OK', '<span class="checkorange">' .translate('ok').
'</span> (' .translate('cfg definition missed, but actually not used'). ')');
} elseif (substr_count($line, $elem['file']) != 0) {
$conttp->setVariable('DEMON_CFG_OK', '<span class="checkred">' .translate('failed').
'</span> (' .translate('wrong base path:'). ' ' .$line. ')');
break;
}
} elseif ($elem['table'] == 'tbl_host') {
if (substr_count($line, 'cfg_dir=' .substr($strHostdir, 0, -1)) != 0) {
$conttp->setVariable('DEMON_CFG_OK', '<span class="checkgreen">' .translate('ok').
'</span> (' .$line. ')');
break;
}
if ($intDataCount == 0) {
$conttp->setVariable('DEMON_CFG_OK', '<span class="checkorange">' .translate('ok').
'</span> (' .translate('cfg definition missed, but actually not used'). ')');
break;
}
} elseif ($elem['table'] == 'tbl_service') {
if (substr_count($line, 'cfg_dir=' .substr($strServicedir, 0, -1)) != 0) {
$conttp->setVariable('DEMON_CFG_OK', '<span class="checkgreen">' .translate('ok').
'</span> (' .$line. ')');
break;
}
if ($intDataCount == 0) {
$conttp->setVariable('DEMON_CFG_OK', '<span class="checkorange">' .translate('ok').
'</span> (' .translate('cfg definition missed, but actually not used'). ')');
break;
}
}
}
} else {
$conttp->setVariable('DEMON_CFG_OK', '<span class="checkred">' .translate('failed').
'</span> (' .translate('cfg file not readable'). ')');
}
$conttp->parse('configfileline');
$i++;
}
// Check for unused config
if (($intCheck == 0) && is_array($arrConfig) && (count($arrConfig) != 0)) {
foreach ($arrConfig as $line) {
$intTest=0;
foreach ($arrConfigFiles as $elem) {
if (substr_count($line, $elem['file']) != 0) {
$intTest = 1;
}
}
if ($intTest == 0) {
if (substr_count($line, substr('cfg_dir=' .$strHostdir, 0, -1)) != 0) {
$intTest = 1;
}
if (substr_count($line, substr('cfg_dir=' .$strServicedir, 0, -1)) != 0) {
$intTest = 1;
}
//if (substr_count($line,substr("cfg_dir=".$strBasedir,0,-1)) != 0) $intTest = 1;
}
if ($intTest == 0) {
// Line colours
$strClassL = 'tdlb';
$strClassM = 'tdmb';
if ($i%2 == 1) {
$strClassL = 'tdld';
$strClassM = 'tdmd';
}
$conttp->setVariable('CLASS_L', $strClassL);
$conttp->setVariable('CLASS_M', $strClassM);
$conttp->setVariable('CONFIG_NAME', translate('Not used'));
$conttp->setVariable('ACTIVE_CONFIG_COUNT', '<span class="checkred">' .translate('failed'). '</span>');
$conttp->setVariable('DEMON_CFG_OK', '<span class="checkred">' .translate('unused - please delete!').
'</span> (' .$line. ')');
$conttp->parse('configfileline');
$i++;
}
}
}
$conttp->parse('configdomain');
2017-05-22 11:24:21 +02:00
}
// Messages
2019-04-17 11:40:50 +02:00
if ($strErrorMessage != '') {
$conttp->setVariable('ERRORMESSAGE', $strErrorMessage);
}
if ($strInfoMessage != '') {
$conttp->setVariable('INFOMESSAGE', $strInfoMessage);
}
2017-05-22 11:24:21 +02:00
// Check access rights for adding new objects
2019-04-17 11:40:50 +02:00
if ($myVisClass->checkAccountGroup($prePageKey, 'write') != 0) {
$conttp->setVariable('ADD_CONTROL', 'disabled="disabled"');
}
$conttp->parse('support');
$conttp->show('support');
2017-05-22 11:24:21 +02:00
//
// Process footer
// ==============
2019-04-17 11:40:50 +02:00
$maintp->setVariable('VERSION_INFO', "<a href='https://sourceforge.net/projects/nagiosql/' "
. "target='_blank'>NagiosQL</a> $setFileVersion");
$maintp->parse('footer');
$maintp->show('footer');