public static function getServerList() { $servers = array_merge(CClusterDBNode::getServerList(), CClusterMemcache::getServerList(), CClusterWebnode::getServerList()); if (empty($servers)) { $servers[] = array("ID" => 0, "HOST" => "", "DEDICATED" => "Y", "EDIT_URL" => ""); } return $servers; }
function Delete($ID) { global $DB, $APPLICATION; $aMsg = array(); $ID = intval($ID); $rsWebNodes = CClusterWebnode::GetList(array(), array("=GROUP_ID" => $ID)); if ($rsWebNodes->Fetch()) { $aMsg[] = array("text" => GetMessage("CLU_GROUP_HAS_WEBNODE")); } $rsDBNodes = CClusterDBNode::GetList(array(), array("=GROUP_ID" => $group_id)); if ($rsWebNodes->Fetch()) { $aMsg[] = array("text" => GetMessage("CLU_GROUP_HAS_DBNODE")); } /*TODO: memcache check*/ if (empty($aMsg)) { $res = $DB->Query("DELETE FROM b_cluster_group WHERE ID = " . $ID, false, '', array('fixed_connection' => true)); } else { $e = new CAdminException($aMsg); $APPLICATION->ThrowException($e); return false; } return $res; }
function GetStatus($host, $port, $url) { self::$errno = 0; self::$errstr = ''; $FP = @fsockopen($host, $port, self::$errno, self::$errstr, 2); if ($FP) { $strVars = $url; $strRequest = "GET " . $url . " HTTP/1.0\r\n"; $strRequest .= "User-Agent: BitrixSMCluster\r\n"; $strRequest .= "Accept: */*\r\n"; $strRequest .= "Host: {$host}\r\n"; $strRequest .= "Accept-Language: en\r\n"; $strRequest .= "\r\n"; fputs($FP, $strRequest); $headers = ""; while (!feof($FP)) { $line = fgets($FP, 4096); if ($line == "\r\n") { break; } $headers .= $line; } $text = ""; while (!feof($FP)) { $text .= fread($FP, 4096); } fclose($FP); $match = array(); if (preg_match_all('#<dt>(.*?)\\s*:\\s*(.*?)</dt>#', $text, $match)) { $arResult = array(); foreach ($match[0] as $i => $m0) { $key = $match[1][$i]; $value = $match[2][$i]; if ($key == 'Total accesses') { $accessMatch = array(); if (preg_match('/^(.*) - (.*)\\s*:\\s*(.*)$/', $value, $accessMatch)) { $value = $accessMatch[1]; $arResult[$accessMatch[2]] = $accessMatch[3]; } } $arResult[$key] = $value; } return $arResult; } } return false; }
if ($arID = $lAdmin->GroupAction()) { foreach ($arID as $ID) { if (strlen($ID) <= 0) { continue; } $ID = IntVal($ID); switch ($_REQUEST['action']) { case "delete": CClusterWebnode::Delete($ID); break; } } } $arHeaders = array(array("id" => "ID", "content" => GetMessage("CLU_WEBNODE_LIST_ID"), "align" => "right", "default" => true), array("id" => "FLAG", "content" => GetMessage("CLU_WEBNODE_LIST_FLAG"), "align" => "center", "default" => true), array("id" => "STATUS", "content" => GetMessage("CLU_WEBNODE_LIST_STATUS"), "align" => "center", "default" => true), array("id" => "NAME", "content" => GetMessage("CLU_WEBNODE_LIST_NAME"), "align" => "left", "default" => true), array("id" => "HOST", "content" => GetMessage("CLU_WEBNODE_LIST_HOST"), "align" => "left", "default" => true), array("id" => "STATUS_URL", "content" => GetMessage("CLU_WEBNODE_LIST_STATUS_URL"), "align" => "left", "default" => false), array("id" => "DESCRIPTION", "content" => GetMessage("CLU_WEBNODE_LIST_DESCRIPTION"), "align" => "left", "default" => false)); $lAdmin->AddHeaders($arHeaders); $cData = new CClusterWebnode(); $rsData = $cData->GetList(array("ID" => "ASC"), array("=GROUP_ID" => $group_id)); $rsData = new CAdminResult($rsData, $sTableID); while ($arRes = $rsData->Fetch()) { $row =& $lAdmin->AddRow($arRes["ID"], $arRes); $uptime = false; $RestartTime = ""; $CurrentTime = ""; $arStatus = CClusterWEBNode::GetStatus($arRes["HOST"], $arRes["PORT"], $arRes["STATUS_URL"]); if (is_array($arStatus)) { $html = '<table width="100%">'; foreach ($arStatus as $key => $value) { if ($key == 'Restart Time') { $RestartTime = CClusterWEBNode::ParseDateTime($value); } elseif ($key == 'Current Time') { $CurrentTime = CClusterWEBNode::ParseDateTime($value);
$res = $ob->Delete($ID); if ($res) { LocalRedirect("/bitrix/admin/cluster_dbnode_list.php?lang=" . LANG . '&group_id=' . $group_id); } else { $bVarsFromForm = true; } } } ClearVars("str_"); $str_NAME = ""; $str_DESCRIPTION = ""; $str_HOST = ""; $str_PORT = "80"; $str_STATUS_URL = "/server-status"; if ($ID > 0) { $rs = CClusterWebnode::GetList(array(), array("=ID" => $ID, "=GROUP_ID" => $group_id), array()); if (!$rs->ExtractFields("str_")) { $ID = 0; } } if ($bVarsFromForm) { $DB->InitTableVarsForEdit("b_cluster_webnode", "", "str_"); } $APPLICATION->SetTitle($ID > 0 ? GetMessage("CLU_WEBNODE_EDIT_EDIT_TITLE") : GetMessage("CLU_WEBNODE_EDIT_ADD_TITLE")); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; $aMenu = array(array("TEXT" => GetMessage("CLU_WEBNODE_EDIT_MENU_LIST"), "TITLE" => GetMessage("CLU_WEBNODE_EDIT_MENU_LIST_TITLE"), "LINK" => "cluster_webnode_list.php?lang=" . LANG . '&group_id=' . $group_id, "ICON" => "btn_list")); $context = new CAdminContextMenu($aMenu); $context->Show(); if ($message) { echo $message->Show(); }