You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

293 lines
11 KiB
C

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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