예제 #1
0
    function SaveConfig($arServerList)
    {
        self::$arList = false;
        $isOnline = false;
        $content = '<' . '?
define("BX_MEMCACHE_CLUSTER", "' . EscapePHPString(CMain::GetServerUniqID()) . '");
$arList = array(
';
        $defGroup = 1;
        $arGroups = array();
        $rsGroups = CClusterGroup::GetList(array("ID" => "DESC"));
        while ($arGroup = $rsGroups->Fetch()) {
            $defGroup = $arGroups[$arGroup["ID"]] = intval($arGroup["ID"]);
        }
        foreach ($arServerList as $i => $arServer) {
            $isOnline |= $arServer["STATUS"] == "ONLINE";
            $GROUP_ID = intval($arServer["GROUP_ID"]);
            if (!array_key_exists($arServer["GROUP_ID"], $arGroups)) {
                $GROUP_ID = $defGroup;
            }
            $content .= "\t" . intval($i) . " => array(\n";
            $content .= "\t\t'ID' => \"" . EscapePHPString($arServer["ID"]) . "\",\n";
            $content .= "\t\t'GROUP_ID' => " . $GROUP_ID . ",\n";
            $content .= "\t\t'HOST' => \"" . EscapePHPString($arServer["HOST"]) . "\",\n";
            $content .= "\t\t'PORT' => " . intval($arServer["PORT"]) . ",\n";
            $content .= "\t\t'WEIGHT' => " . intval($arServer["WEIGHT"]) . ",\n";
            if ($arServer["STATUS"] == "ONLINE") {
                $content .= "\t\t'STATUS' => \"ONLINE\",\n";
            } elseif ($arServer["STATUS"] == "OFFLINE") {
                $content .= "\t\t'STATUS' => \"OFFLINE\",\n";
            } else {
                $content .= "\t\t'STATUS' => \"READY\",\n";
            }
            $content .= "\t),\n";
        }
        $content .= ');
?' . '>';
        file_put_contents($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/cluster/memcache.php", $content);
        bx_accelerator_reset();
        self::$systemConfigurationUpdate = null;
        $cache = \Bitrix\Main\Config\Configuration::getValue('cache');
        if ($isOnline) {
            if (!is_array($cache) || !isset($cache['type']) || !is_array($cache['type']) || !isset($cache['type']['class_name']) || !$cache['type']['class_name'] === 'CPHPCacheMemcacheCluster') {
                \Bitrix\Main\Config\Configuration::setValue('cache', array('type' => array('class_name' => 'CPHPCacheMemcacheCluster', 'extension' => 'memcache', 'required_file' => 'modules/cluster/classes/general/memcache_cache.php')));
                self::$systemConfigurationUpdate = true;
            }
        } else {
            if (is_array($cache) && isset($cache['type']) && is_array($cache['type']) && isset($cache['type']['class_name']) && $cache['type']['class_name'] === 'CPHPCacheMemcacheCluster') {
                \Bitrix\Main\Config\Configuration::setValue('cache', null);
                self::$systemConfigurationUpdate = false;
            }
        }
    }
예제 #2
0
파일: wizard.php 프로젝트: Satariall/izurit
 function InitStep()
 {
     global $DB;
     $wizard = $this->GetWizard();
     if (!CModule::IncludeModule('cluster')) {
         $this->SetError(GetMessage('CLUWIZ_NO_MODULE_ERROR'));
     } elseif ($DB->type != "MYSQL") {
         $this->SetError(GetMessage('CLUWIZ_DATABASE_NOT_SUPPORTED'));
     } elseif (!CClusterGroup::GetArrayByID(intval($wizard->GetVar("group_id")))) {
         $this->SetError(GetMessage('CLUWIZ_NO_GROUP_ERROR'));
     }
     if (preg_match("/^(.+):(\\d+)\$/", $GLOBALS["DB"]->DBHost, $match)) {
         $wizard->SetDefaultVar("master_host", $match[1]);
         $wizard->SetDefaultVar("master_port", $match[2]);
     } else {
         $wizard->SetDefaultVar("master_host", '');
         $wizard->SetDefaultVar("master_port", '');
     }
 }
예제 #3
0
	public static function SaveConfig($arServerList)
	{
		self::$arList = false;
		$content = '<'.'?
// define("BX_MEMCACHE_CLUSTER", "'.EscapePHPString(CMain::GetServerUniqID()).'");
$arList = array(
';
		$defGroup = 1;
		$arGroups = array();
		$rsGroups = CClusterGroup::GetList(array("ID" => "DESC"));
		while($arGroup = $rsGroups->Fetch())
			$defGroup = $arGroups[$arGroup["ID"]] = intval($arGroup["ID"]);

		foreach($arServerList as $i => $arServer)
		{
			$GROUP_ID = intval($arServer["GROUP_ID"]);
			if(!array_key_exists($arServer["GROUP_ID"], $arGroups))
				$GROUP_ID = $defGroup;

			$content .= "\t".intval($i)." => array(\n";
			$content .= "\t\t'ID' => \"".EscapePHPString($arServer["ID"])."\",\n";
			$content .= "\t\t'GROUP_ID' => ".$GROUP_ID.",\n";
			$content .= "\t\t'HOST' => \"".EscapePHPString($arServer["HOST"])."\",\n";
			$content .= "\t\t'PORT' => ".intval($arServer["PORT"]).",\n";
			$content .= "\t\t'WEIGHT' => ".intval($arServer["WEIGHT"]).",\n";
			if($arServer["STATUS"] == "ONLINE")
				$content .= "\t\t'STATUS' => \"ONLINE\",\n";
			elseif($arServer["STATUS"] == "OFFLINE")
				$content .= "\t\t'STATUS' => \"OFFLINE\",\n";
			else
				$content .= "\t\t'STATUS' => \"READY\",\n";
			$content .= "\t),\n";
		}

		$content .= ');
?'.'>';
		file_put_contents(
			$_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/cluster/memcache.php"
			,$content
		);
	}
예제 #4
0
파일: wizard.php 프로젝트: Satariall/izurit
 function InitStep()
 {
     global $DB;
     $wizard = $this->GetWizard();
     if (!CModule::IncludeModule('cluster')) {
         $this->SetError(GetMessage('CLUWIZ_NO_MODULE_ERROR'));
     } elseif ($DB->type != "MYSQL") {
         $this->SetError(GetMessage('CLUWIZ_DATABASE_NOT_SUPPORTED'));
     } else {
         $arGroup = CClusterGroup::GetArrayByID(intval($wizard->GetVar("group_id")));
         if (!$arGroup) {
             $this->SetError(GetMessage('CLUWIZ_NO_GROUP_ERROR'));
         } else {
             $cData = new CClusterDBNode();
             $rsData = $cData->GetList(array(), array("=ROLE_ID" => array("MAIN", "MASTER"), "=GROUP_ID" => $arGroup["ID"], "=STATUS" => "ONLINE"));
             $this->arMaster = $rsData->Fetch();
             if (!$this->arMaster) {
                 $this->SetError(GetMessage('CLUWIZ_NO_MASTER_ERROR'));
             }
         }
     }
     $wizard->SetDefaultVar("master_host", '');
     $wizard->SetDefaultVar("master_port", '');
     if ($this->arMaster) {
         if ($this->arMaster["ID"] == 1) {
             if (preg_match("/^(.+):(\\d+)\$/", $GLOBALS["DB"]->DBHost, $match)) {
                 $wizard->SetDefaultVar("master_host", $match[1]);
                 $wizard->SetDefaultVar("master_port", $match[2]);
             }
         } else {
             if (preg_match("/^(.+):(\\d+)\$/", $this->arMaster["DB_HOST"], $match)) {
                 $wizard->SetDefaultVar("master_host", $match[1]);
                 $wizard->SetDefaultVar("master_port", $match[2]);
             }
         }
     }
 }
예제 #5
0
파일: wizard.php 프로젝트: Satariall/izurit
 function InitStep()
 {
     global $DB;
     $wizard =& $this->GetWizard();
     $node_id = intval($wizard->GetVar('node_id'));
     if (!CModule::IncludeModule('cluster')) {
         $this->SetError(GetMessage('CLUWIZ_NO_MODULE_ERROR'));
     } elseif ($DB->type != "MYSQL") {
         $this->SetError(GetMessage('CLUWIZ_DATABASE_NOT_SUPPORTED'));
     } elseif ($node_id <= 1) {
         $this->SetError(GetMessage('CLUWIZ_NO_NODE_ERROR'));
     } else {
         $this->arNode = CClusterDBNode::GetByID($node_id);
         if (!is_array($this->arNode)) {
             $this->SetError(GetMessage('CLUWIZ_NO_NODE_ERROR'));
         } else {
             // $arNode["ROLE_ID"] == "SLAVE"
             // $arNode["STATUS"] == "READY"
             $this->nodeDB = CDatabase::GetDBNodeConnection($this->arNode["ID"], true, false);
             if (!is_object($this->nodeDB)) {
                 $this->SetError(GetMessage('CLUWIZ_NO_CONN_ERROR'));
             } else {
                 $arGroup = CClusterGroup::GetArrayByID(intval($wizard->GetVar("group_id")));
                 if (!$arGroup) {
                     $this->SetError(GetMessage('CLUWIZ_NO_GROUP_ERROR'));
                 } else {
                     $cData = new CClusterDBNode();
                     $rsData = $cData->GetList(array(), array("=ROLE_ID" => array("MAIN", "MASTER"), "=GROUP_ID" => $arGroup["ID"], "=STATUS" => "ONLINE"));
                     $this->arMaster = $rsData->Fetch();
                     if (!$this->arMaster) {
                         $this->SetError(GetMessage('CLUWIZ_NO_MASTER_ERROR'));
                     }
                 }
             }
         }
     }
 }
<?php

define("ADMIN_MODULE_NAME", "cluster");
require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php";
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 (!CClusterGroup::GetArrayByID($group_id)) {
    $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
}
$sTableID = "tbl_cluster_memcache_list";
$oSort = new CAdminSorting($sTableID, "ID", "ASC");
$lAdmin = new CAdminList($sTableID, $oSort);
if ($arID = $lAdmin->GroupAction()) {
    foreach ($arID as $ID) {
        if (strlen($ID) <= 0) {
            continue;
        }
        $ID = IntVal($ID);
        switch ($_REQUEST['action']) {
            case "delete":
                CClusterMemcache::Delete($ID);
                break;
            case "pause":
                CClusterMemcache::Pause($ID);
                break;
            case "resume":
                CClusterMemcache::Resume($ID);
예제 #7
0
<?php

define("ADMIN_MODULE_NAME", "cluster");
require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php";
require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/cluster/prolog.php";
IncludeModuleLangFile(__FILE__);
if (!$USER->IsAdmin()) {
    $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
}
$sTableID = "tbl_cluster_group_list";
$oSort = new CAdminSorting($sTableID);
$lAdmin = new CAdminList($sTableID);
$arHeaders = array(array("id" => "ID", "content" => GetMessage("CLU_INDEX_GROUP_ID"), "align" => "right", "default" => true), array("id" => "NAME", "content" => GetMessage("CLU_INDEX_GROUP_NAME"), "align" => "center", "default" => true));
$lAdmin->AddHeaders($arHeaders);
$rsData = CClusterGroup::GetList();
$rsData = new CAdminResult($rsData, $sTableID);
while ($arRes = $rsData->Fetch()) {
    $row =& $lAdmin->AddRow($arRes["ID"], $arRes);
    $row->AddViewField("ID", '<a href="cluster_group_edit.php?lang=' . LANGUAGE_ID . '&ID=' . $arRes["ID"] . '">' . $arRes["ID"] . '</a>');
    $arActions = array(array("ICON" => "edit", "DEFAULT" => true, "TEXT" => GetMessage("CLU_INDEX_LIST_EDIT"), "ACTION" => $lAdmin->ActionRedirect('cluster_group_edit.php?lang=' . LANGUAGE_ID . '&ID=' . $arRes["ID"])));
    $row->AddActions($arActions);
}
$aContext = array(array("TEXT" => GetMessage("CLU_INDEX_ADD_GROUP"), "TITLE" => GetMessage("CLU_INDEX_ADD_GROUP_TITLE"), "LINK" => "cluster_group_edit.php?lang=" . LANG, "ICON" => "btn_new"));
$lAdmin->AddAdminContextMenu($aContext, false);
$lAdmin->CheckListMode();
$APPLICATION->SetTitle(GetMessage("CLU_INDEX_TITLE"));
require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php";
if ($message) {
    echo $message->Show();
}
$lAdmin->DisplayList();
예제 #8
0
            $res = $ID = $ob->Add($arFields);
        }
        if ($res) {
            if (isset($_POST["apply"])) {
                LocalRedirect("/bitrix/admin/cluster_group_edit.php?ID=" . $ID . "&lang=" . LANG . "&" . $tabControl->ActiveTabParam());
            } else {
                LocalRedirect("/bitrix/admin/cluster_index.php?lang=" . LANG);
            }
        } else {
            if ($e = $APPLICATION->GetException()) {
                $message = new CAdminMessage(GetMessage("CLU_GROUP_EDIT_SAVE_ERROR"), $e);
            }
            $bVarsFromForm = true;
        }
    } elseif ($_POST["action"] == "delete") {
        $ob = new CClusterGroup();
        $res = $ob->Delete($ID);
        if ($res) {
            LocalRedirect("/bitrix/admin/cluster_index.php?lang=" . LANG);
        } else {
            if ($e = $APPLICATION->GetException()) {
                $message = new CAdminMessage(GetMessage("CLU_GROUP_EDIT_DELETE_ERROR"), $e);
            }
            $bVarsFromForm = true;
        }
    }
}
ClearVars("str_");
$str_NAME = "";
if ($ID > 0) {
    $rs = CClusterGroup::GetList(array(), array("=ID" => $ID), array());
예제 #9
0
 function GetArrayByID($ID)
 {
     $rs = CClusterGroup::GetList(array(), array("=ID" => $ID));
     return $rs->Fetch();
 }