|
|
/*********************************************************************
|
|
|
*文件说明: 自动运行任务、计划模块
|
|
|
*作者: 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 //防止重复包含头文件
|