/********************************************************************* *文件说明: 自动运行任务、计划模块 *作者: logos *日期: 2018/12/10 *修改日志: 2018/12/10 logos create 初步设计功能: 1. 初始化后启动一个线程,扫描所有被监控规则、任务 2. 提供配置接口,模块内部保存配置计划任务,并在初始化时自动加载执行 3. 任务计划表,可按规则添加,支持按多种规则 4. 支持删除文件夹,支持备份文件/文件夹,支持恢复 5. 支持监控任务计划表中的磁盘空间,确保剩余空间充足 6. 支持运行时修改,服务启动时修改规则,将立即生效 ***********************************************************************/ #pragma once #ifndef _DLL_INCLUDE_AUTOTASK_H #define _DLL_INCLUDE_AUTOTASK_H #ifndef EXPORT_C #define EXPORT_C extern "C" #endif #ifndef WINAPI #define WINAPI __stdcall #endif #ifndef uint #define uint unsigned int #endif #ifndef MAX_BUF_LEN #define MAX_BUF_LEN 256 #endif #ifndef MAX_NAME_LEN #define MAX_NAME_LEN 32 #endif //若需要获取模块提示消息,请实现本接口 //pszmsg 当前提示消息 可能为NULL或空字符串 //注册接口时传进来的附加参数 typedef void (WINAPI *ATASKFUN)(const char* pszmsg, void* param); struct RunTime {//执行方式 unsigned short interval; //间隔多久?启动后开始计时,间隔多久有效。单位:分钟 0无效 不能大于1440(一天) unsigned short day; //每月几号?0无效 最大31号 unsigned short wkday; //每周周几?0无效 共7位[1,7],按位可以取多个组合 unsigned short wtime; //每天几点几分?0无效 格式 0001 最大2359 //day和wkday不能同时设置 //day或wkday有效时,若wtime无效,则在00:00分有效 //wtime单独有效时,每天某时某分有效一次 //interval不能与其它参数同时设置,interval参数有效时,首次进入有效 }; struct TRClear {//清理规则 int rid; //规则ID uint benable; //是否启用 1启用 0禁用 uint isaveday; //保存多少天?按当前日期往前推 0标识不按天数删除 uint dirSize; //确保磁盘闲置空间大小百分比,否则都删除 0无效 区间[5%,95%] RunTime runtime; //执行方式 char desc[MAX_NAME_LEN]; //规则描述 char path[MAX_BUF_LEN]; //监控路径 char expName[MAX_NAME_LEN]; //规则表达式 空字符时不过滤 文件名称包含关键字 可传入多个关键字匹配 如:{warn,ng01,ng02} char expSize[MAX_NAME_LEN]; //规则表达式 空字符时不过滤 文件大小 单位KB -- 区间格式 {1,0} 0标识未设置,为最小/最大值 char expDate[MAX_NAME_LEN]; //规则表达式 空字符时不过滤 文件修改日期 -- 区间格式 {19000101,20991230} char expTime[MAX_NAME_LEN]; //规则表达式 空字符时不过滤 文件修改时间 -- 区间格式 {000001,235959} //isaveday、expName、expSize、expDate、expTime都属于过滤条件 //若多个过滤条件一起设置,则是&&关系,条件都满足时才删除,若想要用||关系,则需另建一条规则 //dirSize一旦设置为非0,则可能被监控目录会被全部清空(无视过滤条件),所以需要谨慎设置 }; struct TRBackup {//备份规则 int rid; //规则ID uint benable; //是否启用 1启用 0禁用 uint isaveday; //备份文件保留多少天?按当前日期往前推 0标识永久保存 RunTime runtime; //执行方式 char desc[MAX_NAME_LEN]; //规则描述 char dest[MAX_BUF_LEN]; //备份目标 相对路径/绝对路径 可以是文件夹也可以是文件 char bkpath[MAX_BUF_LEN]; //备份目录 目录下.bkp文件名按日期+时间 }; struct TATaskCfg {//模块配置项 int reserved; //保留字段 }; /**************************************************** *Function: 初始化模块 -- 初始化后其它接口才可用 *Intput: NULL *Output: NULL *Return: 成功返回0 ,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI atask_init(); /**************************************************** *Function: 释放模块 -- 释放后其它接口不可用 *Intput: NULL *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI atask_deinit(); /**************************************************** *Function: 重新加载 *Intput: NULL *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI atask_reload(); /**************************************************** *Function: 修改设置项 -- 若失败,会返回正确的设置项 *Intput: pcfg 设置项 *Output: pcfg 设置项 *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI atask_set_cfg(TATaskCfg* pcfg); /**************************************************** *Function: 获取设置项 *Intput: pcfg 设置项 *Output: pcfg 设置项 *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI atask_get_cfg(TATaskCfg* pcfg); /**************************************************** *Function: 注册接收消息 -- 仅接收一个回调接口 *Intput: fun 可以为NULL,则为反注册 param 附加参数,回调时回传 *Output: NULL *Return: 成功返回0 ,失败返回错误码 *PS: 任务正在运行时,此接口返回错误 *PS: 仅回调最后注册的接口 ******************************************************/ EXPORT_C int WINAPI atask_regist_msg(ATASKFUN fun = 0, void* param = 0); /**************************************************** *Function: 开启自动运行服务 *Intput: NULL *Output: NULL *Return: 成功返回0 ,失败返回错误码 *PS: 其它任务正在运行时,此接口返回错误 ******************************************************/ EXPORT_C int WINAPI atask_auto_run(); /**************************************************** *Function: 手动运行某个规则一次 -- 清理、备份 *Intput: rid 规则ID *Output: NULL *Return: 成功返回0 ,失败返回错误码 *PS: 备份规则和清理规则都可以调用此接口 *PS: 其它任务正在运行时,此接口返回错误 *PS: 异步模式,调用atask_is_run()查看是否运行完成 ******************************************************/ EXPORT_C int WINAPI atask_man_run(int rid); /**************************************************** *Function: 备份某个文件或者文件夹 *Intput: pszpath 指定文件或者文件夹路径 bkfile 备份文件 -- 全路径 *Output: NULL *Return: 成功返回0 ,失败返回错误码 *PS: bkfile必须是本模块备份生成的文件格式,还原到pszpath目录下 *PS: 其它任务正在运行时,此接口返回错误 *PS: 异步模式,调用atask_is_run()查看是否运行完成 ******************************************************/ EXPORT_C int WINAPI atask_backup(const char* pszpath, const char* bkfile); /**************************************************** *Function: 使用备份文件还原到某个路径 *Intput: bkfile 备份文件 -- 全路径 pszpath 指定还原路径 *Output: NULL *Return: 成功返回0 ,失败返回错误码 *PS: bkfile必须是本模块备份生成的文件格式,还原到pszpath目录下 *PS: 其它任务正在运行时,此接口返回错误 *PS: 异步模式,调用atask_is_run()查看是否运行完成 ******************************************************/ EXPORT_C int WINAPI atask_restore(const char* bkfile, const char* pszpath); /**************************************************** *Function: 手动停止执行 *Intput: NULL *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI atask_stop_run(); /**************************************************** *Function: 监控服务是否正在运行 *Intput: NULL *Output: NULL *Return: 已开启返回1,未开启返回0 ******************************************************/ EXPORT_C int WINAPI atask_is_run(); /**************************************************** *Function: 删除一条规则 -- 根据rid查找 *Intput: rid 规则ID *Output: NULL *Return: 成功返回0,失败返回错误码 *PS: 备份规则和清理规则都可以调用此接口 ******************************************************/ EXPORT_C int WINAPI atask_del_rule(int rid); /**************************************************** *Function: 启用/禁用一条规则 *Intput: rid 规则ID benalbe 1启用 0禁用 *Output: NULL *Return: 成功返回0 ,失败返回错误码 *PS: 备份规则和清理规则都可以调用此接口 ******************************************************/ EXPORT_C int WINAPI atask_enable_rule(int rid, int benalbe = 1); /**************************************************** *Function: 增加一条清理规则信息 *Intput: pfclear 清理规则配置 *Output: NULL *Return: 成功返回0,失败返回错误码 *PS: 新增成功后,会填充rid到pfrule结构体 ******************************************************/ EXPORT_C int WINAPI atask_add_clear(TRClear* pfclear); /**************************************************** *Function: 修改一条清理规则 -- 根据pfrule->rid查找 *Intput: pfclear 清理规则配置 *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI atask_update_clear(TRClear* pfclear); /**************************************************** *Function: 获取一条清理规则信息 *Intput: rid 规则ID pfclear 清理规则配置 *Output: NULL *Return: 成功返回0,失败返回错误码 *PS: 可传NULL判断清理规则ID是否存在 ******************************************************/ EXPORT_C int WINAPI atask_get_clear(int rid, TRClear* pfclear = 0); /**************************************************** *Function: 获取清理规则列表 *Intput: pfclearlst 规则队列 *Output: pfclearlst 规则队列 *Return: 成功返回队列数量,失败返回错误码<=0 *PS: 可先传NULL获取数量,再获取队列 ******************************************************/ EXPORT_C int WINAPI atask_get_clear_list(TRClear* pfclearlst = 0); /**************************************************** *Function: 增加一条备份规则信息 *Intput: pfback 备份规则配置 *Output: NULL *Return: 成功返回0,失败返回错误码 *PS: 新增成功后,会填充rid到pfrule结构体 ******************************************************/ EXPORT_C int WINAPI atask_add_backup(TRBackup* pfback); /**************************************************** *Function: 修改一条备份规则 -- 根据pfback->rid查找 *Intput: pfback 备份规则配置 *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI atask_update_backup(TRBackup* pfback); /**************************************************** *Function: 获取一条备份规则信息 *Intput: rid 规则ID pfrule 备份规则配置 *Output: NULL *Return: 成功返回0,失败返回错误码 *PS: 可传NULL判断备份规则ID是否存在 ******************************************************/ EXPORT_C int WINAPI atask_get_backup(int rid, TRBackup* pfback = 0); /**************************************************** *Function: 获取备份规则列表 *Intput: pfbacklst 规则队列 *Output: pfbacklst 规则队列 *Return: 成功返回队列数量,失败返回错误码<=0 *PS: 可先传NULL获取数量,再获取队列 ******************************************************/ EXPORT_C int WINAPI atask_get_backup_list(TRBackup* pfbacklst = 0); #endif //防止重复包含头文件