16 if (array_key_exists(
'ACTIVE',
$arFields))
21 if (array_key_exists(
'SELECTABLE',
$arFields))
26 if (array_key_exists(
'WEIGHT',
$arFields))
54 if (is_object($nodeDB))
56 $arFields[
'SERVER_ID'] = intval($obCheck->GetServerVariable($nodeDB,
'server_id'));
60 if (!array_key_exists(
'STATUS',
$arFields))
64 $aMsg[] = [
'id' =>
'',
'text' => $nodeDB];
77 abstract public static function GetUpTime($node_id);
79 public static function GetByID($node_id, $arVirtNode=
false)
82 static $arNodes =
false;
83 static $arVirtNodes = [];
88 if (preg_match(
'/^v(\d+)$/', $node_id))
90 if (is_array($arVirtNode))
92 $arVirtNodes[$node_id] = $arVirtNode;
97 return $arVirtNodes[$node_id];
102 $node_id = intval($node_id);
103 if ($arNodes ===
false)
105 $cache_id =
'db_nodes';
107 CACHED_b_cluster_dbnode !==
false
108 &&
$CACHE_MANAGER->Read(CACHED_b_cluster_dbnode, $cache_id,
'b_cluster_dbnode')
117 $rs =
$DB->Query(
'SELECT * FROM b_cluster_dbnode ORDER BY ID',
false,
'', [
'fixed_connection' =>
true]);
118 while (
$ar =
$rs->Fetch())
120 $arNodes[intval(
$ar[
'ID'])] =
$ar;
123 if (CACHED_b_cluster_dbnode !==
false)
130 return $arNodes[$node_id];
142 if (!array_key_exists(
'ACTIVE',
$arFields))
149 if (CACHED_b_cluster_dbnode !==
false)
162 $res =
$DB->Query(
'select ID from b_cluster_dbnode WHERE ID=1 OR MASTER_ID = ' .
$ID,
false,
'', [
'fixed_connection' =>
true]);
176 $res =
$DB->Query(
'DELETE FROM b_cluster_dbnode WHERE ID = ' .
$ID,
false,
'', [
'fixed_connection' =>
true]);
179 if (CACHED_b_cluster_dbnode !==
false)
204 $strUpdate =
$DB->PrepareUpdate(
'b_cluster_dbnode',
$arFields);
205 if ($strUpdate <>
'')
208 UPDATE b_cluster_dbnode SET
210 WHERE ID = ' .
$ID .
'
212 if (!
$DB->Query($strSql,
false,
'', [
'fixed_connection' =>
true]))
218 if (CACHED_b_cluster_dbnode !==
false)
231 UPDATE b_cluster_dbnode SET
233 WHERE ID = " . intval($node_id) .
"
234 AND STATUS <> 'OFFLINE'
235 ",
false,
'', [
'fixed_connection' =>
true]);
236 if (
$rs->AffectedRowsCount() > 0)
238 if (CACHED_b_cluster_dbnode !==
false)
243 if (!CAgent::AddAgent(
'CClusterDBNode::BringOnline();',
'cluster',
'N', 10))
255 UPDATE b_cluster_dbnode SET
257 WHERE ID = " . intval($node_id) .
'
258 ',
false,
'', [
'fixed_connection' =>
true]);
260 if (CACHED_b_cluster_dbnode !==
false)
269 if ($arNode = $rsOfflineNodes->Fetch())
272 $nodeDB = CDatabase::GetDBNodeConnection($arNode[
'ID'],
true,
false);
274 if (is_object($nodeDB))
279 return 'CClusterDBNode::BringOnline();';
288 if (!is_array($arSelect))
292 if (
count($arSelect) < 1)
313 if (!is_array($arOrder))
319 foreach ($arOrder as $strColumn => $strDirection)
321 $strColumn = mb_strtoupper($strColumn);
322 $strDirection = mb_strtoupper($strDirection) ===
'ASC' ?
'ASC' :
'DESC';
327 $arSelect[] = $strColumn;
328 $arQueryOrder[$strColumn] = $strColumn .
' ' . $strDirection;
334 foreach ($arSelect as $strColumn)
336 $strColumn = mb_strtoupper($strColumn);
354 $arQuerySelect[$strColumn] =
'n.' . $strColumn;
358 if (
count($arQuerySelect) < 1)
360 $arQuerySelect = [
'ID' =>
'n.ID'];
366 'TABLE_ALIAS' =>
'n',
367 'FIELD_NAME' =>
'n.ID',
368 'FIELD_TYPE' =>
'int',
372 'TABLE_ALIAS' =>
'n',
373 'FIELD_NAME' =>
'n.GROUP_ID',
374 'FIELD_TYPE' =>
'string',
378 'TABLE_ALIAS' =>
'n',
379 'FIELD_NAME' =>
'n.ROLE_ID',
380 'FIELD_TYPE' =>
'string',
384 'TABLE_ALIAS' =>
'n',
385 'FIELD_NAME' =>
'n.ACTIVE',
386 'FIELD_TYPE' =>
'string',
390 'TABLE_ALIAS' =>
'n',
391 'FIELD_NAME' =>
'n.SERVER_ID',
392 'FIELD_TYPE' =>
'int',
396 'TABLE_ALIAS' =>
'n',
397 'FIELD_NAME' =>
'n.MASTER_ID',
398 'FIELD_TYPE' =>
'int',
402 'TABLE_ALIAS' =>
'n',
403 'FIELD_NAME' =>
'n.STATUS',
404 'FIELD_TYPE' =>
'string',
408 'TABLE_ALIAS' =>
'n',
409 'FIELD_NAME' =>
'n.NAME',
410 'FIELD_TYPE' =>
'string',
420 $strQueryWhere = $obQueryWhere->GetQuery(
$arFilter);
422 $bDistinct = $obQueryWhere->bDistinctReqired;
425 SELECT ' . ($bDistinct ?
'DISTINCT' :
'') .
'
426 ' . implode(
', ', $arQuerySelect) .
'
429 ' . $obQueryWhere->GetJoins() .
'
436 ' . $strQueryWhere .
'
440 if (
count($arQueryOrder) > 0)
444 ' . implode(
', ', $arQueryOrder) .
'
448 return $DB->Query($strSql,
false,
'', [
'fixed_connection' =>
true]);
456 SELECT ID, GROUP_ID, ROLE_ID, DB_HOST
457 FROM b_cluster_dbnode
458 ORDER BY GROUP_ID IS NULL, GROUP_ID, ID
460 while ($arData =
$rsData->Fetch())
462 if ($arData[
'ROLE_ID'] ==
'SLAVE' || $arData[
'ROLE_ID'] ==
'MASTER')
464 $edit_url =
'/bitrix/admin/cluster_slave_edit.php?lang=' . LANGUAGE_ID .
'&group_id=' . $arData[
'GROUP_ID'] .
'&ID=' . $arData[
'ID'];
466 elseif ($arData[
'ROLE_ID'] ==
'MODULE')
468 $edit_url =
'/bitrix/admin/cluster_dbnode_edit.php?lang=' . LANGUAGE_ID .
'&ID=' . $arData[
'ID'];
478 preg_match(
'/\\(\\s*HOST\\s*=\\s*([^)]+)\\)/i', $arData[
'DB_HOST'], $match)
479 || preg_match(
'/^([^:]+)(:|)/', $arData[
'DB_HOST'], $match)
482 if ($match[1] !==
'localhost' && $match[1] !==
'127.0.0.1')
484 $host = $arData[
'DB_HOST'];
489 'ID' => $arData[
'ID'],
490 'GROUP_ID' => $arData[
'GROUP_ID'],
491 'SERVER_TYPE' =>
'database',
492 'ROLE_ID' => $arData[
'ROLE_ID'],
493 'HOST' => $arData[
'DB_HOST'],
494 'DEDICATED' =>
$host ===
'' ?
'N' :
'Y',
495 'EDIT_URL' => $edit_url,
504 static $arCache =
false;
505 if ($arCache ===
false)
508 $rs =
$DB->Query(
"SELECT * from b_option WHERE NAME='dbnode_id'",
false,
'', [
'fixed_connection' =>
true]);
509 while (
$ar =
$rs->Fetch())
511 if (is_numeric(
$ar[
'VALUE']))
513 $arCache[intval(
$ar[
'VALUE'])][
$ar[
'MODULE_ID']] =
$ar[
'MODULE_ID'];
517 if (isset($arCache[$node_id]))
519 return $arCache[$node_id];
534 foreach (
GetModuleEvents(
'cluster',
'OnGetTableList',
true) as $arEvent)
539 $cur_node_id = intval(COption::GetOptionString(
$ar[
'MODULE']->MODULE_ID,
'dbnode_id'));
540 if ($cur_node_id < 1)
545 $ar[
'TITLE'] =
$ar[
'MODULE']->MODULE_NAME .
' (' . $cur_node_id[
'NAME'] .
')';
546 $arModules[
$ar[
'MODULE']->MODULE_ID] =
$ar;
557 [
'NAME' =>
'ASC',
'ID' =>
'ASC']
558 ,[
'=ACTIVE' =>
'Y',
'=ROLE_ID' =>
'MODULE',
'=STATUS' =>
'READY']
static getConnection($name="")
static GetModules($node_id)
CheckFields(&$arFields, $ID)
static GetUpTime($node_id)
static GetModulesForSharding()
static SetOnline($node_id)
static GetList($arOrder=false, $arFilter=false, $arSelect=false)
static SetOffline($node_id)
static Delete($ID, $bStopSlave=true)
static GetListForModuleInstall()
static GetByID($node_id, $arVirtNode=false)
SlaveNodeConnection($db_host, $db_name, $db_login, $db_password, $master_host=false, $master_port=false, $master_id=1)
ExecuteModuleEventEx($arEvent, $arParams=[])
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
if(file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/updater.log") &&is_file($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/updater.log") &&is_readable($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/updater.log")) $rsData