403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/cluster/admin/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/cluster/admin/cluster_slave_list.php
<?php
require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_before.php';
/** @global CUser $USER */
global $USER;
/** @global CMain $APPLICATION */
global $APPLICATION;
require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/cluster/include.php';
IncludeModuleLangFile(__FILE__);

if (!$USER->isAdmin())
{
	$APPLICATION->AuthForm(GetMessage('ACCESS_DENIED'));
}

$group_id = intval($_GET['group_id']);
if ($_GET['group_id'] !== 'all')
{
	if (!CClusterGroup::GetArrayByID($group_id))
	{
		$APPLICATION->AuthForm(GetMessage('ACCESS_DENIED'));
	}
}

$sTableID = 'tbl_cluster_slave_list';
$oSort = new CAdminSorting($sTableID, 'ID', 'ASC');
$lAdmin = new CAdminList($sTableID, $oSort);

if ($arID = $lAdmin->GroupAction())
{
	foreach ($arID as $ID)
	{
		if ($ID == '')
		{
			continue;
		}
		$ID = intval($ID);
		switch ($_REQUEST['action'])
		{
		case 'delete':
			$arNode = CClusterDBNode::GetByID($ID);
			if (
				is_array($arNode)
				&& ($arNode['ROLE_ID'] == 'SLAVE' || $arNode['ROLE_ID'] == 'MASTER')
				&& ($arNode['STATUS'] == 'READY' || $arNode['STATUS'] == 'PAUSED')
			)
			{
				CClusterDBNode::Delete($arNode['ID'], false);
			}
			break;
		case 'pause':
			CClusterSlave::Pause($ID);
			break;
		case 'resume':
			CClusterSlave::Resume($ID);
			break;
		case 'stop':
			CClusterSlave::Stop($ID);
			break;
		case 'skip_sql_error':
			$result = CClusterSlave::SkipSQLError($ID);
			if ($result !== true)
			{
				$lAdmin->AddGroupError($result, $ID);
			}
			break;
		}
	}
}

$arHeaders = [
	[
		'id' => 'ID',
		'content' => GetMessage('CLU_SLAVE_LIST_ID'),
		'align' => 'right',
		'default' => true,
	],
	[
		'id' => 'FLAG',
		'content' => GetMessage('CLU_SLAVE_LIST_FLAG'),
		'align' => 'center',
		'default' => true,
	],
	[
		'id' => 'NAME',
		'content' => GetMessage('CLU_SLAVE_LIST_NAME'),
		'align' => 'left',
		'default' => true,
	],
	[
		'id' => 'BEHIND',
		'content' => GetMessage('CLU_SLAVE_LIST_BEHIND'),
		'align' => 'right',
		'default' => true,
	],
	[
		'id' => 'STATUS',
		'content' => GetMessage('CLU_SLAVE_LIST_STATUS'),
		'align' => 'center',
		'default' => true,
	],
	[
		'id' => 'WEIGHT',
		'content' => GetMessage('CLU_SLAVE_LIST_WEIGHT'),
		'align' => 'right',
		'default' => true,
	],
	[
		'id' => 'DESCRIPTION',
		'content' => GetMessage('CLU_SLAVE_LIST_DESCRIPTION'),
		'align' => 'left',
		'default' => false,
	],
	[
		'id' => 'DB_HOST',
		'content' => GetMessage('CLU_SLAVE_LIST_DB_HOST'),
		'align' => 'left',
		'default' => false,
	],
	[
		'id' => 'DB_NAME',
		'content' => GetMessage('CLU_SLAVE_LIST_DB_NAME'),
		'align' => 'left',
		'default' => false,
	],
	[
		'id' => 'DB_LOGIN',
		'content' => GetMessage('CLU_SLAVE_LIST_DB_LOGIN'),
		'align' => 'left',
		'default' => false,
	],
];

$lAdmin->AddHeaders($arHeaders);

$arFilter = [
	'=ROLE_ID' => ['MAIN', 'SLAVE', 'MASTER'],
];
if ($group_id > 0)
{
	$arFilter['=GROUP_ID'] = $group_id;
}

$rsData = CClusterDBNode::GetList(['ID' => 'ASC'], $arFilter);

if (!isset($_SESSION['SLAVE_LIST']))
{
	$_SESSION['SLAVE_LIST'] = [];
}

$rsData = new CAdminResult($rsData, $sTableID);
$Position = 0;
$bNote1Show = false;
$bHasMaster = false;
while ($arRes = $rsData->Fetch()):
	$row = $lAdmin->AddRow($arRes['ID'], $arRes);

	if ($arRes['ROLE_ID'] == 'MASTER' || $arRes['ROLE_ID'] == 'MAIN')
	{
		$bHasMaster = true;
	}

	$arSlaveStatus = CClusterSlave::GetStatus($arRes['ID']);
	if (is_array($arSlaveStatus) && $arRes['STATUS'] == 'OFFLINE')
	{
		CClusterDBNode::SetOnline($arRes['ID']);
		$arRes['STATUS'] = 'ONLINE';
	}

	if ($arRes['STATUS'] != 'OFFLINE')
	{
		$uptime = CClusterDBNode::GetUpTime($arRes['ID']);
	}
	else
	{
		$uptime = false;
	}

	if ($arRes['ID'] > 1)
	{
		$row->AddViewField('ID', '<a href="cluster_slave_edit.php?lang=' . LANGUAGE_ID . '&group_id=' . $arRes['GROUP_ID'] . '&ID=' . $arRes['ID'] . '">' . $arRes['ID'] . '</a>');
	}

	$Seconds_Behind_Master = 0;
	$Slave_IO_Running = 'Yes';
	$bHasSQLError = false;

	$html = '';
	if (is_array($arSlaveStatus))
	{
		$html .= '<table width="100%">';
		foreach ($arSlaveStatus as $key => $value)
		{
			if ($key == 'Seconds_Behind_Master')
			{
				$Seconds_Behind_Master = $value;
			}
			elseif ($key == 'Slave_IO_Running')
			{
				$Slave_IO_Running = $value;
			}

			if ($key == 'Read_Master_Log_Pos' || $key == 'Exec_Master_Log_Pos')
			{
				$html .= '
				<tr>
					<td width="50%" align=right>' . $key . ':</td>
					<td align=left>' . $value . (
						$Position - $value > 0 ?
						' (<span style="color:red">-' . ($Position - $value) . '</span>)' :
						''
					) . '</td>
				</tr>
				';
			}
			elseif ($key == 'Seconds_Behind_Master')
			{
				$html .= '
				<tr>
					<td width="50%" align=right>' . $key . ':</td>
					<td align=left>' . (
						$value > 0 ?
						'<span style="color:red">' . $value . '</span>' :
						'<span style="color:green">' . $value . '</span>'
					) . '</td>
				</tr>
				';
			}
			elseif ($key == 'Slave_IO_Running' || $key == 'Slave_SQL_Running')
			{
				$html .= '
				<tr>
					<td width="50%" align=right>' . $key . ':</td>
					<td align=left>' . (
						$value == 'No' ?
						'<span style="color:red">' . $value . '</span>' :
						'<span style="color:green">' . $value . '</span>'
					) . '</td>
				</tr>
				';
			}
			elseif ($key == 'Com_select' || $key == 'Rows_returned')
			{
				$html .= '
				<tr>
					<td width="50%" align=right>' . $key . ':</td>
					<td align=left>' . $value . (
						isset($_SESSION['SLAVE_LIST'][$arRes['ID']]) && $value > $_SESSION['SLAVE_LIST'][$arRes['ID']] ?
						' (<span style="color:green">+' . ($value - $_SESSION['SLAVE_LIST'][$arRes['ID']]) . '</span>)' :
						''
					) . '</td>
				</tr>
				';
			}
			elseif ($key == 'Last_SQL_Error')
			{
				$bHasSQLError = $value <> '';
				$html .= '
				<tr>
					<td width="50%" align=right>' . $key . ':</td>
					<td align=left>' . (
						$value <> '' ?
						'<span style="color:red">' . $value . '</span>' :
						'<span style="color:green">' . $value . '</span>'
					) . '</td>
				</tr>
				';
			}
			elseif ($value !== null)
			{
				$html .= '
				<tr>
					<td width="50%" align=right>' . $key . ':</td>
					<td align=left>' . $value . '</td>
				</tr>
				';
			}

			if ($key == 'Com_select' || $key == 'Rows_returned')
			{
				$_SESSION['SLAVE_LIST'][$arRes['ID']] = $value;
			}
		}
		$html .= '</table>';
	}
	elseif ($arSlaveStatus <> '')
	{
		$html = $arSlaveStatus;
		$Slave_IO_Running = 'No';
	}
	else
	{
		$Slave_IO_Running = 'No';
	}

	if (
		($bHasSQLError || $Slave_IO_Running == 'No')
		&& $arRes['STATUS'] != 'READY'
		&& $arRes['STATUS'] != 'OFFLINE'
	)
	{
		$html = 'ERROR<br />' . $html;
	}
	else
	{
		$html = $arRes['STATUS'] . '<br />' . $html;
	}

	$row->AddViewField('STATUS', $html);

	$row->AddViewField('BEHIND', $Seconds_Behind_Master);

	if (
		$arRes['ACTIVE'] == 'Y'
		&& $arRes['STATUS'] == 'ONLINE'
		&& $Slave_IO_Running === 'Yes'
	)
	{
		$htmlFLAG = '<div class="lamp-green"></div>';
	}
	else
	{
		$htmlFLAG = '<div class="lamp-red"></div>';
	}

	if ($uptime === false)
	{
		$htmlFLAG .= GetMessage('CLU_SLAVE_NOCONNECTION');
	}
	else
	{
		$htmlFLAG .= GetMessage('CLU_SLAVE_UPTIME') . '<br>' . FormatDate([
			's' => 'sdiff',
			'i' => 'idiff',
			'H' => 'Hdiff',
			'' => 'ddiff',
		], time() - $uptime);
	}

	$row->AddViewField('FLAG', $htmlFLAG);

	if ($arRes['SELECTABLE'] == 'N' || $arRes['WEIGHT'] == 0)
	{
		if ($arRes['ROLE_ID'] == 'MAIN')
		{
			$row->AddViewField('WEIGHT', GetMessage('CLU_MAIN_LOAD'));
		}
		else
		{
			$row->AddViewField('WEIGHT', GetMessage('CLU_SLAVE_BACKUP'));
		}
	}

	$arActions = [];
	$arActions[] = [
		'ICON' => 'edit',
		'DEFAULT' => true,
		'TEXT' => GetMessage('CLU_SLAVE_LIST_EDIT'),
		'ACTION' => $lAdmin->ActionRedirect('cluster_slave_edit.php?lang=' . LANGUAGE_ID . '&group_id=' . ($arRes['GROUP_ID'] ?: 'all') . '&ID=' . $arRes['ID'])
	];

	if ($arRes['MASTER_ID'] <> '')
	{
		if ($arRes['STATUS'] == 'ONLINE')
		{
			$arActions[] = [
				'TEXT' => GetMessage('CLU_SLAVE_LIST_PAUSE'),
				'ACTION' => $lAdmin->ActionDoGroup($arRes['ID'], 'pause', 'group_id=' . ($group_id ?: 'all'))
			];
		}
		elseif ($arRes['STATUS'] == 'PAUSED')
		{
			$arActions[] = [
				'TEXT' => GetMessage('CLU_SLAVE_LIST_RESUME'),
				'ACTION' => $lAdmin->ActionDoGroup($arRes['ID'], 'resume', 'group_id=' . ($group_id ?: 'all'))
			];
			if (is_callable(['CClusterSlave', 'Stop']))
			{
				$arActions[] = [
					'TEXT' => GetMessage('CLU_SLAVE_LIST_STOP'),
					'ACTION' => $lAdmin->ActionDoGroup($arRes['ID'], 'stop', 'group_id=' . ($group_id ?: 'all'))
				];
			}
		}
	}

	if ($arRes['ROLE_ID'] == 'SLAVE' || $arRes['ROLE_ID'] == 'MASTER')
	{
		if ($arRes['STATUS'] == 'READY' && $group_id > 0)
		{
			$arActions[] = [
				'ICON' => 'delete',
				'TEXT' => GetMessage('CLU_SLAVE_LIST_DELETE'),
				'ACTION' => "if(confirm('" . GetMessage('CLU_SLAVE_LIST_DELETE_CONF') . "')) " . $lAdmin->ActionDoGroup($arRes['ID'], 'delete', 'group_id=' . $arRes['GROUP_ID'])
			];
			if ($arRes['ROLE_ID'] == 'MASTER')
			{
				$arActions[] = [
					'TEXT' => GetMessage('CLU_SLAVE_LIST_START_USING_DB'),
					'ACTION' => "javascript:StartWizard('bitrix:cluster.master_start','&__wiz_node_id=" . $arRes['ID'] . '&__wiz_group_id=' . $arRes['GROUP_ID'] . "')",
				];
			}
			else
			{
				$arActions[] = [
					'TEXT' => GetMessage('CLU_SLAVE_LIST_START_USING_DB'),
					'ACTION' => "javascript:StartWizard('bitrix:cluster.slave_start','&__wiz_node_id=" . $arRes['ID'] . '&__wiz_group_id=' . $arRes['GROUP_ID'] . "')",
				];
			}
		}
	}

	if ($bHasSQLError && is_callable(['CClusterSlave', 'SkipSQLError']))
	{
		$arActions[] = [
			'TEXT' => GetMessage('CLU_SLAVE_LIST_SKIP_SQL_ERROR'),
			'TITLE' => GetMessage('CLU_SLAVE_LIST_SKIP_SQL_ERROR_ALT'),
			'ACTION' => $lAdmin->ActionDoGroup($arRes['ID'], 'skip_sql_error', 'group_id=' . ($group_id ?: 'all'))
		];
	}

	if (!empty($arActions))
	{
		$row->AddActions($arActions);
	}
endwhile;

$lAdmin->AddFooter(
	[
		[
			'title' => GetMessage('MAIN_ADMIN_LIST_SELECTED'),
			'value' => $rsData->SelectedRowsCount(),
		],
		[
			'counter' => true,
			'title' => GetMessage('MAIN_ADMIN_LIST_CHECKED'),
			'value' => '0',
		],
	]
);

$url = 'cluster_slave_list.php?lang=' . urlencode(LANGUAGE_ID) . '&group_id=' . ($group_id ?: 'all');

$lAdmin->BeginPrologContent();
?>
<script>
	function StartWizard(name, params)
	{
		WizardWindow.Open(name, BX.bitrix_sessid() + params);
		BX.addCustomEvent(WizardWindow.currentDialog, 'onWindowClose', () => {<?=$lAdmin->ActionAjaxReload($url)?>});
	}
</script>
<?php
$lAdmin->EndPrologContent();

$aContext = [];
if (\Bitrix\Main\Application::getConnection()->getType() === 'pgsql')
{
	if ($group_id == 0)
	{
		$aContext[] = [
			'TEXT' => GetMessage('CLU_SLAVE_LIST_ADD'),
			'LINK' => "javascript:StartWizard('bitrix:cluster.pgsql','&__wiz_group_id=" . $group_id . "')",
			'TITLE' => GetMessage('CLU_SLAVE_LIST_ADD_TITLE'),
			'ICON' => 'btn_new',
		];
	}
}
elseif ($bHasMaster && $group_id > 0)
{
	$aContext[] = [
		'TEXT' => GetMessage('CLU_SLAVE_LIST_ADD'),
		'LINK' => "javascript:StartWizard('bitrix:cluster.slave_add','&__wiz_group_id=" . $group_id . "')",
		'TITLE' => GetMessage('CLU_SLAVE_LIST_ADD_TITLE'),
		'ICON' => 'btn_new',
	];
}
elseif ($group_id > 1)
{
	$aContext[] = [
		'TEXT' => GetMessage('CLU_SLAVE_LIST_MASTER_ADD'),
		'LINK' => "javascript:StartWizard('bitrix:cluster.master_add','&__wiz_group_id=" . $group_id . "')",
		'TITLE' => GetMessage('CLU_SLAVE_LIST_MASTER_ADD_TITLE'),
		'ICON' => 'btn_new',
	];
}
$aContext[] = [
	'TEXT' => GetMessage('CLU_SLAVE_LIST_REFRESH'),
	'LINK' => 'javascript:' . $lAdmin->ActionAjaxReload($url),
];

$lAdmin->AddAdminContextMenu($aContext, /*$bShowExcel=*/false);

$lAdmin->CheckListMode();

$APPLICATION->SetTitle(GetMessage('CLU_SLAVE_LIST_TITLE'));

require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_after.php';

$lAdmin->DisplayList();

echo BeginNote(), GetMessage('CLU_SLAVE_LIST_NOTE'), EndNote();

require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_admin.php';

Youez - 2016 - github.com/yon3zu
LinuXploit