/** * 静态方法, 单例统一访问入口 * @return object 返回对象的唯一实例 */ public static function getInstance() { if (is_null(self::$_instance) || !isset(self::$_instance)) { self::$_instance = new self(); } return self::$_instance; }
/** * 检查存储节点状态 * @param string $host * @return int */ public function checkNodeStatus($host) { $url = $host . '/api.php'; $data = array('route' => "store/status", 'callback_url' => PluginMiniStoreOption::getInstance()->getMiniyunHost() . "info.htm"); $http = new HttpClient(); $http->post($url, $data); $result = $http->get_body(); $result = @json_decode($result, true); if ($result["status"] == "1") { return 1; } return -1; }
/** * 为前30个文件生成冗余备份任务 * 并把任务推送到备份服务器 * @param int $limit * @return int */ public function replicateFile($limit = 30) { $miniHost = PluginMiniStoreOption::getInstance()->getMiniyunHost(); $criteria = new CDbCriteria(); $criteria->condition = "replicate_status=0"; $criteria->limit = $limit; $criteria->offset = 0; $versions = FileVersion::model()->findAll($criteria); $fileCount = 0; foreach ($versions as $version) { //设置replicate_status=1 $signature = $version->file_signature; $version->replicate_status = 1; $version->save(); //为其它节点生成冗余备份记录 $nodes = PluginMiniStoreNode::getInstance()->getReplicateNodes($signature); foreach ($nodes as $node) { $task = ReplicateTask::model()->find("file_signature=:file_signature and node_id=:node_id", array("file_signature" => $signature, "node_id" => $node["id"])); if (!isset($task)) { $task = new ReplicateTask(); $task->file_signature = $signature; $task->node_id = $node["id"]; $task->status = 0; $task->save(); $this->pushReplicateTask($miniHost, $task); $fileCount++; } } } return $fileCount; }