/** * 静态方法, 单例统一访问入口 * @return object 返回对象的唯一实例 */ public static function getInstance() { if (is_null(self::$_instance) || !isset(self::$_instance)) { self::$_instance = new self(); } return self::$_instance; }
/** * 为searchFile对象生成索引编制对象 * @param string $nodeIds * @param string $signature */ public function createTask($nodeIds, $signature) { $miniHost = PluginMiniSearchOption::getInstance()->getMiniyunHost(); $siteId = MiniSiteUtils::getSiteID(); $ids = explode(",", $nodeIds); //为索引服务器生成索引记录记录 //剔除已生成的索引记录 $nodes = PluginMiniSearchNode::getInstance()->getValidNodeList(); $needCreateTaskNodeIds = array(); foreach ($nodes as $node) { $existed = false; $nodeId = $node["id"]; foreach ($ids as $id) { if ($id == $nodeId) { $existed = true; } } if (!$existed) { array_push($needCreateTaskNodeIds, $node["id"]); } } foreach ($needCreateTaskNodeIds as $nodeId) { $task = SearchBuildTask::model()->find("file_signature=:file_signature and node_id=:node_id", array("file_signature" => $signature, "node_id" => $nodeId)); if (!isset($task)) { $task = new SearchBuildTask(); $task->file_signature = $signature; $task->node_id = $nodeId; $task->status = 0; $task->save(); } //向迷你搜索服务器发送编制索引任务 $this->buildTask($miniHost, $siteId, $task); } }
/** * 修改迷你搜索节点状态 * @param string $name 节点名称 * @param string $status 节点状态 * @throws MiniException */ public function modifyNodeStatus($name, $status) { $node = PluginMiniSearchNode::getInstance()->getNodeByName($name); if (empty($node)) { throw new MiniException(100303); } if ($status == 1) { //检查服务器状态,看看是否可以连接迷你搜索服务器 $nodeStatus = PluginMiniSearchNode::getInstance()->checkNodeStatus($node["host"]); if ($nodeStatus == -1) { throw new MiniException(100304); } } return PluginMiniSearchNode::getInstance()->modifyNodeStatus($name, $status); }
/** * 场景1:检查各个迷你云节点状态 * 使用方式:每隔15秒执行一次 */ public function actionCheckNodeStatus() { PluginMiniSearchNode::getInstance()->checkNodesStatus(); }