云备份服务端——热点管理类模块

热点管理指的是,按时遍历备份文件目录,然后对每个文件进行热点判断,对于非热点文件进行压缩处理,起到一个节省空间的作用

因此我们热点管理类的接口设计如下:

#ifndef _MY_HOT_
#define _MY_HOT_
#include <unistd.h>
#include "util.hpp"
#include "data_manager.hpp"

extern mjw_cloud::DataManager* _data;//设置一个全局变量,方便使用
namespace mjw_cloud
{
    class HotManager
    {
    public:
        HotManager();
        bool HotCompress(); // 热点文件压缩功能实现
    private:
        bool JudgeHot(const std::string &filename); // 热点文件判断
    private:
        std::string _back_dir;    // 备份文件目录
        std::string _pack_dir;    // 压缩文件目录
        std::string _pack_suffix; // 压缩文件后缀
        int _hot_time;            // 热点时间
    };
}

#endif

 代码实现如下

#ifndef _MY_HOT_
#define _MY_HOT_
#include <unistd.h>
#include "util.hpp"
#include "data_manager.hpp"

extern mjw_cloud::DataManager *_data; // 设置一个外部全局变量,方便使用
namespace mjw_cloud
{
    class HotManager
    {
    public:
        HotManager()
        {
            _pack_dir = Config::GetInstance().GetPackDir();
            _back_dir = Config::GetInstance().GetBackDir();
            _pack_suffix = Config::GetInstance().GetLzPrefix();
            _hot_time = Config::GetInstance().GetHotTime();
            // 注意,这里如果_pack_dir或者_back_dir目录没有创建,我们还需要创建一下
            FileUtil fu1(_pack_dir);
            fu1.CreateDirectory();
            FileUtil fu2(_back_dir);
            fu2.CreateDirectory();
        }
        bool HotCompress() // 热点文件压缩功能实现
        {
            while (1)
            {
                // 1.获取备份文件目录下的所有文件
                std::vector<std::string> arry;
                FileUtil tmp(_back_dir);
                tmp.ScanDirectory(&arry);
                if (arry.empty())
                {
                    usleep(1000);
                    continue;
                }
                // 2.遍历文件判断是否是非热点文件
                for (auto a : arry)
                {
                    if (JudgeHot(a) == false) continue;
                    // 3.对于非热点文件进行压缩处理
                    FileUtil fu(a);
                    std::string packname=_pack_dir+fu.FileName()+_pack_suffix;
                    if(fu.Compress(packname)==false)
                    {
                        std::cout<<"hot file compress failed"<<std::endl;
                        continue;
                    }
                    // 4.删除源文件,并且修改该文件信息管理的状态
                    fu.Remove();
                    BackupInfo bi;
                    _data->GetoneByRp(a,&bi);
                    bi._pack_flag=1;
                    _data->Updata(bi);
                }
                usleep(1000);
            }
        }

    private:
        bool JudgeHot(const std::string &filename) // 热点文件判断
        {
            FileUtil fu(filename);
            time_t ctime=time(nullptr);
            if(ctime-fu.LastATime()>_hot_time)
            {
                return true;
            }
            return false;
        }
    private:
        std::string _back_dir;    // 备份文件目录
        std::string _pack_dir;    // 压缩文件目录
        std::string _pack_suffix; // 压缩文件后缀
        int _hot_time;            // 热点时间
    };
}

#endif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值