Beispiel #1
0
 /**
  * 获取系统已用空间
  */
 public function getUsedSpace()
 {
     $storeData = MiniUtil::getPluginMiniStoreData();
     if (empty($storeData)) {
         //非迷你存储模式
         $remain = $this->getDiskFreeSpace();
         //空闲空间 字节
         $total = $this->getDiskTotalSpace();
         //总空间 字节
         $usedSpace = $this->_byteFormat(MiniVersion::getInstance()->getTotalSize());
         $totalSpace = $this->_byteFormat($total);
         $usedPercentage = $this->getUsedPercent();
         //已用空间占的百分比
     } else {
         //迷你存储模式下,获得迷你存储所有节点的空间使用情况
         $usedSpace = 0;
         $totalSpace = 0;
         $usedPercentage = 100;
         $nodes = PluginMiniStoreNode::getInstance()->getNodeList();
         foreach ($nodes as $node) {
             if ($node["status"] == 1) {
                 $url = $node["host"] . "/api.php?route=store/info";
                 $content = file_get_contents($url);
                 if ($content != "") {
                     $disks = json_decode($content);
                     foreach ($disks as $disk) {
                         $usedSpace += $disk->{"used"};
                         $totalSpace += $disk->{"total"};
                     }
                 }
             }
         }
         if ($totalSpace > 0) {
             $usedPercentage = round($usedSpace / $totalSpace, 3) * 100;
         }
         $usedSpace = round($usedSpace / 1024 / 1024, 2);
         $totalSpace = round($totalSpace / 1024 / 1024, 2);
     }
     //获得缓存空间大小
     $tempDirectory = $this->getDirectorySize(BASE . 'temp');
     $tempSize = $tempDirectory['size'];
     $cacheSize = $this->countCache();
     $cacheSpace = MiniUtil::formatSize($tempSize + $cacheSize);
     $data = array();
     $data['usedSpace'] = $usedSpace;
     $data['totalSpace'] = $totalSpace;
     $data['usedPercentage'] = $usedPercentage;
     $data['cacheSpace'] = $cacheSpace;
     return $data;
 }
Beispiel #2
0
 /**
  * 设置站点信息
  * @param $site
  * @return array
  */
 public function settingSiteInfo($site)
 {
     //迷你存储没有启用,将判断用户存储路径的完整性
     $storeData = MiniUtil::getPluginMiniStoreData();
     if (empty($storeData)) {
         $fileStorePath = $site['fileStorePath'];
         //文件存储路径的合法性检测
         if (is_dir($fileStorePath) == false) {
             return array('success' => false, 'msg' => 'dir_is_not_exist');
         }
         //
         // 判断父目录是否存在
         //
         if (file_exists(dirname($fileStorePath)) == false) {
             return array('success' => false, 'msg' => 'parent_dir_is_not_exist');
         }
         //
         // 文件不存在
         //
         if (file_exists($fileStorePath) == false) {
             mkdir($fileStorePath);
             chmod($fileStorePath, 0755);
         }
         //
         // 文件夹不可写
         //
         if (is_writable($fileStorePath) == false) {
             return array('success' => false, 'msg' => 'dir_is_not_writable');
         }
         //修改文件存储配置
         $this->setStorePath($site['fileStorePath']);
     }
     MiniOption::getInstance()->setOptionValue("miniyun_host", $site['miniyun_host']);
     MiniOption::getInstance()->setOptionValue("site_title", $site['siteTitle']);
     MiniOption::getInstance()->setOptionValue("site_name", $site['siteName']);
     MiniOption::getInstance()->setOptionValue("site_default_space", $site['siteDefaultSpace']);
     MiniOption::getInstance()->setOptionValue("site_company", $site['siteCompany']);
     MiniOption::getInstance()->setOptionValue("user_register_enabled", $site['userRegisterEnabled']);
     //如果是混合云版,则调整迷你存储的访问地址
     if (MiniUtil::isMixCloudVersion()) {
         $plugins = MiniUtil::getActivedPluginsInfo();
         if (!empty($plugins)) {
             foreach ($plugins as $plugin) {
                 if ($plugin["name"] === "miniStore") {
                     //创建默认迷你存储站点
                     PluginMiniStoreNode::getInstance()->createDefault();
                 }
             }
         }
     }
     return array('success' => true);
 }
 /**
  * 获得有效文件下载地址
  * @param string $signature 文件内容hash
  * @param string $fileName 文件名
  * @param string $mimeType 文件的mimeType
  * @param int $forceDownload 是否要文件下载
  * @return string
  */
 public function getDownloadUrl($signature, $fileName, $mimeType, $forceDownload)
 {
     $node = $this->getDownloadNode($signature);
     if (!empty($node)) {
         //迷你存储服务器下载文件地址
         //对网页的处理分为2种逻辑,-1种是直接显示内容,1种是文件直接下载
         $data = array("route" => "file/download", "signature" => $signature, "node_id" => $node["id"], "file_name" => urlencode($fileName), "mime_type" => $mimeType, "force_download" => $forceDownload);
         $url = $node["host"];
         if (substr($url, strlen($url) - 1, 1) != "/") {
             $url .= "/";
         }
         $url .= "api.php?";
         foreach ($data as $key => $value) {
             $url .= "&" . $key . "=" . $value;
         }
         //更新迷你存储节点状态,把新上传的文件数+1
         PluginMiniStoreNode::getInstance()->newDownloadFile($node["id"]);
         return $url;
     }
     return null;
 }
 /**
  * 修改迷你存储节点状态
  * @param string $name 节点名称
  * @param string $status 节点状态
  * @throws MiniException
  */
 public function modifyNodeStatus($name, $status)
 {
     $node = PluginMiniStoreNode::getInstance()->getNodeByName($name);
     if (empty($node)) {
         throw new MiniException(100103);
     }
     if ($status == 1) {
         //检查服务器状态,看看是否可以连接迷你存储服务器
         $nodeStatus = PluginMiniStoreNode::getInstance()->checkNodeStatus($node["host"]);
         if ($nodeStatus == -1) {
             throw new MiniException(100104);
         }
     }
     return PluginMiniStoreNode::getInstance()->modifyNodeStatus($name, $status);
 }
 /**
  * 为前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;
 }
Beispiel #6
0
 /**
  *获得插件信息
  * @param $plugins 插件列表
  * {
  *   "miniDoc":{}
  * }
  * @return array
  */
 function setPluginInfo($plugins)
 {
     if (empty($plugins)) {
         $plugins = array();
     }
     $storeNode = PluginMiniStoreNode::getInstance()->getUploadNode();
     $data = array("node" => $storeNode);
     array_push($plugins, array("name" => "miniStore", "data" => $data));
     return $plugins;
 }
 /**
  * 定时任务入口
  * 场景1:检查各个迷你云节点状态
  * 使用方式:每隔15秒执行一次
  */
 public function actionCheckNodeStatus()
 {
     PluginMiniStoreNode::getInstance()->checkNodesStatus();
 }